OpenSpec Lifecycle
Discovery path: OpenSpec is a full-mode feature. In om (slim mode),
the agent won't reference it. When you want spec-driven development — defining acceptance
criteria before writing code — switch to full mode with /warp and ask the agent
to create or manage an OpenSpec change.
OpenSpec is the spec-driven development system in Omegon. Specs define what must be true before code is written — they are the source of truth for correctness. The full lifecycle: propose, spec, fast-forward, cleave, assess, archive.
Lifecycle Stages
- Propose — create a change with a name, title, and intent
- Spec — write Given/When/Then scenarios defining acceptance criteria
- Fast-Forward — generate
design.md(architecture) andtasks.md(work items) from specs - Execute — implement via
/cleave(parallel) or direct coding - Verify —
/assess specchecks that implementation satisfies all scenarios - Archive — move completed change to baseline
Runtime Surface
OpenSpec lifecycle operations are exposed through the agent tool
openspec_manage. The older /opsx:* slash commands are not part of
the current Rust runtime.
| Action | Description |
|---|---|
status | Show all active changes with lifecycle stage |
get | Show details for one change |
propose | Create a new change proposal |
add_spec | Add specs with Given/When/Then scenarios |
register_tasks | Register task progress from tasks.md |
register_test_file | Register a required test file before implementation |
archive | Archive a verifying change to baseline |
Spec Format
## Scenario: Provider routing selects best match
Given a routing request for tier "victory"
And providers [anthropic, openai, ollama] are available
When the routing engine scores providers
Then anthropic is selected (highest capability match)
And ollama is ranked last (local tier only) Directory Structure
openspec/
├── changes/
│ └── my-feature/
│ ├── proposal.md # Intent and scope
│ ├── specs/
│ │ └── routing.md # Given/When/Then scenarios
│ ├── design.md # Architecture notes
│ └── tasks.md # Work items tracked by register_tasks
└── baseline/
└── archived-change/ # Completed changes Integration with Design Tree
The primary entry point for tracked work is design_tree_update(implement)
on a decided design node. This scaffolds the full OpenSpec change directory automatically,
linking the design node to the implementation lifecycle.
- Design node reaches
decidedstatus design_tree_update(implement)creates the OpenSpec change- Specs are generated from the node's decisions and acceptance criteria
openspec_manage(register_tasks)records task progress from tasks.md/cleaveexecutes the tasks in parallel/assess specverifies against the original specsopenspec_manage(archive)closes the loop
Reconciliation
After implementation or assessment, the lifecycle may need reconciliation:
- If
/assess specfinds issues,reconcile_after_assessreopens work - If cleave adds files not in the original scope, tasks.md is updated
- Archive refuses to proceed if tasks are incomplete or design-tree binding is stale