debug-hooks▌
parcadei/continuous-claude-v3 · updated Apr 8, 2026
Systematic workflow for debugging Claude Code hooks.
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
| Symptom | Likely Cause | Fix |
|---|---|---|
| Hook never runs | Not registered in settings.json | Add to correct event in settings |
| Hook runs but no output | Detached spawn hiding errors | Add logging, check manually |
| Wrong session ID | Using "most recent" query | Pass ID explicitly |
| Works locally, not in CI | Missing dependencies | Check npx/node availability |
| Runs twice | Registered in both global + project | Remove 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
Discussion
Product Hunt–style comments (not star reviews)- No comments yet — start the thread.
Ratings
4.8★★★★★31 reviews- ★★★★★Maya Abbas· Dec 12, 2024
Useful defaults in debug-hooks — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
- ★★★★★Mateo Bhatia· Nov 27, 2024
Keeps context tight: debug-hooks is the kind of skill you can hand to a new teammate without a long onboarding doc.
- ★★★★★Kiara Farah· Nov 3, 2024
I recommend debug-hooks for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
- ★★★★★Kiara Flores· Oct 22, 2024
debug-hooks reduced setup friction for our internal harness; good balance of opinion and flexibility.
- ★★★★★Xiao Sanchez· Oct 18, 2024
Registry listing for debug-hooks matched our evaluation — installs cleanly and behaves as described in the markdown.
- ★★★★★Aditi Ndlovu· Sep 25, 2024
debug-hooks fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
- ★★★★★Rahul Santra· Sep 17, 2024
debug-hooks reduced setup friction for our internal harness; good balance of opinion and flexibility.
- ★★★★★Amina Gill· Sep 1, 2024
debug-hooks is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
- ★★★★★Daniel Srinivasan· Aug 28, 2024
debug-hooks reduced setup friction for our internal harness; good balance of opinion and flexibility.
- ★★★★★Zaid Tandon· Aug 20, 2024
debug-hooks fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
showing 1-10 of 31