Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
parcadei avatar

Debug Hooks

  • 482 installs
  • 3.9k repo stars
  • Updated January 26, 2026
  • parcadei/continuous-claude-v3

debug-hooks is a Claude Code debugging skill that provides a systematic workflow for diagnosing why hooks fail to fire, emit wrong output, or skip events like SessionEnd and PostToolUse.

About

debug-hooks is a Claude Code skill from parcadei/continuous-claude-v3 with allowed tools Bash, Read, and Grep that walks developers through hook failure diagnosis. The workflow starts by observing before editing: list .claude/cache directories, inspect learnings outputs, and tail debug logs. It targets common triggers such as hooks not firing, PostToolUse not triggering, SessionEnd failures, and unexpected hook output. Developers reach for debug-hooks when Claude Code automation stops behaving after hook changes, rather than guessing at hook script edits. The observe-first pattern reduces false fixes and surfaces whether the problem is configuration, path, or event-type related.

  • debug-hooks

Debug Hooks by the numbers

  • 482 all-time installs (skills.sh)
  • +2 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #853 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/parcadei/continuous-claude-v3 --skill debug-hooks

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs482
repo stars3.9k
Last updatedJanuary 26, 2026
Repositoryparcadei/continuous-claude-v3

Why isn't my Claude Code hook firing?

Use debug-hooks for development tasks

Who is it for?

Developers maintaining Claude Code hook scripts who see SessionEnd, PostToolUse, or other hook events fail silently or produce wrong output.

Skip if: Developers debugging application runtime bugs unrelated to Claude Code hooks, or teams not using Claude Code hook automation.

When should I use this skill?

A Claude Code hook is not firing, produces wrong output, or SessionEnd or PostToolUse events fail to trigger.

What you get

Diagnosed hook failure root cause, inspected .claude/cache logs and learnings, and corrected hook configuration or scripts.

  • diagnosed hook failure report
  • corrected hook configuration

Files

SKILL.mdMarkdownGitHub ↗

Debug Hooks

Systematic workflow for debugging Claude Code hooks.

When to Use

  • "Hook isn't firing"
  • "Hook produces wrong output"
  • "SessionEnd not working"
  • "PostToolUse hook not triggering"
  • "Why didn't my hook run?"

Workflow

1. Check Outputs First (Observe Before Editing)

# Check project cache
ls -la $CLAUDE_PROJECT_DIR/.claude/cache/

# Check specific outputs
ls -la $CLAUDE_PROJECT_DIR/.claude/cache/learnings/

# Check for debug logs
tail $CLAUDE_PROJECT_DIR/.claude/cache/*.log 2>/dev/null

# Also check global (common mistake: wrong path)
ls -la ~/.claude/cache/ 2>/dev/null

2. Verify Hook Registration

# Project settings
cat $CLAUDE_PROJECT_DIR/.claude/settings.json | grep -A 20 '"SessionEnd"\|"PostToolUse"\|"UserPromptSubmit"'

# Global settings (hooks merge from both)
cat ~/.claude/settings.json | grep -A 20 '"SessionEnd"\|"PostToolUse"\|"UserPromptSubmit"'

3. Check Hook Files Exist

# Shell wrappers
ls -la $CLAUDE_PROJECT_DIR/.claude/hooks/*.sh

# Compiled bundles (if using TypeScript)
ls -la $CLAUDE_PROJECT_DIR/.claude/hooks/dist/*.mjs

4. Test Hook Manually

# SessionEnd hook
echo '{"session_id": "test-123", "reason": "clear", "transcript_path": "/tmp/test"}' | \
  $CLAUDE_PROJECT_DIR/.claude/hooks/session-end-cleanup.sh

# PostToolUse hook (Write tool example)
echo '{"tool_name": "Write", "tool_input": {"file_path": "test.md"}, "session_id": "test-123"}' | \
  $CLAUDE_PROJECT_DIR/.claude/hooks/handoff-index.sh

5. Check for Silent Failures

If using detached spawn with stdio: 'ignore':

// This pattern hides errors!
spawn(cmd, args, { detached: true, stdio: 'ignore' })

Fix: Add temporary logging:

const logFile = fs.openSync('.claude/cache/debug.log', 'a');
spawn(cmd, args, {
  detached: true,
  stdio: ['ignore', logFile, logFile]  // capture stdout/stderr
});

6. Rebuild After Edits

If you edited TypeScript source, you MUST rebuild:

cd $CLAUDE_PROJECT_DIR/.claude/hooks
npx esbuild src/session-end-cleanup.ts \
  --bundle --platform=node --format=esm \
  --outfile=dist/session-end-cleanup.mjs

Source edits alone don't take effect - the shell wrapper runs the bundled .mjs.

Common Issues

SymptomLikely CauseFix
Hook never runsNot registered in settings.jsonAdd to correct event in settings
Hook runs but no outputDetached spawn hiding errorsAdd logging, check manually
Wrong session IDUsing "most recent" queryPass ID explicitly
Works locally, not in CIMissing dependenciesCheck npx/node availability
Runs twiceRegistered in both global + projectRemove duplicate

Debug Checklist

  • [ ] Outputs exist? (ls -la .claude/cache/)
  • [ ] Registered? (grep -A10 '"hooks"' .claude/settings.json)
  • [ ] Files exist? (ls .claude/hooks/*.sh)
  • [ ] Bundle current? (ls -la .claude/hooks/dist/)
  • [ ] Manual test works? (echo '{}' | ./hook.sh)
  • [ ] No silent failures? (check for stdio: 'ignore')

Source Sessions

Derived from 10 sessions (83% of all learnings):

  • a541f08a, 1c21e6c8, 6a9f2d7a, a8bd5cea, 2ca1a178, 657ce0b2, 3998f3a2, 2a829f12, 0b46cfd7, 862f6e2c

Related skills

FAQ

When should I use debug-hooks?

debug-hooks applies when Claude Code hooks fail to fire, return wrong output, or skip events like SessionEnd and PostToolUse. The skill provides a systematic observe-before-edit workflow instead of guessing at hook script changes.

What files does debug-hooks inspect first?

debug-hooks starts by listing $CLAUDE_PROJECT_DIR/.claude/cache/, checking learnings subdirectories, and tailing debug logs. Observing cache output before editing hook scripts prevents misdiagnosing configuration versus script errors.

Backend & APIsbackendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.