Skip to content

Releases: Fission-AI/OpenSpec

v1.14.3 - Linked specs, safer globs

Choose a tag to compare

@openspec-release-bot openspec-release-bot released this 17 Oct 01:52
c794978

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 braces audit warning - Installing OpenSpec no longer pulls in the unpatched braces package, so npm audit in 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.md can be a symlink to a file elsewhere in the project, such as beside the product docs it belongs to. list --specs, show, validate and archive accept it; a link that resolves outside the project is still refused.
  • validate --all hanging 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=0 and CI now turn the spinner off too.
  • Very wide brace patterns - A generates pattern whose braces expand to more than 1,024 paths is rejected with a clear error instead of running openspec status out of memory.

New Contributors

Full Changelog: v1.14.2...v1.14.3

v1.14.2 - Extension metadata, faster completion

Choose a tag to compare

@openspec-release-bot openspec-release-bot released this 15 Oct 00:15
f80d860

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 lowercase x- (for example x-goal: G-12 or x-jiraKey) are yours for tracker ids, owners, or other tool data. OpenSpec ignores them, so openspec validate --strict passes 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 validate and openspec archive now 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 fail openspec validate --strict.
  • Verify checks removed requirements properly - /opsx:verify reads 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 archive accepts openspec/, openspec/changes, or openspec/specs as 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.md under 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 generates or apply.tracks pattern nesting braces more than 16 levels deep is rejected with a clear error instead of risking a crash.

New Contributors

Full Changelog: v1.14.1...v1.14.2

v1.14.1 - Faster startup, cleaner view

Choose a tag to compare

@clay-good clay-good released this 06 Oct 00:38
87c3595

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 --version and --help load 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:continue writes any specs still missing before moving on.
  • Strict requirement length - A requirement over 500 characters is now a warning, so openspec validate --strict fails on it, including new requirements in a change.

Fixed

  • openspec view - The dashboard no longer lists or counts archived changes. openspec list --archived still shows them.
  • Verify with custom schemas - /opsx:verify finds 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 --json reports archive_retirement_cleanup_failed.

New Contributors

Full Changelog: v1.14.0...v1.14.1

v1.14.0 - Ten new tools, archived changes

Choose a tag to compare

@openspec-release-bot openspec-release-bot released this 30 Sep 22:52
94ca9c1

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 init and openspec update now 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 --archived and --all list archived changes, with JSON output and sorting, and openspec view shows 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 --check and --json for 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, and archive now name keys in .openspec.yaml that OpenSpec ignores, such as skip_design, instead of dropping them silently. validate --strict fails on them.
  • show --json - Requirements and scenarios now include their name, 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.yaml context.
  • project.md migration - openspec init guides an AI-assisted move from a legacy project.md to config.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 bob selections and paths keep working.

Fixed

  • Store-backed apply - For a change stored in a store, openspec status --json now allows edits in the project that declares the store, so apply no longer stops before the first task.
  • Apply task updates - openspec instructions apply --json gives each task its sourcePath and line, 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 init at the root of a store-only repository installs integrations without changing its store config or creating local planning folders.
  • zsh uninstall - openspec completion uninstall zsh restores .zshrc exactly, including blank lines at the top of the file.
  • openspec view alignment - Progress bars stay aligned for change names up to 48 characters.

New Contributors

Full Changelog: v1.13.2...v1.14.0

v1.13.2 - Verify and Windows archive fixes

Choose a tag to compare

@openspec-release-bot openspec-release-bot released this 23 Sep 21:44
db23097

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 validate or openspec archive flags a MODIFIED block 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:verify no 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.lock behind, and it finishes instead of rolling back when Windows blocks renaming a change directory.
  • Line endings - Rewriting a CRLF spec, .bashrc, .zshrc, or CLAUDE.md keeps 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 --json does not return.
  • Kilo Code - Commands are generated in .kilo/command/, where Kilo Code reads them. openspec init and 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 --strict no longer treats a Spanish or Portuguese Purpose starting with "Todo" as a placeholder.
  • Codex update - openspec update --force now exits non-zero when it cannot replace a legacy-only Codex install.

New Contributors

Full Changelog: v1.13.1...v1.13.2

v1.13.1 - Hardened CLI, safer archives

Choose a tag to compare

@openspec-release-bot openspec-release-bot released this 17 Sep 01:11
634c557

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.yaml value can no longer inject directives into agent instructions, crafted files can no longer hang openspec update or openspec archive, and a repository's .npmrc can no longer redirect the update check.
  • Next step in openspec status - Status now ends with a Next: 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 init before writing anything, and never create an openspec/ folder as a side effect.
  • Explore and update workflows - Explore names /opsx:propose and /opsx:apply at every handoff and treats your explicit request to capture a change as confirmation. /opsx:update drafts 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, or custom.
  • 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 RENAMED section whose FROM: and TO: 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 validate reports requirements written outside a delta section, rejects a scenario with no body, warns when tracked tasks have no checkboxes, and checks a schema's apply.requires against its artifacts.
  • Task progress - Tasks under +, 1., and 1) list markers now count, and an unrecognized marker such as [~] counts as unfinished, so ✓ Complete no longer hides open work.
  • Spec parsing - Requirement headings with a closing ### sequence resolve correctly, and openspec show --json --deltas-only reports 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 remove no longer deletes a store nested inside the one being removed, a store named specs or changes no longer becomes the planning root, and store setup --no-init-git works inside an existing Git repository.
  • Configuration - A global config file with a syntax error is left untouched instead of being overwritten, openspec config edit supports an EDITOR with arguments such as code --wait, and DO_NOT_TRACK=true now disables telemetry.
  • Setup and completions - Legacy cleanup keeps your own files in old command folders, and uninstalling bash completions restores .bashrc byte for byte.

New Contributors

Full Changelog: v1.13.0...v1.13.1

v1.13.0 - Apply warnings, safer archives

Choose a tag to compare

@clay-good clay-good released this 09 Sep 21:10
9d4e597

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 apply used to report a change as ready whenever its tasks existed, even with no spec deltas at all, which is the state openspec validate rejects. It now warns in both text and --json, and names both ways out: write the specs, or declare skip_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 Requirements sections 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_capabilities refused 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 update decided 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

Full Changelog: v1.12.0...v1.13.0

v1.12.0 - Findings Reports, SourceCraft

Choose a tag to compare

@openspec-release-bot openspec-release-bot released this 03 Sep 00:09
e062b95

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 findings with 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-uri advisories and refreshed website dependencies.

New Contributors

Full Changelog: v1.11.0...v1.12.0

v1.11.0 - Spec Diffs & Batch Status

Choose a tag to compare

@clay-good clay-good released this 26 Aug 21:40
a0ddb60

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. --diff isolates 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 --diff brings 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 validate catches 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 --default sets the default - The command now writes the schema key 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.

Full Changelog: v1.10.0...v1.11.0

v1.10.0 - Zed support, quieter installs

Choose a tag to compare

@clay-good clay-good released this 19 Aug 22:33
1ebddd1

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 zed installs 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-editing config.yaml. OpenSpec headings and SHALL/MUST stay 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/openspec no longer emits the allow-scripts warning 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 feedback used 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 requirement with 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 specs instruction 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-auth dropped add-auth before 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.md wrote 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

Full Changelog: v1.9.0...v1.10.0