Spec
Read what a change intends: its proposal, design and tasks, from the spec-driven tool the project uses

Alt+X opens the plans a spec-driven tool keeps in the checkout: each
change's proposal, design and tasks, and the specs that outlive them. They
are found on their own; there is nothing to declare.
| Subject | Lists |
|---|---|
| Changes | What is in flight, with how many of its tasks are done, and last the changes the tool put away |
| Specs | The requirements that outlive the changes |
| Decisions | The decision records (ADRs) the project keeps, each with its status |
There are never more than these three. Decisions appears only when the declared places hold one.
Changes are grouped by where they stand. This checkout is the change the agent in the selected tab is working on, found from the files its branch touched, and it opens first. In progress comes next. A change whose tasks are all done sits in ready to archive when its tool archives, and in done when it does not. What the tool put away is the last band, archived, newest first. Done and archived open folded, since they only grow.
p switches a document between preview and source. Enter opens it in Code,
where you can edit it. The subjects take the workspace bar while Spec is open, in place
of the agent's tabs, and Tab moves between them.
Decisions
No spec tool decides where decisions live, so Spec looks for them where the
project keeps what describes it: the directories in workspace.artifacts
(agents.yaml). Nothing else is
declared, and any spec tool, or none, works the same:
workspace:
artifacts: docs # docs/adr/*.md is found inside itRecords are read the way the published ADR formats write them (see Supported ADR formats), and nothing a team adds of its own is guessed at.
| Read from | |
|---|---|
| A record | a file named like one: a number of three or more digits, optionally after adr-, then a slug (0042-use-yaml.md, 20240105-use-yaml.md, adr-0042-use-yaml.md). Guides, indexes, templates and dated documents (2026-01-02-plan.md) beside them are passed over |
| Title | the front matter's title, else the first # heading (without adr-tools' 1. ), else the slug |
| Status | the front matter's status (MADR), else the header's Status: field (MADR 2, log4brains), else the first line of a ## Status section (adr-tools). A record with none is listed without one |
Each decision is listed by its number and title, with its status beside it.
A record is superseded when its status says so, the way every template
writes it: superseded by [ADR-0005](0005-example.md), superseded by ADR-0005,
or adr-tools' own Superceded by [5. …](0005-….md); or when a format keeps it as
a field: adrkit's front matter supersedes / supersededBy, or the
Supersedes: ADR-0001 field OpenSpec's ADR schema writes on the new record
without touching the old one. Either way both records say it.
Any other link from a status to a record, like adr-tools' Supercedes and the
pairs adr link writes, or adrkit's relatesTo, is shown once on each record
as Related to, with no direction claimed. Links anywhere else in a record are
its text's.
A numbered record written inside a change, like openspec/changes/<name>/adr/,
is listed in that change as its decision, after the design.
Tasks in the sidebar
When the selected agent is working on a change, a tasks section sits in the sidebar above the timeline. Its header says how many of that work's tasks are done out of all of them, even folded. Open, it lists each change with its own count, and clicking one opens Spec on it. Like the timeline, it is about the selected checkout only: the rest of the project's changes are in Spec.
Supported tools
A tool is recognised by the directory it keeps in the checkout.
| Tool | Found by | Status |
|---|---|---|
| OpenSpec | openspec/ | Supported |
| Spec Kit | .specify/ | Supported |
| Superpowers | docs/superpowers/ | Supported |
| GSD | .planning/ | Supported |
| Kiro | .kiro/specs/ | Planned |
Each tool is a small table of where its files live and what each one is for: the proposal or requirements, the design, the tasks, the specs. The surface reads those roles, never a tool's own file names, so adding one needs no new screen.
| OpenSpec | Spec Kit | |
|---|---|---|
| A change | openspec/changes/<name>/ | specs/<NNN-name>/ |
| Why, how, tasks | proposal.md, design.md, tasks.md | spec.md, plan.md and what it writes beside it, tasks.md |
| Specs | openspec/specs/<capability>/spec.md | .specify/memory/constitution.md |
| Archive | openspec/changes/archive/ | none |
| Superpowers | GSD | |
|---|---|---|
| A change | one plan, docs/superpowers/plans/<date>-<feature>.md | a phase, .planning/phases/<NN-name>/, or a quick task, .planning/quick/<id>-<slug>/ |
| Why, how, tasks | the plan's checkbox steps | NN-SPEC.md and NN-CONTEXT.md, NN-RESEARCH.md and the UI and AI specs, every NN-MM-PLAN.md |
| Specs | the designs, docs/superpowers/specs/<date>-<topic>-design.md | PROJECT.md, REQUIREMENTS.md, ROADMAP.md, STATE.md |
| Archive | none | .planning/milestones/ |
Superpowers writes a design and its plan as two files with no link between
them, so each is listed on its own, newest first. A GSD plan is a list of
task blocks rather than checkboxes, so a phase counts its plans instead: a
plan is done once GSD has written its SUMMARY.md beside it. Summaries,
verification and UAT reports are listed after the plans, by name.
A checkout that keeps more than one lists them together, each change named with its tool. Contracts written as YAML, JSON, GraphQL or protobuf are listed beside the documents and shown as source.
Supported ADR formats
A format is recognised by what it writes, not by a marker: every one below is
read wherever workspace.artifacts points, beside any spec tool or none.
| Format | Status read from | Supersession read from |
|---|---|---|
| MADR 3 and 4 | front matter status | status: "superseded by ADR-0005", or with a link |
| MADR 2 | * Status: in the header | superseded by [ADR-0005](0005-….md) |
| adr-tools (Nygard) | first line of ## Status | Superceded by [5. …](0005-….md) / Supercedes, as the tool writes them |
| log4brains | - Status: in the header | superseded by [xxx](yyyymmdd-xxx.md) |
| adrkit (Spec Kit) | front matter status | front matter supersedes, supersededBy; relatesTo as related |
OpenSpec spec-driven-with-adr | - Status: in the header | Supersedes: ADR-0001 on the new record, the old one untouched |
A record in a shape of its own is still listed, by its title, with no status read into fields none of these formats define.