targets/codex/skills/phx-work/SKILL.md
Execute Elixir/Phoenix plan tasks with progress tracking. Use after $phx-plan to implement features with mix compile and mix test verification after each step, or --continue to resume interrupted work.
npx skillsauth add oliver-kriska/claude-elixir-phoenix phx-workInstall 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.
Execute tasks from a plan file with checkpoint tracking and verification.
$phx-work .claude/plans/user-auth/plan.md
$phx-work .claude/plans/user-auth/plan.md --from P2-T3
$phx-work --skip-blockers
$phx-work # Resumes most recent plan
<plan-file> -- Path to plan file (optional, auto-detects recent)--from <task-id> -- Resume from specific task (e.g., P2-T3)--skip-blockers -- Continue past blocked tasks--continue -- Resume IN_PROGRESS plan from checkboxes[x] = done, [ ] = pending.
No separate JSON state files. Resume by reading the plan.git add -A or git add .Ask the user for plans with >3 tasks:
This plan has {count} remaining tasks across {count} phases.
- Start working -- Begin immediately (familiar patterns)
- Quick research -- Read source files first (~10 min)
- Extensive research -- Web search + docs (~30 min)
Skip for plans with 3 or fewer simple tasks -- just start.
Split warning: Plans with >10 tasks risk 2-3 context compactions. Suggest splitting via
$phx-planif not already.
Read scratchpad and compound docs before writing any code — skipping
this causes rework. Read .claude/plans/{slug}/scratchpad.md (short,
critical context) for dead-ends and decisions, then Grep .claude/solutions/
for solved patterns. Apply findings: skip dead-ends, follow decisions,
reuse patterns. Ask the user when a task's intent is ambiguous — never
guess, corrections are expensive.
Read plan file, count [x] (completed) vs [ ] (remaining).
Find first unchecked task by [Pn-Tm] ID.
Create Claude Code tasks from ALL unchecked plan items using
TaskCreate. This gives real-time progress visibility in the UI:
For each unchecked `- [ ] [Pn-Tm] Description`:
TaskCreate({
subject: "[Pn-Tm] Description",
description: "Full task details from plan",
activeForm: "Implementing: Description"
})
Skip already-checked items ([x]) — don't create tasks for them.
Set up blockedBy dependencies between phases (Phase 2 tasks
blocked by Phase 1 tasks).
With --from P2-T3: Skip to that specific task.
Stale-plan check: if the plan predates this session (file mtime), spot-check 2-3 files it references before executing — assumptions may have drifted.
See references/resume-strategies.md for all resume modes.
Execute each unchecked task (- [ ] [Pn-Tm][agent] Description):
TaskUpdate({taskId, status: "in_progress"})[agent] annotation (see references/execution-guide.md)mix format + mix compile --warnings-as-errors
(at phase end, also run mix test <affected> — see tiers below)[x] on pass, append
implementation note inline, AND
TaskUpdate({taskId, status: "completed"}). Example:
- [x] [P1-T3] Add user schema — citext for email, composite index on [user_id, status]
This survives context compaction; the plan is re-read on resume.Parallel groups: Tasks under ### Parallel: header spawn
as background subagents. See references/execution-guide.md
for spawning pattern, prompt template, and checkpoint flow.
Verification tiers (scoped to minimize redundant runs):
mix compile --warnings-as-errors only
(format is checked by PostToolUse hook automatically)mix compile --warnings-as-errors + mix test <affected_files> + mix credo --strict
(scope tests: mix test test/path/to_affected_test.exs — NOT full suite)project_eval
(create record, fetch, verify -- see execution-guide.md)mix test (full suite — run ONCE at the end, not per-phase)Token efficiency: Do NOT narrate each verification step. Execute
tool calls directly without "Let me now run..." preamble. Only narrate
when explaining a non-obvious decision or reporting a failure. When
several checkboxes complete together (parallel groups, resume catch-up),
batch them into ONE edit pass — never one Edit call per checkbox.
The PostToolUse hook checks formatting but does NOT modify files —
run mix format explicitly during verification or before committing.
Summarize results with AskUserQuestion:
Implementation complete! {done}/{total} tasks finished. {count} files modified across {count} phases.
Options: 1. Run review ($phx-review) (Recommended),
2. Get a briefing ($phx-brief — understand what was built),
3. Commit changes (/commit), 4. Continue manually.
If any task fixed a non-obvious bug, also mention $phx-compound
to capture the solution.
With blockers: list them, offer Replan ($phx-plan),
Review first ($phx-review), or Handle myself.
If blockers remain, auto-write HANDOFF to scratchpad:
### [HH:MM] HANDOFF: {plan name}
Status: {done}/{total} tasks. Blockers: {list}.
Next: {first unchecked task ID and description}.
Key decisions: {brief list from this session}.
Include context beyond checkboxes for fresh session resume.
NEVER auto-start $phx-review or any other phase.
After completion, use Glob to find other plan files matching
.claude/plans/*/plan.md. If pending plans exist, inform the
user. Do NOT auto-start.
$phx-plan → $phx-work (YOU ARE HERE) → $phx-review → $phx-compound
↑ ASK USER before each transition
references/execution-guide.md -- Task routing, parallel execution, verificationreferences/resume-strategies.md -- Resume modes and state persistencereferences/file-formats.md -- Plan and progress file formatsreferences/error-recovery.md -- Error handling and blockersreferences/harness-patterns.md -- Critic-refiner pattern for debugging loopstools
Compatibility alias for the Elixir/Phoenix plugin's LiveView assigns audit. Invoke explicitly with /lv:assigns.
development
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.
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.