用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/mhenke/claude-code-unplugged --skill hookify命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | hookify |
| description | Extensible user-configured prompt hooks |
Easily create custom hooks to prevent unwanted behaviors by analyzing conversation patterns or from explicit instructions.
The hookify plugin makes it simple to create hooks without editing complex hook-config.json files. Instead, you create lightweight markdown configuration files that define patterns to watch for and messages to show when those patterns match.
Key features:
/hookify Warn me when I use rm -rf commands
This analyzes your request and creates .agent/hookify.warn-rm.local.md.
No restart needed! Rules take effect on the very next tool use.
Ask Claude to run a command that should trigger the rule:
Run rm -rf /tmp/test
You should see the warning message immediately!
With arguments:
/hookify Don't use console.log in TypeScript files
Creates a rule from your explicit instructions.
Without arguments:
/hookify
Analyzes recent conversation to find behaviors you've corrected or been frustrated by.
List all rules:
/hookify:list
Configure rules interactively:
/hookify:configure
Enable/disable existing rules through an interactive interface.
Get help:
/hookify:help
.agent/hookify.dangerous-rm.local.md:
---
name: block-dangerous-rm
enabled: true
event: bash
pattern: rm\s+-rf
action: block
---
⚠️ **Dangerous rm command detected!**
This command could delete important files. Please:
- Verify the path is correct
- Consider using a safer approach
- Make sure you have backups
Action field:
warn: Shows warning but allows operation (default)block: Prevents operation from executing (PreToolUse) or stops session (Stop events).agent/hookify.sensitive-files.local.md:
---
name: warn-sensitive-files
enabled: true
event: file
action: warn
conditions:
- field: file_path
operator: regex_match
pattern: \.env$|credentials|secrets
- field: new_text
operator: contains
pattern: KEY
---
🔐 **Sensitive file edit detected!**
Ensure credentials are not hardcoded and file is in .gitignore.
All conditions must match for the rule to trigger.
bash: Triggers on Bash tool commandsfile: Triggers on Edit, Write, MultiEdit toolsstop: Triggers when Claude wants to stop (for completion checks)prompt: Triggers on user prompt submissionall: Triggers on all eventsUse Python regex syntax:
| Pattern | Matches | Example |
|---|---|---|
rm\s+-rf | rm -rf | rm -rf /tmp |
console\.log\( | console.log( | console.log("test") |
(eval|exec)\( | eval( or exec( | eval("code") |
\.env$ | files ending in .env | .env, .env.local |
chmod\s+777 | chmod 777 | chmod 777 file.txt |
Tips:
\s for whitespace\. for literal dot| for OR: (foo|bar).* to match anythingaction: block for dangerous operationsaction: warn (or omit) for informational warnings---
name: block-destructive-ops
enabled: true
event: bash
pattern: rm\s+-rf|dd\s+if=|mkfs|format
action: block
---
🛑 **Destructive operation detected!**
This command can cause data loss. Operation blocked for safety.
Please verify the exact path and use a safer approach.
This rule blocks the operation - Claude will not be allowed to execute these commands.
---
name: warn-debug-code
enabled: true
event: file
pattern: console\.log\(|debugger;|print\(
action: warn
---
🐛 **Debug code detected**
Remember to remove debugging statements before committing.
This rule warns but allows - Claude sees the message but can still proceed.
---
name: require-tests-run
enabled: false
event: stop
action: block
conditions:
- field: transcript
operator: not_contains
pattern: npm test|pytest|cargo test
---
**Tests not detected in transcript!**
Before stopping, please run tests to verify your changes work correctly.
This blocks Claude from stopping if no test commands appear in the session transcript. Enable only when you want strict enforcement.
Check multiple fields simultaneously:
---
name: api-key-in-typescript
enabled: true
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.tsx?$
- field: new_text
operator: regex_match
pattern: (API_KEY|SECRET|TOKEN)\s*=\s*["']
---
🔐 **Hardcoded credential in TypeScript!**
Use environment variables instead of hardcoded values.
regex_match: Pattern must match (most common)contains: String must contain patternequals: Exact string matchnot_contains: String must NOT contain patternstarts_with: String starts with patternends_with: String ends with patternFor bash events:
command: The bash command stringFor file events:
file_path: Path to file being editednew_text: New content being added (Edit, Write)old_text: Old content being replaced (Edit only)content: File content (Write only)For prompt events:
user_prompt: The user's submitted prompt textFor stop events:
Temporarily disable:
Edit the .local.md file and set enabled: false
Re-enable:
Set enabled: true
Or use interactive tool:
/hookify:configure
Simply delete the .local.md file:
rm .agent/hookify.my-rule.local.md
/hookify:list
This plugin is part of the coding assistant Marketplace. It should be auto-discovered when the marketplace is installed.
Manual testing:
agent --plugin-dir /path/to/hookify
Rule not triggering:
.agent/ directory (in project root, not plugin directory)enabled: true in frontmatterhookify:list to see if rule is loadedImport errors:
python3 --versionPattern not matching:
python3 -c "import re; print(re.search(r'pattern', 'text'))"Hook seems slow:
Found a useful rule pattern? Consider sharing example files via PR!
MIT License
/configureDescription: Enable or disable hookify rules interactively
Load hookify:writing-rules skill first to understand rule format.
Enable or disable existing hookify rules using an interactive interface.
Use Glob tool to find all hookify rule files:
pattern: ".agent/hookify.*.local.md"
If no rules found, inform user:
No hookify rules configured yet. Use `hookify` to create your first rule.
For each rule file:
name and enabled fields from frontmatterUse AskUserQuestion to let user select rules:
{
"questions": [
{
"question": "Which rules would you like to enable or disable?",
"header": "Configure",
"multiSelect": true,
"options": [
{
"label": "warn-dangerous-rm (currently enabled)",
"description": "Warns about rm -rf commands"
},
{
"label": "warn-console-log (currently disabled)",
"description": "Warns about console.log in code"
},
{
"label": "require-tests (currently enabled)",
"description": "Requires tests before stopping"
}
]
}
]
Option format:
{rule-name} (currently {enabled|disabled})For each selected rule:
For each rule to toggle:
enabled: true to enabled: false (or vice versa)Edit pattern for enabling:
old_string: "enabled: false"
new_string: "enabled: true"
Edit pattern for disabling:
old_string: "enabled: true"
new_string: "enabled: false"
Show user what was changed:
## Hookify Rules Updated
**Enabled:**
- warn-console-log
**Disabled:**
- warn-dangerous-rm
**Unchanged:**
- require-tests
Changes apply immediately - no restart needed
hookify:list to see all configured rulesNo rules to configure:
hookify to create rules firstUser selects no rules:
File read/write errors:
helpDescription: Get help with the hookify plugin
Explain how the hookify plugin works and how to use it.
The hookify plugin makes it easy to create custom hooks that prevent unwanted behaviors. Instead of editing hook-config.json files, users create simple markdown configuration files that define patterns to watch for.
Hookify installs generic hooks that run on these events:
These hooks read configuration files from .agent/hookify.*.local.md and check if any rules match the current operation.
Users create rules in .agent/hookify.{rule-name}.local.md files:
---
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 ruleenabled: true/false to activate/deactivateevent: bash, file, stop, prompt, or allpattern: Regex pattern to matchThe message body is what Claude sees when the rule triggers.
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 .agent/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.
hookify - Create hooks from conversation analysis or explicit instructionshookify:help - Show this help (what you're reading now)hookify:list - List all configured hookshookify:configure - Enable/disable existing hooks interactivelyPrevent dangerous commands:
---
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:
---
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:
---
name: require-tests
enabled: true
event: stop
pattern: .*
---
Did you run tests before finishing? Make sure `npm test` or equivalent was executed.
Use Python regex syntax:
\s - whitespace\. - literal dot| - OR+ - one or more* - zero or more\d - digit[abc] - character classExamples:
rm\s+-rf - matches "rm -rf"console\.log\( - matches "console.log("(eval|exec)\( - matches "eval(" or "exec("\.env$ - matches files ending in .envNo 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 .agent/hookify.*.local.md - they should be git-ignored (add to .gitignore if needed).
Disable Rules: Set enabled: false in frontmatter or delete the file.
Hook not triggering:
.agent/ directoryenabled: true in frontmatterpython3 -c "import re; print(re.search('your_pattern', 'test_text'))"Import errors:
python3 --versionPattern not matching:
Create your first rule:
/hookify Warn me when I try to use rm -rf
Try to trigger it:
rm -rf /tmp/testRefine the rule by editing .agent/hookify.warn-rm.local.md
Create more rules as you encounter unwanted behaviors
For more examples, check the PLUGIN_ROOT/examples/ directory.
hookifyDescription: Create hooks to prevent unwanted behaviors from conversation analysis or explicit instructions
FIRST: Load the hookify:writing-rules skill using the Skill tool to understand rule file format and syntax.
Create hook rules to prevent problematic behaviors by analyzing the conversation or from explicit user instructions.
You will help the user create hookify rules to prevent unwanted behaviors. Follow these steps:
If $ARGUMENTS is provided:
$ARGUMENTSIf $ARGUMENTS is empty:
To analyze conversation: Use the Task tool to launch conversation-analyzer agent:
{
"subagent_type": "general-purpose",
"description": "Analyze conversation for unwanted behaviors",
"prompt": "You are analyzing a coding assistant conversation to find behaviors the user wants to prevent.
Read user messages in the current conversation and identify:
1. Explicit requests to avoid something (\"don't do X\", \"stop doing Y\")
2. Corrections or reversions (user fixing Claude's actions)
3. Frustrated reactions (\"why did you do X?\", \"I didn't ask for that\")
4. Repeated issues (same problem multiple times)
For each issue found, extract:
- What tool was used (Bash, Edit, Write, etc.)
- Specific pattern or command
- Why it was problematic
- User's stated reason
Return findings as a structured list with:
- category: Type of issue
- tool: Which tool was involved
- pattern: Regex or literal pattern to match
- context: What happened
- severity: high/medium/low
Focus on the most recent issues (last 20-30 messages). Don't go back further unless explicitly asked."
}
After gathering behaviors (from arguments or agent), present to user using AskUserQuestion:
Question 1: Which behaviors to hookify?
Question 2: For each selected behavior, ask about action:
Question 3: Ask for example patterns:
For each confirmed behavior, create a .agent/hookify.{rule-name}.local.md file:
Rule naming convention:
block-dangerous-rm, warn-console-log, require-tests-before-stopFile format:
---
name: {rule-name}
enabled: true
event: {bash|file|stop|prompt|all}
pattern: {regex pattern}
action: {warn|block}
---
{Message to show Claude when rule triggers}
Action values:
warn: Show message but allow operation (default)block: Prevent operation or stop sessionFor more complex rules (multiple conditions):
---
name: {rule-name}
enabled: true
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.env$
- field: new_text
operator: contains
pattern: API_KEY
---
{Warning message}
IMPORTANT: Rule files must be created in the current working directory's .agent/ folder, NOT the plugin directory.
Use the current working directory (where coding assistant was started) as the base path.
Check if .agent/ directory exists in current working directory
mkdir -p .agentUse Write tool to create each .agent/hookify.{name}.local.md file
.agent/hookify.{name}.local.mdShow user what was created:
Created 3 hookify rules:
- .agent/hookify.dangerous-rm.local.md
- .agent/hookify.console-log.local.md
- .agent/hookify.sensitive-files.local.md
These rules will trigger on:
- dangerous-rm: Bash commands matching "rm -rf"
- console-log: Edits adding console.log statements
- sensitive-files: Edits to .env or credentials files
Verify files were created in the correct location by listing them
Inform user: "Rules are active immediately - no restart needed!"
The hookify hooks are already loaded and will read your new rules on the next tool use.
Bash patterns:
rm\s+-rf|chmod\s+777|dd\s+if=npm\s+install\s+|pip\s+installFile patterns:
console\.log\(|eval\(|innerHTML\s*=\.env$|\.git/|node_modules/Stop patterns:
User says: "/hookify Don't use rm -rf without asking me first"
Your response:
.agent/hookify.dangerous-rm.local.md:
---
name: warn-dangerous-rm
enabled: true
event: bash
pattern: rm\s+-rf
---
⚠️ **Dangerous rm command detected**
You requested to be warned before using rm -rf.
Please verify the path is correct.
.agent/ directory (current working directory), NOT the plugin's .agent/warn (default) or block operationsIf rule file creation fails:
.agent/ directory exists (create with mkdir if needed){cwd}/.agent/hookify.{name}.local.mdIf rule doesn't trigger after creation:
.agent/ not plugin .agent/python3 -c "import re; print(re.search(r'pattern', 'test text'))"enabled: true in frontmatterIf blocking seems too strict:
action: block to action: warn in the rule fileUse TodoWrite to track your progress through the steps.
/listDescription: List all configured hookify rules
Load hookify:writing-rules skill first to understand rule format.
Show all configured hookify rules in the project.
Use Glob tool to find all hookify rule files:
pattern: ".agent/hookify.*.local.md"
For each file found:
Present results in a table:
## Configured Hookify Rules
| Name | Enabled | Event | Pattern | File |
|------|---------|-------|---------|------|
| warn-dangerous-rm | ✅ Yes | bash | rm\s+-rf | hookify.dangerous-rm.local.md |
| warn-console-log | ✅ Yes | file | console\.log\( | hookify.console-log.local.md |
| check-tests | ❌ No | stop | .* | hookify.require-tests.local.md |
**Total**: 3 rules (2 enabled, 1 disabled)
### warn-dangerous-rm
**Event**: bash
**Pattern**: `rm\s+-rf`
**Message**: "⚠️ **Dangerous rm command detected!** This command could delete..."
**Status**: ✅ Active
**File**: .agent/hookify.dangerous-rm.local.md
---
To modify a rule: Edit the .local.md file directly
To disable a rule: Set `enabled: false` in frontmatter
To enable a rule: Set `enabled: true` in frontmatter
To delete a rule: Remove the .local.md file
To create a rule: Use `hookify` command
**Remember**: Changes take effect immediately - no restart needed
If no hookify rules exist:
## No Hookify Rules Configured
You haven't created any hookify rules yet.
To get started:
1. Use `hookify` to analyze conversation and create rules
2. Or manually create `.agent/hookify.my-rule.local.md` files
3. See `hookify:help` for documentation
Example:
/hookify Warn me when I use console.log
Check `PLUGIN_ROOT/examples/` for example rule files.
conversation-analyzerDescription: Use this agent when analyzing conversation transcripts to find behaviors worth preventing with hooks. Examples: Context: User is running /hookify command without arguments\nuser: "/hookify"\nassistant: "I'll analyze the conversation to find behaviors you want to prevent"\nThe /hookify command without arguments triggers conversation analysis to find unwanted behaviors.Context: User wants to create hooks from recent frustrations\nuser: "Can you look back at this conversation and help me create hooks for the mistakes you made?"\nassistant: "I'll use the conversation-analyzer agent to identify the issues and suggest hooks."\nUser explicitly asks to analyze conversation for mistakes that should be prevented.
You are a conversation analysis specialist that identifies problematic behaviors in coding assistant sessions that could be prevented with hooks.
Your Core Responsibilities:
Analysis Process:
Read through user messages in reverse chronological order (most recent first). Look for:
Explicit correction requests:
Frustrated reactions:
Corrections and reversions:
Repeated issues:
For each issue, determine:
Extract concrete examples:
Convert behaviors into matchable patterns:
Bash command patterns:
rm\s+-rf for dangerous deletessudo\s+ for privilege escalationchmod\s+777 for permission issuesCode patterns (Edit/Write):
console\.log\( for debug loggingeval\(|new Function\( for dangerous evalinnerHTML\s*= for XSS risksFile path patterns:
\.env$ for environment files/node_modules/ for dependency filesdist/|build/ for generated filesHigh severity (should block in future):
Medium severity (warn):
Low severity (optional):
Return your findings as structured text in this format:
## Hookify Analysis Results
### Issue 1: Dangerous rm Commands
**Severity**: High
**Tool**: Bash
**Pattern**: `rm\s+-rf`
**Occurrences**: 3 times
**Context**: Used rm -rf on /tmp directories without verification
**User Reaction**: "Please be more careful with rm commands"
**Suggested Rule:**
- Name: warn-dangerous-rm
- Event: bash
- Pattern: rm\s+-rf
- Message: "Dangerous rm command detected. Verify path before proceeding."
---
### Issue 2: Console.log in TypeScript
**Severity**: Medium
**Tool**: Edit/Write
**Pattern**: `console\.log\(`
**Occurrences**: 2 times
**Context**: Added console.log statements to production TypeScript files
**User Reaction**: "Don't use console.log in production code"
**Suggested Rule:**
- Name: warn-console-log
- Event: file
- Pattern: console\.log\(
- Message: "Console.log detected. Use proper logging library instead."
---
[Continue for each issue found...]
## Summary
Found {N} behaviors worth preventing:
- {N} high severity
- {N} medium severity
- {N} low severity
Recommend creating rules for high and medium severity issues.
Quality Standards:
Edge Cases:
User discussing hypotheticals:
Teaching moments:
One-time accidents:
Subjective preferences:
Return Results: Provide your analysis in the structured format above. The /hookify command will use this to:
Before executing any tools or modifying files, you MUST cognitively scan the workspace for Hookify rule files matching .agent/hookify.*.local.md.
For any matching rules:
python3 scripts/rule_engine.py