trace-claude-code
Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool…
Systematic hook debugging workflow. Use when hooks aren't firing, producing wrong output, or behaving unexpectedly.
Claude Code
$ npx -y skills add parcadei/Continuous-Claude-v3 --skill debug-hooks --agent claude-code
Codex
$ npx skills add parcadei/Continuous-Claude-v3 --skill debug-hooks -a codex -y
Cursor
$ npx skills add parcadei/Continuous-Claude-v3 --skill debug-hooks -a cursor -y
Gemini CLI
$ npx skills add parcadei/Continuous-Claude-v3 --skill debug-hooks -a gemini-cli -y
GitHub Copilot
$ npx skills add parcadei/Continuous-Claude-v3 --skill debug-hooks -a github-copilot -y
OpenCode
$ npx skills add parcadei/Continuous-Claude-v3 --skill debug-hooks -a opencode -y
Windsurf
$ npx skills add parcadei/Continuous-Claude-v3 --skill debug-hooks -a windsurf -y
name: debug-hooks description: Systematic hook debugging workflow. Use when hooks aren't firing, producing wrong output, or behaving unexpectedly. allowed-tools: [Bash, Read, Grep]
Systematic workflow for debugging Claude Code hooks.
# 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
# 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"'
# Shell wrappers ls -la $CLAUDE_PROJECT_DIR/.claude/hooks/*.sh # Compiled bundles (if using TypeScript) ls -la $CLAUDE_PROJECT_DIR/.claude/hooks/dist/*.mjs
# 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.shIf 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
});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`.
| 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 |
Derived from 10 sessions (83% of all learnings):
A persistent, learning, multi-agent development environment built on Claude Code Continuous Claude transforms Claude Code into a continuously learning system that maintains context across sessions, orchestrates specialized agents, and eliminates wasting
Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool…
Guide for integrating Agentica SDK with Claude Code CLI proxy
Reference guide for Agentica multi-agent infrastructure APIs
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.