OpenSpec is an AI-native command-line tool for spec-driven development. It gives your AI coding assistant a structured, reviewable workflow: instead of letting the agent improvise a large change in one shot, you have it write a short proposal, capture the intended behavior as specs, optionally record a technical design, break the work into a tasks checklist, implement against that plan, and finally archive the change so your living specifications stay in sync with the code that actually shipped.
Everything OpenSpec manages is plain Markdown in an openspec/ directory inside your project. There is no database, no server, and no account. The CLI scaffolds files, validates them, tracks progress, and installs ready-made workflow instructions ("skills" and slash commands) for more than two dozen AI coding tools — Claude Code, Cursor, Windsurf, Codex, GitHub Copilot, Gemini CLI, and many others.
Note
OpenSpec is published on npm as
@fission-ai/openspecand exposes a single executable:openspec. It requires Node.js 20.19.0 or newer.
Table of Contents
- Quick Start
- Installation
- Core Concepts
- The Change Workflow
- Everyday Commands
- Working With Your AI Assistant
- Validating Changes and Specs
- Customizing Workflows With Schemas
- Coordinating Across Repos (Beta)
- Shell Completions
- Configuration & Privacy
- Common Workflows (Recipes)
- Troubleshooting
- FAQ
- Command Reference
1. Quick Start
Get OpenSpec running in an existing project in under two minutes.
# 1. Run the initializer from your project root
npx @fission-ai/openspec@latest init
# 2. Pick your AI tools when prompted (e.g. Claude Code, Cursor)
# OpenSpec creates openspec/ and installs workflow skills/commands.
# 3. Ask your AI assistant to propose a change, e.g. in Claude Code:
# "Use OpenSpec to propose adding password reset to user auth."
# 4. Inspect what the agent scaffolded
openspec list # active change proposals
openspec status --change add-password-reset
# 5. After the work is implemented and merged, archive it
openspec archive add-password-reset
Created change 'add-password-reset' at openspec/changes/add-password-reset/
Schema: spec-driven
Tip
You don't drive the proposal/spec writing by hand — that's the AI assistant's job. OpenSpec's CLI exists to scaffold, validate, show status, and archive. The agent reads OpenSpec's installed instructions and fills in the Markdown.
2. Installation
Requirements
| Requirement | Detail |
|---|---|
| Node.js | >= 20.19.0 |
| Package manager | npm, pnpm, or yarn (any can run npx/global install) |
| OS | macOS, Linux, Windows (all first-class) |
Important
A post-install script runs automatically when the package is installed (
scripts/postinstall.js). This is expected behavior and prints setup hints; it does not phone home with project data.
Install methods
Run without installing (npx)
Best for trying OpenSpec or for CI:
npx @fission-ai/openspec@latest init
Global install (npm)
Best for daily use, gives you the openspec command everywhere:
npm install -g @fission-ai/openspec
openspec --version
Global install (pnpm)
pnpm add -g @fission-ai/openspec
openspec --version
Verify the install:
openspec --version
1.4.1
Initialize a project
Run init from the root of the project you want to manage:
openspec init
In interactive mode you'll see an animated welcome screen and a searchable multi-select of supported AI tools. OpenSpec pre-selects tools it detects (for example, if a .cursor/ or .claude/ directory already exists) and lets you add more. It then:
- Creates
openspec/withspecs/,changes/, andchanges/archive/subdirectories. - Writes a project config (
openspec/config.yaml). - Generates workflow skills and slash commands into each selected tool's directory (e.g.
.claude/,.cursor/).
To run non-interactively (CI, scripts, or when you already know your tools), pass --tools:
# Set up Claude Code and Cursor without prompts
openspec init --tools claude,cursor
# Set up every supported tool
openspec init --tools all
# Create the openspec/ structure but skip tool integration
openspec init --tools none
Note
Running
initagain on a project that already hasopenspec/runs in extend mode: it preserves your existing specs and changes, ensures the directory structure is present, and refreshes tool integrations. It also detects and offers to clean up legacy files from older OpenSpec versions (use--forceto clean up without prompting).
3. Core Concepts
OpenSpec is built on a small number of ideas. Understanding them makes every command obvious.
Specs
: Markdown files under openspec/specs/<capability>/spec.md that describe what the system does today — the current, deployed behavior. Specs are the living source of truth. They are written with normative language (SHALL/MUST) and concrete scenarios.
Changes
: Proposals for what should change, each living in its own directory under openspec/changes/<change-name>/. A change bundles a proposal, future-state spec deltas, an optional design doc, and a task checklist. Changes are proposed, reviewed, implemented, then archived.
Capabilities
: The unit of organization for specs. Each capability is a single, focused responsibility named with a verb-noun pattern (user-auth, payment-capture, data-export). If you need the word "AND" to describe one, split it.
Artifacts
: The individual documents that make up a change. In the default spec-driven workflow the artifacts are, in dependency order: proposal → specs → design → tasks. Each artifact has a template and instructions that your AI assistant follows.
Schema
: A named workflow definition (a schema.yaml) that lists which artifacts a change needs and how they depend on each other. The built-in default is spec-driven. You can fork it or author your own.
Skills & slash commands
: The instruction files OpenSpec installs into your AI tool. Skills (e.g. openspec-propose, openspec-apply-change) and /opsx-* slash commands tell the agent exactly how to drive the OpenSpec workflow.
Here is the directory layout init creates and your AI fills in:
openspec/
├── config.yaml # Project config (default schema, etc.)
├── specs/ # Current truth — what IS built
│ └── user-auth/
│ └── spec.md
└── changes/ # Proposals — what we're CHANGING
├── add-password-reset/
│ ├── proposal.md # Why + what + impact
│ ├── design.md # Technical decisions (optional)
│ ├── tasks.md # Implementation checklist
│ └── specs/ # Future-state spec deltas
│ └── user-auth/
│ └── spec.md
└── archive/ # Completed, dated changes
└── 2026-06-01-add-login/
Tip
A clean mental model: specs answer "what and why," code answers "how," and changes are the reviewable bridge between them.
4. The Change Workflow
The heart of OpenSpec is the lifecycle a change moves through. You usually trigger each step by asking your AI assistant, and use the CLI to inspect and finalize.
Propose ──► Review ──► Implement ──► Archive
(scaffold) (you read) (agent codes) (specs sync)
proposal.md ─► specs/ ─► design.md ─► tasks.md ─► (code) ─► archive
Step 1 — Propose
Ask your assistant to create a change. Under the hood it runs openspec new change <name> (or uses the openspec-new-change skill) to scaffold the directory, then writes proposal.md. The proposal states Why the change is needed, What Changes, which Capabilities are affected, and the Impact.
# What the agent runs (you can run it too):
openspec new change add-password-reset --description "Let users reset a forgotten password"
Created change 'add-password-reset' at openspec/changes/add-password-reset/
Schema: spec-driven
Step 2 — Build out the artifacts
Guided by the schema, the agent fills in the remaining artifacts in dependency order: the specs (future-state behavior, written as delta operations), an optional design doc for non-trivial changes, and a tasks checklist. You can watch this progress at any time:
openspec status --change add-password-reset
Change: add-password-reset
Schema: spec-driven
Progress: 2/4 artifacts complete
[x] proposal
[x] specs
[ ] design
[-] tasks (blocked by: design)
The indicators mean: [x] done, [ ] ready to write, [-] blocked by an unmet dependency.
Step 3 — Review
Read the proposal and specs yourself before any code is written. This is the whole point — you approve intent on a one-page proposal instead of a 2,000-line diff.
openspec show add-password-reset # render the change
openspec validate add-password-reset --strict
Step 4 — Implement
Once you approve, the agent works through tasks.md, checking off items as it goes. Ask it to "apply the change" and it will read the apply instructions (openspec instructions apply --change ...) and the context files, then implement and tick boxes.
Step 5 — Archive
After the change is implemented, reviewed, and merged, archive it. Archiving folds the change's future-state spec deltas into your main specs/ (so the specs now describe the new reality) and moves the change into changes/archive/ with a date prefix.
openspec archive add-password-reset
Task status: 8/8 complete
Specs to update:
user-auth: update
Totals: + 2, ~ 1, - 0, → 0
Specs updated successfully.
Change 'add-password-reset' archived as '2026-06-05-add-password-reset'.
Warning
Archiving validates the change and rebuilds the affected specs before writing anything. If validation fails, no files are changed. Fix the reported errors, or — only if you understand the risk — pass
--no-validateto skip the checks (you'll be asked to confirm).
Tip
For changes that don't touch product behavior (tooling, CI, dependency bumps), use
openspec archive <name> --skip-specsso OpenSpec archives the change without trying to update specs.
5. Everyday Commands
These are the commands you'll reach for most. All of them operate on the openspec/ directory in your current working directory.
List what's in flight
openspec list # active changes (default), most recent first
openspec list --specs # list specs instead
openspec list --sort name # alphabetical
openspec list --json # machine-readable
add-password-reset 8/8 ✓
improve-search 3/12
Inspect a change or spec
show works for both changes and specs and prompts you to pick interactively if you omit the name:
openspec show # interactive picker
openspec show add-password-reset # show a specific change
openspec show user-auth --type spec # disambiguate when names collide
openspec show add-password-reset --json --deltas-only
Note
If a change and a spec share the same name, OpenSpec asks which you meant. Use
--type changeor--type specto answer up front, which is also required in non-interactive contexts.
See the interactive dashboard
openspec view
view opens a scrollable, interactive overview of all your specs and changes in one place — handy for getting your bearings in a busy project.
Check artifact progress
openspec status --change improve-search
openspec status --change improve-search --json
If you run status with no --change and there are no active changes, OpenSpec tells you so calmly rather than erroring — "no changes" is a valid state.
6. Working With Your AI Assistant
OpenSpec's real value shows when your AI coding tool drives the workflow. During init (and openspec update), OpenSpec installs two kinds of integration into each selected tool:
- Skills — reusable instruction packs the agent can invoke, such as
openspec-propose,openspec-new-change,openspec-continue-change,openspec-apply-change,openspec-archive-change,openspec-sync-specs,openspec-verify-change, andopenspec-explore. - Slash commands — quick
/opsx-*entry points (for example/opsx-new,/opsx-apply,/opsx-archive) for tools that support slash commands.
The supported tools include: Amazon Q, Antigravity, Auggie, Bob, Claude Code, Cline, Codex, ForgeCode, CodeBuddy, Continue, CoStrict, Crush, Cursor, Factory Droid, Gemini CLI, GitHub Copilot, iFlow, Junie, Kilo Code, Kimi CLI, Kiro, Lingma, Mistral Vibe, OpenCode, Pi, Qoder, Qwen Code, RooCode, Trae, and Windsurf.
A typical agent session looks like this in plain language:
You: "Add rate limiting to the public API. Use OpenSpec." Agent: Reads existing specs, runs
openspec new change add-api-rate-limiting, writesproposal.md, generates spec deltas, a design doc, andtasks.md. You: Review the proposal, request tweaks, approve. Agent: Works throughtasks.md, implementing and checking off tasks. You:openspec archive add-api-rate-limitingafter merge.
Keeping integrations current
When you upgrade the OpenSpec package, refresh the installed skills and commands so they match the new version:
openspec update
Updated OpenSpec instructions for: claude, cursor
update refreshes OpenSpec-managed instruction files in place. Use --force to rewrite them even if OpenSpec thinks they're already up to date.
Tip
The instruction files OpenSpec writes are 100% OpenSpec-managed. You don't need to hand-edit them — change behavior through schemas and config instead.
7. Validating Changes and Specs
Validation catches malformed specs before they're archived — missing scenarios, wrong heading depth, broken delta operations. Run it any time.
openspec validate add-password-reset # validate one item
openspec validate --all # every change and spec
openspec validate --changes # all changes
openspec validate --specs # all specs
openspec validate add-password-reset --strict
openspec validate --all --json # CI-friendly output
Bulk validation runs in parallel for speed. Tune the parallelism with --concurrency (defaults to the OPENSPEC_CONCURRENCY environment variable, or 6):
openspec validate --all --concurrency 12
Important
Specs use a strict structure. Each requirement is
### Requirement: <name>, must contain at least one scenario, and each scenario must use exactly four hashes (#### Scenario: ...). Using three hashes or a bullet makes the scenario invisible to OpenSpec and validation will flag it. Use SHALL/MUST for normative requirements.
Caution
When the AI writes spec deltas,
MODIFIED Requirementsmust include the entire updated requirement block (description and all scenarios), not just the changed lines. Partial MODIFIED blocks lose detail when the change is archived. If you're only adding new behavior, useADDED Requirementsinstead.
8. Customizing Workflows With Schemas
A schema defines the artifacts a change must produce and their dependencies. The built-in spec-driven schema produces proposal → specs → design → tasks. You can list, inspect, fork, and author schemas.
openspec schemas # list available schemas + their artifacts
openspec templates # show template files for the default schema
openspec templates --schema spec-driven --json
openspec schema which # show where a schema resolves from
openspec schema which --all # all schemas and their sources
openspec schema validate spec-driven # validate a schema's structure
Available schemas:
spec-driven (project)
Default OpenSpec workflow - proposal → specs → design → tasks
Artifacts: proposal → specs → design → tasks
To customize, fork an existing schema into your project, then edit the copied schema.yaml and templates:
openspec schema fork spec-driven my-workflow
Or scaffold a brand-new project-local schema:
openspec schema init lightweight \
--description "Proposal and tasks only" \
--artifacts proposal,tasks \
--default
Schemas resolve in priority order: project-local (in your repo) overrides a user override (in your home config dir) overrides the package default. The (project), (user override) labels in openspec schemas tell you which is winning.
Note
A change records which schema it uses in its metadata, so commands like
status,instructions, andarchiveauto-detect the right schema. Pass--schema <name>only to override.
9. Coordinating Across Repos (Beta)
For teams planning work that spans multiple repositories, OpenSpec includes beta tooling for workspaces, context stores, and initiatives. These are optional — you can ignore them entirely for single-repo work.
Workspaces give you a local "view" that links several repos or folders together so an agent can plan a cross-repo change:
openspec workspace setup --name platform --link ./api --link ./web
openspec workspace list
openspec workspace open platform --agent claude
openspec workspace doctor # check what resolves on this machine
Context stores are shared folders (optionally Git-backed) that hold durable, cross-repo coordination state:
openspec context-store setup my-store --init-git
openspec context-store list
openspec context-store doctor my-store
Initiatives coordinate a body of work across stores and let you link individual repo-local changes to a larger effort:
openspec initiative create migrate-billing --store my-store --title "Billing migration"
openspec initiative list
openspec new change add-invoice-export --initiative migrate-billing --store my-store
Warning
Workspaces, context stores, and initiatives are beta. The interfaces and behavior are still evolving, and some workspace lifecycle commands (apply, verify, archive) are intentionally deferred. Treat single-repo changes as the stable core.
10. Shell Completions
OpenSpec can install tab completion for your shell, including dynamic completion of change names, spec names, and schema names.
Supported shells: bash, zsh, fish, powershell.
# Install completions for your current shell (auto-detected)
openspec completion install
# Target a specific shell, with detailed output
openspec completion install zsh --verbose
# Print the script to stdout instead of installing (pipe it yourself)
openspec completion generate bash
# Remove completions
openspec completion uninstall zsh
Tip
After installing, open a new terminal (or
sourceyour shell rc file) for completions to take effect. Tab-completingopenspec show <TAB>will then suggest your active change and spec names.
11. Configuration & Privacy
Global configuration
OpenSpec stores user-level settings in a global config.json. Inspect and edit it through the config command:
openspec config path # show where the file lives
openspec config list # show all current settings
openspec config get profile # read one value
openspec config set profile custom
openspec config unset profile # revert a key to default
openspec config edit # open the file in $EDITOR
openspec config reset --all # reset everything to defaults
The most useful settings:
| Key | Values | Meaning |
|---|---|---|
profile |
core, custom |
Which set of workflow skills to install |
delivery |
both, skills, commands |
Install skills, slash commands, or both |
The profile shortcut command opens an interactive picker (or accepts a preset):
openspec config profile # interactive
openspec config profile custom # set directly
Note
Config locations follow the XDG Base Directory spec:
$XDG_CONFIG_HOME/openspec/if set, otherwise~/.config/openspec/on macOS/Linux and%APPDATA%\openspec\on Windows.
Telemetry and opting out
OpenSpec collects anonymous usage analytics: only the command name and OpenSpec version, tied to a random UUID. It never sends your arguments, file paths, file contents, or IP address. A one-time notice is shown on first run.
Opt out at any time with any of these:
export OPENSPEC_TELEMETRY=0 # OpenSpec-specific opt-out
export DO_NOT_TRACK=1 # honors the DO_NOT_TRACK standard
Telemetry is also automatically disabled in CI (CI=true).
Useful environment variables
| Variable | Effect |
|---|---|
OPENSPEC_TELEMETRY=0 |
Disable anonymous usage analytics |
DO_NOT_TRACK=1 |
Disable analytics (cross-tool standard) |
NO_COLOR=1 |
Disable colored output (same as --no-color) |
OPENSPEC_CONCURRENCY=<n> |
Default parallelism for bulk validation |
EDITOR / VISUAL |
Editor used by openspec config edit |
XDG_CONFIG_HOME |
Override the global config directory location |
12. Common Workflows (Recipes)
Start a small change end-to-end
openspec new change fix-empty-bio-crash --description "Handle empty bios safely"
openspec status --change fix-empty-bio-crash
# ...agent writes artifacts and implements...
openspec validate fix-empty-bio-crash --strict
openspec archive fix-empty-bio-crash
Archive a tooling-only change (no spec impact)
openspec archive bump-eslint --skip-specs --yes
Validate everything in CI
openspec validate --all --strict --json --concurrency 8
Exit code is non-zero if any item fails, so this gates your pipeline.
See only the machine-readable deltas of a change
openspec show add-password-reset --json --deltas-only
Inspect a single requirement of a spec
openspec show user-auth --type spec --json --requirement 2
Send feedback to the maintainers
openspec feedback "Loved the new schema fork flow" --body "Worked first try on a monorepo."
13. Troubleshooting
Error: No OpenSpec changes directory found. Run 'openspec init' first.
Cause: You ran a command (e.g. archive, list) in a directory that has no openspec/ folder.
Solution: cd into your project root, or run openspec init to set up OpenSpec there.
Prevention: Run OpenSpec commands from the project root where openspec/ lives.
Error: Change '<name>' not found.
Cause: The change directory doesn't exist under openspec/changes/, or the name is misspelled.
Solution: Run openspec list to see valid change names, then retry. Omit the name to get an interactive picker.
Prevention: Use tab completion (openspec completion install) to avoid typos.
Error: At least one tool must be selected
Cause: During interactive init you confirmed the tool picker without selecting anything.
Solution: Re-run init and select at least one tool, or use --tools none to scaffold without tool integration, or --tools claude,cursor to pick explicitly.
Error: Invalid tool(s): <x>. Available values: all, none, claude, cursor, ...
Cause: --tools was given an unknown tool ID.
Solution: Use a valid ID from the printed list, all, or none. IDs are lowercase (e.g. github-copilot, not GitHub Copilot).
Error: Cannot combine reserved values "all" or "none" with specific tool IDs.
Cause: You wrote something like --tools all,cursor.
Solution: Use either a reserved value alone (--tools all) or a list of specific IDs (--tools claude,cursor).
Error: Insufficient permissions to write to <path>
Cause: init cannot write into the target directory.
Solution: Check directory ownership/permissions, or run from a location you can write to. Avoid running against system-owned paths.
Validation fails on archive and nothing happens
Cause: A spec delta is malformed (missing scenario, wrong heading depth, partial MODIFIED block). Archive prepares and validates everything before writing, so it aborts cleanly.
Solution: Run openspec validate <change> --strict to see the specific issues, fix the Markdown, and archive again. As a last resort, --no-validate skips checks (you'll be asked to confirm).
Prevention: Ensure scenarios use exactly #### and MODIFIED requirements include full content.
Warning: The "openspec change ..." commands are deprecated.
Cause: You used a noun-first command like openspec change list or openspec change validate.
Solution: Use the verb-first equivalents: openspec list, openspec validate --changes, openspec show <name>.
openspec update says to run openspec workspace update
Cause: You ran update inside an OpenSpec workspace rather than a repo-local project.
Solution: Run openspec workspace update to refresh workspace-local guidance and skills instead.
update crashes when a non-OpenSpec workspace.yaml exists
Cause: A workspace.yaml belonging to another tool (e.g. Dagster) in your project root can collide with OpenSpec's workspace detection. (Reported in the community.)
Solution: If you're not using OpenSpec workspaces, this is a known edge case — upgrade to the latest OpenSpec, which improves disambiguation, and report your scenario via openspec feedback.
Commands are slow or hang in a huge repo during validation
Cause: Too much parallelism (or too little) for your machine when validating everything.
Solution: Tune openspec validate --all --concurrency <n> or set OPENSPEC_CONCURRENCY.
14. FAQ
Q: Do I write the proposals and specs myself? Usually no. OpenSpec is designed for your AI assistant to write the artifacts using the installed skills, while you review and approve. You can write them by hand — they're just Markdown — but the workflow shines with an agent.
Q: Does OpenSpec need an account, API key, or internet connection? No account or key. It works fully offline for the core workflow. The only network use is optional anonymous telemetry (which you can disable) and whatever your AI tool does separately.
Q: Where does OpenSpec store my data?
Entirely in your project's openspec/ directory as plain Markdown, committed to your repo like any other source. User-level settings live in a global config.json under your config directory.
Q: What's the difference between a spec and a change? A spec describes what the system does now. A change is a proposal for what should change. When a change is archived, its future-state deltas are merged into the specs so the specs reflect the new reality.
Q: What does "archiving" actually do?
It validates the change, applies its spec deltas to your main specs/, then moves the change directory into changes/archive/ with a YYYY-MM-DD- date prefix.
Q: Which AI tools are supported?
Over two dozen, including Claude Code, Cursor, Windsurf, Codex, GitHub Copilot, Gemini CLI, Cline, RooCode, Kiro, Continue, OpenCode, and more. Select them during openspec init.
Q: Can I use OpenSpec with more than one AI tool at once?
Yes. Select multiple tools during init; OpenSpec installs the right skills and commands into each tool's directory.
Q: How do I keep the installed skills up to date after upgrading OpenSpec?
Run openspec update in your project (or openspec workspace update inside a workspace).
Q: Why did a scenario I wrote get ignored?
Scenarios must use exactly four hash marks (#### Scenario:). Three hashes or a bullet are silently skipped. Run openspec validate --strict to catch this.
Q: How do I disable color (for logs or screen readers)?
Use --no-color on any command, or set NO_COLOR=1.
Q: What's the difference between the change/spec commands and the top-level list/show/validate?
The top-level verb-first commands are current. The openspec change ... noun-first commands are deprecated aliases kept for backward compatibility — prefer the verb-first forms.
Q: Do I need workspaces and initiatives? Only for coordinating work across multiple repos, and they're beta. Single-repo development uses just changes, specs, and schemas.
Q: Can I customize what artifacts a change requires?
Yes — fork the default schema (openspec schema fork spec-driven my-workflow) or author a new one (openspec schema init), then edit the schema.yaml and templates.
15. Command Reference
Global flags available on every command: --no-color (disable color), --version, --help.
Project setup
| Command | Purpose | Key options |
|---|---|---|
openspec init [path] |
Initialize OpenSpec and install tool integrations | --tools <all|none|ids>, --force, --profile <core|custom> |
openspec update [path] |
Refresh installed instruction files | --force |
Changes & specs
| Command | Purpose | Key options |
|---|---|---|
openspec list |
List changes (default) or specs | --specs, --changes, --sort <recent|name>, --json |
openspec view |
Interactive dashboard of specs and changes | — |
openspec show [item] |
Show a change or spec | --json, --type <change|spec>, --no-interactive, --deltas-only, --requirements, --no-scenarios, -r <id> |
openspec validate [item] |
Validate changes and/or specs | --all, --changes, --specs, --type, --strict, --json, --concurrency <n>, --no-interactive |
openspec archive [change] |
Archive a completed change, sync specs | -y, --yes, --skip-specs, --no-validate |
Artifact workflow
| Command | Purpose | Key options |
|---|---|---|
openspec new change <name> |
Scaffold a new change directory | --description, --goal, --areas, --initiative, --store, --store-path, --schema, --json |
openspec set change <name> |
Set checked-in change metadata | --initiative, --store, --store-path, --json |
openspec status |
Show artifact completion status | --change <id>, --schema <name>, --json |
openspec instructions [artifact] |
Output enriched instructions to create an artifact (or instructions apply) |
--change <id>, --schema, --json |
openspec templates |
Show template paths for a schema's artifacts | --schema, --json |
openspec schemas |
List available workflow schemas | --json |
Schema management
| Command | Purpose | Key options |
|---|---|---|
openspec schema which [name] |
Show where a schema resolves from | --json, --all |
openspec schema validate [name] |
Validate a schema's structure/templates | --json, --verbose |
openspec schema fork <source> [name] |
Copy a schema into the project to customize | --json, --force |
openspec schema init <name> |
Create a new project-local schema | --description, --artifacts, --default, --no-default, --force, --json |
Configuration
| Command | Purpose | Key options |
|---|---|---|
openspec config path |
Show config file location | — |
openspec config list |
Show all settings | --json |
openspec config get <key> |
Read one value (scriptable) | — |
openspec config set <key> <value> |
Set a value (auto-coerces type) | --string, --allow-unknown |
openspec config unset <key> |
Remove a key (revert to default) | — |
openspec config reset |
Reset configuration | --all, -y, --yes |
openspec config edit |
Open config in $EDITOR |
— |
openspec config profile [preset] |
Configure the workflow profile | — |
Cross-repo coordination (beta)
| Command | Purpose |
|---|---|
openspec workspace setup|list|link|relink|doctor|update|open |
Manage coordination workspaces |
openspec context-store setup|register|unregister|remove|list|doctor |
Manage context stores |
openspec initiative create|show|list |
Manage initiatives |
Utilities
| Command | Purpose | Key options |
|---|---|---|
openspec completion generate|install|uninstall [shell] |
Manage shell completions | --verbose (install), -y (uninstall) |
openspec feedback <message> |
Submit feedback to maintainers | --body <text> |
Note
Deprecated noun-first commands (
openspec change show\|list\|validate,openspec spec show\|list\|validate) still work but print a deprecation warning. Prefer the verb-first commands above.