Skip to content

CLI Reference

flowctl is the deterministic CLI for .flow/ state.

Most users should use /flow-next:* commands. Use flowctl when debugging state, scripting CI, building integrations, or inspecting what the skills wrote.

Terminal window
flowctl init
flowctl specs
flowctl tasks --spec fn-1
flowctl ready --spec fn-1
flowctl show fn-1.2
flowctl start fn-1.2
flowctl done fn-1.2 --summary-file summary.md --evidence-json evidence.json
flowctl validate --all
Terminal window
flowctl spec create --title "Add OAuth" --json
flowctl spec set-plan fn-1 --file spec.md --json
flowctl spec set-branch fn-1 --branch fn-1-add-oauth --json
flowctl spec close fn-1 --json
flowctl spec ready fn-1 --json # mark ready for execution (human-owned gate, 1.12.0+)
flowctl spec unready fn-1 --json # back to draft

spec ready / spec unready toggle the spec’s readiness flag — the human-owned “complete enough to hand to an agent” gate. Both are idempotent (no write, no updated_at bump when the flag already matches; --json reports "changed"). The flag is lazy on disk (written only after a toggle; absent reads false) but every JSON read surface (show, specs, list) emits an explicit "ready": <bool>, and ready specs carry a [ready] badge in listings. Orthogonal to status — a ready spec stays open through planning and work. With tracker.readyState configured the tracker is authoritative and overwrites local toggles on sync — see Tracker Sync.

.flow/
├── meta.json
├── specs/
├── tasks/
├── memory/
├── bin/
└── usage.md

Agents should use flowctl for writes instead of hand-editing state JSON.

ResponsibilityWhy it lives in flowctl
ID allocationMust be deterministic and merge-safe
State transitionsMust be machine-readable
ValidationMust run in CI and local shells
ReceiptsMust survive chat context
MigrationMust preserve repo-local state

Judgment stays in the host agent. flowctl should not decide whether a spec is good, whether an architecture is right, or whether a finding is product-important.

Agent-facing commands generally follow this sequence:

Terminal window
flowctl ready --spec fn-1 --json
flowctl start fn-1.2 --json
flowctl done fn-1.2 --summary-file summary.md --evidence-json evidence.json
flowctl validate --all

Direct CLI usage is useful for automation, but human docs should keep teaching the slash-command workflow first.