The Kiro style

Three documents, with a human gate between each. The default.

  1. The shape
  2. The two kinds of spec
  3. Phase by phase
    1. requirements
    2. design
    3. tasks
    4. implement
  4. Checkpoints
  5. What each phase is handed
  6. Files it produces

The shape

requirements.md  ->  design.md  ->  tasks.md  ->  implement

Requirements are written in conversation. Design and tasks are drafted by the engine from what came before. Implementation happens in your own chat, one task at a time, with a ticked checkbox as the definition of done.


The two kinds of spec

+ New Spec asks which one you want:

  Phases
Feature requirementsdesigntasksimplement
Bug fix requirementstasksimplement

A bug fix skips design. A one-line fix does not need a design document, and a process that demands one teaches people to write a paragraph of nothing to get past the gate.

That skip is declared once, in the style’s specTypes: list — not as a conditional inside a stage, and not as a branch inside a prompt. The phases a spec type visits are its list.


Phase by phase

requirements

Written during the intake chat, before the pipeline really starts — so in the normal case this stage is already satisfied by the time the walk reaches it.

It exists as a stage for the case where intake did not finish. Its gate is manual, so a spec with no requirements.md parks here and waits for a human rather than inventing requirements from a one-line title.

design

A new session, seeded only by requirements.md.

The gate that matters for requirements lives here, on the next phase, not on the one that wrote the file. What a human approves is “requirements.md is good enough to build on” — and that is a judgement you make when you are about to depend on it.

tasks

Produces tasks.md: a numbered plan (1, 1.1) carrying a dependency graph between tasks, expressed as ordered waves. Tasks in the same wave may run at the same time; a wave begins only once every task in every earlier wave is finished and ticked. Two tasks share a wave only when they touch different files.

Every task ends green. The repository builds and its tests pass at the end of each task, not just at the end of the plan. That is what decides where the boundaries go, and it is a stronger rule than “one concern per task” — an interface and its implementation, a changed signature and every caller it breaks, a behaviour and the test that proves it are each one task. Splitting any of them leaves the tree red in between, and a plan you cannot stop half-way through is a script rather than a plan.

There is no requires: key anywhere in the style file. What a stage needs is whatever the prior stages of this spec type produced — for a Feature that is requirements.md and design.md; for a Bug fix, which has no design stage, just requirements.md. Writing it out by hand would state the pipeline twice and eventually get one of the two wrong.

implement

The engine does not wait here. This is an implement stage: no artifacts, never satisfied, terminal.

Each task launches a native Copilot chat from the panel’s implement lens. Git is the record, and the ticked checkbox in tasks.md is the completion signal.

No gate, either — the plan is approved by starting its first task.


Checkpoints

checkpoints: required (the default) puts checkpoint tasks into the plan — a top-level task that runs the full test suite and confirms it passes. Set it to optional or none in .local-workflows/config.yml.

A checkpoint verifies; it does not ask. It never waits for a human, and a passing one is not a decision point — the plan carries straight on into the tasks after it. Whoever started the plan asked for it to be carried out; stopping halfway to ask whether to continue answers a question they already answered.

A failing checkpoint is usually work rather than a wall:

The broken test What happens
written by this spec’s tasks, or broken by them fixed, re-run, ticked, plan continues
already red before the plan started, in code this spec does not touch reported, plan continues
a failure that cannot be fixed the plan stops there, checkpoint left unticked

Checkpoints sit after a top-level task, never after a sub-task.


What each phase is handed

Not the whole folder, and not a conversation:

  • intro — read first by every phase. What this process is, what the phases are, and that the document is the deliverable rather than the reply. Phase prompts can then be about doing their own job well instead of re-explaining the pipeline they sit in.
  • grammar — the parser-critical rules, given to every phase. The implement phase ticks checkboxes, so it needs the checkbox rules as much as the phase that writes them.
  • house style — given only to the stage writing that document (format-requirements.md to requirements, and so on).
  • the documents from prior stages — as files.

Files it produces

File Written by
requirements.md the intake chat
design.md design
tasks.md tasks

All under .local-workflows/specs/<spec>/, all committed.

Kiro is the default, so if you have written no .local-workflows/config.yml at all, this is the process you are running.


Table of contents


Back to top

Local Workflows is a VS Code extension. Everything it does is declared in a YAML file you own.