Doramagic Project Pack · Human Manual
OpenSpec
OpenSpec uses an artifact-guided workflow where changes are organized into structured folders. The system tracks dependencies between artifacts and automatically manages state transitions.
Introduction to OpenSpec
Related topics: Getting Started, System Architecture
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Getting Started, System Architecture
Introduction to OpenSpec
OpenSpec is a lightweight specification framework designed to bring structure and alignment to AI-assisted software development. It establishes a shared understanding between human developers and AI coding assistants before any code is written, reducing unpredictability and improving project organization.
Purpose and Scope
AI coding assistants are powerful but often unpredictable when project requirements exist only in chat history. OpenSpec adds a lightweight spec layer that ensures human and AI align on specifications before code gets written.
The framework operates under a core philosophy:
→ fluid not rigid
→ iterative not waterfall
→ easy not complex
→ built for brownfield not just greenfield
→ scalable from personal projects to enterprises
Sources: README.md:1-20
Core Features
OpenSpec provides several key capabilities:
| Feature | Description |
|---|---|
| Agree Before Build | Human and AI align on specs before code gets written |
| Stay Organized | Each change gets its own folder with proposal, specs, design, and tasks |
| Work Fluidly | Update any artifact anytime, no rigid phase gates |
| Tool Integration | Works with 25+ AI assistants via slash commands |
Sources: README.md:21-30
Architecture Overview
OpenSpec uses an artifact-guided workflow where changes are organized into structured folders. The system tracks dependencies between artifacts and automatically manages state transitions.
graph TD
A[User Request] --> B[Proposal]
B --> C[Specs]
C --> D[Design]
D --> E[Tasks]
E --> F[Implementation]
F --> G[Archive]
G --> C
H[Config.yaml] --> A
H --> B
H --> C
style A fill:#e1f5fe
style G fill:#c8e6c9Sources: CHANGELOG.md:1-30
The Change Structure
Every change in OpenSpec follows a consistent folder structure:
openspec/
├── specs/ # Source-of-truth specifications
│ └── <capability>/
│ └── spec.md
├── changes/
│ ├── <change-name>/ # Active change folder
│ │ ├── proposal.md # Why and what changes
│ │ ├── tasks.md # Implementation checklist
│ │ ├── design.md # Technical decisions (optional)
│ │ └── specs/
│ │ └── <capability>/
│ │ └── spec.md # Delta showing additions/modifications
│ └── archive/ # Completed changes
│ └── YYYY-MM-DD-<change-name>/
└── config.yaml # Project configuration
Sources: README.md:200-230
Workflow System
OpenSpec supports multiple workflow approaches:
Standard Workflow
The traditional linear approach:
- Propose - Create a change proposal that captures spec updates
- Review - Review the proposal with AI assistant until agreement
- Implement - Implement tasks that reference agreed specs
- Archive - Archive the change to merge approved updates back into source specs
Experimental Workflow
The new artifact-guided workflow using slash commands:
| Command | Purpose |
|---|---|
/opsx:propose | Start a new change |
/opsx:new | Start a new change (alternative) |
/opsx:continue | Create one artifact at a time (step-through) |
/opsx:ff | Fast-forward to completion |
/opsx:verify | Verify artifact integrity |
/opsx:bulk-archive | Archive multiple changes |
/opsx:onboard | Initialize OpenSpec in a project |
Sources: README.md:150-170
Instruction System
OpenSpec dynamically assembles instructions from three layers:
graph LR
A[Context] --> D[Enriched Instruction]
B[Rules] --> D
C[Template] --> D
A1[project.yaml] --> A
B1[Artifact-specific] --> B
C1[Schema template] --> CContext Layer
Project background from config.yaml including tech stack and conventions. Applied to all artifacts.
Rules Layer
Artifact-specific constraints (e.g., "propose spike tasks for unknowns"). Applied only to matching artifacts.
Template Layer
The actual structure for the output file, sourced from schemas.
Sources: CHANGELOG.md:40-70
Supported AI Tools
OpenSpec integrates with 25+ AI coding assistants through slash commands or natural language:
Native Slash Commands
| Tool | Commands | Configuration Path |
|---|---|---|
| Claude Code | /opsx:propose, /opsx:apply, /opsx:archive | Built-in |
| Amazon Q Developer | @openspec-proposal, @openspec-apply, @openspec-archive | .amazonq/prompts/ |
| CodeBuddy Code | /opsx:propose, /opsx:apply, /opsx:archive | .codebuddy/commands/ |
| Cursor | /openspec-proposal, /openspec-apply, /openspec-archive | .cursor/commands/ |
| Roo Code | /openspec-proposal, /openspec-apply, /openspec-archive | .roo/commands/ |
Workflow-Based Tools
| Tool | Workflow Location |
|---|---|
| Cline | .clinerules/workflows/ |
| Windsurf | .windsurf/workflows/ |
| Kilo Code | .kilocode/workflows/ |
Sources: README.md:80-120
Installation and Setup
Prerequisites
- Node.js >= 20.19.0 - Check with
node --version
Installation Methods
Option A: npm (Global)
npm install -g @fission-ai/openspec@latest
Option B: nix (NixOS)
nix run github:Fission-AI/OpenSpec -- init
Or install to profile:
nix profile install github:Fission-AI/OpenSpec
Sources: README.md:50-80
Quick Start
# Navigate to project
cd your-project
# Initialize OpenSpec
openspec init
# Start a new change
/opsx:propose <what-you-want-to-build>
# Or use CLI directly
openspec new <change-name>
Sources: README.md:40-55
Command Reference
| Command | Description |
|---|---|
openspec list | View active change folders |
openspec view | Interactive dashboard of specs and changes |
openspec show <change> | Display change details |
openspec validate <change> | Check spec formatting and structure |
openspec archive <change> [--yes] | Archive completed change |
openspec config profile | Select workflow profile |
Sources: README.md:180-200
Telemetry
OpenSpec collects anonymous usage statistics to understand usage patterns:
- Collected: Command names and version only
- NOT collected: Arguments, paths, content, or PII
- Auto-disabled: In CI environments
Opt-out:
export OPENSPEC_TELEMETRY=0
# or
export DO_NOT_TRACK=1
Sources: README.md:220-240
Contributing to OpenSpec
# Install dependencies
pnpm install
# Build
pnpm run build
# Test
pnpm test
# Develop CLI locally
pnpm run dev
pnpm run dev:cli
Commit convention:
type(scope): subject
Sources: README.md:250-260
License
OpenSpec is released under the MIT License.
Source: https://github.com/Fission-AI/OpenSpec / Human Manual
Getting Started
Related topics: Introduction to OpenSpec, Slash Commands
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Introduction to OpenSpec, Slash Commands
Getting Started
Overview
OpenSpec is a lightweight specification framework designed to help development teams align on requirements before writing code. It provides a structured approach to capturing proposals, specifications, designs, and implementation tasks in organized change folders that integrate seamlessly with AI coding assistants.
The "Getting Started" documentation serves as the entry point for new users, covering prerequisites, installation methods, project initialization, and the fundamental workflows that define how OpenSpec operates. This guide ensures users can quickly set up OpenSpec in their development environment and begin using its artifact-guided workflow for managing changes systematically.
Prerequisites
System Requirements
OpenSpec has specific version requirements that must be met before installation:
| Requirement | Minimum Version | Notes |
|---|---|---|
| Node.js | 20.19.0 or higher | Check with node --version |
| Package Managers | npm, pnpm, yarn, bun, or nix | Alternative installation options available |
Sources: README.md:1
To verify your Node.js installation, run:
node --version
If the version is below 20.19.0, you must upgrade Node.js before proceeding with OpenSpec installation.
Installation
OpenSpec can be installed through multiple methods depending on your development environment and preferences.
Method 1: npm (Global Installation)
The standard installation method uses npm to install OpenSpec globally:
npm install -g @fission-ai/openspec@latest
After installation, verify the installation by checking the version:
openspec --version
Sources: README.md:1
Method 2: Nix Package Manager
For NixOS or Nix package manager users, OpenSpec can be run directly without explicit installation:
nix run github:Fission-AI/OpenSpec -- init
Alternatively, install to your user profile:
nix profile install github:Fission-AI/OpenSpec
Or add to your Nix configuration for persistent access.
Method 3: Development Installation
For contributors or those who want to work with the source code:
# Clone the repository
git clone https://github.com/Fission-AI/OpenSpec.git
cd OpenSpec
# Install dependencies
pnpm install
# Build the project
pnpm run build
# Run tests
pnpm test
# Develop CLI locally
pnpm run dev
Sources: README.md:1
Project Initialization
Once OpenSpec is installed, navigate to your project directory and initialize the OpenSpec structure:
cd your-project
openspec init
The initialization process creates the necessary directory structure for OpenSpec artifacts:
openspec/
├── config.yaml # Project configuration and context
├── specs/ # Schema definitions and templates
└── changes/ # Individual change proposals
What `openspec init` Creates
| Artifact | Purpose |
|---|---|
config.yaml | Project context, tech stack, conventions |
openspec/schemas/ | Schema definitions (spec-driven, etc.) |
openspec/changes/ | Directory for change proposals |
Legacy Cleanup
When running openspec init in an existing project that previously used OpenSpec, the initialization process detects and handles legacy artifacts:
- Old slash command directories (
.claude/commands/openspec/) - Config files with OpenSpec markers (
CLAUDE.md,.cursorrules,.windsurfrules) - Legacy
openspec/AGENTS.mdfiles
Users are prompted for confirmation before removing these legacy artifacts.
Sources: README.md:1 Sources: openspec/changes/archive/2026-02-17-merge-init-experimental/design.md:1
Core Workflow: Artifact-Guided Approach
OpenSpec uses an experimental artifact-guided workflow centered on creating structured changes. The workflow revolves around four key artifacts that capture different aspects of a change:
graph TD
A[Propose Change] --> B[Create Proposal]
B --> C[Write Specs]
C --> D[Design Solution]
D --> E[Define Tasks]
E --> F[Implement]
F --> G[Verify]
G --> H[Archive]
I[Iterate on Any Artifact] -.-> A
I -.-> B
I -.-> C
I -.-> D
I -.-> EThe Four Core Artifacts
| Artifact | Purpose | Generated By |
|---|---|---|
| Proposal | Why the change is needed, what's changing | /opsx:propose |
| Specs | Requirements and acceptance scenarios | Sequential creation |
| Design | Technical approach and architecture | Sequential creation |
| Tasks | Implementation checklist | Sequential creation |
Each change folder under openspec/changes/<change-name>/ contains these artifacts organized in a predictable structure.
Sources: README.md:1
Supported AI Coding Assistants
OpenSpec integrates with over 25 AI coding assistants through slash commands. The supported tools include:
| Tool Category | Examples |
|---|---|
| Claude Code | /openspec/proposal, /openspec/apply, /openspec/archive |
| Cursor | /openspec-proposal, /openspec-apply, /openspec-archive |
| CodeBuddy | /openspec-proposal, /openspec-apply, /openspec-archive |
| Codex | /openspec-proposal, /openspec-apply, /openspec-archive |
| RooCode | /openspec-proposal, /openspec-apply, /openspec-archive |
| Kilo Code | .kilocode/workflows/ with /openspec-proposal.md |
| Windsurf | .windsurf/workflows/ with /openspec-proposal, /openspec-apply, /openspec-archive |
| Continue | .continue/ with custom configuration |
| Cline | CLAUDE.md compatible |
| Other | Works with natural language requests |
To check if your tool is supported, view the full list of supported tools.
Sources: README.md:1 资料来源 docs/supported-tools.md
Essential Commands
Quick Command Reference
| Command | Description |
|---|---|
openspec list | View active change folders |
openspec view | Interactive dashboard of specs and changes |
openspec show <change> | Display change details |
openspec update | Refresh slash command files |
openspec config profile | Switch between standard and experimental workflows |
openspec archive <change> | Archive a completed change |
Sources: README.md:1 资料来源 docs/cli.md
The Experimental Workflow
OpenSpec offers an experimental artifact-guided workflow that provides a more flexible, iterative approach to managing changes.
Enabling Experimental Features
openspec experimental
Experimental Slash Commands
| Command | Purpose |
|---|---|
/opsx:propose | Start a new change |
/opsx:new | Create a new change folder |
/opsx:continue | Create the next artifact in sequence |
/opsx:ff | Fast-forward through completed tasks |
/opsx:verify | Verify implementation against specs |
/opsx:bulk-archive | Archive multiple completed changes |
/opsx:onboard | Set up OpenSpec in a new project |
/opsx:explore | Think through ideas before committing |
资料来源 docs/opsx.md
Workflow Comparison
| Aspect | Standard Workflow | Experimental Workflow |
|---|---|---|
| Artifact creation | Manual/guided | Sequential with dependencies |
| State tracking | File-based | Dynamic artifact graph |
| Flexibility | Phase-locked | Action-based |
| Iteration | Limited | Full iteration support |
Telemetry
OpenSpec collects anonymous usage statistics to understand usage patterns. Only command names and version numbers are collected—no arguments, paths, content, or personally identifiable information.
To opt out:
export OPENSPEC_TELEMETRY=0
Or set the DO_NOT_TRACK environment variable:
export DO_NOT_TRACK=1
Telemetry is automatically disabled in CI environments.
Sources: README.md:1
Next Steps
After completing the initial setup:
- Review Documentation
- Workflows - Combos and patterns
- Commands - Slash commands & skills
- Concepts - How OpenSpec fits together
- Try the Workflow
- Create your first proposal using
/opsx:propose - Work through the artifact sequence
- Archive and review the result
- Configure Your Tool
- Set up slash commands for your preferred AI assistant
- Run
openspec updateto refresh command files
- Explore Advanced Features
- Multi-language support: docs/multi-language.md
- Customization options: docs/customization.md
- Community schemas: Browse the catalog in customization docs
Troubleshooting
Common Issues
| Issue | Solution |
|---|---|
| Node.js version too low | Upgrade to 20.19.0 or higher |
| Command not found | Verify installation with openspec --version |
| Legacy artifacts remain | Run openspec init with --force flag |
| Tool not responding | Check supported tools list and use natural language |
Getting Help
- Join the OpenSpec Discord for questions
- Follow @0xTab on X for updates
- Review archived changes in
openspec/changes/archive/for examples
Sources: README.md:1
System Architecture
Related topics: Introduction to OpenSpec, Artifact Graph System, Workflows
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Introduction to OpenSpec, Artifact Graph System, Workflows
System Architecture
OpenSpec is a lightweight specification framework designed to add a spec layer between human-AI alignment and code implementation. The system architecture enables teams to agree on what to build before any code is written, maintaining organization through structured change folders and dynamic instruction generation.
Architecture Overview
OpenSpec follows a modular architecture with clear separation between CLI interface, core business logic, and artifact management. The framework is designed to be tool-agnostic, supporting 25+ AI assistants through slash commands and natural language processing.
graph TD
subgraph "CLI Layer"
CLI[CLI Entry Point]
Commands[Slash Commands]
end
subgraph "Core Layer"
Config[Project Config]
Schemas[Schema System]
Artifacts[Artifact Graph]
Instructions[Instruction Loader]
end
subgraph "Change Management"
Changes[Change Folders]
Proposals[Proposals]
Specs[Specs]
Designs[Designs]
Tasks[Tasks]
end
CLI --> Commands
Commands --> Artifacts
Artifacts --> Instructions
Instructions --> Config
Instructions --> Schemas
Artifacts --> Changes
Changes --> Proposals
Changes --> Specs
Changes --> Designs
Changes --> TasksCore Components
CLI Interface
The CLI serves as the entry point for all OpenSpec operations. It handles initialization, change management, and command execution across supported tools.
| Command | Purpose |
|---|---|
openspec init | Initialize OpenSpec in a project directory |
openspec update | Refresh generated instruction files |
openspec list | View active change folders |
openspec show <change> | Display change details |
openspec archive <change> | Archive completed changes |
Sources: openspec/changes/archive/2025-08-06-add-init-command/design.md:1-50
Schema System
Schemas define the workflow structure and artifact templates for OpenSpec changes. The system supports three schema sources:
| Source | Path | Priority |
|---|---|---|
| Project | openspec/schemas/<name>/ | Highest |
| User | ~/.local/share/openspec/schemas/<name>/ | Middle |
| Package | Built-in @fission-ai/openspec | Lowest |
Sources: openspec/changes/archive/2026-02-17-project-local-schemas/design.md:1-30
Schema Resolution Order:
- CLI
--schemaflag (explicit override) .openspec.yamlin change directory (change-specific binding)openspec/config.yamlschema field (project default)"spec-driven"(hardcoded fallback)
The default spec-driven schema includes artifacts: proposal, specs, design, and tasks.
Sources: openspec/changes/archive/2026-02-17-project-config/design.md:1-50
Artifact Graph System
The artifact graph tracks dependencies between different artifacts and manages their creation state. This system replaces the old phase-locked workflow with a flexible action-based model.
Artifact Types
| Artifact | Generates | Dependencies |
|---|---|---|
| proposal | proposal.md | None |
| specs | specs/*.md | proposal |
| design | design.md | proposal |
| tasks | tasks.md | specs, design |
Instruction Loading
Instructions are dynamically assembled from three layers:
graph LR
A[Context] --> D[Enriched Instruction]
B[Rules] --> D
C[Template] --> D
subgraph "Instruction Components"
A
B
C
endSources: openspec/changes/archive/2025-12-28-add-instruction-loader/design.md:1-30
Instruction Structure:
<context>
[Project context from config.yaml]
</context>
<rules>
- Rule 1 for specific artifact
- Rule 2 for specific artifact
</rules>
<template>
[Schema's specs template]
</template>
Rules only appear for the specific artifact they're configured for. Artifacts without rules (e.g., design, tasks) don't get a <rules> section.
Sources: openspec/changes/archive/2026-02-17-project-config/design.md:50-100
Project Configuration
Project configuration is stored in openspec/config.yaml and provides shared context and rules across the entire project.
Configuration Structure
context: |
Tech stack: TypeScript, React
Key conventions: ...
schema: spec-driven
rules:
proposal:
- Include rollback plan
specs:
- Use Given/When/Then format for scenarios
Sources: openspec/changes/archive/2026-02-17-project-config/design.md:100-150
Design Decisions
- Config file location:
openspec/config.yamlin project root
- Mirrors structure used by other tools (e.g.,
.github/) - Keeps OpenSpec-related files under one directory
- XML tags vs Markdown sections: Use XML-style tags
<context>and<rules>
- Clear delimiters that don't conflict with Markdown
- Agents can easily parse structure
- Rules validation: Warn on unknown artifact IDs, don't error
- Future-proof for new artifact types
- Non-breaking change for existing configs
Sources: openspec/changes/archive/2026-02-17-project-config/design.md:150-200
Command Workflow
Modern Workflow (opsx)
The new artifact-guided workflow provides flexible action-based interactions:
| Command | What it does |
|---|---|
/opsx:propose | Start a new change with proposal |
/opsx:continue | Create one artifact at a time |
/opsx:ff | Fast-forward to next ready artifact |
/opsx:verify | Verify specs and update tasks |
/opsx:bulk-archive | Archive multiple changes |
/opsx:onboard | Initialize project for OpenSpec |
Sources: README.md:1-50
Legacy Commands
The legacy slash commands have been removed:
/openspec:proposal- Removed/openspec:apply- Removed/openspec:archive- Removed
Tool-specific instruction files (CLAUDE.md, .cursorrules, AGENTS.md, project.md) are no longer generated.
Sources: CHANGELOG.md:1-30
Change Lifecycle
graph TD
A[Create Change] --> B[Write Proposal]
B --> C[Create Specs]
C --> D[Write Design]
D --> E[Implement Tasks]
E --> F[Archive Change]
G[Explore Ideas] -.-> A
style A fill:#e1f5fe
style F fill:#fff3e0Change Directory Structure
openspec/
├── config.yaml # Project configuration
├── schemas/ # Project-local schemas
│ └── <schema-name>/
│ └── templates/
└── changes/
├── <change-name>/
│ ├── proposal.md
│ ├── specs/
│ │ └── *.md
│ ├── design.md
│ ├── tasks.md
│ └── .openspec.yaml
└── archive/
└── <date>-<change-name>/
Sources: openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md:1-30
Data Flow Architecture
Instruction Generation Flow
sequenceDiagram
participant User
participant CLI
participant Config
participant Schema
participant Loader
participant Output
User->>CLI: openspec instructions <artifact>
CLI->>Config: readProjectConfig()
Config-->>CLI: context + rules
CLI->>Schema: resolveSchemaForChange()
Schema-->>CLI: schema name
CLI->>Loader: loadInstructions(change, artifact)
Loader->>Schema: getTemplate(artifact)
Schema-->>Loader: baseInstructions
Loader->>Config: getRulesForArtifact(artifact)
Config-->>Loader: artifactRules
Loader->>Output: enrichInstruction(context, rules, template)
Output-->>User: Enriched instruction with XML sectionsSources: openspec/changes/archive/2026-02-17-project-config/design.md:200-250
Schema Loading Priority
When loading schemas, the system checks multiple locations in order:
graph TD
A[Schema Request] --> B{Project schemas dir?}
B -->|Yes| C[Return project-local schema]
B -->|No| D{User schemas dir?}
D -->|Yes| E[Return user schema]
D -->|No| F[Return package schema]
C --> G[Schema found]
E --> G
F --> GSources: openspec/changes/archive/2026-02-17-project-local-schemas/design.md:50-80
Extensibility Points
Slash Command Configuration
Slash commands are managed through a SlashCommandConfigurator that handles multiple files per tool:
getTargets(): Expose targets with path and kindgenerateAll(projectPath, openspecDir): For initupdateExisting(projectPath, openspecDir): For update
Sources: openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md:50-80
Template System
Templates are brief, actionable, and sourced from openspec/README.md. Each command body includes:
- Guardrails: Ask 1-2 clarifying questions if needed
- Step list tailored to workflow stage
- Pointers to troubleshooting tips
Sources: openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md:30-50
Security Considerations
The implementation includes several security measures:
| Concern | Mitigation |
|---|---|
| Path Traversal | Sanitize all user-provided paths |
| File Permissions | Check write permissions before operations |
| Existing Files | Never overwrite without explicit --force flag |
| Template Injection | Sanitize user inputs in templates |
Sources: openspec/changes/archive/2025-08-06-add-init-command/design.md:50-70
Performance and Caching
Project config is read multiple times during a single command execution:
- Schema resolution - To know which schema to use
- Instruction loading - To inject context and rules
Rules are validated lazily during instruction loading (not at config load time) because:
- Schema isn't known at config load time (circular dependency)
- Warnings shown when user actually uses the feature (better UX)
- Validation warnings cached per session to avoid spam
Sources: openspec/changes/archive/2026-02-17-project-config/design.md:250-280
Technology Stack
| Component | Technology |
|---|---|
| Runtime | Node.js 20.19.0+ |
| Package Manager | npm, pnpm, yarn, bun, nix |
| License | MIT |
| Package | @fission-ai/openspec |
Sources: README.md:50-80
Sources: openspec/changes/archive/2025-08-06-add-init-command/design.md:1-50
Slash Commands
Related topics: Workflows, Getting Started, Supported AI Tools
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Workflows, Getting Started, Supported AI Tools
Slash Commands
Slash Commands provide a convenient shorthand mechanism for invoking OpenSpec workflows directly from AI coding assistants. Instead of typing verbose natural language instructions, users can trigger specific OpenSpec actions through a single slash command invocation, streamlining the specification-driven development workflow.
Overview
OpenSpec integrates with over 20 AI coding assistants through native slash command support. These commands serve as shortcuts that invoke predefined workflow templates, allowing AI assistants to execute OpenSpec operations without requiring manual CLI invocation.
The slash command system is built on two fundamental principles:
- Centralized Templates: Command bodies are defined once and reused across all supported tools, ensuring consistency while allowing minimal per-tool adaptations.
- Per-Tool Organization: Each AI assistant receives its commands in the format and location that tool natively recognizes.
Sources: openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md:1-20
Supported Tools and Command Formats
Different AI coding assistants use varying conventions for slash command naming and organization. The following table summarizes the supported tools and their respective command formats.
| Tool | Commands | Storage Location |
|---|---|---|
| Claude Code | /openspec:proposal, /openspec:apply, /openspec:archive | .claude/commands/openspec/ |
| Cursor | /openspec-proposal, /openspec-apply, /openspec-archive | .cursor/commands/ |
| Amazon Q Developer | @openspec-proposal, @openspec-apply, @openspec-archive | .amazonq/prompts/ |
| CodeBuddy Code | /openspec:proposal, /openspec:apply, /openspec:archive | .codebuddy/commands/ |
| Antigravity | /openspec-proposal, /openspec-apply, /openspec-archive | .agent/workflows/ |
| Auggie | /openspec-proposal, /openspec-apply, /openspec-archive | .augment/commands/ |
| Roo Code | /openspec-proposal, /openspec-apply, /openspec-archive | .roo/commands/ |
| Windsurf | /openspec-proposal, /openspec-apply, /openspec-archive | .windsurf/workflows/ |
| Cline | Workflows with openspec-* prefix | .clinerules/workflows/ |
Sources: README.md:1-80
Core Commands
OpenSpec defines three primary slash commands that cover the essential workflow stages.
Proposal Command
The proposal command initiates a new change specification. When invoked, the AI assistant creates a dedicated change folder with the necessary artifact structure.
You: /openspec:propose add-dark-mode
AI: Created openspec/changes/add-dark-mode/
✓ proposal.md — why we're doing this, what's changing
✓ specs/ — requirements and scenarios
✓ design.md — technical approach
✓ tasks.md — implementation checklist
Ready for implementation!
Sources: README.md:1-30
Apply Command
The apply command transitions the workflow from specification to implementation. It reads the tasks from the change folder and executes them in sequence, marking each task as complete.
You: /opsx:apply
AI: Implementing tasks...
✓ 1.1 Add theme context provider
✓ 1.2 Create toggle component
✓ 2.1 Add CSS variables
✓ 2.2 Wire up localStorage
All tasks complete!
Sources: README.md:1-30
Archive Command
The archive command finalizes a completed change by moving it to the archive directory and updating the source-of-truth specifications.
You: /openspec:archive
AI: Archived to openspec/changes/archive/2025-01-23-add-dark-mode/
Specs updated. Ready for the next feature.
Sources: README.md:1-30
Command File Structure
File Format and Metadata
Slash command files are stored as Markdown with optional YAML frontmatter for tool-specific metadata. The frontmatter, when supported, includes fields such as name, description, and category or tags.
Sources: openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md:1-20
Workflows
Related topics: Slash Commands, Artifact Graph System
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Slash Commands, Artifact Graph System
Workflows
Overview
Workflows in OpenSpec define the ordered sequence of artifacts that get created during a change's lifecycle. They provide a structured approach to capturing requirements, design decisions, and implementation tasks before any code is written.
Purpose: Workflows ensure that human and AI assistants align on what to build through a consistent, repeatable process that captures the "why," "what," and "how" of each change.
Scope: A workflow determines which artifacts need to be created, in what order, and what dependencies exist between them.
Sources: README.md
Core Concepts
Artifacts
Artifacts are the files created during a change lifecycle. OpenSpec supports the following artifact types:
| Artifact | Description | Output File |
|---|---|---|
| proposal | Why and what changes | proposal.md |
| specs | Requirements and scenarios | specs/*.md |
| design | Technical approach | design.md |
| tasks | Implementation checklist | tasks.md |
Sources: openspec/changes/archive/2025-09-29-add-slash-command-support/proposal.md
Workflow Stages
Each workflow progresses through distinct stages:
graph LR
A[Propose] --> B[Design]
B --> C[Specs]
C --> D[Tasks]
D --> E[Apply]
E --> F[Archive]
style A fill:#e1f5fe
style E fill:#fff3e0
style F fill:#f3e5f5| Stage | Purpose | Key Question |
|---|---|---|
| Proposal | Capture the reason for the change | "Why are we doing this?" |
| Design | Document technical approach | "How will we build it?" |
| Specs | Define requirements and scenarios | "What should it do?" |
| Tasks | Break down implementation | "What are the steps?" |
| Apply | Execute implementation | "Make it happen" |
| Archive | Finalize and merge | "Clean up" |
Sources: README.md
Workflow Templates
OpenSpec ships with predefined workflow templates located in src/core/templates/workflows/.
The New Change Workflow
The new change workflow (new-change.ts) scaffolds a complete change structure:
export const newChangeWorkflow = {
name: "New Change",
description: "Scaffold a new OpenSpec change and validate strictly.",
async execute(params) {
// 1. Validate change name (kebab-case)
// 2. Check if change already exists
// 3. Create change directory
// 4. Show artifact status
// 5. Output first artifact template
}
};
Sources: src/core/templates/workflows/new-change.ts
Workflow Execution Steps
When initiating a new change, the workflow performs these steps in order:
- Validate the change name
- Must be kebab-case (e.g.,
add-dark-mode) - If invalid, prompt for a valid name
- Check for existing changes
- If a change with the same name exists, suggest using
continue-changeinstead
- Create the scaffold
- Run
openspec init --change "<name>"with--schema <name>if a specific workflow is requested - Creates
openspec/changes/<name>/with the selected schema
``bash openspec status --change "<name>" `` This displays which artifacts need creation and which are ready (dependencies satisfied).
- Show artifact status
``bash openspec instructions <first-artifact-id> --change "<name>" `` This outputs the template and context for creating the first artifact.
- Output first artifact template
- STOP and wait for user direction
Sources: src/core/templates/workflows/new-change.ts:1-60
Guardrails
The new change workflow includes important guardrails:
- Do NOT create any artifacts yet — only show the instructions
- Do NOT advance beyond showing the first artifact template
- Pass
--schemaonly if using a non-default workflow - Changes with invalid names (not kebab-case) trigger a prompt for correction
- Existing changes suggest using
/continueinstead
Sources: src/core/templates/workflows/new-change.ts
Workflow Patterns
Spec-Driven Workflow
The spec-driven workflow emphasizes design-first approach:
graph TD
P[proposal] --> D[design]
D --> S[specs]
S --> T[tasks]
P -.->|blocking| S
P -.->|blocking| T
D -.->|blocking| T| Artifact | Generates | Dependencies |
|---|---|---|
| proposal | proposal.md | None (root) |
| design | design.md | proposal |
| specs | specs/*.md | proposal, design |
| tasks | tasks.md | specs |
Artifact Flow
┌────────────────────┐
│ Archive & Update │
│ Specs (source) │
└────────────────────┘
│
▼
┌────────────────────┐
│ 1. Draft proposal │
└────────────────────┘
│
▼
┌────────────────────┐
│ 2. Review proposal │
└────────────────────┘
│
▼
┌────────────────────┐
│ 3. Implement tasks │
└────────────────────┘
│
▼
┌────────────────────┐
│ 4. Archive change │
└────────────────────┘
│
▼
┌────────────────────┐
│ Specs updated │
└────────────────────┘
Sources: openspec/changes/archive/2025-10-14-add-windsurf-workflows/proposal.md
Workflows with Slash Commands
OpenSpec integrates with multiple AI coding assistants through slash command workflows. Each tool has its own command structure and file format.
Supported Tools and Commands
| Tool | Slash Commands | File Location |
|---|---|---|
| Claude Code | /openspec:proposal, /openspec:apply, /openspec:archive | Built-in |
| CodeBuddy | /openspec:proposal, /openspec:apply, /openspec:archive | .codebuddy/commands/ |
| Cursor | /openspec-proposal, /openspec-apply, /openspec-archive | .cursor/commands/ |
| Windsurf | /openspec-proposal, /openspec-apply, /openspec-archive | .windsurf/workflows/ |
| Kilo Code | /openspec-proposal.md, /openspec-apply.md, /openspec-archive.md | .kilocode/workflows/ |
| Cline | Workflows | .clinerules/workflows/ |
| GitHub Copilot | @openspec-proposal, @openspec-apply, @openspec-archive | .github/prompts/ |
| Continue | /openspec-proposal, /openspec-apply, /openspec-archive | .continue/prompts/ |
| Antigravity | /openspec-proposal, /openspec-apply, /openspec-archive | .agent/workflows/ |
Sources: README.md
Slash Command File Structure
Slash command files follow a consistent pattern:
Sources: README.md
Artifact Graph System
Related topics: System Architecture, Workflows, Schemas
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: System Architecture, Workflows, Schemas
Artifact Graph System
Overview
The Artifact Graph System is the core module of OpenSpec that manages artifact dependencies, workflow state detection, and schema-driven instruction generation. It provides a declarative way to define artifact relationships through YAML schemas and enables intelligent workflow progression based on filesystem state.
Purpose
The system solves several key problems in AI-assisted development:
- Dependency Management - Ensures artifacts are created in the correct order based on their dependencies
- State Detection - Automatically detects which artifacts are completed, ready, or blocked based on filesystem presence
- Schema Resolution - Supports both user-defined schemas (via XDG directories) and built-in package schemas
- Instruction Generation - Enriches templates with project context, artifact-specific rules, and dependency status
High-Level Architecture
graph TB
subgraph "Artifact Graph System"
YAML[("Schema YAML")]
GRAPH[("ArtifactGraph")]
STATE[("State Detection")]
INSTR[("Instruction Loader")]
CTX[("ChangeContext")]
end
subgraph "Schema Sources"
USER[("User Schemas<br/>XDG_DATA_HOME")]
BUILTIN[("Built-in Schemas<br/>Package")]
end
YAML --> GRAPH
GRAPH --> STATE
GRAPH --> CTX
STATE --> CTX
CTX --> INSTR
USER -->|resolveSchema| GRAPH
BUILTIN -->|resolveSchema| GRAPHCore Concepts
Artifacts
Artifacts are the fundamental units of work in OpenSpec. Each artifact has:
| Property | Type | Description |
|---|---|---|
id | string | Unique identifier within the schema |
generates | string | File pattern generated by this artifact |
template | string | Template file path (relative to schema directory) |
requires | string[] | List of artifact IDs that must complete first |
Schema Structure
Schemas define the workflow for a change. They are YAML files with the following structure:
name: spec-driven
version: 1
description: Specification-driven development workflow
artifacts:
- id: proposal
generates: "proposal.md"
template: "proposal.md"
requires: []
- id: specs
generates: "specs/*.md"
template: "spec.md"
requires: [proposal]
- id: design
generates: "design.md"
template: "design.md"
requires: [proposal]
- id: tasks
generates: "tasks.md"
template: "tasks.md"
requires: [specs, design]
ArtifactGraph Class
The ArtifactGraph class is the central component that loads schemas and provides graph query operations.
Class Structure
export class ArtifactGraph {
private artifacts: Map<string, Artifact>;
private schema: SchemaYaml;
private constructor(schema: SchemaYaml) {
this.schema = schema;
this.artifacts = new Map(schema.artifacts.map(a => [a.id, a]));
}
}
Factory Methods
| Method | Description | Source |
|---|---|---|
fromYaml(filePath) | Load graph from a schema YAML file path | graph.ts:18-21 |
fromYamlContent(yamlContent) | Parse graph from YAML content string | graph.ts:27-29 |
fromSchema(schema) | Create graph from pre-validated SchemaYaml object | graph.ts:35-37 |
Query Methods
| Method | Return Type | Description | |
|---|---|---|---|
getArtifact(id) | `Artifact \ | undefined` | Get a single artifact by ID |
getAllArtifacts() | Artifact[] | Get all artifacts in definition order | |
getName() | string | Get the schema name | |
getSchema() | SchemaYaml | Get the underlying schema object |
State Detection
The state detection module (state.ts) monitors the filesystem to determine the status of each artifact relative to a change directory.
State Types
| State | Description |
|---|---|
completed | All files matching the artifact's generates pattern exist |
ready | All dependencies are completed, can be worked on |
blocked | Dependencies are not yet completed |
State Detection Logic
interface ArtifactGraphResult {
completed: string[]; // Artifact IDs that are fully completed
ready: string[]; // Artifact IDs ready to work on
blocked: BlockedArtifacts; // Artifact IDs with their unmet dependencies
buildOrder: string[]; // Topological order for creation
}
The detection process:
- For each artifact, check if files matching
generatesexist in the change directory - Collect all completed artifact IDs into a
CompletedSet(aSet<string>) - For each non-completed artifact, find which dependencies are unmet
- Artifacts with all dependencies met are marked
ready
Topological Sorting
The system uses Kahn's algorithm for topological sorting to determine the correct build order for artifacts.
Algorithm Properties
- Cycle Detection: Kahn's algorithm naturally fails on cyclic dependencies, providing natural cycle detection
- Stable Ordering: Independent artifacts are returned in definition order
- Linear Time: O(V + E) where V is artifacts and E is dependencies
Error Format
When a cycle is detected, the error message clearly identifies the cycle path:
Cyclic dependency detected: A → B → C → A
Schema Resolution
The resolver.ts module handles loading schemas from multiple sources with a defined priority order.
Resolution Order
graph LR
A[("Schema Name")] --> B{Global Override?}
B -->|Yes| C["${XDG_DATA_HOME}/openspec/schemas/<name>"]
B -->|No| D{Package Built-in?}
D -->|Yes| E["<package>/schemas/<name>"]
D -->|No| F[("Error: Schema not found")]
C --> G[("Loaded Schema")]
E --> GResolution Paths
| Priority | Location | Environment Variable |
|---|---|---|
| 1 (User Override) | ${XDG_DATA_HOME}/openspec/schemas/<name> | XDG_DATA_HOME |
| 2 (Built-in) | <package>/schemas/<name> | N/A |
| 3 (Error) | Schema not found | N/A |
Fallback Behavior: If XDG_DATA_HOME is not set, the system falls back to ~/.local/share on Unix systems.
Built-in Schemas
OpenSpec ships with two built-in schemas:
spec-driven Schema
The default schema following a proposal → specs → design → tasks workflow:
name: spec-driven
artifacts:
- id: proposal
generates: "proposal.md"
requires: []
- id: specs
generates: "specs/*.md"
requires: [proposal]
- id: design
generates: "design.md"
requires: [proposal]
- id: tasks
generates: "tasks.md"
requires: [specs, design]
tdd Schema
An alternative schema for test-driven development:
name: tdd
artifacts:
- id: tests
generates: "tests/*.md"
requires: []
- id: implementation
generates: "implementation.md"
requires: [tests]
- id: docs
generates: "docs.md"
requires: [implementation]
Instruction Loading
The instruction-loader.ts module enriches templates with change-specific context and project configuration.
ChangeContext Interface
interface ChangeContext {
changeName: string;
changeDir: string;
schemaName: string;
graph: ArtifactGraph;
completed: CompletedSet;
}
Instruction Output Structure
Instructions are formatted with XML-like sections for AI consumption:
<artifact id="proposal" change="add-auth" schema="spec-driven">
<context>
[Project context from config]
</context>
<rules>
[Artifact-specific rules from config]
</rules>
<template>
[Schema's template content]
</template>
Context Injection Rules
| Section | Applies To | Source |
|---|---|---|
<context> | All artifacts | Project config's context field |
<rules> | Specific artifacts only | Per-artifact rules in project config |
<template> | All artifacts | Schema's template file |
File Structure
src/core/artifact-graph/
├── index.ts # Public exports
├── types.ts # Zod schemas and TypeScript types
├── graph.ts # ArtifactGraph class
├── state.ts # State detection logic
├── resolver.ts # Schema resolution
├── schema.ts # YAML parsing and validation
├── outputs.ts # Output path resolution
├── instruction-loader.ts # Template enrichment
└── schemas/ # Built-in schema definitions
├── spec-driven/
│ ├── schema.yaml
│ └── templates/
└── tdd/
├── schema.yaml
└── templates/
Integration Points
With Workflow Commands
The Artifact Graph System integrates with the /opsx:continue and /opsx:apply workflows:
- Continue Workflow - Reads instructions for the next ready artifact
- Apply Workflow - Checks completion status and provides apply-phase instructions
With Project Config
Project-level configuration (openspec/config.yaml) can provide:
- Default schema selection
- Project context for all artifacts
- Per-artifact rules and guidelines
Testing
The system includes comprehensive test coverage:
| Test Case | Purpose |
|---|---|
| Parse valid schema YAML | Schema loading works correctly |
| Parse invalid schema | Missing fields throw descriptive errors |
| Duplicate artifact IDs | Detection and error reporting |
Invalid requires reference | Identification of invalid artifact IDs |
| Cycle detection | Error with cycle path listing |
| Build order (linear) | Topological sort correctness |
| Build order (diamond) | Complex dependency handling |
| Independent artifacts | Stable ordering of unrelated nodes |
Related Documentation
- Schema Directories Design - Schema directory structure
- Instruction Loader Design - Template loading and enrichment
- Apply-Phase Schema Design - Apply phase configuration
- Project Config Design - Project-level configuration integration
Source: https://github.com/Fission-AI/OpenSpec / Human Manual
Schemas
Related topics: Validation System, Artifact Graph System
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Validation System, Artifact Graph System
Schemas
Schemas define the workflow structure for OpenSpec changes. They specify which artifacts should be created, their dependencies, requirements for completion, and how the apply phase operates.
Overview
A schema in OpenSpec is a configuration that defines a complete workflow for planning and implementing changes. Schemas specify:
- The artifacts to create (e.g., proposal, specs, design, tasks)
- The dependencies between artifacts
- Requirements that must be met before each artifact is considered complete
- Templates for generating artifact content
- Apply phase configuration for implementation guidance
Schemas are self-contained directories containing schema.yaml and template files, following a structure similar to Helm charts. Sources: openspec/changes/archive/2025-12-28-restructure-schema-directories/design.md
Schema Directory Structure
schemas/
├── spec-driven/
│ ├── schema.yaml # Schema definition
│ └── templates/
│ ├── proposal.md
│ ├── design.md
│ ├── spec.md
│ └── tasks.md
└── tdd/
├── schema.yaml
└── templates/
├── spec.md
├── test.md
├── implementation.md
└── docs.md
Built-in schemas are distributed with the package, while user overrides can be placed in XDG data directories. Sources: openspec/changes/archive/2025-12-28-restructure-schema-directories/design.md
Schema Resolution Order
OpenSpec resolves schemas using a priority-based lookup:
graph TD
A[Schema Request] --> B{CLI --schema flag?}
B -->|Yes| C[Use CLI flag]
B -->|No| D{.openspec.yaml in change?}
D -->|Yes| E[Use change metadata]
D -->|No| F{openspec/config.yaml schema?}
F -->|Yes| G[Use project default]
F -->|No| H{"spec-driven" fallback}| Priority | Source | Example Path |
|---|---|---|
| 1 (highest) | CLI flag | --schema tdd |
| 2 | Change metadata | .openspec.yaml |
| 3 | Project config | openspec/config.yaml |
| 4 (lowest) | Hardcoded default | "spec-driven" |
Sources: openspec/changes/archive/2026-02-17-project-config/design.md
Schema YAML Format
Core Fields
name: spec-driven
version: 1
description: Specification-driven development
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Unique schema identifier (kebab-case) |
version | number | Yes | Schema version for compatibility |
description | string | Yes | Human-readable description |
Artifacts Section
The artifacts array defines each artifact in the workflow:
artifacts:
- id: proposal
generates: proposal.md
template: proposal.md
requires: []
- id: specs
generates: specs/
template: spec.md
requires:
- proposal
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique artifact identifier |
generates | string | Yes | Output path or directory |
template | string | Yes | Template file relative to templates/ |
requires | string[] | No | Artifact IDs that must exist first |
format_requirements | string | No | Special formatting instructions |
Sources: schemas/spec-driven/schema.yaml
Built-in Schemas
spec-driven
The default schema focused on specification-driven development. It emphasizes clear requirements and scenarios before implementation.
Artifact Flow:
graph LR
A[proposal] --> B[specs]
B --> C[design]
C --> D[tasks]
D --> E[apply]| Artifact | Generates | Requires | Purpose |
|---|---|---|---|
proposal | proposal.md | (none) | Define the change scope |
specs | specs/*.md | proposal | Document requirements and scenarios |
design | design.md | specs | Technical approach |
tasks | tasks.md | design, specs | Implementation checklist |
workspace-planning
Schema for multi-repository planning and coordination across workspaces.
Sources: schemas/workspace-planning/schema.yaml
tdd (Test-Driven Development)
Schema focused on tests first, following the pattern: spec → test → implementation → docs.
| Artifact | Generates | Requires |
|---|---|---|
spec | spec.md | (none) |
test | test.md | spec |
implementation | implementation.md | test |
docs | docs.md | implementation |
Requirements Format
Requirements define completion criteria for artifacts. They use a structured format with scenarios.
## Requirements
### Requirement: <name>
<description using SHALL/MUST for normative requirements>
#### Scenario: <name>
- **WHEN** <condition>
- **THEN** <expected outcome>
Key Formatting Rules:
- Requirements use
### Requirement:with exactly 3 hashtags - Scenarios use
#### Scenario:with exactly 4 hashtags - Use SHALL/MUST for normative requirements (avoid should/may)
- Every requirement MUST have at least one scenario
Sources: schemas/spec-driven/schema.yaml
Apply Phase Configuration
The optional apply block defines how implementation should proceed:
apply:
requires:
- specs
- design
- tasks
tracks:
- id: implementation
label: Implementation
instruction: |
Proceed with implementation based on the tasks artifact.
| Field | Type | Description |
|---|---|---|
requires | string[] | Artifacts that must exist before apply |
tracks | Track[] | Progress tracking categories |
instruction | string | Instructions displayed during apply |
Sources: openspec/changes/archive/2026-01-06-make-apply-instructions-schema-aware/tasks.md
Schema Resolution Implementation
The resolveSchema() function handles schema loading with user overrides:
// Resolution order (highest to lowest priority)
1. ${XDG_DATA_HOME}/openspec/schemas/<name>/schema.yaml // User override
2. <package>/schemas/<name>/schema.yaml // Built-in
function getPackageSchemasDir(): string {
const currentFile = fileURLToPath(import.meta.url);
// Navigate from src/core/artifact-graph/ to package root
return path.join(path.dirname(currentFile), '..', '..', '..', 'schemas');
}
Sources: openspec/changes/archive/2025-12-28-restructure-schema-directories/design.md
Template Loading
Templates are loaded relative to the schema's templates/ directory:
# In schema.yaml
artifacts:
- id: proposal
template: "proposal.md" # → schemas/spec-driven/templates/proposal.md
Templates are simple markdown files without template engine dependencies. Context injection prepends a header section:
Sources: openspec/changes/archive/2026-02-17-project-config/design.md
Configuration
Related topics: Getting Started
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Getting Started
Configuration
OpenSpec uses a layered configuration system that manages project-level settings, global defaults, and user preferences. This configuration architecture enables teams to share project context, define artifact-specific rules, and customize the OpenSpec workflow across different environments.
Overview
The OpenSpec configuration system serves three primary purposes:
- Schema Selection — Define which OpenSpec schema to use for change management
- Context Injection — Provide project background (tech stack, conventions, terminology) that gets injected into generated artifacts
- Per-Artifact Rules — Define constraints and guidelines that apply to specific artifact types
graph TD
A[User Project] --> B[openspec/config.yaml]
A --> C[Global Config]
A --> D[User Config]
B --> E[Schema Resolution]
C --> E
D --> E
E --> F[spec-driven]
E --> G[minimal]
E --> H[custom schemas]
F --> I[Artifact Generation]
G --> I
H --> I
I --> J[proposal.md]
I --> K[specs/*.md]
I --> L[design.md]
I --> M[tasks.md]Sources: openspec/changes/archive/2026-02-17-project-config/design.md
Configuration Files
Project Configuration (`openspec/config.yaml`)
The project-level configuration file lives in the openspec/ directory and is designed to be committed to version control. This ensures all team members share the same project context and rules.
Location: <project-root>/openspec/config.yaml
Structure:
schema: spec-driven
context:
project_name: My Application
tech_stack:
- Node.js
- TypeScript
- PostgreSQL
conventions:
- Use async/await for all asynchronous operations
- Follow conventional commits
terminology:
- "change" refers to a feature or fix being implemented
- "artifact" refers to a generated file
rules:
proposal:
- Include spike tasks for unknowns
specs:
- Use SHALL/MUST for normative requirements
- Every requirement needs at least one scenario
Sources: openspec/changes/archive/2026-02-17-project-config/proposal.md
Schema Configuration
Each schema defines its own structure and templates. The spec-driven schema, for example, includes requirements for how artifacts should be formatted:
artifacts:
- id: proposal
generates: proposal.md
requires: []
- id: specs
generates: specs/*.md
requires:
- proposal
- id: design
generates: design.md
requires:
- proposal
- specs
Sources: schemas/spec-driven/schema.yaml
Configuration Architecture
Configuration Resolution Order
OpenSpec resolves configuration values using a specific precedence order:
graph LR
A[CLI Flag] -->|highest| B[Change Metadata]
B --> C[Project Config]
C -->|lowest| D[Global Config]
D --> E[Hardcoded Default]| Priority | Source | Description |
|---|---|---|
| 1 | CLI Flag | Explicit --schema parameter |
| 2 | Change Metadata | .openspec.yaml in change directory |
| 3 | Project Config | openspec/config.yaml |
| 4 | Global Config | User's global settings |
| 5 | Default | Hardcoded fallback (spec-driven) |
Sources: openspec/changes/archive/2026-02-17-project-config/design.md
Module Structure
src/core/
├── config.ts # Main configuration module
├── config-schema.ts # Configuration schema definitions
├── global-config.ts # Global configuration management
├── project-config.ts # Project-level configuration handling
└── profiles.ts # Profile management
Sources: openspec/changes/archive/2026-02-17-project-config/design.md
Core Modules
Project Config Module
The project-config.ts module handles reading, parsing, and validating project-level configuration.
Key Responsibilities:
- Read
openspec/config.yamlfrom the project root - Parse YAML into typed configuration objects
- Validate schema names against available schemas
- Provide error messages for misconfiguration
Validation Logic:
export function validateProjectConfig(config: ProjectConfig): ValidationResult {
const errors: string[] = [];
if (config.schema) {
const availableSchemas = getAvailableSchemas();
if (!availableSchemas.includes(config.schema)) {
errors.push(`Invalid schema: ${config.schema}`);
}
}
return { valid: errors.length === 0, errors };
}
Sources: src/core/project-config.ts
Profile Management
Profiles allow users to customize their OpenSpec workflow by selecting different command sets and behaviors.
graph TD
A[Profile Selection] --> B[Minimal Profile]
A --> C[Artifact-Guided Profile]
A --> D[Experimental Profile]
B --> B1[Basic commands: init, list, show]
C --> C1[opsx commands: new, continue, ff]
D --> D1[Early access features]Available Profiles:
| Profile | Commands | Description |
|---|---|---|
minimal | init, list, show, new, apply, archive | Basic workflow |
artifact-guided | opsx:* commands | New artifact-driven workflow |
experimental | All + experimental features | Early access features |
Sources: openspec/README.md
Configuration CLI Commands
The config command group provides interactive management of OpenSpec configuration.
Commands
| Command | Description |
|---|---|
openspec config profile | Select active workflow profile |
openspec config view | Display current configuration |
openspec config validate | Validate configuration files |
openspec config init | Initialize project configuration |
Interactive Profile Selection
$ openspec config profile
? Select a profile:
> minimal (default)
artifact-guided (recommended)
experimental
Sources: src/commands/config.ts
Context and Rules Injection
How Context Works
The project context section is injected into generated artifacts to provide project-specific background information:
# Get instructions for artifact with context
openspec instructions specs --change my-feature
# Output structure:
<context>
[Project context from config.yaml]
</context>
<template>
[Schema's specs template]
</template>
Sources: openspec/changes/archive/2026-02-17-project-config/proposal.md
Rule Injection by Artifact Type
Rules are only injected for artifacts that have them configured:
graph TD
A[Artifact Request] --> B{Has rules?}
B -->|Yes| C[Include rules section]
B -->|No| D[Skip rules section]
C --> E[<context>]
C --> F[<rules>]
C --> G[<template>]
D --> E
D --> GExample: Rules for proposal artifact:
rules:
proposal:
- Include spike tasks for unknown complexities
- Reference existing patterns before inventing new ones
Example: Rules for specs artifact:
rules:
specs:
- Use SHALL/MUST for normative requirements
- Every requirement MUST have at least one scenario
- Scenarios MUST use exactly 4 hashtags (####)
Sources: schemas/spec-driven/schema.yaml
Schema Resolution
Resolution Function
The resolveSchemaForChange() function determines which schema to use:
export function resolveSchemaForChange(
changeName: string,
cliSchema?: string
): string {
// 1. CLI flag wins
if (cliSchema) {
return cliSchema;
}
// 2. Change metadata (.openspec.yaml)
const metadata = readChangeMetadata(changeName);
if (metadata?.schema) {
return metadata.schema;
}
// 3. Project config (NEW)
const projectConfig = readProjectConfig();
if (projectConfig?.schema) {
return projectConfig.schema;
}
// 4. Hardcoded default
return 'spec-driven';
}
Sources: openspec/changes/archive/2026-02-17-project-config/design.md
Project-Local Schemas
OpenSpec supports project-local schemas that override built-in schemas:
graph TD
A[Schema Request] --> B{Project-local exists?}
B -->|Yes| C[Use project-local]
B -->|No| D{User override exists?}
D -->|Yes| E[Use user override]
D -->|No| F[Use built-in]Schema Search Order:
<project>/openspec/schemas/<name>/<user-data>/openspec/schemas/<name>/<npm-package>/schemas/<name>/
Sources: openspec/changes/archive/2026-02-17-project-local-schemas/design.md
Global Configuration
Global configuration lives in the user's home directory and provides defaults that apply across all projects.
Default Location: ~/.config/openspec/config.yaml (Linux/macOS)
Purpose:
- Default profile selection
- Telemetry preferences
- Editor-specific settings
Telemetry Configuration
OpenSpec collects anonymous usage statistics by default:
# Opt-out via environment variable
export OPENSPEC_TELEMETRY=0
# or
export DO_NOT_TRACK=1
Sources: openspec/README.md
Validation and Error Handling
Configuration Validation
The validation system checks for common configuration errors:
export function validateConfig(config: unknown): ValidationResult {
const errors: string[] = [];
// Check schema validity
if (!config.schema || !isValidSchema(config.schema)) {
errors.push(`Invalid schema: ${config.schema}`);
}
// Check context structure
if (config.context && typeof config.context !== 'object') {
errors.push('Context must be an object');
}
return { valid: errors.length === 0, errors };
}
Error Messages
When validation fails, OpenSpec provides actionable error messages:
Error: Invalid schema 'unknown-schema'
Available schemas:
Built-in: spec-driven, minimal, gpt-prompts
Project-local: (none found)
Fix: Edit openspec/config.yaml and change 'schema: unknown-schema' to a valid schema name
Sources: src/core/project-config.ts
Migration from Legacy Config
Old Configuration Files
OpenSpec previously used different configuration mechanisms that are now deprecated:
| Old File | New Location | Notes |
|---|---|---|
openspec/project.md | openspec/config.yaml.context | Migrate manually |
CLAUDE.md | openspec/config.yaml | Removed |
.cursorrules | openspec/config.yaml | Removed |
.windsurfrules | openspec/config.yaml | Removed |
Migration Steps
- Run
openspec initto detect legacy artifacts - Review the migration hints provided
- Manually migrate
project.mdcontent toconfig.yaml.context - Delete old configuration files when ready
Sources: openspec/changes/archive/2026-02-17-merge-init-experimental/design.md
Best Practices
Configuration Organization
- Commit
config.yaml— Keep project configuration in version control for team consistency - Use descriptive context — Include tech stack, conventions, and terminology
- Define artifact rules — Set clear guidelines for each artifact type
- Keep rules concise — Rules should be actionable constraints, not verbose documentation
Team Collaboration
# Share configuration via git
git add openspec/config.yaml
git commit -m "Add project config with context and rules"
# Everyone gets the same context and rules automatically
Sources: openspec/changes/archive/2026-02-17-project-config/proposal.md
Summary
The OpenSpec configuration system provides a flexible, layered approach to managing project settings:
- Project-level config (
openspec/config.yaml) for team-shared context and rules - Schema-based organization for consistent artifact generation
- Per-artifact rules for tailored guidelines
- Profile system for workflow customization
- Validation to catch configuration errors early
Sources: openspec/changes/archive/2026-02-17-project-config/design.md
Validation System
Related topics: Schemas, Configuration
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Schemas, Configuration
Validation System
Overview
The OpenSpec Validation System is a multi-layered infrastructure that ensures specification files, change artifacts, and project configurations conform to defined schemas and structural requirements. The validation system serves as the quality gate for the entire OpenSpec workflow, preventing malformed specs from entering the repository and maintaining consistency across teams and projects.
The validation system operates at multiple levels: structural validation of markdown content, schema-based validation using Zod, and command-level validation for CLI operations. This layered approach ensures that validation is both comprehensive and performant, catching errors early in the development workflow.
The system is designed to be reusable across different commands and workflows, following the principle established in the implementation order that schemas and validation infrastructure should be shared between command implementations.
Architecture Overview
graph TD
A[User/CLI Command] --> B[Validation Entry Point]
B --> C[Command Validation]
B --> D[Spec Structure Validation]
B --> E[Schema Validation]
C --> F[openspec validate]
C --> G[openspec show --json --deltas-only]
C --> H[openspec instructions]
D --> I[Markdown Parser]
D --> J[Spec Structure Parser]
D --> K[Scenario Parser]
E --> L[Zod Schemas]
E --> M[Custom Validators]
I --> N[Header Extraction]
I --> O[Content Normalization]
J --> P[Requirement Parsing]
J --> Q[Delta Detection]
K --> R[WHEN/THEN Format]
K --> S[Scenario Validation]
L --> T[ArtifactSchema]
L --> U[SchemaYamlSchema]
L --> V[ChangeMetadataSchema]Core Components
Validation Types (`src/core/validation/types.ts`)
The types module defines the foundational data structures used throughout the validation system. These types are constructed using Zod schemas to enable runtime validation with full type inference.
| Type | Purpose | Key Fields |
|---|---|---|
ValidationResult | Encapsulates validation outcome | valid: boolean, errors: ValidationError[], warnings: ValidationWarning[] |
ValidationError | Represents a validation failure | code: string, message: string, path: string, line?: number |
SpecRequirement | Parsed requirement structure | name: string, description: string, scenarios: Scenario[] |
Scenario | Individual test scenario | name: string, when: string, then: string[] |
The type definitions ensure that all validation operations work with consistent data structures, reducing runtime errors and improving developer experience through IDE autocompletion.
Validation Constants (`src/core/validation/constants.ts`)
Constants define the boundaries and thresholds for validation operations. These values are extracted into a dedicated module to allow easy tuning without modifying validation logic.
// Example constant categories
const VALIDATION = {
MAX_REQUIREMENT_LENGTH: 500,
MAX_SCENARIO_COUNT: 50,
MIN_REQUIREMENT_COUNT: 1,
REQUIRED_HEADERS: ['## Purpose', '## Requirements'],
} as const;
const ERROR_CODES = {
MISSING_REQUIREMENT: 'SPEC_001',
MISSING_SCENARIO: 'SPEC_002',
INVALID_FORMAT: 'SPEC_003',
CYCLIC_DEPENDENCY: 'GRAPH_001',
INVALID_DELTA: 'DELTA_001',
} as const;
Core Validator (`src/core/validation/validator.ts`)
The validator module contains the primary validation logic that orchestrates checks across different validation layers. It provides a unified interface for validating various OpenSpec artifacts.
Key Responsibilities:
- Coordinating validation across multiple layers (structural, schema, semantic)
- Aggregating errors and warnings from different validators
- Providing detailed error messages with file paths and line numbers
- Supporting both synchronous and asynchronous validation flows
// Conceptual validation flow
async function validateSpec(specPath: string): Promise<ValidationResult> {
const errors: ValidationError[] = [];
const warnings: ValidationWarning[] = [];
// Layer 1: File existence and readability
const fileResult = await validateFileAccess(specPath);
if (!fileResult.valid) return fileResult;
// Layer 2: Structure validation
const structure = await parseSpecStructure(specPath);
const structureErrors = validateStructure(structure);
errors.push(...structureErrors);
// Layer 3: Content validation
const contentErrors = validateContent(structure);
errors.push(...contentErrors);
// Layer 4: Cross-reference validation
const xrefErrors = validateCrossReferences(structure);
errors.push(...xrefErrors);
return {
valid: errors.length === 0,
errors,
warnings,
};
}
Spec Structure Validation
Markdown Parser (`src/core/parsers/spec-structure.ts`)
The spec structure parser extracts structured data from markdown-formatted specification files. It handles the unique requirements of OpenSpec's spec format, including requirement blocks, scenario definitions, and delta operations.
Parsing Capabilities:
The parser handles multiple content types found in OpenSpec specifications:
- Requirements: Extracted from
### Requirement:headers with accompanying descriptions - Scenarios: Parsed from
#### Scenario:headers using WHEN/THEN/AND format - Delta Operations: Identifies ADDED, MODIFIED, REMOVED, and RENAMED sections
- Frontmatter: Processes YAML frontmatter for metadata and schema references
Critical Parsing Rules:
Per the schema specification, scenario headers must use exactly four hashtags (####) followed by Scenario:. Using three hashtags or bullet-point formats will result in silent parsing failures.
// Scenario detection pattern
const SCENARIO_PATTERN = /^#### Scenario:\s*(.+)$/gm;
const WHEN_PATTERN = /^\*?\*?WHEN\*?\*?\s+(.+)$/im;
const THEN_PATTERN = /^\*?\*?THEN\*?\*?\s+(.+)$/im;
const AND_PATTERN = /^\*?\*?AND\*?\*?\s+(.+)$/im;
Content Normalization
The validation system normalizes input content to handle platform-specific line endings. This is particularly important because different operating systems use different line ending conventions:
- Unix/Linux/macOS: LF (
\n) - Windows: CRLF (
\r\n) - Legacy systems: CR (
\r)
The parser normalizes all line endings before processing to ensure consistent behavior regardless of the file's origin.
Schema Validation
Zod Integration
OpenSpec uses Zod for schema validation throughout the system. Zod provides runtime type validation with compile-time type inference, eliminating the gap between TypeScript types and runtime behavior.
Schema Types:
| Schema | Purpose | Used By |
|---|---|---|
ArtifactSchema | Validates artifact definitions in schema.yaml | Artifact graph loader |
SchemaYamlSchema | Validates entire schema configuration files | Schema initialization |
ChangeMetadataSchema | Validates change folder metadata | Change creation and validation |
SpecRequirementSchema | Validates individual requirements | Spec parsing |
Schema Loading and Validation
Schemas are loaded from openspec/schemas/<schema-name>/schema.yaml and validated against the SchemaYamlSchema before use. This two-stage validation ensures that invalid schema definitions are caught early.
// Schema loading flow
async function loadSchema(schemaName: string, projectRoot: string): Promise<SchemaYaml> {
const schemaPath = getSchemaPath(schemaName, projectRoot);
const rawYaml = await fs.readFile(schemaPath, 'utf-8');
const parsed = YAML.parse(rawYaml);
// Validate against schema schema
const result = SchemaYamlSchema.safeParse(parsed);
if (!result.success) {
throw new SchemaValidationError(result.error);
}
return result.data;
}
Command-Level Validation
CLI Validate Command (`src/commands/validate.ts`)
The openspec validate command provides the primary interface for manual and automated validation of OpenSpec artifacts.
Usage:
openspec validate <change> [--strict]
openspec validate --specs [--all]
openspec validate --changes [--all]
Flags:
| Flag | Description | Default |
|---|---|---|
--strict | Enable all validation rules including warnings as errors | false |
--specs | Validate all specs in the repository | false |
--changes | Validate all active changes | true |
--all | Include archived items in validation scope | false |
--json | Output machine-readable JSON format | false |
Validation Output:
When validation succeeds, the command outputs a summary table:
✓ Change "add-dark-mode" validated successfully
- proposal.md: valid
- specs/auth/spec.md: valid (2 requirements, 5 scenarios)
- tasks.md: valid (12 tasks)
When validation fails, the output includes detailed error information:
✗ Validation failed for "update-auth-flow"
- specs/auth/spec.md:12
ERROR [SPEC_002]: Requirement "Legacy export" missing scenario
HELP: Add at least one scenario using "#### Scenario:" header
- specs/auth/spec.md:45
ERROR [SPEC_003]: Invalid WHEN/THEN format
HELP: Use "**WHEN** condition" and "**THEN** outcome" format
Validation Workflows
Change Lifecycle Validation
graph LR
A[Create Change] --> B[Validate Proposal]
B --> C{Valid?}
C -->|No| D[Fix Errors]
D --> B
C -->|Yes| E[Implement Tasks]
E --> F[Validate Specs]
F --> G{Valid?}
G -->|No| H[Update Specs]
H --> F
G -->|Yes| I[Archive Change]
I --> J[Final Validation]
J --> K[Merge to Source]Delta Detection Validation
The validation system extracts deltas from change spec files and validates their structure before applying them to the source specifications. This ensures that only properly formatted changes are merged.
Delta Types:
| Delta Type | Syntax | Description |
|---|---|---|
| ADDED | ## ADDED Requirements | New requirements being introduced |
| MODIFIED | ## MODIFIED Requirements | Changes to existing requirements |
| REMOVED | ## REMOVED Requirements | Requirements being deleted |
| RENAMED | ## RENAMED Requirements | Requirements being renamed or restructured |
Delta Extraction Process:
- Parse the spec file in the change's
specs/directory - Identify delta section headers using operation prefixes
- Validate each delta against the appropriate schema
- Check for conflicts between MODIFIED and REMOVED deltas
- Generate a validation report with all findings
Error Handling
Error Code Reference
| Code | Category | Description | Resolution |
|---|---|---|---|
SPEC_001 | Structure | Missing required requirement | Add requirement with proper ### Requirement: header |
SPEC_002 | Content | Requirement missing scenario | Add #### Scenario: with WHEN/THEN format |
SPEC_003 | Format | Invalid scenario syntax | Use exact WHEN and THEN format |
SPEC_004 | Content | Empty requirement description | Provide description after requirement header |
GRAPH_001 | Schema | Cyclic dependency detected | Review artifact requires field in schema.yaml |
GRAPH_002 | Schema | Duplicate artifact ID | Ensure unique IDs in schema definition |
DELTA_001 | Delta | Invalid delta operation | Use ADDED, MODIFIED, REMOVED, or RENAMED |
DELTA_002 | Delta | Delta references missing spec | Ensure target spec exists in source specs/ |
Recovery Strategies
The validation system implements graceful degradation for common issues:
Silent Failures Prevention:
- Scenario parsing failures are caught and reported explicitly
- Missing headers trigger specific error messages with fix suggestions
- Format violations include the expected format in the error output
Partial Success Handling:
When a file contains multiple issues, validation continues to identify all problems rather than failing on the first error. This reduces the number of validation cycles needed to fix all issues.
Integration with Other Modules
Project Configuration
The validation system respects project-level configuration defined in openspec/config.yaml. Project-specific rules can be configured to add validation constraints beyond the defaults.
validation:
strict: true
allowedDeltaTypes: [ADDED, MODIFIED, REMOVED]
requireDesignArtifact: true
Artifact Graph Integration
Validation is integrated with the artifact graph system to validate artifact state transitions and dependency requirements. Before marking an artifact as complete, the validation system verifies all prerequisites are satisfied.
Change Manager Integration
The change manager uses validation to enforce naming conventions and structural requirements when creating new changes. Invalid change names or structures are rejected at creation time.
Best Practices
Writing Valid Specs
- Use Exact Headers: Always use
#### Scenario:with four hashtags for scenarios - Follow WHEN/THEN Format: Structure scenarios with clear conditions and outcomes
- Include All Scenarios: Every requirement must have at least one scenario
- Use ADDED/MODIFIED/REMOVED: Prefix delta sections with operation names
- Keep Scenarios Testable: Scenarios should describe observable behavior
Validation in CI/CD
Integrate validation into continuous integration pipelines:
# Example CI configuration
- name: Validate OpenSpec changes
run: |
npx openspec validate --changes --strict
Debugging Validation Failures
When validation fails, use the JSON output for programmatic inspection:
openspec show add-feature --json --deltas-only
This outputs the parsed deltas without full change details, helping identify parsing issues.
Source: https://github.com/Fission-AI/OpenSpec / Human Manual
Supported AI Tools
Related topics: Slash Commands
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Continue reading this section for the full explanation and source context.
Related Pages
Related topics: Slash Commands
Supported AI Tools
OpenSpec is designed to integrate seamlessly with a wide variety of AI coding assistants. The supported AI tools system enables OpenSpec to provide consistent specification workflows across different development environments and toolchains.
Overview
OpenSpec supports AI tools through a multi-layered integration system that includes:
- Native Slash Commands: Built-in commands directly recognized by the AI tool
- Slash Command Templates: Tool-specific command files with frontmatter metadata
- AGENTS.md Compatible: Workflow instructions that AI tools can automatically discover
Sources: README.md:1-100
Architecture
The AI tools integration is built on a modular architecture with three core components:
graph TD
A[User Request] --> B[OpenSpec CLI]
B --> C{Determine Tool}
C --> D[Claude Code]
C --> E[Cursor]
C --> F[Codex]
C --> G[Amazon Q]
C --> H[Other Tools]
D --> I[Slash Commands]
E --> J[Cursor Commands]
F --> K[Codex Commands]
G --> L[Q Developer Prompts]
H --> M[AGENTS.md]
I --> N[openspec/proposal<br/>openspec/apply<br/>openspec/archive]
J --> O[openspec-proposal<br/>openspec-apply<br/>openspec-archive]Sources: src/core/command-generation/adapters/index.ts
Supported Tools List
OpenSpec integrates with the following AI coding assistants:
| Tool | Slash Commands | Command Directory | Category |
|---|---|---|---|
| Claude Code | /openspec/proposal, /openspec/apply, /openspec/archive | .claude/commands/openspec/ | Native |
| Cursor | /openspec-proposal, /openspec-apply, /openspec-archive | .cursor/commands/ | Native |
| CodeBuddy Code | /openspec:proposal, /openspec:apply, /openspec:archive | .codebuddy/commands/ | Native |
| Amazon Q Developer | @openspec-proposal, @openspec-apply, @openspec-archive | .amazonq/prompts/ | Native |
| Windsurf | /openspec-proposal, /openspec-apply, /openspec-archive | .windsurf/workflows/ | Native |
| RooCode | /openspec-proposal, /openspec-apply, /openspec-archive | .roo/commands/ | Native |
| Augment CLI | /openspec-proposal, /openspec-apply, /openspec-archive | .augment/commands/ | Native |
| Antigravity | /openspec-proposal, /openspec-apply, /openspec-archive | .agent/workflows/ | Native |
| Cline | Workflows in .clinerules/workflows/ | .clinerules/workflows/openspec-*.md | Native |
| Kilo Code | Command palette triggers | .kilocode/workflows/ | Native |
| Gemini CLI | TOML-based commands | .gemini/commands/openspec/ | Native |
| Qwen Code | /openspec:proposal, /openspec:apply, /openspec:archive | — | Native |
| CoStrict AI | — | — | Native |
| Qoder CLI | — | — | Native |
| Continue | /openspec-proposal.md, /openspec-apply.md, /openspec-archive.md | .continue/prompts/ | Native |
Sources: docs/supported-tools.md
Tool Categories
Native Slash Commands
Tools with native slash command support have built-in OpenSpec commands. When initializing OpenSpec for these tools, select the appropriate integration option.
graph LR
A[openspec init] --> B[Select Tool]
B --> C[Claude Code]
B --> D[Cursor]
B --> E[Windsurf]
C --> F[Creates: .claude/commands/openspec/]
D --> G[Creates: .cursor/commands/]
E --> H[Creates: .windsurf/workflows/]Sources: README.md:150-200
AGENTS.md Compatible
Some tools automatically read workflow instructions from openspec/AGENTS.md. These tools can be instructed to follow the OpenSpec workflow using natural language.
| Tool | Support Level |
|---|---|
| Amp | Compatible |
| Jules | Compatible |
| Others | Via AGENTS.md convention |
Sources: README.md:200-250
Command Structure
Slash Command Format
Commands follow a consistent pattern across tools but with tool-specific adaptations:
Sources: README.md:1-100
Doramagic Pitfall Log
Source-linked risks stay visible on the manual page so the preview does not read like a recommendation.
First-time setup may fail or require extra isolation and rollback planning.
Users may get misleading failures or incomplete behavior unless configuration is checked carefully.
Users cannot judge support quality until recent activity, releases, and issue response are checked.
First-time setup may fail or require extra isolation and rollback planning.
Doramagic Pitfall Log
Doramagic extracted 16 source-linked risk signals. Review them before installing or handing real data to the project.
1. Installation risk: /opsx:apply suggests openspec-continue-change which is not installed on core profile
- Severity: high
- Finding: Installation risk is backed by a source signal: /opsx:apply suggests openspec-continue-change which is not installed on core profile. Treat it as a review item until the current version is checked.
- User impact: First-time setup may fail or require extra isolation and rollback planning.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/issues/963
2. Configuration risk: Support schema extension or partial overrides to avoid full shadowing of built-in schemas
- Severity: high
- Finding: Configuration risk is backed by a source signal: Support schema extension or partial overrides to avoid full shadowing of built-in schemas. Treat it as a review item until the current version is checked.
- User impact: Users may get misleading failures or incomplete behavior unless configuration is checked carefully.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/issues/1074
3. Maintenance risk: open:sync messed up my spec.md files
- Severity: high
- Finding: Maintenance risk is backed by a source signal: open:sync messed up my spec.md files. Treat it as a review item until the current version is checked.
- User impact: Users cannot judge support quality until recent activity, releases, and issue response are checked.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/issues/911
4. Installation risk: Codex generated assets reference unsupported AskUserQuestion/TodoWrite/Task tools
- Severity: medium
- Finding: Installation risk is backed by a source signal: Codex generated assets reference unsupported AskUserQuestion/TodoWrite/Task tools. Treat it as a review item until the current version is checked.
- User impact: First-time setup may fail or require extra isolation and rollback planning.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/issues/1103
5. Installation risk: First steps don't work
- Severity: medium
- Finding: Installation risk is backed by a source signal: First steps don't work. Treat it as a review item until the current version is checked.
- User impact: First-time setup may fail or require extra isolation and rollback planning.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/issues/820
6. Installation risk: v1.1.0 - Cross-Platform Fixes, Nix Improvements
- Severity: medium
- Finding: Installation risk is backed by a source signal: v1.1.0 - Cross-Platform Fixes, Nix Improvements. Treat it as a review item until the current version is checked.
- User impact: First-time setup may fail or require extra isolation and rollback planning.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/releases/tag/v1.1.0
7. Installation risk: v1.3.1 - Path & Telemetry Fixes
- Severity: medium
- Finding: Installation risk is backed by a source signal: v1.3.1 - Path & Telemetry Fixes. Treat it as a review item until the current version is checked.
- User impact: First-time setup may fail or require extra isolation and rollback planning.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/releases/tag/v1.3.1
8. Configuration risk: Incomplete artifacts marked as "done" after workflow interruption
- Severity: medium
- Finding: Configuration risk is backed by a source signal: Incomplete artifacts marked as "done" after workflow interruption. Treat it as a review item until the current version is checked.
- User impact: Users may get misleading failures or incomplete behavior unless configuration is checked carefully.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/issues/1084
9. Configuration risk: OpenCode sync missing
- Severity: medium
- Finding: Configuration risk is backed by a source signal: OpenCode sync missing. Treat it as a review item until the current version is checked.
- User impact: Users may get misleading failures or incomplete behavior unless configuration is checked carefully.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/issues/1007
10. Configuration risk: v0.22.0 - Project Configuration
- Severity: medium
- Finding: Configuration risk is backed by a source signal: v0.22.0 - Project Configuration. Treat it as a review item until the current version is checked.
- User impact: Users may get misleading failures or incomplete behavior unless configuration is checked carefully.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/releases/tag/v0.22.0
11. Configuration risk: v1.0.0 - The OPSX Release
- Severity: medium
- Finding: Configuration risk is backed by a source signal: v1.0.0 - The OPSX Release. Treat it as a review item until the current version is checked.
- User impact: Users may get misleading failures or incomplete behavior unless configuration is checked carefully.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: Source-linked evidence: https://github.com/Fission-AI/OpenSpec/releases/tag/v1.0.0
12. Capability assumption: README/documentation is current enough for a first validation pass.
- Severity: medium
- Finding: README/documentation is current enough for a first validation pass.
- User impact: The project should not be treated as fully validated until this signal is reviewed.
- Recommended check: Open the linked source, confirm whether it still applies to the current version, and keep the first run isolated.
- Evidence: capability.assumptions | github_repo:1032459340 | https://github.com/Fission-AI/OpenSpec | README/documentation is current enough for a first validation pass.
Source: Doramagic discovery, validation, and Project Pack records
Community Discussion Evidence
These external discussion links are review inputs, not standalone proof that the project is production-ready.
Count of project-level external discussion links exposed on this manual page.
Open the linked issues or discussions before treating the pack as ready for your environment.
Community Discussion Evidence
Doramagic exposes project-level community discussion separately from official documentation. Review these links before using OpenSpec with real data or production workflows.
- Codex generated assets reference unsupported AskUserQuestion/TodoWrite/T - github / github_issue
- Incomplete artifacts marked as "done" after workflow interruption - github / github_issue
- /opsx:apply suggests openspec-continue-change which is not installed on - github / github_issue
- Feedback: Deep verification test - PUA mode v3 active - github / github_issue
- Protect OpenSpec from AI slop PRs - github / github_issue
- open:sync messed up my spec.md files - github / github_issue
- Support schema extension or partial overrides to avoid full shadowing of - github / github_issue
- [[Feature Request/Suggestion] Extension to package for custom schemas, as](https://github.com/Fission-AI/OpenSpec/issues/1081) - github / github_issue
- First steps don't work - github / github_issue
- OpenCode sync missing - github / github_issue
- v1.3.1 - Path & Telemetry Fixes - github / github_release
- v1.1.0 - Cross-Platform Fixes, Nix Improvements - GitHub / issue
Source: Project Pack community evidence and pitfall evidence