debug-hooks
Systematic hook debugging workflow. Use when hooks aren't firing, producing wrong output, or behaving unexpectedly.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Systematic hook debugging workflow. Use when hooks aren't firing, producing wrong output, or behaving unexpectedly.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Maestro spec-driven development for Claude Code. Load this skill when invoking Maestro commands so workflows stay aligned with LeIndex and the Rust TUI.
Maestro spec-driven development for Gemini CLI. Load this skill when invoking Maestro commands so workflows stay aligned with LeIndex and the Rust TUI.
Maestro spec-driven development for Amp CLI. Load this skill when invoking Maestro commands so workflows stay aligned with LeIndex and the Rust TUI.
Show users how Maestro works - the opinionated setup with hooks, memory, and coordination
Full 5-layer analysis of a specific function for debugging or deep understanding
Get a token-efficient overview of any project using the TLDR stack
| 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 Maestro hooks.
# Check project cache
ls -la $CLAUDE_PROJECT_DIR/.maestro/cache/
# Check specific outputs
ls -la $CLAUDE_PROJECT_DIR/.maestro/cache/learnings/
# Check for debug logs
tail $CLAUDE_PROJECT_DIR/.maestro/cache/*.log 2>/dev/null
# Also check global (common mistake: wrong path)
ls -la ~/.maestro/cache/ 2>/dev/null
# Project settings
cat $CLAUDE_PROJECT_DIR/.maestro/settings.json | grep -A 20 '"SessionEnd"\|"PostToolUse"\|"UserPromptSubmit"'
# Global settings (hooks merge from both)
cat ~/.maestro/settings.json | grep -A 20 '"SessionEnd"\|"PostToolUse"\|"UserPromptSubmit"'
# Shell wrappers
ls -la $CLAUDE_PROJECT_DIR/.maestro/hooks/*.sh
# Compiled bundles (if using TypeScript)
ls -la $CLAUDE_PROJECT_DIR/.maestro/hooks/dist/*.mjs
# SessionEnd hook
echo '{"session_id": "test-123", "reason": "clear", "transcript_path": "/tmp/test"}' | \
$CLAUDE_PROJECT_DIR/.maestro/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/.maestro/hooks/handoff-index.sh
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('.maestro/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/.maestro/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 |
ls -la .maestro/cache/)grep -A10 '"hooks"' .maestro/settings.json)ls .maestro/hooks/*.sh)ls -la .maestro/hooks/dist/)echo '{}' | ./hook.sh)stdio: 'ignore')Derived from 10 sessions (83% of all learnings):