plugins/elixir-phoenix/skills/trace/SKILL.md
Trace Elixir call trees from entry points via mix xref. Use when debugging data flow, planning signature changes, or understanding how a bug reaches code.
npx skillsauth add oliver-kriska/claude-elixir-phoenix traceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build call trees showing how functions are reached from entry points.
mix xref callers first - It's authoritative; grep is fallback only| Condition | Why Call Tree Helps | |-----------|---------------------| | Unexpected nil/value at runtime | Trace where the value originates | | Bug can't reproduce locally | See all entry points that reach the code | | Changing function signature | Find all callers and their argument patterns | | Incomplete stack trace | Get full path context | | "Where does X come from?" | Visual answer to data flow question |
Run the caller query first, then inspect another function in the chain as needed:
mix xref callers MyApp.Accounts.update_user/2
mix xref callers MyApp.Accounts.get_user/1
Read the reported locations to see argument patterns.
| Pattern | Type |
|---------|------|
| def mount/3, def handle_event/3 | LiveView |
| def index/2, def show/2, def create/2 | Controller |
| def perform(%Oban.Job{}) | Oban Worker |
| def handle_call/3, def handle_cast/2 | GenServer |
For full recursive tree with argument extraction and parallel category tracing:
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 2+, delegate to
the orchestrator below. At depth 1, keep orchestration in this main session:
spawn the applicable controller,
LiveView, worker, and internal tracing prompts directly, then merge their
results. Never spawn an orchestrator that cannot delegate.
Agent(subagent_type: "phx:call-tracer", prompt: "Build call tree for MyApp.Accounts.update_user/2")
The call-tracer agent uses parallel subagents for each entry point category:
Each gets fresh 200k context for deep exploration.
.claude/plans/{slug}/research/call-tree-{function}.md
For detailed patterns:
${CLAUDE_SKILL_DIR}/references/mix-xref-usage.md - Full mix xref commands and options${CLAUDE_SKILL_DIR}/references/entry-points.md - All Phoenix/OTP entry point patterns${CLAUDE_SKILL_DIR}/references/argument-extraction.md - AST parsing for argument patternstools
Compatibility alias for the Elixir/Phoenix plugin's LiveView assigns audit. Invoke explicitly with /lv:assigns.
tools
Compatibility alias for the Elixir/Phoenix plugin's N+1 query checker. Invoke explicitly with /ecto:n1-check.
tools
Compatibility alias for the Elixir/Phoenix plugin's Ecto constraint debugger. Invoke explicitly with /ecto:constraint-debug.
testing
Elixir/Phoenix deployment patterns — Dockerfile, fly.toml, runtime.exs, mix release, rel/ overlays. Use when configuring Fly.io, Docker, CI/CD, health checks, or production migrations.