Investigate a bug or error in Elixir/Phoenix code. Uses Ralph Wiggum approach - checks obvious things first, reads errors literally. Add --parallel for 4-track deep investigation.
Resources
1Install
npx skillscat add oliver-kriska/claude-elixir-phoenix/phx-investigate Install via the SkillsCat registry.
Investigate Bug
Investigate bugs using the Ralph Wiggum approach: check the
obvious, read errors literally.
Usage
/phx:investigate Users can't log in after password reset
/phx:investigate FunctionClauseError in UserController.show
/phx:investigate Complex auth bug --parallelArguments
$ARGUMENTS = Bug description or error message. Add --parallel
for deep 4-track investigation.
Mode Selection
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.
Otherwise: Run the sequential workflow below.
Investigation Workflow
Step 0: Consult Compound Docs
grep -rl "KEYWORD" .claude/solutions/ 2>/dev/nullIf matching solution exists, present it and ask: "Apply this
fix, or investigate fresh?"
Step 0a: Runtime Auto-Capture (Tidewave -- PRIMARY when available)
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 errors- Parse stacktraces, correlate with source via
mcp__tidewave__get_source_location - For data bugs:
mcp__tidewave__execute_sql_queryto inspect state - For logic bugs:
mcp__tidewave__project_evalto test hypotheses - For UI bugs:
mcp__tidewave__get_source_locationwith component name
Present 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.
Step 1: Sanity Checks
mix compile --warnings-as-errors 2>&1 | head -50
mix ecto.migrateStep 2: Reproduce
mix test test/path_test.exs --trace
tail -200 log/dev.log | grep -A 5 -i "error\|exception"Step 3: Read Error LITERALLY
Parse the error message — check references/error-patterns.md.
Step 4: Check the Obvious (Ralph Wiggum Checklist)
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 missinghidden_input for a required embedded field causes {:error, changeset} with no visible UI feedback.
Step 5: IO.inspect / Tidewave project_eval
Step 6: Identify Root Cause
What's actually happening vs what should happen.
Autonomous Iteration
For autonomous debugging, use /ralph-loop:ralph-loop with
clear completion criteria and --max-iterations.
References
references/error-patterns.md— Common errors and checklistreferences/investigation-template.md— Output formatreferences/debug-commands.md— Debug commands and common fixes