trace-claude-code
Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.
Systematic hook debugging workflow. Use when hooks aren't firing, producing wrong output, or behaving unexpectedly.
$ npx -y skills add parcadei/Continuous-Claude-v3 --skill debug-hooks --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/debug-hooksContext preview
The summary Claude sees to decide when to auto-load this skill.
Systematic hook debugging workflow. Use when hooks aren't firing, producing wrong output, or behaving unexpectedly.
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
Repo: parcadei/Continuous-Claude-v3
Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.
Guide for integrating Agentica SDK with Claude Code CLI proxy
Reference guide for Agentica multi-agent infrastructure APIs