specplan Documentation

Plan the roadmap as a DAG. Generate the specs per card.

specplan models your project as a directed acyclic graph of two node types — specs and user stories — on a React Flow canvas. Spec→spec edges are dependencies (cycles are rejected, with the path named); spec→story edges are containment, which doubles as coverage: anything not contained by a spec sits in the backlog. Each spec card generates its own OpenSpec change from the stories it contains.

Quick start

npx @coopcli/specplan ./openspec

Open the printed URL. Add specs and stories from the backlog's New spec… / New story… dialogs (or ask the chat), draw links between cards, and press Generate OpenSpec on a spec card. The change lands in openspec/changes/<specId>/, validated with openspec validate --strict.

The rules that keep the plan honest

Headless commands

npx @coopcli/specplan validate            # schema + acyclicity + story formula
npx @coopcli/specplan generate <specId>   # generate one card, exit non-zero on validation failure
npx @coopcli/specplan login               # CoopCLI account (for what's coming next)

Storage

Plain YAML, comments preserved: the DAG in openspec/specplan.yaml, plus openspec/changes/<specId>/specplan.yaml per spec with its stories, dependencies, and the generation hash. The filesystem is the source of truth — edit by hand freely; specplan reloads before every change.

Back to the product page →