coopcli specplan
Plan the roadmap. Generate the specs.
A React Flow canvas that models your project as a DAG of specs and user
stories — dependencies stay acyclic, uncovered work surfaces in a backlog,
and every spec card generates its own OpenSpec change into your
openspec/ tree without ever overwriting a hand-edited file.
Local-only by design: the server binds to 127.0.0.1, chat and generation run with your own Anthropic credentials, and nothing leaves your machine except the model call.
What you get
A DAG, not a list
Specs depend on specs (kept acyclic — cycles are rejected with the exact path named), and specs contain the user stories they cover. Every card carries a lifecycle chip: draft / active / done / deferred.
Backlog of unlinked work
Anything not yet linked into the plan sits in the backlog — stories clear when a spec contains them, specs when any link touches them. Creation starts here too: name a spec and give it a generation prompt.
Non-destructive chat
A Claude-backed assistant creates, links, contains, and reorders plan items with tools. There is no delete tool, so it structurally cannot destroy your plan.
Hand-edit-safe generation
Each spec card generates a full OpenSpec change — every contained
story becomes a scenario — and output must pass
openspec validate --strict. Hand-edited bodies are detected
by content hash and never overwritten.
The plan, at a glance
Specs are cards; solid arrows are dependencies (kept acyclic), dashed lines are containment — the stories a spec covers. Status chips track each spec's lifecycle.
The unlinked story sits in the backlog until a spec contains it. Hitting
Generate OpenSpec on auth-floor turns its contained
stories into #### Scenario: blocks in a strict-validated change.
Works with OpenSpec
OpenSpec is a spec-driven
workflow: each change lives in its own directory
(openspec/changes/<change-id>/) as a proposal, design, task
list, and capability specs — written before the code. specplan adds the layer
OpenSpec doesn't have: dependencies and ordering across the whole roadmap. The
plan persists as plain YAML (openspec/specplan.yaml plus one
specplan.yaml per change), and hand edits — comments included —
survive round trips.
Get started
Set up Anthropic auth
export ANTHROPIC_API_KEY=sk-ant-... or ant auth login.
Planning works without either; chat and generation need one.
Launch
npx @coopcli/specplan ./openspec — the plan autosaves to
specplan.yaml, and change directories you already have land on the
canvas automatically as draft cards.
Plan
Create specs and stories from the backlog (a spec's description is its
generation prompt — @file pulls code into context), drag links on the
canvas, set status chips — or just ask the chat. Cycles are rejected, stories must
follow the formula, and nothing can be deleted by the assistant.
Generate
Hit Generate OpenSpec on a card (or
npx @coopcli/specplan generate <specId>). Every contained story
becomes a scenario, output must pass openspec validate --strict, and
hand-edited changes are never overwritten. specplan validate keeps the
plan honest in CI.
Sibling product: specsketch — draw one change's architecture and generate its spec. specplan plans the roadmap those changes live on.