Agent skill

create-hooks

Stars 16
Forks 1

Install this agent skill to your Project

npx add-skill https://github.com/cfircoo/claude-code-toolkit/tree/main/skills/create-hooks

SKILL.md

<essential_principles> Hooks are event-driven automation for Claude Code that execute shell commands, LLM prompts, or multi-turn agents in response to tool usage, session events, and user interactions. They provide deterministic control over Claude's behavior without modifying core code.

1. Three Hook Types:

  • command — shell command, deterministic, fast. Exit 0 = proceed, exit 2 = block. JSON stdout for structured control.
  • prompt — single-turn LLM evaluation (Haiku default). Returns {"ok": true} or {"ok": false, "reason": "..."}.
  • agent — multi-turn subagent with tool access (up to 50 turns). Same ok/reason output. Use when verification needs codebase access.

2. Event → Matcher → Hook — Events (PreToolUse, Stop, etc.) trigger matchers (regex on tool name/context) which fire hooks. See <quick_reference> for the full event table.

3. Configuration Locations (highest priority first):

  • User-global: ~/.claude/settings.json
  • Project shared: .claude/settings.json
  • Project local: .claude/settings.local.json
  • Or use /hooks interactive menu in Claude Code

4. Environment Variables:

Variable Value
$CLAUDE_PROJECT_DIR Project root directory
${CLAUDE_PLUGIN_ROOT} Plugin directory (plugin hooks only)
$ARGUMENTS Hook input JSON (prompt/agent hooks only)
$CLAUDE_ENV_FILE Path for persisting environment variables

5. Safety Essentials:

  • Stop hook loops: Always check stop_hook_active field in Stop/SubagentStop hooks — exit 0 if true
  • Timeouts: Set reasonable values in seconds (default: 10 min commands, 60s agents, 30s prompts)
  • Permissions: chmod +x on script files
  • Path safety: Quote "$CLAUDE_PROJECT_DIR" for spaces
  • Shell profiles: Wrap echo in ~/.zshrc/~/.bashrc with [[ $- == *i* ]] checks — non-interactive shells can corrupt JSON output
  • PermissionRequest: Doesn't fire in headless mode (-p); use PreToolUse instead </essential_principles>
  1. Create a new hook
  2. Debug / fix a hook
  3. Create a toolkit hook (distributable)
  4. Get guidance on hook design

If $ARGUMENTS provides clear intent, skip the menu and route directly.

Intent-based routing (when $ARGUMENTS provides clear intent):

  • "block dangerous commands" → workflows/create-hook.md
  • "my hook isn't triggering" → workflows/debug-hook.md
  • "package for toolkit" → workflows/create-toolkit-hook.md
  • "what event should I use" → workflows/get-guidance.md

After reading the workflow, follow it exactly.

<quick_reference>

Event When it fires Can block? Matcher filters
PreToolUse Before tool execution Yes tool name
PostToolUse After tool succeeds Yes (decision: "block") tool name
PostToolUseFailure After tool fails No tool name
PermissionRequest Permission dialog appears Yes tool name
UserPromptSubmit User submits a prompt Yes no matcher support
Stop Claude finishes responding Yes no matcher support
SubagentStart Subagent is spawned No agent type
SubagentStop Subagent finishes Yes agent type
SessionStart Session begins/resumes No source (startup, resume, clear, compact)
SessionEnd Session terminates No reason (clear, logout, etc.)
PreCompact Before context compaction No trigger (manual, auto)
Notification Claude needs attention No type (permission_prompt, idle_prompt, etc.)
TeammateIdle Agent about to go idle Yes (exit 2) no matcher support
TaskCompleted Task marked complete Yes (exit 2) no matcher support
ConfigChange Config file changes Yes (decision: "block") config type

See references/hook-types.md for detailed schemas and use cases for each event. </quick_reference>

<reference_index> All in references/:

Types & Events: hook-types.md — complete event schemas and use cases Hook Types: command-vs-prompt.md — decision tree for command vs prompt vs agent Matchers: matchers.md — regex patterns, event-specific matching, MCP tools I/O Schemas: input-output-schemas.md — stdin JSON, exit codes, hookSpecificOutput Examples: examples.md — notifications, file protection, auto-format, logging, Stop hooks Troubleshooting: troubleshooting.md — hooks not triggering, JSON corruption, loops Toolkit: toolkit-structure.md — distributable hook packaging for claude-code-toolkit </reference_index>

<workflows_index> All in workflows/:

Workflow Purpose
create-hook.md Build a hook from scratch
debug-hook.md Diagnose and fix broken hooks
create-toolkit-hook.md Package hook for toolkit distribution
get-guidance.md Help decide event, type, and matcher
</workflows_index>

<success_criteria> A working hook configuration has:

  • Valid JSON in the appropriate settings file (validated with jq)
  • Appropriate hook event selected for the use case
  • Correct matcher pattern matching target tools/contexts
  • Command, prompt, or agent that executes without errors
  • Proper output (exit codes for commands, ok/reason for prompts/agents)
  • Tested with --debug flag or Ctrl+O verbose mode showing expected behavior
  • No infinite loops in Stop/SubagentStop hooks (checks stop_hook_active flag)
  • Reasonable timeout set in seconds
  • Executable permissions on script files
  • No shell profile interference with JSON output </success_criteria>

Expand your agent's capabilities with these related and highly-rated skills.

cfircoo/claude-code-toolkit

sqlalchemy-postgres

Expert guidance for SQLAlchemy 2.0 + Pydantic + PostgreSQL. Use when setting up database layers, defining models, creating migrations, or any database-related work. Automatically activated for DB tasks.

16 1
Explore
cfircoo/claude-code-toolkit

ralph-convert-prd

Converts Product Requirements Documents into prd.json format for the Ralph autonomous agent system. Use when preparing PRDs for Ralph execution, breaking down features into atomic user stories, or when the user mentions Ralph, prd.json, or autonomous agent workflows.

16 1
Explore
cfircoo/claude-code-toolkit

ralph-orchestrator

Orchestrates the full Ralph autonomous agent pipeline from requirements gathering to execution. Use when building new features, platforms, or complex tasks that need structured development through spec-interview, PRD generation, and autonomous implementation.

16 1
Explore
cfircoo/claude-code-toolkit

generate-images

Generate and edit images using Nano Banana (Google Gemini image generation). Use whenever Claude Code needs to create new images, edit existing images, generate icons, diagrams, mockups, or any visual content.

16 1
Explore
cfircoo/claude-code-toolkit

create-subagents

Expert guidance for creating, building, and using Claude Code subagents and the Task tool. Use when working with subagents, setting up agent configurations, understanding how agents work, or using the Task tool to launch specialized agents.

16 1
Explore
cfircoo/claude-code-toolkit

manage-slash-commands

Expert guidance for creating and managing Claude Code slash commands. Use when working with slash commands, creating custom commands, understanding command structure, or learning YAML configuration. This skill should be used when the user asks to "create a slash command", "add a command", "manage commands", "build a command", or mentions slash commands, custom commands, or command configuration.

16 1
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results