mirror of
https://github.com/anthropics/claude-code.git
synced 2025-11-28 08:40:27 +08:00
Adds the hookify plugin to public marketplace. Enables users to create custom hooks using simple markdown configuration files instead of editing JSON. Key features: - Define rules with regex patterns to warn/block operations - Create rules from explicit instructions or conversation analysis - Pattern-based matching for bash commands, file edits, prompts, stop events - Enable/disable rules dynamically without editing code - Conversation analyzer agent finds problematic behaviors Changes from internal version: - Removed non-functional SessionStart hook (not registered in hooks.json) - Removed all sessionstart documentation and examples - Fixed restart documentation to consistently state "no restart needed" - Changed license from "Internal Anthropic use only" to "MIT License" - Kept test blocks in core modules (useful for developers) Plugin provides: - 4 commands: /hookify, /hookify:list, /hookify:configure, /hookify:help - 1 agent: conversation-analyzer - 1 skill: writing-rules - 4 hook types: PreToolUse, PostToolUse, Stop, UserPromptSubmit - 4 example rules ready to use All features functional and suitable for public use. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
175 lines
4.5 KiB
Markdown
175 lines
4.5 KiB
Markdown
---
|
|
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**
|
|
```
|
|
/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**
|
|
```
|
|
/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:
|
|
```
|
|
/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
|
|
|
|
4. Refine the rule by editing `.claude/hookify.warn-rm.local.md`
|
|
|
|
5. Create more rules as you encounter unwanted behaviors
|
|
|
|
For more examples, check the `${CLAUDE_PLUGIN_ROOT}/examples/` directory.
|