CLI Reference
The OpenSpec CLI (openspec) provides terminal commands for project setup, validation, status inspection, and management. These commands complement the AI slash commands (like /opsx:new) documented in [[[[Commands]]]].
Summary
| Category | Commands | Purpose |
|---|---|---|
| Setup | init, update | Initialize and update OpenSpec in your project |
| Browsing | list, view, show | Explore changes and specs |
| Validation | validate | Check changes and specs for issues |
| Lifecycle | archive | Finalize completed changes |
| Workflow | status, instructions, templates, schemas | Artifact-driven workflow support |
| Schemas | schema init, schema fork, schema validate, schema which | Create and manage custom workflows |
| Config | config | View and modify settings |
| Utility | feedback, completion | Feedback and shell integration |
Human vs Agent Commands
Most CLI commands are designed for human use in a terminal. Some commands also support agent/script use via JSON output.
Human-Only Commands
These commands are interactive and designed for terminal use:
| Command | Purpose |
|---|---|
openspec init | Initialize project (interactive prompts) |
openspec view | Interactive dashboard |
openspec config edit | Open config in editor |
openspec feedback | Submit feedback via GitHub |
openspec completion install | Install shell completions |
Agent-Compatible Commands
These commands support --json output for programmatic use by AI agents and scripts:
| Command | Human Use | Agent Use |
|---|---|---|
openspec list | Browse changes/specs | --json for structured data |
openspec show <item> | Read content | --json for parsing |
openspec validate | Check for issues | --all --json for bulk validation |
openspec status | See artifact progress | --json for structured status |
openspec instructions | Get next steps | --json for agent instructions |
openspec templates | Find template paths | --json for path resolution |
openspec schemas | List available schemas | --json for schema discovery |
Global Options
These options work with all commands:
| Option | Description |
|---|---|
--version, -V | Show version number |
--no-color | Disable color output |
--help, -h | Display help for command |
Setup Commands
openspec init
Initialize OpenSpec in your project. Creates the folder structure and configures AI tool integrations.
openspec init [path] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
path | No | Target directory (default: current directory) |
Options:
| Option | Description |
|---|---|
--tools <list> | Configure AI tools non-interactively. Use all, none, or comma-separated list |
--force | Auto-cleanup legacy files without prompting |
Supported tools: amazon-q, antigravity, auggie, claude, cline, codex, codebuddy, continue, costrict, crush, cursor, factory, gemini, github-copilot, iflow, kilocode, opencode, qoder, qwen, roocode, windsurf
Examples:
# Interactive initialization
openspec init
# Initialize in a specific directory
openspec init ./my-project
# Non-interactive: configure for Claude and Cursor
openspec init --tools claude,cursor
# Configure for all supported tools
openspec init --tools all
# Skip prompts and auto-cleanup legacy files
openspec init --forceWhat it creates:
openspec/
├── specs/ # Your specifications (source of truth)
├── changes/ # Proposed changes
└── config.yaml # Project configuration
.claude/skills/ # Claude Code skill files (if claude selected)
.cursor/rules/ # Cursor rules (if cursor selected)
... (other tool configs)openspec update
Update OpenSpec instruction files after upgrading the CLI. Re-generates AI tool configuration files.
openspec update [path] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
path | No | Target directory (default: current directory) |
Options:
| Option | Description |
|---|---|
--force | Force update even when files are up to date |
Example:
# Update instruction files after npm upgrade
npm update @fission-ai/openspec
openspec updateBrowsing Commands
openspec list
List changes or specs in your project.
openspec list [options]Options:
| Option | Description |
|---|---|
--specs | List specs instead of changes |
--changes | List changes (default) |
--sort <order> | Sort by recent (default) or name |
--json | Output as JSON |
Examples:
# List all active changes
openspec list
# List all specs
openspec list --specs
# JSON output for scripts
openspec list --jsonOutput (text):
Active changes:
add-dark-mode UI theme switching support
fix-login-bug Session timeout handlingopenspec view
Display an interactive dashboard for exploring specs and changes.
openspec viewOpens a terminal-based interface for navigating your project's specifications and changes.
openspec show
Display details of a change or spec.
openspec show [item-name] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
item-name | No | Name of change or spec (prompts if omitted) |
Options:
| Option | Description |
|---|---|
--type <type> | Specify type: change or spec (auto-detected if unambiguous) |
--json | Output as JSON |
--no-interactive | Disable prompts |
Change-specific options:
| Option | Description |
|---|---|
--deltas-only | Show only delta specs (JSON mode) |
Spec-specific options:
| Option | Description |
|---|---|
--requirements | Show only requirements, exclude scenarios (JSON mode) |
--no-scenarios | Exclude scenario content (JSON mode) |
-r, --requirement <id> | Show specific requirement by 1-based index (JSON mode) |
Examples:
# Interactive selection
openspec show
# Show a specific change
openspec show add-dark-mode
# Show a specific spec
openspec show auth --type spec
# JSON output for parsing
openspec show add-dark-mode --jsonValidation Commands
openspec validate
Validate changes and specs for structural issues.
openspec validate [item-name] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
item-name | No | Specific item to validate (prompts if omitted) |
Options:
| Option | Description |
|---|---|
--all | Validate all changes and specs |
--changes | Validate all changes |
--specs | Validate all specs |
--type <type> | Specify type when name is ambiguous: change or spec |
--strict | Enable strict validation mode |
--json | Output as JSON |
--concurrency <n> | Max parallel validations (default: 6, or OPENSPEC_CONCURRENCY env) |
--no-interactive | Disable prompts |
Examples:
# Interactive validation
openspec validate
# Validate a specific change
openspec validate add-dark-mode
# Validate all changes
openspec validate --changes
# Validate everything with JSON output (for CI/scripts)
openspec validate --all --json
# Strict validation with increased parallelism
openspec validate --all --strict --concurrency 12Output (text):
Validating add-dark-mode...
✓ proposal.md valid
✓ specs/ui/spec.md valid
⚠ design.md: missing "Technical Approach" section
1 warning foundOutput (JSON):
{
"version": "1.0.0",
"results": {
"changes": [
{
"name": "add-dark-mode",
"valid": true,
"warnings": ["design.md: missing 'Technical Approach' section"]
}
]
},
"summary": {
"total": 1,
"valid": 1,
"invalid": 0
}
}Lifecycle Commands
openspec archive
Archive a completed change and merge delta specs into main specs.
openspec archive [change-name] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
change-name | No | Change to archive (prompts if omitted) |
Options:
| Option | Description |
|---|---|
-y, --yes | Skip confirmation prompts |
--skip-specs | Skip spec updates (for infrastructure/tooling/doc-only changes) |
--no-validate | Skip validation (requires confirmation) |
Examples:
# Interactive archive
openspec archive
# Archive specific change
openspec archive add-dark-mode
# Archive without prompts (CI/scripts)
openspec archive add-dark-mode --yes
# Archive a tooling change that doesn't affect specs
openspec archive update-ci-config --skip-specsWhat it does:
- Validates the change (unless
--no-validate) - Prompts for confirmation (unless
--yes) - Merges delta specs into
openspec/specs/ - Moves change folder to
openspec/changes/archive/YYYY-MM-DD-<name>/
Workflow Commands
These commands support the artifact-driven OPSX workflow. They're useful for both humans checking progress and agents determining next steps.
openspec status
Display artifact completion status for a change.
openspec status [options]Options:
| Option | Description |
|---|---|
--change <id> | Change name (prompts if omitted) |
--schema <name> | Schema override (auto-detected from change's config) |
--json | Output as JSON |
Examples:
# Interactive status check
openspec status
# Status for specific change
openspec status --change add-dark-mode
# JSON for agent use
openspec status --change add-dark-mode --jsonOutput (text):
Change: add-dark-mode
Schema: spec-driven
Artifacts:
✓ proposal proposal.md exists
✓ specs specs/ exists
◆ design ready (requires: specs)
○ tasks blocked (requires: design)
Next: Create design using /opsx:continueOutput (JSON):
{
"change": "add-dark-mode",
"schema": "spec-driven",
"artifacts": [
{"id": "proposal", "status": "complete", "path": "proposal.md"},
{"id": "specs", "status": "complete", "path": "specs/"},
{"id": "design", "status": "ready", "requires": ["specs"]},
{"id": "tasks", "status": "blocked", "requires": ["design"]}
],
"next": "design"
}openspec instructions
Get enriched instructions for creating an artifact or applying tasks. Used by AI agents to understand what to create next.
openspec instructions [artifact] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
artifact | No | Artifact ID: proposal, specs, design, tasks, or apply |
Options:
| Option | Description |
|---|---|
--change <id> | Change name (required in non-interactive mode) |
--schema <name> | Schema override |
--json | Output as JSON |
Special case: Use apply as the artifact to get task implementation instructions.
Examples:
# Get instructions for next artifact
openspec instructions --change add-dark-mode
# Get specific artifact instructions
openspec instructions design --change add-dark-mode
# Get apply/implementation instructions
openspec instructions apply --change add-dark-mode
# JSON for agent consumption
openspec instructions design --change add-dark-mode --jsonOutput includes:
- Template content for the artifact
- Project context from config
- Content from dependency artifacts
- Per-artifact rules from config
openspec templates
Show resolved template paths for all artifacts in a schema.
openspec templates [options]Options:
| Option | Description |
|---|---|
--schema <name> | Schema to inspect (default: spec-driven) |
--json | Output as JSON |
Examples:
# Show template paths for default schema
openspec templates
# Show templates for custom schema
openspec templates --schema my-workflow
# JSON for programmatic use
openspec templates --jsonOutput (text):
Schema: spec-driven
Templates:
proposal → ~/.openspec/schemas/spec-driven/templates/proposal.md
specs → ~/.openspec/schemas/spec-driven/templates/specs.md
design → ~/.openspec/schemas/spec-driven/templates/design.md
tasks → ~/.openspec/schemas/spec-driven/templates/tasks.mdopenspec schemas
List available workflow schemas with their descriptions and artifact flows.
openspec schemas [options]Options:
| Option | Description |
|---|---|
--json | Output as JSON |
Example:
openspec schemasOutput:
Available schemas:
spec-driven (package)
The default spec-driven development workflow
Flow: proposal → specs → design → tasks
my-custom (project)
Custom workflow for this project
Flow: research → proposal → tasksSchema Commands
Commands for creating and managing custom workflow schemas.
openspec schema init
Create a new project-local schema.
openspec schema init <name> [options]Arguments:
| Argument | Required | Description |
|---|---|---|
name | Yes | Schema name (kebab-case) |
Options:
| Option | Description |
|---|---|
--description <text> | Schema description |
--artifacts <list> | Comma-separated artifact IDs (default: proposal,specs,design,tasks) |
--default | Set as project default schema |
--no-default | Don't prompt to set as default |
--force | Overwrite existing schema |
--json | Output as JSON |
Examples:
# Interactive schema creation
openspec schema init research-first
# Non-interactive with specific artifacts
openspec schema init rapid \
--description "Rapid iteration workflow" \
--artifacts "proposal,tasks" \
--defaultWhat it creates:
openspec/schemas/<name>/
├── schema.yaml # Schema definition
└── templates/
├── proposal.md # Template for each artifact
├── specs.md
├── design.md
└── tasks.mdopenspec schema fork
Copy an existing schema to your project for customization.
openspec schema fork <source> [name] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
source | Yes | Schema to copy |
name | No | New schema name (default: <source>-custom) |
Options:
| Option | Description |
|---|---|
--force | Overwrite existing destination |
--json | Output as JSON |
Example:
# Fork the built-in spec-driven schema
openspec schema fork spec-driven my-workflowopenspec schema validate
Validate a schema's structure and templates.
openspec schema validate [name] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
name | No | Schema to validate (validates all if omitted) |
Options:
| Option | Description |
|---|---|
--verbose | Show detailed validation steps |
--json | Output as JSON |
Example:
# Validate a specific schema
openspec schema validate my-workflow
# Validate all schemas
openspec schema validateopenspec schema which
Show where a schema resolves from (useful for debugging precedence).
openspec schema which [name] [options]Arguments:
| Argument | Required | Description |
|---|---|---|
name | No | Schema name |
Options:
| Option | Description |
|---|---|
--all | List all schemas with their sources |
--json | Output as JSON |
Example:
# Check where a schema comes from
openspec schema which spec-drivenOutput:
spec-driven resolves from: package
Source: /usr/local/lib/node_modules/@fission-ai/openspec/schemas/spec-drivenSchema precedence:
- Project:
openspec/schemas/<name>/ - User:
~/.local/share/openspec/schemas/<name>/ - Package: Built-in schemas
Configuration Commands
openspec config
View and modify global OpenSpec configuration.
openspec config <subcommand> [options]Subcommands:
| Subcommand | Description |
|---|---|
path | Show config file location |
list | Show all current settings |
get <key> | Get a specific value |
set <key> <value> | Set a value |
unset <key> | Remove a key |
reset | Reset to defaults |
edit | Open in $EDITOR |
Examples:
# Show config file path
openspec config path
# List all settings
openspec config list
# Get a specific value
openspec config get telemetry.enabled
# Set a value
openspec config set telemetry.enabled false
# Set a string value explicitly
openspec config set user.name "My Name" --string
# Remove a custom setting
openspec config unset user.name
# Reset all configuration
openspec config reset --all --yes
# Edit config in your editor
openspec config editUtility Commands
openspec feedback
Submit feedback about OpenSpec. Creates a GitHub issue.
openspec feedback <message> [options]Arguments:
| Argument | Required | Description |
|---|---|---|
message | Yes | Feedback message |
Options:
| Option | Description |
|---|---|
--body <text> | Detailed description |
Requirements: GitHub CLI (gh) must be installed and authenticated.
Example:
openspec feedback "Add support for custom artifact types" \
--body "I'd like to define my own artifact types beyond the built-in ones."openspec completion
Manage shell completions for the OpenSpec CLI.
openspec completion <subcommand> [shell]Subcommands:
| Subcommand | Description |
|---|---|
generate [shell] | Output completion script to stdout |
install [shell] | Install completion for your shell |
uninstall [shell] | Remove installed completions |
Supported shells: bash, zsh, fish, powershell
Examples:
# Install completions (auto-detects shell)
openspec completion install
# Install for specific shell
openspec completion install zsh
# Generate script for manual installation
openspec completion generate bash > ~/.bash_completion.d/openspec
# Uninstall
openspec completion uninstallExit Codes
| Code | Meaning |
|---|---|
0 | Success |
1 | Error (validation failure, missing files, etc.) |
Environment Variables
| Variable | Description |
|---|---|
OPENSPEC_CONCURRENCY | Default concurrency for bulk validation (default: 6) |
EDITOR or VISUAL | Editor for openspec config edit |
NO_COLOR | Disable color output when set |
Related Documentation
- [[[[Commands]]]] - AI slash commands (
/opsx:new,/opsx:apply, etc.) - [[[[Workflows]]]] - Common patterns and when to use each command
- [[[[Customization]]]] - Create custom schemas and templates
- [[[[Getting Started]]]] - First-time setup guide