Status
Print the current task state so the human knows exactly where they are and what's next — without reading four directories themselves.
What this skill reads
.claude/sdlc/plans/— active plan and whether it has a signed gate.claude/sdlc/gates/— active gate, which phase it covers, whether it is signed.claude/sdlc/sign-offs/— which sign-off files have landed (if any)
This skill writes nothing. It never modifies any artifact.
Step 1 — Identify the active plan
Scan .claude/sdlc/plans/*.md, excluding versioned files (*.v1.md, *.v2.md, etc. — any file matching *.v[0-9]*.md). Versioned files are superseded archives; the active plan is always the unversioned <slug>.md file.
If the directory is absent or no non-versioned files exist, print:
No active task found.
Next: run /start or /plan to begin a task.
and stop.
If multiple non-versioned plan files exist, use the most recently modified one.
Step 2 — Identify the active gate
Scan .claude/sdlc/gates/*.md. Gate filenames follow the pattern <phase>-<task-slug>.md.
Map phase names to order: plan=1, analyze=2, design=3, build=4, test=5, deploy=6, support=7. Select the gate with the highest phase number. Break ties by taking the most recently modified file.
A gate is signed if its content contains a non-empty Signed at: field. A gate is unsigned if that field is absent, blank, or holds a placeholder.
If no gates exist yet, the active gate is "none" — the plan has been drafted but not yet signed.
Step 3 — Determine sign-off state
Sign-off rendering applies only when all three conditions hold:
- An active, signed gate exists.
- That gate contains a
## Required sign-offsblock (a markdown list of role names). .claude/sdlc/sign-offs/exists as a directory.
If any condition is unmet, skip the sign-off line entirely.
Extract required roles — parse the ## Required sign-offs block as a markdown bullet list. Each item is a role name (e.g. security, product, compliance).
Extract REQ-ID — find the first REQ-\d+ token in the gate file's Work-item reference: field (e.g. Work-item reference: https://…/REQ-042 or no ticket REQ-042). If no token is found, skip the sign-off line and append to the Next line:
(add a REQ-ID to Work-item reference to enable sign-off tracking)
Check presence — for each required role, check whether .claude/sdlc/sign-offs/<REQ-ID>-<role>.md exists. Ignore .queue/ sidecars; they are transport state, not filed sign-offs.
Step 4 — Render
Print the status block. Omit any line whose data is unavailable.
Plan: <task-slug> (<signed | unsigned>)
Gate: <phase>-<task-slug> (<signed | unsigned — awaiting sign-offs | none>)
Sign-offs: <role> ✓ | <role> ✓ | <role> □
Next: <one-line action>
Next line content by state:
| State | Next line |
|---|---|
| No plan | run /start or /plan to begin a task |
| Plan exists, no gate | run /<current-phase-command> to produce the gate artifact |
| Gate unsigned, no sign-offs block | sign the gate in .claude/sdlc/gates/<gate-file>.md |
| Gate unsigned, sign-offs pending | await <missing-roles> sign-off, or /help sign-offs for the file format |
| Gate signed, all sign-offs present | advance to the next phase — run /<next-phase-command> |
| Gate signed, no sign-offs block | advance to the next phase — run /<next-phase-command> |
Use the phase order (plan→analyze→design→build→test→deploy→support) to determine current and next phase commands.
Step 5 — Graceful degradation
| Missing resource | Behavior |
|---|---|
.claude/sdlc/plans/ absent or empty |
Print "No active task found." and stop |
.claude/sdlc/gates/ absent or empty |
Omit Gate and Sign-offs lines; Next = produce gate |
.claude/sdlc/sign-offs/ absent |
Omit Sign-offs line silently |
## Required sign-offs absent from gate |
Omit Sign-offs line silently |
No REQ-\d+ in Work-item reference |
Omit Sign-offs line; append note to Next line |
Never error out. If a directory or file is unreadable, omit the corresponding line and continue.
Example output
Single-signer, gate unsigned:
Plan: auth-refresh (signed)
Gate: design-auth-refresh (unsigned)
Next: sign the gate in .claude/sdlc/gates/design-auth-refresh.md
Multi-team, sign-offs pending:
Plan: auth-refresh (signed)
Gate: design-auth-refresh (signed)
Sign-offs: security ✓ | product ✓ | compliance □
Next: await compliance sign-off, or /help sign-offs for the file format
All clear:
Plan: auth-refresh (signed)
Gate: design-auth-refresh (signed)
Sign-offs: security ✓ | product ✓ | compliance ✓
Next: advance to build — run /build
No task in flight:
No active task found.
Next: run /start or /plan to begin a task
References
docs/rfcs/multi-team-approval.md§3.1–3.2 — sign-off file contract and gate-file## Required sign-offsblocktemplates/gate.md— gate file shape this skill readshooks/approval-reconcile.sh— the hook that enforces sign-off presence at phase-advance time
Next step hint
After printing the status snapshot, pipe the next_suggestions conditions to skills/_shared/next-hint.sh and print any output:
printf '%s\n' \
'no_active_work|run /start to begin a new task, or /plan if you already know what to build' \
'pending_signoff_for_current_user|write your sign-off at sign-offs/<REQ-ID>-<role>.md' \
'plan_drafted_and_unsigned|sign the plan gate to unlock /analyze' \
'phase_active_gate_unsigned|continue with the active phase commands, or sign the gate when ready' \
'analyze_gate_signed|run /design' \
'design_gate_signed|run /build' \
'build_gate_signed|run /test' \
'test_gate_signed|run /deploy' \
'deploy_gate_signed|run /support, then /docs' \
| bash skills/_shared/next-hint.sh
Print any output verbatim. If the script outputs nothing, add nothing.