spec-flow · git:20260716.29b4d22 · 2026-07-16 · sha256 10f71a7d744dca87

spec-flow git:20260716.29b4d22A

Immutable. This exact content is served forever at /api/v1/blob/10f71a7d744dca87.

---
description: Use when planning, executing, checkpointing, finishing, or inspecting
  lightweight spec-driven work. Runs one task at a time using `.spec/` markdown files
  and the bundled `specctl` helper. NOT for broad product discovery beyond a short
  requirement interview. NOT for generic implementation planning that does not read
  or write `.spec/` files.
name: spec-flow
---

# Spec flow

Lightweight spec loop for controlled task-by-task work.

Loop: plan one slice → execute one task → checkpoint or close → repeat.

`specctl` owns state. Do not edit task status or `.spec/SESSION.yaml` by hand.

## Read first

- `references/method.md` for artifact shapes, planning rules, task quality, and mini-interview guidance.
- `references/specctl-commands.md` for CLI commands.

## State model

- `.spec/tasks/TASK-*.md` — executable vertical slices. Required for work.
- `.spec/epics/EPIC-*.md` — optional group for multi-task plans.
- `.spec/reqs/REQ-*.md` — optional WHY/WHAT context for ambiguous work.
- `.spec/SESSION.yaml` — active task, step, base commit.
- `.spec/PROGRESS.md` — append-only activity log.

Task states: `todo`, `in-progress`, `done`.

## Common flows

New project:

```bash
scripts/specctl init
```

Then plan the first executable slice. Do not build a full backlog unless the user asks.

Existing project:

1. Inspect current code and project instructions.
2. Create the smallest task that can be verified.
3. Link optional REQ/EPIC context only when it reduces ambiguity.

Stop and resume:

```bash
scripts/specctl checkpoint --message "<where to resume>"
scripts/specctl session handoff
```

Iterate:

```bash
scripts/specctl ready
scripts/specctl start TASK-<id>
# implement + verify
scripts/specctl done TASK-<id> --summary "..." --tests "..."
```

## Modes

### Orient

Use when the user asks for status, next task, resume, health, or what to do next.

```bash
scripts/specctl status
scripts/specctl ready
scripts/specctl session handoff
scripts/specctl validate
```

Report active session, next ready task, validation issues, and the smallest next action.

### Plan

Use when the user has an idea, requirement, bug, or project gap and wants an executable plan.

1. Run `scripts/specctl init`.
2. Check status/session before changing files.
3. Ask 3-5 questions only if the slice is unclear.
4. Optionally scan the codebase for relevant files and patterns.
5. Draft the smallest useful artifact set:
   - one clear slice → one `TASK-*`
   - several slices → one `EPIC-*` plus tasks
   - unclear WHY/WHAT → one `REQ-*` first
6. Show the proposed plan and ask before writing.
7. Write with `scripts/specctl new task <slug>` when possible, then edit details.
8. Run `scripts/specctl validate` and `scripts/specctl ready`.

Do not write implementation code in plan files.

### Execute

Use when the user wants to work, continue, or implement a task.

1. Run `scripts/specctl status` and `scripts/specctl session show`.
2. If a session exists, ask whether to resume, checkpoint, clear, or stop.
3. Select with `scripts/specctl ready` or verify the named task with `scripts/specctl show TASK-<id>`.
4. Start with `scripts/specctl start TASK-<id>`.
5. Make a short implementation plan; ask before editing.
6. Implement only the approved task.
7. Run project-appropriate checks from project instructions and changed files.
8. Show scoped diff or `scripts/specctl session handoff` before close.
9. Close with `scripts/specctl done ...` or checkpoint with `scripts/specctl checkpoint`.

### Checkpoint or close

Use when the user stops, switches context, or finishes.

Checkpoint:

```bash
scripts/specctl checkpoint --message "<where to resume>"
```

Close:

```bash
scripts/specctl done TASK-<id> \
  --summary "<what changed>" \
  --tests "<checks passed or not run: reason>" \
  --files "<changed files or none>" \
  --commits "<sha or none>"
```

`specctl done` needs `--summary` and `--tests` unless the user explicitly approves `--force`.

## Guardrails

- One task is the execution unit.
- Checkpoint before stopping or switching.
- Keep work inside the approved task.
- File follow-up tasks instead of expanding scope.
- Verification is adaptive; do not assume every project has `make`.
- User approval is required before writing plan files, editing code, forcing state, or clearing another session.

## Output

```markdown
## Spec flow

Mode: orient | plan | execute | checkpoint | close
Task: <TASK-id or none>
Status: <ready | in-progress | checkpointed | done | blocked>
Evidence: <commands/tests/checks or skipped reason>
Next: <one command or action>
```

## Failure handling

- No `.spec/`: run or offer `scripts/specctl init`.
- Active session conflicts: show handoff and ask before switching.
- No ready tasks: show blockers; plan new work or finish blockers.
- Validation fails: fix the smallest artifact issue before work.
- Verification fails: fix within scope, checkpoint, or stop; do not mark done.