Repository navigation
Releases: Fission-AI/OpenSpec
Release list
v1.14.3 - Linked specs, safer globs
What's New in v1.14.3
This release accepts spec files linked from elsewhere in your project, removes a dependency that kept failing security audits, and fixes a validate hang in pre-commit hooks.
Improved
- No more
bracesaudit warning - Installing OpenSpec no longer pulls in the unpatchedbracespackage, sonpm auditin your project stops reporting GHSA-vfj7-8cjw-p6xm through OpenSpec. - Glob artifacts stay inside the change - The propose, ff, continue and explore workflows now choose and check a glob artifact's file path before anything writes it, including a skill or command the schema delegates creation to. A path that would leave the change directory, directly or through a symlink, is refused.
Fixed
- Linked spec files - A capability's
spec.mdcan be a symlink to a file elsewhere in the project, such as beside the product docs it belongs to.list --specs,show,validateandarchiveaccept it; a link that resolves outside the project is still refused. validate --allhanging in hooks - On a terminal that reports zero columns, as some pre-commit runners provide, the spinner no longer loops forever writing cursor escapes.OPEN_SPEC_INTERACTIVE=0andCInow turn the spinner off too.- Very wide brace patterns - A
generatespattern whose braces expand to more than 1,024 paths is rejected with a clear error instead of runningopenspec statusout of memory.
New Contributors
- @CRYPTONIKAV made their first contribution in #2104
- @surlymochan made their first contribution in #2103
Full Changelog: v1.14.2...v1.14.3
v1.14.2 - Extension metadata, faster completion
What's New in v1.14.2
This release lets you keep your own metadata on a change, makes Tab completion faster, and closes gaps where archive and verify could lose or miss content.
New
- Extension keys in
.openspec.yaml- Top-level keys starting with a lowercasex-(for examplex-goal: G-12orx-jiraKey) are yours for tracker ids, owners, or other tool data. OpenSpec ignores them, soopenspec validate --strictpasses on a change that carries them. Any other unrecognized key is still reported.
Improved
- Faster Tab completion - Shell completion now loads 48 modules instead of 344 when completing changes or specs, and no longer records usage, so a Tab press never waits on telemetry.
- Warnings for text archive drops -
openspec validateandopenspec archivenow warn when a delta spec holds text that archive does not carry into the main spec, such as an extra##section or prose before the first requirement. Like other warnings, these failopenspec validate --strict. - Verify checks removed requirements properly -
/opsx:verifyreads a REMOVED requirement's original text from the main spec before searching the code, and reports the entry as not verified when that text cannot be recovered, instead of passing it.
Fixed
- Archive with symlinked directories -
openspec archiveacceptsopenspec/,openspec/changes, oropenspec/specsas a symlink, for example to a shared docs repository. - Explore with custom schemas - Explore no longer offers to create default-schema files such as
design.mdunder a schema that does not define them. - Update with glob artifacts - The update workflow no longer refuses to create a new file under a partly written glob artifact.
- Deeply nested brace patterns - An artifact
generatesorapply.trackspattern nesting braces more than 16 levels deep is rejected with a clear error instead of risking a crash.
New Contributors
- @gliptak made their first contribution in #981
- @myspec-dev1 made their first contribution in #2035
- @Khunjua made their first contribution in #2081
- @PiPlusTheta made their first contribution in #2094
- @gkinter made their first contribution in #2063
Full Changelog: v1.14.1...v1.14.2
v1.14.1 - Faster startup, cleaner view
What's New in v1.14.1
This release starts the CLI faster, keeps archived changes off the openspec view dashboard, and makes spec writing, verify, and archive more reliable.
Improved
- Faster startup - Each command loads only the code it needs, so
openspec --versionand--helpload 24 modules instead of 485. The difference is largest on Windows. - Spec writing - Agents write each capability's spec file as soon as it is drafted instead of planning every file first, so long runs show progress and an interrupted run keeps the files it wrote.
/opsx:continuewrites any specs still missing before moving on. - Strict requirement length - A requirement over 500 characters is now a warning, so
openspec validate --strictfails on it, including new requirements in a change.
Fixed
openspec view- The dashboard no longer lists or counts archived changes.openspec list --archivedstill shows them.- Verify with custom schemas -
/opsx:verifyfinds spec and design artifacts by their output path, so it works when a schema names those artifacts differently. - Apply completion - When every tracked task is checked, apply says the tasks are complete and asks you to review before archiving, instead of calling the change ready to archive.
- Archive cleanup errors - When cleanup after a capability retirement fails, the error says the change was archived, and
--jsonreportsarchive_retirement_cleanup_failed.
New Contributors
- @drakeo338 made their first contribution in #2028
- @vyhuholl made their first contribution in #2037
Full Changelog: v1.14.0...v1.14.1
v1.14.0 - Ten new tools, archived changes
What's New in v1.14.0
This release adds ten new tools, lets you browse archived changes, and makes apply, archive, and store-backed changes more reliable.
New
- Ten new tools -
openspec initandopenspec updatenow support Amp (amp), AtomCode (atomcode), Code Studio (codestudio), DeepSeek Harness (dsh), EasyCode (easycode), GigaCode (gigacode), Grok Build (grok), GSD (gsd), Veai (veai), and Warp (warp). - Archived changes -
openspec list --archivedand--alllist archived changes, with JSON output and sorting, andopenspec viewshows them in their own section. - Workflow status in
openspec view- The dashboard shows each active change's schema and which artifacts are done, ready, blocked, or skipped. openspec version- Shows the installed version and install type. Add--checkand--jsonfor structured update information that tools can read.- Nix overlay - The flake exposes OpenSpec through
overlays.default, so other flakes can consume it.
Improved
- Unrecognized change metadata -
status,validate, andarchivenow name keys in.openspec.yamlthat OpenSpec ignores, such asskip_design, instead of dropping them silently.validate --strictfails on them. show --json- Requirements and scenarios now include theirname, so JSON readers can cite a requirement without parsing the markdown.- Agent guidance - Proposals are steered toward durable, behavior-based capability names. Specs guidance explains the 500-character requirement hint without splitting existing requirements. Agents keep project documentation out of
config.yamlcontext. project.mdmigration -openspec initguides an AI-assisted move from a legacyproject.mdtoconfig.yaml.- Malformed rules - When a
rules:list item is not a string, the warning names the item, what YAML parsed it as, and how to quote it. - Legacy cleanup warning - Cleanup now says the listed files are deleted entirely and asks you to back up custom content first.
- IBM Bob - Bob appears by its full product name. Existing
bobselections and paths keep working.
Fixed
- Store-backed apply - For a change stored in a store,
openspec status --jsonnow allows edits in the project that declares the store, so apply no longer stops before the first task. - Apply task updates -
openspec instructions apply --jsongives each task itssourcePathandline, and apply checks that exact checkbox before marking it done. - Archive after a failed sync - Archive and bulk archive stop when the spec sync reports a blocking condition, instead of archiving the change with the main specs unchanged.
- Archive without the sync skill - The archive skill merges delta specs itself when the sync skill is not installed, instead of pointing the agent at a skill that does not exist.
- Store-only repositories -
openspec initat the root of a store-only repository installs integrations without changing its store config or creating local planning folders. - zsh uninstall -
openspec completion uninstall zshrestores.zshrcexactly, including blank lines at the top of the file. openspec viewalignment - Progress bars stay aligned for change names up to 48 characters.
New Contributors
- @Ajithkumar08 made their first contribution in #1759
- @Yi-111-a made their first contribution in #1987
- @nhconganhmedia made their first contribution in #1974
- @flcrom made their first contribution in #1969
- @caseyg made their first contribution in #1722
- @fresh-fx59 made their first contribution in #1961
- @jeanduplessis made their first contribution in #420
- @Columpio made their first contribution in #848
- @Million-mo made their first contribution in #807
- @DarkskyX15 made their first contribution in #1672
- @hu-qi made their first contribution in #1211
- @MS8AT made their first contribution in #1937
- @ZEDce made their first contribution in #399
- @jmuchovej made their first contribution in #1439
- @Storm-Chaser made their first contribution in #1082
- @redknox made their first contribution in #1352
- @Code-Studio-Team made their first contribution in #883
- @0x6d6e647a made their first contribution in #1349
- @huiq777 made their first contribution in #2016
Full Changelog: v1.13.2...v1.14.0
v1.13.2 - Verify and Windows archive fixes
What's New in v1.13.2
This release makes /opsx:verify report what it actually checked, makes archive reliable on Windows, and fixes workflow guidance across several tools.
Improved
- Task guidance - Each task group now includes its own tests and documentation updates instead of deferring them to a final group, and onboarding teaches the same rule.
- Approval prompts - Fast-forward asks for clarification only when context is critically unclear, and onboarding asks you to approve the task breakdown before saving it.
- Scenario-loss messages - When
openspec validateoropenspec archiveflags aMODIFIEDblock that drops scenarios, it now also says what the block adds. - Codex setup hint - The setup hint is clearer for Codex CLI, IDE, and desktop app users.
Fixed
- Verify -
/opsx:verifyno longer reports skipped checks as passing, and no longer tells agents to re-implement a requirement the change removed. Removed requirements pass once the behavior is gone, and renamed requirements are checked against their original behavior. - Archive on Windows - Archive no longer leaves
.openspec-archive.lockbehind, and it finishes instead of rolling back when Windows blocks renaming a change directory. - Line endings - Rewriting a CRLF spec,
.bashrc,.zshrc, orCLAUDE.mdkeeps its existing line endings, so Windows users no longer get whole-file diffs. - Archive task warnings - Agent-driven archive uses schema-aware task progress, so custom task files and globs still trigger incomplete-task warnings.
- Artifact outputs - Artifact output patterns with brace expansion or extglob now resolve, while literal filenames still work.
/opsx:update- Update can now fill a missing file under a glob artifact that is already partly written, instead of pointing you to a step that could not do it.- Workflow schema labels - Workflows no longer display a schema name that
openspec list --jsondoes not return. - Kilo Code - Commands are generated in
.kilo/command/, where Kilo Code reads them.openspec initand legacy cleanup remove the files OpenSpec generated in.kilocode/workflows/, matched by their known file names (including copies you edited), and leave other files in place. - Continue - Continue commands no longer lead local models to call a tool named after the active workflow.
- Validation -
validate --strictno longer treats a Spanish or Portuguese Purpose starting with "Todo" as a placeholder. - Codex update -
openspec update --forcenow exits non-zero when it cannot replace a legacy-only Codex install.
New Contributors
- @xiazl1993 made their first contribution in #1146
- @kikeprzn made their first contribution in #1769
- @VeryComplexAndLongName made their first contribution in #1934
- @philo-x made their first contribution in #1885
- @guillaume-flambard made their first contribution in #1845
- @Tyagiquamar made their first contribution in #1912
- @runsonmypc made their first contribution in #1733
- @kevin9327 made their first contribution in #1926
Full Changelog: v1.13.1...v1.13.2
v1.13.1 - Hardened CLI, safer archives
What's New in v1.13.1
This release makes OpenSpec safer to run in repositories you have not reviewed yet, and makes archive, validation, and the agent workflows more predictable.
Improved
- Security hardening - OpenSpec is safer in a freshly cloned repository. A
config.yamlvalue can no longer inject directives into agent instructions, crafted files can no longer hangopenspec updateoropenspec archive, and a repository's.npmrccan no longer redirect the update check. - Next step in
openspec status- Status now ends with aNext:line naming the exact command that moves the change forward, so resuming a change no longer means knowing the workflow by heart. - Profile-aware skills - Generated skills and commands name only the workflows your profile installs, and they match natural phrasing such as "openspec propose" or "do an openspec apply".
- Project check - Workflows confirm the project has run
openspec initbefore writing anything, and never create anopenspec/folder as a side effect. - Explore and update workflows - Explore names
/opsx:proposeand/opsx:applyat every handoff and treats your explicit request to capture a change as confirmation./opsx:updatedrafts its revisions first and writes only after you confirm. - Artifact templates - Generated proposal, spec, design, and tasks files open with a top-level heading, so markdownlint no longer flags every artifact.
- Tool picker - The vendor-neutral target is listed as "Other / Universal" and can be found by searching for terms like
universal,generic, orcustom. - Nix - The flake package now ships bash, zsh, and fish completions.
Fixed
- Archive - Archive refuses a requirement name that differs from an existing one only in case, a
RENAMEDsection whoseFROM:andTO:lines do not pair up, and a delta file it would never read. Bulk archive checks every target before writing any spec, and agent-driven archive and sync create the main spec for a new capability. - Validation -
openspec validatereports requirements written outside a delta section, rejects a scenario with no body, warns when tracked tasks have no checkboxes, and checks a schema'sapply.requiresagainst its artifacts. - Task progress - Tasks under
+,1., and1)list markers now count, and an unrecognized marker such as[~]counts as unfinished, so✓ Completeno longer hides open work. - Spec parsing - Requirement headings with a closing
###sequence resolve correctly, andopenspec show --json --deltas-onlyreports exactly the deltas archive applies. - Changes and lists - A change nested inside a namespace folder is reported instead of silently misread, and one dangling symlink no longer breaks
openspec list. - Stores -
openspec store removeno longer deletes a store nested inside the one being removed, a store namedspecsorchangesno longer becomes the planning root, andstore setup --no-init-gitworks inside an existing Git repository. - Configuration - A global config file with a syntax error is left untouched instead of being overwritten,
openspec config editsupports anEDITORwith arguments such ascode --wait, andDO_NOT_TRACK=truenow disables telemetry. - Setup and completions - Legacy cleanup keeps your own files in old command folders, and uninstalling bash completions restores
.bashrcbyte for byte.
New Contributors
Full Changelog: v1.13.0...v1.13.1
v1.13.0 - Apply warnings, safer archives
What's New in v1.13.0
Archive and the delta parser stop quietly changing or dropping what you wrote, and apply now tells you when a change has no specs.
New
- Apply flags a change with no delta specs -
openspec instructions applyused to report a change as ready whenever its tasks existed, even with no spec deltas at all, which is the stateopenspec validaterejects. It now warns in both text and--json, and names both ways out: write the specs, or declareskip_specs: true.
Improved
- Explore finds your existing specs - Generated guidance never named
openspec list --specs, so an agent asked to read the current specs enumerated in-flight changes instead and reported the step done against the wrong thing. Explore now lists the spec inventory beside the change list, and reads a capability with the store-aware command. - Init and update name the workflows your profile left out - A
/opsx:command that was never installed used to read as a broken setup. Both commands now say which workflows are missing and how to add them. - Propose reads project context before planning - Context is loaded from the selected project or store root before any planning decision. In a directory with no OpenSpec root, propose stops without writing and offers to initialize rather than creating one silently.
Fixed
- Archive no longer edits your fenced code - A requirement documenting a sample with two or more blank lines in a row had that sample rewritten on every archive. Blank-line tidying is now fence-aware, which matters for YAML, Python, and expected-output fixtures.
- Removals and renames written with
*or+now take effect - CommonMark allows all three bullet markers, but only-was read. A removal or rename written the other way matched nothing: validate passed, archive exited 0 reporting success, and the requirement stayed exactly as it was. - Every delta section applies, not just one copy - A file with two
## ADDED Requirementssections silently kept one of them, so archive applied less than was written and moved the change to the archive anyway. You do not have to repeat a header deliberately to hit this: a delta documenting OpenSpec's own syntax inside a fenced example produces the duplicate on its own. - Capabilities whose bullets wrap can be retired again -
retire_capabilitiesrefused any spec whose scenario bullets ran onto a second line, which is most of them in a repo that wraps prose at a column limit. Specs bulleted with+are covered too. - Update repairs damaged command files -
openspec updatedecided a tool was current from its skill files alone, so a hand-edited or truncated command file left it printing "All 1 tool(s) up to date" and repairing nothing. It now compares command-file content as well.
New Contributors
- @dwin-gharibi made their first contribution in #1800
Full Changelog: v1.12.0...v1.13.0
v1.12.0 - Findings Reports, SourceCraft
What's New in v1.12.0
OpenSpec v1.12.0 adds focused validation reports and SourceCraft support, while making planning, initialization, installation, and documentation more reliable.
New
- Findings-only validation reports - Use
openspec validate --report findingswith explicit bulk scopes to show only errors, warnings, and informational findings while preserving full-run totals and exit codes. - SourceCraft Code Assistant support - Generate OpenSpec project skills and commands for the SourceCraft VS Code extension.
Improved
- Code-grounded planning - Propose and fast-forward workflows now inspect relevant code, tests, and documentation before drafting artifacts.
- Focused exploration - Explore mode asks dependency-aware questions, recommends defaults, and checks the repository before asking users for facts already present in the codebase.
- Initialization reliability - Empty OpenSpec directories remain tracked in Git, and rerunning init safely restores missing markers.
- Consistent restart guidance - Init and update now share accurate IDE restart hints, including when workflows are removed.
- Documentation - Expanded archive, PowerShell completion, community showcase, spec behavior, analytics routing, and store-link guidance.
Fixed
- Delta validation - Merge conflicts appear as informational findings without changing exit codes, filesystem read errors remain distinct from missing specs, and advisory preflight failures preserve the validation report.
- Git installations - npm Git installs prepare correctly without requiring pnpm on the user's machine.
- Node.js 20 compatibility - Chalk remains on a Node.js 20-compatible version.
- Dependency security - Patched
fast-uriadvisories and refreshed website dependencies.
New Contributors
- @jasonsawthis made their first contribution in #1757
- @aleksandr4842 made their first contribution in #1171
- @pformoso-deus-ai made their first contribution in #792
- @DanRioDev made their first contribution in #1017
- @aron-intframe made their first contribution in #1725
- @Br1an67 made their first contribution in #786
Full Changelog: v1.11.0...v1.12.0
v1.11.0 - Spec Diffs & Batch Status
What's New in v1.11.0
This release makes it easier to see exactly what a change proposes, check your whole workspace at a glance, and trust that your specs and skills land right where you expect.
New
openspec show <change> --diff- See precisely what a change alters. Because a MODIFIED requirement has to restate every scenario it keeps, the delta you review is mostly text identical to the main spec.--diffisolates the lines that actually change, as a colorized unified diff per requirement, with full text for ADDED, the authored Reason and Migration notes for REMOVED, and clear FROM/TO for RENAMED.--json --diffbrings the same detail to your pipelines, and--store <id>diffs against that store.openspec status --all- Check every active change in one command instead of one process per change. The JSON envelope is sorted and stable, and a change that fails to load contributes a diagnostic in place rather than stopping the sweep, so dashboards and CI always get the full picture.
Improved
- Explore mode asks before it writes - Explore now names the artifacts or files it proposes to create or edit and waits for a clear yes in a separate message before touching anything. Answering its own clarifying questions no longer reads as consent. Read-only exploration stays friction-free.
- Explore diagrams render consistently everywhere - Worked examples use plain ASCII, so boxes and tables keep their alignment across terminals, fonts, and locales.
- Fish completions stay on topic - Commands, subcommands, flags, and positionals no longer fall back to filesystem suggestions, while genuine path arguments still complete paths.
- Antigravity uses the shared
.agents/root - Skills and workflows land where Antigravity looks for them and coexist cleanly with other tools sharing that tree. An existing.agent/install migrates automatically, and anything you customized is preserved and pointed out rather than overwritten. openspec validatecatches an unwritten Purpose - A capability still carrying the placeholder that archive writes is now reported, so specs get a real Purpose instead of quietly keeping a to-do. It stays a warning by default and only fails under--strict.
Fixed
- Archive keeps requirement order on rename - A renamed requirement stays in its original position instead of moving to the end of the spec, keeping archive diffs small and easy to read.
schema init --defaultsets the default - The command now writes theschemakey the config loader actually reads, so a new schema takes effect right away. It also validates and stages config changes before installing, and rolls back cleanly if anything fails.
New Contributors
A warm welcome to six people who made their first contribution to OpenSpec in this release. Thank you.
- @m-tanner made their first contribution in #1301
- @bsmedberg-xometry made their first contribution in #980
- @leo-ar made their first contribution in #1199
- @Dansyuqri made their first contribution in #1010
- @kitimark made their first contribution in #1671
- @aymanxdev made their first contribution in #1716
Full Changelog: v1.10.0...v1.11.0
v1.10.0 - Zed support, quieter installs
What's New in v1.10.0
Zed joins the supported tools, init speaks your language, and installing OpenSpec no longer trips npm's alarm.
New
- Zed Agent -
openspec init --tools zedinstalls the workflow skills into.agents/skills/, where Zed's built-in Agent finds them. Skills-only, so they're invoked as/openspec-propose. Requires Zed v1.4.2 or newer. - Non-English artifacts -
openspec init --language <language>sets the language for generated artifacts without hand-editingconfig.yaml. OpenSpec headings andSHALL/MUSTstay in English, so your specs still validate.
Improved
- Installing - the published package now declares no install scripts at all, so
npm install -g @fission-ai/openspecno longer emits theallow-scriptswarning that read like a packaging fault (and whose suggested fix,npm approve-scripts, never worked for a global install anyway). The shell-completions tip now comes from the CLI itself: once, on stderr, and only when there's a human there to read it. - Task plans - generated tasks now have to say how you'd know they're done, whether that's a test, a command, an observable result, or a delivered artifact. "Implement the thing" no longer passes for a plan.
- Prompts - the multi-select picker now shows the full key help from the prompt library, so navigation, select-all and invert are discoverable instead of folklore.
Fixed
- Feedback -
openspec feedbackused your entire report as the issue title and left the body with nothing but metadata. Reports now keep their text, and titles stay a readable length. - Archive - retiring a capability could dead-end on
Spec must have at least one requirementwith no guidance at all, when the spec also held content the merge couldn't account for. The abort now names exactly what's in the way. - Stores - the
specsinstruction read main specs from a path relative to your working directory. Under a store that missed the spec entirely, or, worse, quietly returned a different capability that happened to share the name. - Profiles - a custom profile could select archive without sync, leaving the archive workflow calling a workflow that was never installed.
- OpenCode -
/opsx-propose add-authdroppedadd-authbefore the workflow ever saw it. - Schemas with no specs artifact - changes created under one failed validation immediately, demanding a delta that schema could never produce.
- Output hygiene - the first-run telemetry notice went to stdout, so
openspec spec show auth > auth.mdwrote the notice into the file ahead of the spec. It goes to stderr now. openspec update- stopped advising Claude Code, Codex and other CLI tools to restart an IDE they don't have.
New Contributors
- @ryandemelo made their first contribution in #1666
Full Changelog: v1.9.0...v1.10.0