plugins/toolkit/skills/claude-code-hook-development/SKILL.md
This skill should be used when the user asks to "create a hook", "add a hook", "write a hook", or mentions Claude Code hooks. Also suggest this skill when the user asks to "automatically do X" or "run X before/after Y" as these are good candidates for hooks.
npx skillsauth add dwmkerr/claude-toolkit claude-code-hook-developmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Create hooks that run shell commands on specific events to add guardrails, automations, and policy enforcement.
You MUST read the reference files for detailed schemas and examples:
| Code | Meaning | Behavior | |------|---------|----------| | 0 | Success | Action proceeds; stdout shown in verbose mode | | 2 | Block | Action blocked; stderr fed to Claude | | Other | Error | Non-blocking; stderr shown to user |
.claude/settings.json.claude/hooks/ (mark executable){
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/my-script.sh",
"timeout": 60
}
]
}
]
}
}
| Event | When | Can Block? | |-------|------|------------| | PreToolUse | Before tool executes | Yes (exit 2) | | PostToolUse | After tool completes | Feedback only | | PermissionRequest | User sees permission dialog | Yes | | UserPromptSubmit | User submits prompt | Yes | | Stop | Main agent finishes | Yes (continue) | | SubagentStop | Subagent finishes | Yes (continue) | | SessionStart | Session begins | Add context | | SessionEnd | Session ends | Cleanup only | | Notification | Notifications sent | No | | PreCompact | Before compact | No |
For PreToolUse/PostToolUse/PermissionRequest:
Bash - Shell commandsEdit, Write, Read - File operationsGlob, Grep - Search operationsTask - Subagent tasksmcp__<server>__<tool> - MCP toolsUse wildcards for flexible matching patterns:
Bash(npm *) - Match any npm commandBash(*-h*) - Match commands containing -hBash(git:*) - Match any git subcommandThis reduces configuration overhead and avoids mismatched permissions blocking legitimate workflows.
#!/usr/bin/env bash
set -euo pipefail
# Read JSON input
input=$(cat)
tool_name=$(echo "$input" | jq -r '.tool_name // ""')
command=$(echo "$input" | jq -r '.tool_input.command // ""')
# Your validation logic here
if [[ "$command" =~ dangerous_pattern ]]; then
echo "Blocked: reason here" >&2
exit 2
fi
exit 0
Hooks are snapshotted at startup. After creating or modifying hooks:
⚠️ Changes won't take effect until you either:
- Restart Claude Code (exit and re-run
claude), OR- Run
/hooksto review and apply the updated configurationThis is a security feature - it prevents malicious hook modifications from affecting your current session.
After restart, run /hooks to confirm your hook appears in the list. If it doesn't show up:
.claude/settings.json)disableAllHooks: true in any settings file/hooks or restart Claude Code/hooks output - Your hook should be listed with correct matchercat .claude/settings.json | jq . to check syntaxBash not bash)When creating hooks that block operations (like preventing push to main):
/hooks to confirm the updated hook is loadedUse claude --debug to see hook execution details, or add logging to your hook:
echo "[DEBUG] Hook triggered: $cmd" >> /tmp/hook-debug.log
Examples adapted from Steve Kinney's Claude Code Hook Examples.
tools
This skill should be used when the user asks to "create a skill", "write a skill", "build a skill", or wants to add new capabilities to Claude Code. Use when developing SKILL.md files, organizing skill content, or improving existing skills. Do NOT use for plugin development, hook creation, agent creation, or slash command creation — those have dedicated skills.
development
This skill should be used when the user asks to "create a bash script", "write a shell script", or mentions shell scripting conventions.
development
Deep research into technical solutions by searching the web, examining GitHub repos, and gathering evidence. Use when the user explicitly says "use the research skill", "use a research agent", or asks for deep/thorough research into implementation options or technologies.
tools
This skill should be used when the user asks to "set up release please", "configure automated releases", "manage version numbers", "add changelog automation", or mentions release-please, semantic versioning, or monorepo versioning.