docs/reference/workflows.md
Workflows automate multi-step Spec-Driven Development processes — chaining commands, prompts, shell steps, and human checkpoints into repeatable sequences. They support conditional logic, loops, fan-out/fan-in, and can be paused and resumed from the exact point of interruption.
specify workflow run <source>
| Option | Description |
|---|---|
-i / --input | Pass input values as key=value (repeatable) |
Runs a workflow from a catalog ID, URL, or local file path. Inputs declared by the workflow can be provided via --input or will be prompted interactively.
Example:
specify workflow run speckit -i spec="Build a kanban board with drag-and-drop task management" -i scope=full
Note: All workflow commands require a project already initialized with
specify init.
specify workflow resume <run_id>
Resumes a paused or failed workflow run from the exact step where it stopped. Useful after responding to a gate step or fixing an issue that caused a failure.
specify workflow status [<run_id>]
Shows the status of a specific run, or lists all runs if no ID is given. Run states: created, running, completed, paused, failed, aborted.
specify workflow list
Lists workflows installed in the current project.
specify workflow add <source>
Installs a workflow from the catalog, a URL (HTTPS required), or a local file path.
specify workflow remove <workflow_id>
Removes an installed workflow from the project.
specify workflow search [query]
| Option | Description |
|---|---|
--tag | Filter by tag |
Searches all active catalogs for workflows matching the query.
specify workflow info <workflow_id>
Shows detailed information about a workflow, including its steps, inputs, and requirements.
Workflow catalogs control where search and add look for workflows. Catalogs are checked in priority order.
specify workflow catalog list
Shows all active catalog sources.
specify workflow catalog add <url>
| Option | Description |
|---|---|
--name <name> | Optional name for the catalog |
Adds a custom catalog URL to the project's .specify/workflow-catalogs.yml.
specify workflow catalog remove <index>
Removes a catalog by its index in the catalog list.
Catalogs are resolved in this order (first match wins):
SPECKIT_WORKFLOW_CATALOG_URL overrides all catalogs.specify/workflow-catalogs.yml~/.specify/workflow-catalogs.ymlWorkflows are defined in YAML files. Here is the built-in Full SDD Cycle workflow that ships with Spec Kit:
schema_version: "1.0"
workflow:
id: "speckit"
name: "Full SDD Cycle"
version: "1.0.0"
author: "GitHub"
description: "Runs specify → plan → tasks → implement with review gates"
requires:
speckit_version: ">=0.7.2"
integrations:
any: ["copilot", "claude", "gemini"]
inputs:
spec:
type: string
required: true
prompt: "Describe what you want to build"
integration:
type: string
default: "copilot"
prompt: "Integration to use (e.g. claude, copilot, gemini)"
scope:
type: string
default: "full"
enum: ["full", "backend-only", "frontend-only"]
steps:
- id: specify
command: speckit.specify
integration: "{{ inputs.integration }}"
input:
args: "{{ inputs.spec }}"
- id: review-spec
type: gate
message: "Review the generated spec before planning."
options: [approve, reject]
on_reject: abort
- id: plan
command: speckit.plan
integration: "{{ inputs.integration }}"
input:
args: "{{ inputs.spec }}"
- id: review-plan
type: gate
message: "Review the plan before generating tasks."
options: [approve, reject]
on_reject: abort
- id: tasks
command: speckit.tasks
integration: "{{ inputs.integration }}"
input:
args: "{{ inputs.spec }}"
- id: implement
command: speckit.implement
integration: "{{ inputs.integration }}"
input:
args: "{{ inputs.spec }}"
This produces the following execution flow:
flowchart TB
A["specify
(command)"] --> B{"review-spec
(gate)"}
B -- approve --> C["plan
(command)"]
B -- reject --> X1["⏹ Abort"]
C --> D{"review-plan
(gate)"}
D -- approve --> E["tasks
(command)"]
D -- reject --> X2["⏹ Abort"]
E --> F["implement
(command)"]
style A fill:#49a,color:#fff
style B fill:#a94,color:#fff
style C fill:#49a,color:#fff
style D fill:#a94,color:#fff
style E fill:#49a,color:#fff
style F fill:#49a,color:#fff
style X1 fill:#999,color:#fff
style X2 fill:#999,color:#fff
Run it with:
specify workflow run speckit -i spec="Build a kanban board with drag-and-drop task management"
| Type | Purpose |
|---|---|
command | Invoke a Spec Kit command (e.g., speckit.plan) |
prompt | Send an arbitrary prompt to the AI coding agent |
shell | Execute a shell command and capture output |
gate | Pause for human approval before continuing |
if | Conditional branching (then/else) |
switch | Multi-branch dispatch on an expression |
while | Loop while a condition is true |
do-while | Execute at least once, then loop on condition |
fan-out | Dispatch a step for each item in a list |
fan-in | Aggregate results from a fan-out step |
Steps can reference inputs and previous step outputs using {{ expression }} syntax:
| Namespace | Description |
|---|---|
inputs.spec | Workflow input values |
steps.specify.output.file | Output from a previous step |
item | Current item in a fan-out iteration |
Available filters: default, join, contains, map.
Example:
condition: "{{ steps.test.output.exit_code == 0 }}"
args: "{{ inputs.spec }}"
message: "{{ status | default('pending') }}"
| Type | Coercion |
|---|---|
string | Pass-through |
number | "42" → 42, "3.14" → 3.14 |
boolean | "true" / "1" / "yes" → True |
Each workflow run persists its state at .specify/workflows/runs/<run_id>/:
state.json — current run state and step progressinputs.json — resolved input valueslog.jsonl — step-by-step execution logThis enables specify workflow resume to continue from the exact step where a run was paused (e.g., at a gate) or failed.
The workflow pauses and waits for human input. Run specify workflow resume <run_id> after reviewing to continue.
Yes. Each run gets a unique ID and its own state directory. Use specify workflow status to see all runs.
Most workflows are independently created and maintained by their respective authors. The Spec Kit maintainers do not review, audit, endorse, or support workflow code. Review a workflow's source before installing and use at your own discretion.