Custom agent imported from kwkraus/enablemint-builder (
.github/agents/speckit.companion.resume.agent.md). Copyright stays with the author.
Resume Spec
Pick the pipeline back up where it stopped. This command reads the active
feature's recorded state, resolves the next step — carrying the recorded
decisions into scope — and dispatches the next speckit.* command. Inside the
implement step it continues at the next unchecked task.
Name every command the way this project registers it
Commands are named in dot form throughout this body, speckit.companion.plan, because that is their canonical id, and without a leading slash, because the spelling a host actually registers is not always this one. Claude Code installs /speckit-companion-plan. Look at how the commands are installed in this project, under the agent's own commands or skills directory, and use that spelling every time you name one to the developer or dispatch one yourself. A dotted name typed into a host that registered dashes resolves to nothing at all.
Prerequisites
- Verify Python is available by running
python3 --version. - If
python3is not available, warn the user and skip:[companion] Warning: python3 not detected; skipped resume. Do not fail the host command.
Execution
-
Resolve the next action from the repository root:
python3 .specify/extensions/companion/scripts/status-context.py(Pass
--feature-dir specs/<NNN>-<slug>when you already know it.) The script reads.spec-context.json, or derives state from on-disk files when it is missing/malformed. -
Parse the final
RESOLUTION: { … }JSON line the script prints. It containscurrentStep,status,decisions[],nextStep,nextCommand,nextActionLabel,nextTask, andcomplete. -
Branch on the resolution:
complete: true→ printPipeline complete — nothing to resume.and stop. Do not dispatch anything.empty: true(no recorded state and no spec files) → printNothing to resume (no spec files or recorded state found).and stop.nextTaskis set (inside the implement step) → continue implementation atnextTask: invokespeckit.implement, instructing it to resume at the next unchecked task.- otherwise → invoke
nextCommand(e.g.speckit.plan,speckit.tasks,speckit.implement).
-
When you dispatch, state the recorded
decisions[]as in-scope context for the step you are running, so prior decisions carry forward and the user does not re-specify them.
Dispatch note
Resume dispatches the already-installed speckit.* commands. It does not
require a specify workflow resume CLI subcommand, so it works on the stock
installed spec-kit version. The dispatched command runs its own after_* capture
hook, which writes the resulting history[] entry — resume itself writes no state.
Output
Resuming <name> from <currentStep> (<status>).
Decisions in scope:
- <decision>
Next: <action> → dispatching <command>
- Tasks/implement step →
Next: Continue implementation at <task> → dispatching speckit.implement. - No decisions recorded → omit the "Decisions in scope" block.
Graceful Degradation
Best-effort: if python3 is missing or the feature directory cannot be resolved,
warn to stderr and stop without dispatching. Never fail the host command.
