计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
investigate【效率与协作】Find the root cause of Elixir/Phoenix bugs — crashes, exceptions, stack traces, compile errors, LiveView that won't update, silent failures. Use when something is broken or misbehaves. --parallel for 4 tracks.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Investigate bugs using the Ralph Wiggum approach: check the obvious, read errors literally.
/phx:investigate Users can't log in after password reset
/phx:investigate FunctionClauseError in UserController.show
/phx:investigate Complex auth bug --parallel
$ARGUMENTS = Bug description or error message. Add --parallel
for deep 4-track investigation.
Use parallel mode (spawn deep-bug-investigator) when:
bug mentions 3+ modules, spans multiple contexts, is intermittent
or involves concurrency, or user says --parallel/deep.
Before spawning it, determine the effective maximum nesting depth. Use an
explicit positive-integer CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH value first;
when it is unset, inspect claude --version (the default is 1 in 2.1.217–2.1.218
and 3 in 2.1.219+). If the version is unavailable, conservatively use 1. At
depth 3+, use the deep-bug-investigator orchestrator. At depth 1 or 2, keep
orchestration in this main session: spawn the four
focused tracks (reproduction, root cause, impact, fix strategy) directly in
one parallel batch, wait for all four, then synthesize their evidence. Never
spawn an orchestrator that cannot delegate.
Otherwise: Run the sequential workflow below.
Avoid confirmatory subagents: once Steps 3-4 identify the root cause with high confidence, present it directly — four subagents (~80K tokens) re-verifying a finding already made in this context add cost, not evidence.
{:error, changeset} with validation failures, not viewport or JS issues.claude/solutions/ firstSearch .claude/solutions/ for relevant keywords using Grep.
If matching solution exists, present it and ask: "Apply this fix, or investigate fresh?"
If Tidewave MCP is detected, start here instead of asking the user to paste errors. Auto-capture runtime context:
mcp__tidewave__get_logs level: :error -- capture recent errorsmcp__tidewave__get_source_locationmcp__tidewave__execute_sql_query to inspect statemcp__tidewave__project_eval to test hypothesesmcp__tidewave__get_source_location with component namePresent pre-populated context to the user:
Auto-captured from runtime:
- Error: {parsed error from logs}
- Location: {file:line from get_source_location}
Investigating this. Correct if wrong.
This eliminates copy-pasting errors between app and agent. If Tidewave NOT available: Fall through to Step 1.
Run mix compile --warnings-as-errors 2>&1 | head -50, then mix ecto.migrations
(lists pending migrations without running them — ask before migrating).
Run mix test test/path_test.exs --trace. Then read the last 200 lines of log/dev.log and search for "error" or "exception" patterns.
Parse the error message — check ${CLAUDE_SKILL_DIR}/references/error-patterns.md.
File saved? Atom vs string? Data preloaded? Pattern match correct? Nil? Return value? Server restarted?
LiveView form saves silently failing? Check changeset errors
FIRST — not viewport, click mechanics, or JS. A missing
hidden_input for a required embedded field causes {:error, changeset} with no visible UI feedback.
Find what's actually happening vs what should happen.
Present root cause + evidence. Then route by fix size:
/phx:quick/phx:plan {root cause summary} so
the fix gets task structure and review/phx:compoundUse /ralph-loop:ralph-loop for autonomous debugging with
clear completion criteria and --max-iterations.
${CLAUDE_SKILL_DIR}/references/error-patterns.md — Common errors and checklist${CLAUDE_SKILL_DIR}/references/investigation-template.md — Output format${CLAUDE_SKILL_DIR}/references/debug-commands.md — Debug commands and common fixes