This repository (Asymmetric-al/core)
These repo-owned sections sit above the official OpenSpec skill. Reconcile this
overlay after upstream refreshes before running bun run skills:sync.
Use the locally pinned CLI only: bun run openspec -- <command>. Do not invoke
@latest. Core does not use Stores. Pass an explicit change ID before any
mutating OpenSpec operation. Follow AGENTS.md and docs/ai/rules/openspec.md.
Do not bypass TDD, exact base-maia, data-access boundaries, security, or
repository checks. Do not archive unmerged or incomplete work. Do not run
openspec update against the live customized repository. Do not treat product
runtime Eve as a coding agent.
Allowed-tools metadata includes Bash(bun:*) so the local wrapper can run.
Triggers
- The matching OpenSpec workflow is requested: Explore, Propose, Update, Apply,
Verify, Sync, or Archive.
- Numbered commands
/1-start-project through /4-close-project wrap these
workflows.
Workflow
- Read
openspec/config.yaml, openspec/project.md, and the relevant specs
or active change.
- Invoke
bun run openspec -- with the explicit change ID for mutating work.
- Keep Core TDD, UI, data-boundary, and Guardian rules in force.
- Leave the change active until implementation has merged.
Checklist
Revise a change's existing planning artifacts and keep them coherent. Never edit code.
Store selection: If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run openspec store list --json to discover registered store ids, then pass --store <id> on the commands that read or write specs and changes (new change, status, instructions, list, show, validate, archive, doctor, context, schemas, view). Once selected, treat --store <id> as sticky for the rest of the workflow. Every unscoped example of those commands below is shorthand: before running it, append the flag. For example, run openspec status --change "<name>" --json --store "<id>", not the unscoped form shown below. Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local openspec/ root.
Input: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
/openspec-continue-change is an optional workflow and may not be installed. Before suggesting it anywhere below, verify that it is available. If it is unavailable, openspec status --change "<name>" --json shows the next artifact and openspec instructions "<artifact-id>" --change "<name>" --json explains how to create it.
Steps
Select the change
If a name is provided, use it. Otherwise:
- Infer from conversation context if the user mentioned a change
- Auto-select if only one active change exists
- If ambiguous, run
openspec list --json to get available changes sorted by most recently modified, and ask the user to select one
When prompting, present the top 3-4 most recently modified changes as options, showing:
- Change name
- Schema (from
schema field if present, otherwise "spec-driven")
- Status (e.g., "0/5 tasks", "complete", "no tasks")
- How recently it was modified (from
lastModified field)
Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to update.
Always announce: "Using change: " and how to override (e.g., /openspec-update-change <other>).
Get the change's artifacts
openspec status --change "<name>" --json
Parse the JSON to understand current state. The response includes:
schemaName: The workflow schema being used (e.g., "spec-driven")
artifacts: Array of artifacts with their status ("done", "skipped", "ready", "blocked")
isPlanningComplete: Boolean indicating if all planning artifacts are complete. Older CLI versions expose the same value as isComplete.
planningHome, changeRoot, artifactPaths, and actionContext: path and scope context. Use these instead of assuming repo-local paths.
The artifact ids and paths come from the active schema - do NOT assume them, and do NOT branch on hardcoded artifact names. Custom schemas must work unchanged.
The files to edit are artifactPaths.<id>.existingOutputPaths - the concrete files that exist on disk, already glob-expanded for glob artifacts (e.g. specs/**/*.md). Do NOT write to resolvedOutputPath: for a glob artifact it is still the glob pattern, not a real file.
Understand the request
- If the user asked for a specific revision ("the design now uses X"), that is the starting edit.
- If they only said "update" / "make this coherent", treat it as a coherence review: read the existing artifacts and check them against each other for contradictions, gaps, and duplication.
Read and reconcile
- Read the artifact(s) the request touches and the change's other existing artifacts.
- Apply the requested edit. Then check every other existing artifact against it - in ANY direction: an edit to a later artifact may require revising an earlier one, not only the other way around. Build order is a useful reading order, not a constraint on which artifacts may be revised.
- Note everything that is now inconsistent, missing, or contradictory.
- Revise only files that already exist (
existingOutputPaths). Do NOT create artifacts that don't exist yet, and do NOT invent new files under a glob artifact - note them and point the user to /openspec-continue-change to create them.
- If the change is already coherent, say so and make no edits.
Confirm and apply, one artifact at a time
Point to the next step (guidance only - NEVER act on it)
- Artifacts still missing -> suggest
/openspec-continue-change to create them.
- Change already implemented (tasks checked off / already applied) -> the code may no longer match the revised plan; suggest
/openspec-apply-change to carry the delta into code.
- Everything done and implemented -> suggest
/openspec-archive-change.
Output
After each invocation, show:
- Which artifacts were revised (and which proposed revisions were rejected)
- Anything deferred to
/openspec-continue-change (not-yet-created artifacts or files)
- Where the change stands and the recommended next command
Guardrails
- Planning artifacts only - NEVER edit implementation code. If the revised plan implies code changes, stop and point to
/openspec-apply-change.
- Use the artifact ids and paths reported by
openspec status; never branch on hardcoded artifact names.
- Edit only the concrete files in
existingOutputPaths; never write to a glob resolvedOutputPath.
- Do not advance the build frontier: no new artifacts, no new files under glob artifacts - that is
/openspec-continue-change's job.
- Confirm every edit with the user before writing.
- If the request changes the change's intent rather than refining it, first verify whether the optional
/openspec-new-change workflow is available. If it is, recommend starting fresh with /openspec-new-change (the "Update vs. Start Fresh" heuristic). If it is unavailable, ask for a distinct unused change name and recommend openspec new change "<new-change-name>" instead.
1---2name: openspec-update-change3description: Update an OpenSpec change by revising its existing planning artifacts and keeping them coherent with one another. Use when the user wants to revise a change's plan, fold new decisions into it, or reconcile its artifacts after an edit. Never edits code.4license: MIT5---67<!-- CORE-OVERLAY-START -->89## This repository (Asymmetric-al/core)1011These repo-owned sections sit above the official OpenSpec skill. Reconcile this12overlay after upstream refreshes before running `bun run skills:sync`.1314Use the locally pinned CLI only: `bun run openspec -- <command>`. Do not invoke15`@latest`. Core does not use Stores. Pass an explicit change ID before any16mutating OpenSpec operation. Follow `AGENTS.md` and `docs/ai/rules/openspec.md`.17Do not bypass TDD, exact `base-maia`, data-access boundaries, security, or18repository checks. Do not archive unmerged or incomplete work. Do not run19`openspec update` against the live customized repository. Do not treat product20runtime Eve as a coding agent.2122Allowed-tools metadata includes `Bash(bun:*)` so the local wrapper can run.2324### Triggers2526- The matching OpenSpec workflow is requested: Explore, Propose, Update, Apply,27 Verify, Sync, or Archive.28- Numbered commands `/1-start-project` through `/4-close-project` wrap these29 workflows.3031### Workflow32331. Read `openspec/config.yaml`, `openspec/project.md`, and the relevant specs34 or active change.352. Invoke `bun run openspec --` with the explicit change ID for mutating work.363. Keep Core TDD, UI, data-boundary, and Guardian rules in force.374. Leave the change active until implementation has merged.3839### Checklist4041- [ ] Local pinned CLI used via `bun run openspec --`42- [ ] Explicit change ID used for mutating operations43- [ ] Stores were not introduced44- [ ] Incomplete or unmerged work was not archived45- [ ] `openspec update` was not run against the live repo46- [ ] Product Eve was not treated as a coding agent4748<!-- CORE-OVERLAY-END -->4950Revise a change's existing planning artifacts and keep them coherent. Never edit code.5152**Store selection:** If the user names a store (a store is a standalone OpenSpec repo registered on this machine) or the work lives in one, run `openspec store list --json` to discover registered store ids, then pass `--store <id>` on the commands that read or write specs and changes (`new change`, `status`, `instructions`, `list`, `show`, `validate`, `archive`, `doctor`, `context`, `schemas`, `view`). Once selected, treat `--store <id>` as sticky for the rest of the workflow. Every unscoped example of those commands below is shorthand: before running it, append the flag. For example, run `openspec status --change "<name>" --json --store "<id>"`, not the unscoped form shown below. Other commands do not take the flag. Hints printed by commands already carry the flag; keep it on follow-ups. Without a store, commands act on the nearest local `openspec/` root.5354**Input**: Optionally specify a change name. If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.5556`/openspec-continue-change` is an optional workflow and may not be installed. Before suggesting it anywhere below, verify that it is available. If it is unavailable, `openspec status --change "<name>" --json` shows the next artifact and `openspec instructions "<artifact-id>" --change "<name>" --json` explains how to create it.5758**Steps**59601. **Select the change**6162 If a name is provided, use it. Otherwise:63 - Infer from conversation context if the user mentioned a change64 - Auto-select if only one active change exists65 - If ambiguous, run `openspec list --json` to get available changes sorted by most recently modified, and ask the user to select one6667 When prompting, present the top 3-4 most recently modified changes as options, showing:68 - Change name69 - Schema (from `schema` field if present, otherwise "spec-driven")70 - Status (e.g., "0/5 tasks", "complete", "no tasks")71 - How recently it was modified (from `lastModified` field)7273 Mark the most recently modified change as "(Recommended)" since it's likely what the user wants to update.7475 Always announce: "Using change: <name>" and how to override (e.g., `/openspec-update-change <other>`).76772. **Get the change's artifacts**7879 ```bash80 openspec status --change "<name>" --json81 ```8283 Parse the JSON to understand current state. The response includes:84 - `schemaName`: The workflow schema being used (e.g., "spec-driven")85 - `artifacts`: Array of artifacts with their status ("done", "skipped", "ready", "blocked")86 - `isPlanningComplete`: Boolean indicating if all planning artifacts are complete. Older CLI versions expose the same value as `isComplete`.87 - `planningHome`, `changeRoot`, `artifactPaths`, and `actionContext`: path and scope context. Use these instead of assuming repo-local paths.8889 The artifact ids and paths come from the active schema - do NOT assume them, and do NOT branch on hardcoded artifact names. Custom schemas must work unchanged.9091 The files to edit are `artifactPaths.<id>.existingOutputPaths` - the concrete files that exist on disk, already glob-expanded for glob artifacts (e.g. `specs/**/*.md`). Do NOT write to `resolvedOutputPath`: for a glob artifact it is still the glob pattern, not a real file.92933. **Understand the request**94 - If the user asked for a specific revision ("the design now uses X"), that is the starting edit.95 - If they only said "update" / "make this coherent", treat it as a coherence review: read the existing artifacts and check them against each other for contradictions, gaps, and duplication.96974. **Read and reconcile**98 - Read the artifact(s) the request touches and the change's other existing artifacts.99 - Apply the requested edit. Then check every other existing artifact against it - in ANY direction: an edit to a later artifact may require revising an earlier one, not only the other way around. Build order is a useful reading order, not a constraint on which artifacts may be revised.100 - Note everything that is now inconsistent, missing, or contradictory.101 - Revise only files that already exist (`existingOutputPaths`). Do NOT create artifacts that don't exist yet, and do NOT invent new files under a glob artifact - note them and point the user to `/openspec-continue-change` to create them.102 - If the change is already coherent, say so and make no edits.1031045. **Confirm and apply, one artifact at a time**105 - Show each proposed revision and why. Write only after the user confirms.106 - If the user rejects a revision, do not write it - leave that artifact unchanged.107 - When a substantial rewrite is needed, get that artifact's rules and template first:108 ```bash109 openspec instructions "<artifact-id>" --change "<name>" --json110 ```1111126. **Point to the next step (guidance only - NEVER act on it)**113 - Artifacts still missing -> suggest `/openspec-continue-change` to create them.114 - Change already implemented (tasks checked off / already applied) -> the code may no longer match the revised plan; suggest `/openspec-apply-change` to carry the delta into code.115 - Everything done and implemented -> suggest `/openspec-archive-change`.116117**Output**118119After each invocation, show:120121- Which artifacts were revised (and which proposed revisions were rejected)122- Anything deferred to `/openspec-continue-change` (not-yet-created artifacts or files)123- Where the change stands and the recommended next command124125**Guardrails**126127- Planning artifacts only - NEVER edit implementation code. If the revised plan implies code changes, stop and point to `/openspec-apply-change`.128- Use the artifact ids and paths reported by `openspec status`; never branch on hardcoded artifact names.129- Edit only the concrete files in `existingOutputPaths`; never write to a glob `resolvedOutputPath`.130- Do not advance the build frontier: no new artifacts, no new files under glob artifacts - that is `/openspec-continue-change`'s job.131- Confirm every edit with the user before writing.132- If the request changes the change's _intent_ rather than refining it, first verify whether the optional `/openspec-new-change` workflow is available. If it is, recommend starting fresh with `/openspec-new-change` (the "Update vs. Start Fresh" heuristic). If it is unavailable, ask for a distinct unused change name and recommend `openspec new change "<new-change-name>"` instead.