claude-code-hooks | Skill Performance & Reviews | TopRankSkills

TopRank Skills

Home / Skills / tools / claude-code-hooks

claude-code-hooks

maintained by aiskillstore

star 124 account_tree 6 verified_user MIT License
bolt View GitHub

name: claude-code-hooks description: "Claude Code hook system for pre/post tool execution. Triggers on: hooks, PreToolUse, PostToolUse, hook script, tool validation, audit logging." compatibility: "Claude Code CLI with settings.json support" allowed-tools: "Bash Read Write" depends-on: [] related-skills: [claude-code-debug, claude-code-headless]

Claude Code Hooks

Execute custom scripts before/after Claude Code tool invocations.

Quick Reference

Event When Has Matcher
PreToolUse Before tool execution Yes
PostToolUse After tool completes Yes
PermissionRequest Permission dialog shown Yes
Notification Notifications sent Yes
UserPromptSubmit User submits prompt No
Stop Agent finishes No
SubagentStop Subagent finishes No
PreCompact Before context compaction No
SessionStart Session begins/resumes No
SessionEnd Session ends No

Basic Configuration

Add to ~/.claude/settings.json or .claude/settings.local.json:

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Bash",
      "hooks": [{
        "type": "command",
        "command": "$CLAUDE_PROJECT_DIR/hooks/validate.sh",
        "timeout": 5000
      }]
    }]
  }
}

Matcher Patterns

Pattern Matches
"Write" Only Write tool
"*" or "" All tools
"mcp__*" All MCP tools
"Bash" Bash commands

Hook Script Requirements

#!/bin/bash
# Receives JSON via stdin: { "tool_name": "...", "tool_input": {...} }
INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool_name')

# Exit codes:
# 0 = Success (continue)
# 2 = Block with error (stderr shown to Claude)
# Other = Non-blocking error

Common Use Cases

Use Case Event Example
Validate inputs PreToolUse Block dangerous commands
Audit logging PostToolUse Log all tool usage
Custom approval PermissionRequest Slack notification
Session init SessionStart Load project context

Security Checklist

  • Quote all variables: "$VAR" not $VAR
  • Validate paths (no .. traversal)
  • Use $CLAUDE_PROJECT_DIR for paths
  • Set reasonable timeouts
  • Handle jq parsing errors

Troubleshooting

# Debug hook loading
claude --debug

# List registered hooks
/hooks

# Test script manually
echo '{"tool_name":"Bash"}' | ./hooks/validate.sh

Official Documentation

Additional Resources

  • ./references/hook-events.md - All events with input/output schemas
  • ./references/configuration.md - Advanced config patterns
  • ./references/security-patterns.md - Production security

See Also: claude-code-debug for troubleshooting, claude-code-headless for CLI automation

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!

Skill Details

GitHub Stars 124
GitHub Forks 6
Created Jan 2026
Last Updated 4 months ago
tools tools automation tools

Related Skills

specs-gen
chevron_right
glm-coding-agent
chevron_right
writing-skills
chevron_right
reviewing-pr
chevron_right
creating-pr
chevron_right

Build your own?

Join 12,000+ developers contributing to the Claude ecosystem.