SDD cheat sheet

  1. Paths
  2. config.yml
  3. style.yml
    1. Stage keys
  4. Rules
  5. Shipped styles
  6. style.yml errors
  7. Override one prompt
  8. Eject a built-in style
  9. Requires

Paths

   
Specs .local-workflows/specs/<spec>/
Config .local-workflows/config.yml
Styles, workspace <repo>/.local-workflows/styles/<id>/
Styles, profile ~/.local-workflows/styles/<id>/
Styles, builtin ships with the extension

Precedence: workspace > profile > builtin. Definition comes from the highest scope with a style.yml; prompts come from every scope with that id.


config.yml

Full page: config.yml.

Key Values Default
style kiro, spec-kit, custom id kiro
specRoot path, repo-relative — absolute or .. is an error .local-workflows/specsignored when a .code-workspace is open
source manual | ado | gh unset — asked each time
checkpoints required | optional | none required
ai.uses plugin ref ai@1
ai.provider agent runtime ghcp
ai.model model name | auto auto
ai.stages.<id> per-phase override, merged per setting
# yaml-language-server: $schema=https://local-workflows/schemas/sdd-config.schema.json

style.yml

Key Value
schema 1
id must equal the folder name
name shown in the picker
desc one line
intake.prompt path
intake.produces filename
specTypes[] { id, label, stages[] }
intro path — sent to every phase
format.grammar path — sent to every phase
format.house.<stage> path — sent to that stage only
stages[] below

Stage keys

Key Value
id referenced from specTypes[].stages
kind ai — runs it and waits
implement — starts the session, does not wait
produces[] artifacts that must all exist to satisfy the stage. Required on ai, optional on implement
mayProduce[] optional artifacts; never blocks
gate manual
prompt path

No requires: key exists.

# yaml-language-server: $schema=https://local-workflows/schemas/sdd-style.schema.json

Rules

  • A stage is satisfied when its artifacts exist.
  • A stage with no artifact is never satisfied.
  • Terminal = kind: implement with an empty produces. A terminal stage must be the last one a spec type visits.
  • gate: manual parks the walk. It is the only gate; omit the key otherwise.
  • A stage’s args are the prior stages’ artifacts for that spec type.
  • ## Open Questions blocks the next phase while it holds questions.
  • Starting the next phase is the approval. No Approve button.
  • Each phase is a fresh session seeded only by prior documents.

Shipped styles

  Kiro Spec Kit
Stages requirements design tasks implement specify plan tasks implement
Spec types Feature: all
Bug fix: skips design
Feature only
Intake writes requirements.md spec.md
mayProduce research.md data-model.md quickstart.md contracts
Task ids 1, 1.1 + dependency graph T001 flat, [P] = parallel
Absent commands /clarify, /analyze

style.yml errors

Every one is refused at load, not mid-run.

Cause  
id not equal to the folder name  
schema: missing, not a whole number, or newer than the build  
stages: empty, or a duplicated stage id  
kind: ai with no produces it could never complete
An artifact in both produces and mayProduce it is required or it is not
kind: other than ai / implement  
gate: other than manual  
specTypes: empty, or a duplicated spec type id  
A spec type listing no stages  
A spec type naming a stage the style does not define  
A spec type visiting the same stage twice it is satisfied, so it cannot run again
Any stage listed after a terminal stage the walk would stop and never reach it

Override one prompt

.local-workflows/styles/kiro/prompts/design.md

No style.yml alongside it.


Eject a built-in style

Local Workflows: Eject Style — copies a built-in, byte for byte, to the scope you pick.

   
Target user profile (default) or workspace
Collisions listed, overwritten only on explicit confirm
The trade an ejected copy stops receiving built-in improvements
Revert delete files — each one falls back to the built-in

Requires

Copilot sign-in. ai@1 on its default ghcp provider runs the document phases; implement launches Copilot Chat.


Back to top

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