--- description: Get help with the hookify plugin allowed-tools: ["Read"] --- # Hookify Plugin Help Explain how the hookify plugin works and how to use it. ## Overview The hookify plugin makes it easy to create custom hooks that prevent unwanted behaviors. Instead of editing `hooks.json` files, users create simple markdown configuration files that define patterns to watch for. ## How It Works ### 1. Hook System Hookify installs generic hooks that run on these events: - **PreToolUse**: Before any tool executes (Bash, Edit, Write, etc.) - **PostToolUse**: After a tool executes - **Stop**: When Claude wants to stop working - **UserPromptSubmit**: When user submits a prompt These hooks read configuration files from `.claude/hookify.*.local.md` and check if any rules match the current operation. ### 2. Configuration Files Users create rules in `.claude/hookify.{rule-name}.local.md` files: ```markdown --- name: warn-dangerous-rm enabled: true event: bash pattern: rm\s+-rf --- ⚠️ **Dangerous rm command detected!** This command could delete important files. Please verify the path. ``` **Key fields:** - `name`: Unique identifier for the rule - `enabled`: true/false to activate/deactivate - `event`: bash, file, stop, prompt, or all - `pattern`: Regex pattern to match The message body is what Claude sees when the rule triggers. ### 3. Creating Rules #### Option A: Use /hookify command ```text /hookify Don't use console.log in production files ``` This analyzes your request and creates the appropriate rule file. #### Option B: Create manually Create `.claude/hookify.my-rule.local.md` with the format above. #### Option C: Analyze conversation ```text /hookify ``` Without arguments, hookify analyzes recent conversation to find behaviors you want to prevent. ## Available Commands - **`/hookify`** - Create hooks from conversation analysis or explicit instructions - **`/hookify:help`** - Show this help (what you're reading now) - **`/hookify:list`** - List all configured hooks - **`/hookify:configure`** - Enable/disable existing hooks interactively ## Example Use Cases **Prevent dangerous commands:** ```markdown --- name: block-chmod-777 enabled: true event: bash pattern: chmod\s+777 --- Don't use chmod 777 - it's a security risk. Use specific permissions instead. ``` **Warn about debugging code:** ```markdown --- name: warn-console-log enabled: true event: file pattern: console\.log\( --- Console.log detected. Remember to remove debug logging before committing. ``` **Require tests before stopping:** ```markdown --- name: require-tests enabled: true event: stop pattern: .* --- Did you run tests before finishing? Make sure `npm test` or equivalent was executed. ``` ## Pattern Syntax Use Python regex syntax: - `\s` - whitespace - `\.` - literal dot - `|` - OR - `+` - one or more - `*` - zero or more - `\d` - digit - `[abc]` - character class **Examples:** - `rm\s+-rf` - matches "rm -rf" - `console\.log\(` - matches "console.log(" - `(eval|exec)\(` - matches "eval(" or "exec(" - `\.env$` - matches files ending in .env ## Important Notes **No Restart Needed**: Hookify rules (`.local.md` files) take effect immediately on the next tool use. The hookify hooks are already loaded and read your rules dynamically. **Block or Warn**: Rules can either `block` operations (prevent execution) or `warn` (show message but allow). Set `action: block` or `action: warn` in the rule's frontmatter. **Rule Files**: Keep rules in `.claude/hookify.*.local.md` - they should be git-ignored (add to .gitignore if needed). **Disable Rules**: Set `enabled: false` in frontmatter or delete the file. ## Troubleshooting **Hook not triggering:** - Check rule file is in `.claude/` directory - Verify `enabled: true` in frontmatter - Confirm pattern is valid regex - Test pattern: `python3 -c "import re; print(re.search('your_pattern', 'test_text'))"` - Rules take effect immediately - no restart needed **Import errors:** - Check Python 3 is available: `python3 --version` - Verify hookify plugin is installed correctly **Pattern not matching:** - Test regex separately - Check for escaping issues (use unquoted patterns in YAML) - Try simpler pattern first, then refine ## Getting Started 1. Create your first rule: ```text /hookify Warn me when I try to use rm -rf ``` 2. Try to trigger it: - Ask Claude to run `rm -rf /tmp/test` - You should see the warning 3. Refine the rule by editing `.claude/hookify.warn-rm.local.md` 4. Create more rules as you encounter unwanted behaviors For more examples, check the `${CLAUDE_PLUGIN_ROOT}/examples/` directory.