Skip to content
/

OpenSpec

openspec · Fission-AI/OpenSpec · ★ 51k · last commit 2026-05-23

Adds a lightweight spec layer so AI coding assistants and humans agree on what to build before any code is written.

Best whenPlanning artifacts should be editable schema-driven files that any team can customise without waiting for a framework release.
Skip ifRigid phase gates that block progress, Waterfall planning
Primitive shape 22 total
Commands 11 Skills 11
00

Summary

OpenSpec — Summary

OpenSpec is an npm-installable CLI tool that adds a lightweight spec layer to any project, letting humans and AI coding assistants agree on what to build before any code is written. It solves the core problem of AI coding assistants producing unpredictable results when requirements live only in chat history: by generating structured planning artifacts (proposal, specs, design, tasks) in a per-change folder that the AI reads before it touches code. What makes it distinct is its combination of broad multi-tool delivery (29 AI coding assistants supported via per-tool skill and command files generated by a single CLI), a delta-based spec model that works on brownfield codebases, and fully open/editable schema templates so teams can customise the prompts the AI receives without waiting for a release. The primary audience is individual developers and small-to-medium teams using AI-assisted coding who want predictability without heavyweight process; it explicitly supports solo projects as well as enterprise usage. With 50 k+ stars, 30 contributors, active CI, a versioned npm package (v1.3.1), and a Discord community, it is production-ready and actively maintained.

01

Overview

OpenSpec — Overview

Origin and Tagline

OpenSpec was created by Fission AI (led by Tabish Bidiwale, @TabishB on GitHub) and published to GitHub on 2025-08-05. The repository description is:

"Spec-driven development (SDD) for AI coding assistants."

The npm package name is @fission-ai/openspec.

Philosophy

The README states the project's philosophy as five explicit contrasts:

→ fluid not rigid
→ iterative not waterfall
→ easy not complex
→ built for brownfield not just greenfield
→ scalable from personal projects to enterprises

The docs/concepts.md file expands on these four principles:

Fluid not rigid. Traditional spec systems lock you into phases: first you plan, then you implement, then you're done. OpenSpec is more flexible — you can create artifacts in any order that makes sense for your work.

Iterative not waterfall. Requirements change. Understanding deepens. What seemed like a good approach at the start might not hold up after you see the codebase. OpenSpec embraces this reality.

Easy not complex. Some spec frameworks require extensive setup, rigid formats, or heavyweight processes. OpenSpec stays out of your way. Initialize in seconds, start working immediately, customize only if you need to.

Brownfield-first. Most software work isn't building from scratch — it's modifying existing systems. OpenSpec's delta-based approach makes it easy to specify changes to existing behavior, not just describe new systems.

Problem Framing

From the README's "Why OpenSpec?" section:

"AI coding assistants are powerful but unpredictable when requirements live only in chat history. OpenSpec adds a lightweight spec layer so you agree on what to build before any code is written."

The key benefits listed are:

  • Agree before you 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
  • Use your tools — works with 20+ AI assistants via slash commands

OPSX: The New Artifact-Guided Workflow

The project went through a significant architectural shift. The older workflow hardcoded instructions in TypeScript (the "legacy" workflow). The new OPSX workflow, described in docs/opsx.md, externalises all instructions into editable schema YAML and template Markdown files:

"The legacy OpenSpec workflow works, but it's locked down: Instructions are hardcoded — buried in TypeScript, you can't change them. All-or-nothing — one big command creates everything, can't test individual pieces. Fixed structure — same workflow for everyone, no customization. Black box — when AI output is bad, you can't tweak the prompts."

"OPSX opens it up. Now anyone can: Experiment with instructions — edit a template, see if the AI does better. Test granularly — validate each artifact's instructions independently. Customize workflows — define your own artifacts and dependencies. Iterate quickly — change a template, test immediately, no rebuild."

Competitive Positioning

The README explicitly names and compares two competitors:

vs. Spec Kit (GitHub) — Thorough but heavyweight. Rigid phase gates, lots of Markdown, Python setup. OpenSpec is lighter and lets you iterate freely.

vs. Kiro (AWS) — Powerful but you're locked into their IDE and limited to Claude models. OpenSpec works with the tools you already use.

Community Context

As of 2026-05-26 the repository has 50,822 stars, 3,566 forks, 30 contributors, 233 watchers, and an active Discord at https://discord.gg/YctCnvvshC. The project collects anonymous telemetry (command names and version only) which can be disabled via OPENSPEC_TELEMETRY=0 or DO_NOT_TRACK=1.

02

Architecture

OpenSpec — Architecture

Distribution Type

npm-package (also installs per-tool config files into the project)

Install Method

# Install globally
npm install -g @fission-ai/openspec@latest

# Also works with pnpm, yarn, bun
pnpm add -g @fission-ai/openspec@latest

# Then initialise in a project
cd your-project
openspec init

Nix flake support is also present (flake.nix in the repo root).

File / Directory Layout (Repo Top-Level)

OpenSpec/
├── .actrc
├── .changeset/
├── .coderabbit.yaml
├── .devcontainer/
├── .github/
├── .gitignore
├── AGENTS.md                            # (empty 0-byte file)
├── CHANGELOG.md
├── LICENSE                              # MIT
├── MAINTAINERS.md
├── README.md
├── README_OLD.md
├── WORKSPACE_REIMPLEMENTATION_DIRECTION.md
├── WORKSPACE_REIMPLEMENTATION_START_HERE.md
├── assets/
├── bin/
│   └── openspec.js                      # CLI entry-point
├── build.js
├── docs/
│   ├── cli.md
│   ├── commands.md
│   ├── concepts.md
│   ├── customization.md
│   ├── getting-started.md
│   ├── installation.md
│   ├── migration-guide.md
│   ├── multi-language.md
│   ├── opsx.md
│   ├── supported-tools.md
│   └── workflows.md
├── eslint.config.js
├── flake.lock / flake.nix
├── openspec/                            # Self-hosted: OpenSpec plans for OpenSpec
│   ├── changes/
│   ├── config.yaml
│   ├── explorations/
│   └── specs/
├── package.json
├── pnpm-lock.yaml
├── schemas/
│   ├── spec-driven/
│   │   ├── schema.yaml                  # Artifact definitions + prompt instructions
│   │   └── templates/
│   │       ├── design.md
│   │       ├── proposal.md
│   │       ├── spec.md
│   │       └── tasks.md
│   └── workspace-planning/
│       ├── schema.yaml
│       └── templates/
├── scripts/
│   └── postinstall.js
├── src/
│   ├── cli/
│   ├── commands/
│   │   ├── change.ts
│   │   ├── completion.ts
│   │   ├── config.ts
│   │   ├── feedback.ts
│   │   ├── schema.ts
│   │   ├── show.ts
│   │   ├── spec.ts
│   │   ├── validate.ts
│   │   ├── workspace.ts
│   │   └── workflow/
│   │       ├── index.ts
│   │       ├── instructions.ts
│   │       ├── new-change.ts
│   │       ├── schemas.ts
│   │       ├── shared.ts
│   │       ├── status.ts
│   │       └── templates.ts
│   ├── core/
│   ├── index.ts
│   ├── prompts/
│   ├── telemetry/
│   ├── ui/
│   └── utils/
├── test/
├── tsconfig.json
├── vitest.config.ts
└── vitest.setup.ts

Required Dependencies

  • Node.js >= 20.19.0 (hard engine requirement in package.json)
  • No external AI model API keys required at runtime
  • Runtime npm dependencies: @inquirer/core, @inquirer/prompts, chalk, commander, cross-spawn, fast-glob, ora, posthog-node, yaml, zod

Configuration Files Generated in Target Projects

After openspec init, the following files are created (tool selection dependent):

File/path Purpose
openspec/config.yaml Project config: default schema, context, per-artifact rules
openspec/specs/ Source-of-truth specification files
openspec/changes/ Per-change planning artifact folders
.claude/skills/openspec-*/SKILL.md Claude Code skill files (if claude selected)
.claude/commands/opsx/<id>.md Claude Code slash commands (if claude selected)
.cursor/skills/openspec-*/SKILL.md Cursor skills (if cursor selected)
.cursor/commands/opsx-<id>.md Cursor commands (if cursor selected)
.windsurf/skills/openspec-*/SKILL.md Windsurf skills
.windsurf/workflows/opsx-<id>.md Windsurf workflows
(tool-specific paths for 26 other tools) See docs/supported-tools.md for full matrix

The openspec/config.yaml schema:

schema: spec-driven         # default schema for new changes
context: |                  # injected into all artifact instructions
  Tech stack: TypeScript, React, Node.js
  ...
rules:                      # per-artifact extra rules
  proposal:
    - Include rollback plan
  specs:
    - Use Given/When/Then format for scenarios
03

Components

OpenSpec — Components

Commands (Slash Commands)

OpenSpec installs slash commands into each supported AI tool. Command names are tool-specific (e.g., /opsx:propose in Claude Code, /opsx-propose in Cursor). All commands are generated from the same schema definitions.

Core Profile (default, 5 commands)

Command Purpose
/opsx:propose Create a change folder and generate all planning artifacts in one step
/opsx:explore Open exploratory conversation to investigate ideas before committing to a change
/opsx:apply Read planning artifacts and implement pending tasks, marking them complete
/opsx:sync Merge delta specs from a completed change into the main openspec/specs/ folder
/opsx:archive Archive a completed change, merging its delta specs and moving it to the archive

Expanded Workflow Commands (optional, 6 additional commands)

Command Purpose
/opsx:new Create a new change scaffold (folder + .openspec.yaml metadata only)
/opsx:continue Create the next artifact in the dependency graph, one at a time
/opsx:ff Fast-forward: create all planning artifacts at once
/opsx:verify Validate that implementation matches the planning artifacts
/opsx:bulk-archive Archive multiple completed changes, resolving spec conflicts
/opsx:onboard Guided interactive tutorial through a complete end-to-end workflow cycle

Legacy Commands (still functional, deprecated)

Command Purpose
/openspec:proposal Create all artifacts at once (old all-or-nothing approach)
/openspec:apply Implement the change (legacy)
/openspec:archive Archive the change (legacy)

Total active commands: 11 (5 core + 6 expanded); 3 legacy

Skills

OpenSpec generates skill files (SKILL.md) for each supported AI tool that natively reads them. Each skill mirrors one command.

Generated Skill Names (when enabled by profile)

Skill Purpose
openspec-propose Mirror of /opsx:propose as a skill invocation
openspec-explore Mirror of /opsx:explore
openspec-new-change Mirror of /opsx:new
openspec-continue-change Mirror of /opsx:continue
openspec-apply-change Mirror of /opsx:apply
openspec-ff-change Mirror of /opsx:ff
openspec-sync-specs Mirror of /opsx:sync
openspec-archive-change Mirror of /opsx:archive
openspec-bulk-archive-change Mirror of /opsx:bulk-archive
openspec-verify-change Mirror of /opsx:verify
openspec-onboard Mirror of /opsx:onboard

Skill count varies by profile; core profile generates 5 skills.
Skill delivery path is tool-specific (e.g., .claude/skills/openspec-propose/SKILL.md for Claude Code).

Subagents

(none) — OpenSpec does not define named subagents or agent personas. All AI behaviour is driven by instructions embedded in the generated command/skill files, not by separate agent definitions.

Hooks

(none) — OpenSpec does not use Claude Code hooks (PreToolUse, PostToolUse, UserPromptSubmit, SessionStart, Stop, SubagentStop, etc.). Tool integration is purely via static command and skill files written to disk.

MCP Servers

(none) — OpenSpec does not bundle or require any MCP servers.

Scripts / Binaries

Binary Install location Purpose
openspec ./bin/openspec.js (global npm install) Main CLI entry-point

CLI Sub-commands

Command Purpose
openspec init [path] Initialize OpenSpec in a project, create folder structure, configure AI tools
openspec update [path] Regenerate AI tool skill/command files after CLI upgrade
openspec list Browse changes and specs
openspec view Interactive dashboard
openspec show <item> Display content of a change or spec
openspec validate Check changes and specs for structural issues
openspec status Show artifact completion status for a change
openspec instructions <artifact> Print structured instructions for creating a specific artifact
openspec templates Show template paths for available schemas
openspec schemas List available schemas
openspec schema init <name> Create a new custom schema
openspec schema fork <source> <name> Fork an existing schema
openspec schema validate <name> Validate a schema definition
openspec schema which Show which schema is active
openspec archive Archive a completed change (CLI equivalent of /opsx:archive)
openspec config View and modify global/project configuration
openspec config profile Select workflow profile (core / custom)
openspec workspace setup Set up a cross-repo coordination workspace (beta)
openspec workspace list / ls List known workspaces
openspec workspace link Link a repo or folder to a workspace
openspec workspace relink Repair a linked path
openspec workspace doctor Check workspace health
openspec workspace update Refresh workspace-local agent skills
openspec workspace open Open a workspace
openspec feedback Submit feedback via GitHub
openspec completion install Install shell tab completions
05

Prompts

OpenSpec — Prompts

The most important prompt content in OpenSpec lives in:

  1. schemas/spec-driven/schema.yaml — per-artifact instruction: fields (the directives given to the AI for each artifact)
  2. schemas/spec-driven/templates/*.md — blank starter templates the AI fills in
  3. src/commands/workflow/instructions.ts — the XML-tagged output format the CLI emits to the AI
  4. Generated SKILL.md files (per-tool, installed into .tool/skills/openspec-*/SKILL.md)

Excerpt 1 — Proposal Artifact Instruction (from schemas/spec-driven/schema.yaml)

This is the verbatim instruction: field for the proposal artifact. It is injected into the AI's context whenever it creates proposal.md.

instruction: |
  Create the proposal document that establishes WHY this change is needed.

  Sections:
  - **Why**: 1-2 sentences on the problem or opportunity. What problem does this solve? Why now?
  - **What Changes**: Bullet list of changes. Be specific about new capabilities, modifications, or removals. Mark breaking changes with **BREAKING**.
  - **Capabilities**: Identify which specs will be created or modified:
    - **New Capabilities**: List capabilities being introduced. Each becomes a new `specs/<name>/spec.md`. Use kebab-case names (e.g., `user-auth`, `data-export`).
    - **Modified Capabilities**: List existing capabilities whose REQUIREMENTS are changing. Only include if spec-level behavior changes (not just implementation details). Each needs a delta spec file. Check `openspec/specs/` for existing spec names. Leave empty if no requirement changes.
  - **Impact**: Affected code, APIs, dependencies, or systems.

  IMPORTANT: The Capabilities section is critical. It creates the contract between
  proposal and specs phases. Research existing specs before filling this in.
  Each capability listed here will need a corresponding spec file.

  Keep it concise (1-2 pages). Focus on the "why" not the "how" -
  implementation details belong in design.md.

  This is the foundation - specs, design, and tasks all build on this.

Technique: Explicit section-by-section decomposition with named constraints ("1-2 sentences", "Keep it concise (1-2 pages)"), a role separation directive ("Focus on the 'why' not the 'how'"), and a named IMPORTANT warning that highlights cross-artifact dependency ("The Capabilities section is critical. It creates the contract between proposal and specs phases.").


Excerpt 2 — Specs Artifact Instruction (from schemas/spec-driven/schema.yaml)

instruction: |
  Create specification files that define WHAT the system should do.

  Create one spec file per capability listed in the proposal's Capabilities section.
  - New capabilities: use the exact kebab-case name from the proposal (specs/<capability>/spec.md).
  - Modified capabilities: use the existing spec folder name from openspec/specs/<capability>/ when creating the delta spec at specs/<capability>/spec.md.

  Delta operations (use ## headers):
  - **ADDED Requirements**: New capabilities
  - **MODIFIED Requirements**: Changed behavior - MUST include full updated content
  - **REMOVED Requirements**: Deprecated features - MUST include **Reason** and **Migration**
  - **RENAMED Requirements**: Name changes only - use FROM:/TO: format

  Format requirements:
  - Each requirement: `### Requirement: <name>` followed by description
  - Use SHALL/MUST for normative requirements (avoid should/may)
  - Each scenario: `#### Scenario: <name>` with WHEN/THEN format
  - **CRITICAL**: Scenarios MUST use exactly 4 hashtags (`####`). Using 3 hashtags or bullets will fail silently.
  - Every requirement MUST have at least one scenario.

  MODIFIED requirements workflow:
  1. Locate the existing requirement in openspec/specs/<capability>/spec.md
  2. Copy the ENTIRE requirement block (from `### Requirement:` through all scenarios)
  3. Paste under `## MODIFIED Requirements` and edit to reflect new behavior
  4. Ensure header text matches exactly (whitespace-insensitive)

  Common pitfall: Using MODIFIED with partial content loses detail at archive time.
  If adding new concerns without changing existing behavior, use ADDED instead.

  Example:

ADDED Requirements

Requirement: User can export data

The system SHALL allow users to export their data in CSV format.

Scenario: Successful export

  • WHEN user clicks "Export" button
  • THEN system downloads a CSV file with all user data

REMOVED Requirements

Requirement: Legacy export

Reason: Replaced by new export system Migration: Use new export endpoint at /api/v2/export


Specs should be testable - each scenario is a potential test case.

Technique: Structured delta-diff format with four named operation types (ADDED / MODIFIED / REMOVED / RENAMED), normative language enforcement (SHALL/MUST), a "CRITICAL" header-level warning to prevent silent parser failures, a numbered step-by-step MODIFIED workflow, and an inline example. The technique surfaces common pitfalls ("Using MODIFIED with partial content loses detail at archive time") to pre-empt AI mistakes.


Excerpt 3 — Tasks Artifact Instruction (from schemas/spec-driven/schema.yaml)

instruction: |
  Create the task list that breaks down the implementation work.

  **IMPORTANT: Follow the template below exactly.** The apply phase parses
  checkbox format to track progress. Tasks not using `- [ ]` won't be tracked.

  Guidelines:
  - Group related tasks under ## numbered headings
  - Each task MUST be a checkbox: `- [ ] X.Y Task description`
  - Tasks should be small enough to complete in one session
  - Order tasks by dependency (what must be done first?)

  Example:

1. Setup

  • 1.1 Create new module structure
  • 1.2 Add dependencies to package.json

2. Core Implementation

  • 2.1 Implement data export function
  • 2.2 Add CSV formatting utilities

Reference specs for what needs to be built, design for how to build it.
Each task should be verifiable - you know when it's done.

Technique: Machine-parseable format constraint (- [ ] X.Y required for automated progress tracking) combined with cross-artifact grounding ("Reference specs for what needs to be built, design for how to build it"). The instruction explains why the format is required (the apply phase parses it), giving the AI a principled reason not to deviate.


Excerpt 4 — Apply Phase Instruction (from schemas/spec-driven/schema.yaml)

apply:
  requires: [tasks]
  tracks: tasks.md
  instruction: |
    Read context files, work through pending tasks, mark complete as you go.
    Pause if you hit blockers or need clarification.

Technique: Minimal instruction that defers all complexity to the pre-generated planning artifacts. The AI is instructed to read context files (the proposal, specs, design, tasks it has already agreed to), not to re-plan. "Pause if you hit blockers or need clarification" is the only human-approval gate built into the schema.


Excerpt 5 — CLI Output Format for Artifact Instructions (from src/commands/workflow/instructions.ts)

When openspec instructions <artifact> is run, the CLI emits structured XML-like tags for the AI to consume:

// Opening tag
console.log(`<artifact id="${artifactId}" change="${changeName}" schema="${schemaName}">`);

// Warning for blocked artifacts
console.log('<warning>');
console.log('This artifact has unmet dependencies. Complete them first or proceed with caution.');
console.log(`Missing: ${missing.join(', ')}`);
console.log('</warning>');

// Task directive
console.log('<task>');
console.log(`Create the ${artifactId} artifact for change "${changeName}".`);
console.log(description);
console.log('</task>');

// Project context (AI constraint - do not include in output)
console.log('<project_context>');
console.log('<!-- This is background information for you. Do NOT include this in your output. -->');
console.log(context);
console.log('</project_context>');

Technique: XML/HTML-like semantic tags (<artifact>, <task>, <warning>, <project_context>, <rules>, <template>, <dependencies>, <unlocks>) to segment the AI's context into distinct roles. The <!-- This is background information for you. Do NOT include this in your output. --> comment is a meta-instruction embedded in the context block. This is a structured-context prompting pattern that prevents context bleed into generated output.


Excerpt 6 — Proposal Template (from schemas/spec-driven/templates/proposal.md)

This is the blank template the AI fills in:

## Why

<!-- Explain the motivation for this change. What problem does this solve? Why now? -->

## What Changes

<!-- Describe what will change. Be specific about new capabilities, modifications, or removals. -->

## Capabilities

### New Capabilities
<!-- Capabilities being introduced. Replace <name> with kebab-case identifier (e.g., user-auth, data-export, api-rate-limiting). Each creates specs/<name>/spec.md -->
- `<name>`: <brief description of what this capability covers>

### Modified Capabilities
<!-- Existing capabilities whose REQUIREMENTS are changing (not just implementation).
     Only list here if spec-level behavior changes. Each needs a delta spec file.
     Use existing spec names from openspec/specs/. Leave empty if no requirement changes. -->
- `<existing-name>`: <what requirement is changing>

## Impact

<!-- Affected code, APIs, dependencies, systems -->

Technique: HTML comments as inline context hints (explaining what to write and why) rather than leaving empty sections. The template constrains the AI to kebab-case identifiers and explicitly references how each capability entry creates a downstream file (specs/<name>/spec.md), making the template self-documenting.

09

Uniqueness

OpenSpec — Uniqueness & Positioning

What Does OpenSpec Do That No Other Seed Framework Does?

1. Single CLI generates tool-specific config for 29 AI assistants simultaneously.
openspec init --tools all writes skill files and slash-command files into the correct dotfile paths for every supported tool in one command. No other spec framework in this analysis provides a single install mechanism targeting Amazon Q, Codex, GitHub Copilot, Gemini CLI, Kiro, Kimi, Trae, ForgeCode, and 21 others from a single package.

2. Editable, schema-based prompt definitions without requiring a CLI rebuild.
The OPSX workflow externalises all artifact instructions and templates into schemas/<name>/schema.yaml and schemas/<name>/templates/*.md within the project directory. A team can edit the instruction text, add new artifacts, or change the dependency graph and the change takes effect immediately — without waiting for an npm release. The docs/opsx.md explicitly contrasts this with the legacy approach:

"OPSX opens it up. Now anyone can: Experiment with instructions — edit a template, see if the AI does better."

3. Delta-spec model designed for brownfield codebases.
OpenSpec's spec format uses explicit delta operations (ADDED / MODIFIED / REMOVED / RENAMED) on a living openspec/specs/ source of truth. This means every change is a diff against a known baseline, not a new document. After archive, the diff merges into the baseline. This is purpose-built for teams modifying existing systems, not just greenfield projects.

4. Artifact dependency graph with machine-readable openspec instructions CLI output.
The openspec instructions <artifact> command emits XML-tagged structured context for the AI (<artifact>, <task>, <project_context>, <rules>, <template>, <dependencies>, <unlocks>). This allows AI agents and scripts to request precise, artifact-specific prompts without manually constructing them, and supports --json output for programmatic consumption.

What Does OpenSpec Explicitly DROP That Others Have?

  • No mandatory phase gates. The README philosophy is "fluid not rigid." There are no enforced checkpoints that block the AI from proceeding.
  • No TDD enforcement. The spec format nudges toward testable scenarios but never requires tests to pass before implementation or archival.
  • No multi-agent orchestration. Single-agent, single-session execution is the model. No built-in parallelism.
  • No proprietary cloud service or IDE lock-in. Everything is local files; there is no hosted backend. This is explicitly positioned against Kiro (AWS):

"vs. Kiro (AWS) — Powerful but you're locked into their IDE and limited to Claude models. OpenSpec works with the tools you already use."

  • No heavyweight setup. Positioned against Spec Kit (GitHub):

"vs. Spec Kit (GitHub) — Thorough but heavyweight. Rigid phase gates, lots of Markdown, Python setup. OpenSpec is lighter and lets you iterate freely."

One-Sentence Positioning

OpenSpec is the tool-agnostic, schema-editable, brownfield-native spec layer that turns any AI coding assistant into a spec-driven partner with a single npm install -g and openspec init.

Failure Modes / Criticisms

No Reddit or HN quotes are available in the source material (sentiment: unknown). Based on the source documentation, the following structural limitations are identifiable:

  1. Context window hygiene is manual. The docs recommend clearing context before implementation but provide no automated mechanism to do so.
  2. Workspace feature is beta and explicitly not stable. The docs/concepts.md states: "Do not build external automation, integrations, or long-lived workflows on top of workspace behavior; the commands, state files, and JSON output can change at any point."
  3. Spec quality is entirely AI-dependent. The instructions guide the AI but cannot guarantee the output is correct; bad artifacts produce bad implementations.
  4. Delta merge on archive is agentic. The /opsx:bulk-archive conflict resolution involves the AI inspecting the codebase to resolve spec conflicts — a process that could fail silently or produce incorrect merges.
  5. AGENTS.md is empty. The root AGENTS.md file in the repo (size: 0 bytes) is a placeholder with no content, which may confuse users expecting project-level agent instructions there.

Competitors Named in README

04

Workflow

OpenSpec — Workflow

Workflow Phases

OpenSpec uses the spec-driven schema by default. The artifact dependency graph defines an ordered sequence:

Phase Command Artifact(s) Produced Blocked Until
1. Explore (optional) /opsx:explore None (conversation only)
2. Scaffold /opsx:new or /opsx:propose openspec/changes/<name>/ + .openspec.yaml
3. Proposal /opsx:continue or /opsx:ff proposal.md Change folder exists
4. Specs /opsx:continue or /opsx:ff specs/<capability>/spec.md (one per capability) proposal.md
5. Design /opsx:continue or /opsx:ff design.md proposal.md
6. Tasks /opsx:continue or /opsx:ff tasks.md specs/** + design.md
7. Implement /opsx:apply Code changes; checkbox updates in tasks.md tasks.md
8. Verify (optional) /opsx:verify Verification report Implementation done
9. Sync (optional) /opsx:sync Merges delta specs → openspec/specs/
10. Archive /opsx:archive Change moved to openspec/changes/archive/YYYY-MM-DD-<name>/; specs merged All tasks complete

The core profile shortcut collapses phases 2–6 into one: /opsx:propose creates the change folder and generates all planning artifacts in a single command.

Human Approval Gates

OpenSpec's philosophy is explicitly fluid, not rigid — there are no mandatory phase gates forcing human approval. However, the workflow creates natural review points:

  1. After /opsx:propose — The AI generates proposal.md, specs/, design.md, and tasks.md; the human reviews them before typing /opsx:apply.
  2. During /opsx:apply — The README advises: "Pause if you hit blockers or need clarification." The apply instruction in schema.yaml states: "Read context files, work through pending tasks, mark complete as you go. Pause if you hit blockers or need clarification."
  3. Before /opsx:archive — The "all tasks complete" state message reads: "All tasks are complete! This change is ready to be archived. Consider running tests and reviewing the changes before archiving."
  4. /opsx:bulk-archive conflict resolution — The AI explicitly prompts the user: "Archive all 3 changes?" before proceeding.

There are no automated gatekeeping hooks that block progress; approval is social/conversational.

TDD Enforcement

Optional. The spec.md template uses WHEN/THEN scenario format explicitly designed to be testable:

"Specs should be testable - each scenario is a potential test case."

The schema instruction for specs states: "Each scenario is a potential test case." But there is no mechanism that requires tests to be written or pass before implementation or archival proceeds. The framework nudges toward testable specs without enforcing TDD.

Multi-Agent Execution

No — OpenSpec does not have built-in multi-agent parallelism. All commands execute in a single AI assistant session. Parallel development is possible at the human level (separate change folders for separate features), but OpenSpec itself does not orchestrate parallel agent execution.

The beta workspace feature supports cross-repo planning coordination but is not multi-agent execution:

"Workspace support is under active development and is not ready for use yet. Do not build external automation, integrations, or long-lived workflows on top of workspace behavior."

Git Worktrees / Isolated Workspaces

No — OpenSpec does not create or manage git worktrees. Each change lives in its own folder under openspec/changes/<name>/, providing logical isolation, but there is no filesystem-level isolation via git worktrees.

Spec Format

Markdown — All artifacts are Markdown files.

  • proposal.md — unstructured Markdown with ## Why, ## What Changes, ## Capabilities, ## Impact sections
  • specs/<capability>/spec.md — structured Markdown using ### Requirement: and #### Scenario: headers with WHEN/THEN syntax
  • design.md — unstructured Markdown
  • tasks.md — Markdown with - [ ] X.Y Task checkbox format

Schema definitions live in schemas/spec-driven/schema.yaml (YAML) but the generated artifacts are Markdown.

Files Generated Per Feature

openspec/changes/<change-name>/
├── .openspec.yaml          # Change metadata (schema name, created date)
├── proposal.md             # Why this change, what changes, capabilities, impact
├── specs/
│   └── <capability>/
│       └── spec.md         # Delta specification: ADDED/MODIFIED/REMOVED requirements
├── design.md               # Technical approach, decisions, risks, migration plan
└── tasks.md                # Implementation checklist with numbered checkboxes

On archive, the change folder is moved to:

openspec/changes/archive/YYYY-MM-DD-<change-name>/

And the delta specs are merged into:

openspec/specs/<capability>/spec.md

Schema Customisation

Teams can create custom schemas via openspec schema init <name> or openspec schema fork <source> <name>. A custom schema defines its own artifact IDs, dependency graph, instruction text, and templates in schemas/<name>/ within the project. The schema YAML format supports arbitrary artifact chains and apply.requires / apply.tracks configuration.

06

Memory Context

OpenSpec — Memory & Context

Memory Model

file-based

All state is stored in plain files within the project's openspec/ directory. There is no database, vector store, or in-process memory layer.

Persistence Scope

project

All OpenSpec state lives in the openspec/ folder at the project root:

openspec/
├── config.yaml           # Project-level defaults and context
├── specs/                # Source-of-truth spec files (permanent)
│   └── <capability>/
│       └── spec.md
└── changes/              # Active and archived change folders
    ├── <change-name>/
    │   ├── .openspec.yaml    # Change metadata (schema, created date)
    │   ├── proposal.md
    │   ├── specs/
    │   ├── design.md
    │   └── tasks.md
    └── archive/
        └── YYYY-MM-DD-<change-name>/

There is no global (cross-project) memory. The beta workspace feature adds a machine-local registry at $XDG_DATA_HOME/openspec/workspaces/registry.yaml for cross-repo coordination, but this is workspace metadata, not AI memory.

Context Compaction Strategy

OpenSpec does not intercept or handle /compact or context loss directly. Its approach is structural: the planning artifacts on disk serve as the durable context that survives session boundaries. The docs/opsx.md file states:

"OpenSpec benefits from a clean context window. Clear your context before starting implementation and maintain good context hygiene throughout your session."

The openspec/config.yaml context: field (capped at 50 KB) is injected into every artifact instruction invocation, providing repeatable project context regardless of what else is in the AI's context window.

Cross-Session Handoffs

Yes — via disk-based artifacts. A new session can resume work by:

  1. Running openspec status --change <name> to see which artifacts are complete and which tasks remain
  2. Running openspec instructions <artifact> to get the structured prompt for the next artifact
  3. Typing /opsx:apply <change-name> — the CLI reads tasks.md checkbox state and presents remaining tasks

The .openspec.yaml file in each change directory records the schema name and creation date, allowing the CLI to reconstruct the artifact graph and dependency state without any prior session context.

Tasks progress is tracked by checkbox state in tasks.md (- [ ] vs - [x]), which persists between sessions and is parsed by src/commands/workflow/instructions.ts.

Memory Bank / Knowledge Base

The openspec/specs/ directory functions as a knowledge base of the system's current behaviour. The docs describe it as:

"Specs are the source of truth — they describe how your system currently behaves."

After each change is archived, its delta specs are merged into openspec/specs/, so the knowledge base grows incrementally. The delta spec model (ADDED / MODIFIED / REMOVED / RENAMED operations) allows incremental updates without full rewrites, making the knowledge base suitable for brownfield codebases with evolving requirements.

No reference to "memory bank" terminology is made in the source.

07

Target Tools

OpenSpec — Target Tools

Officially Supported Tools

Source: docs/supported-tools.md (fetched 2026-05-26).

"Not sure if your tool is supported? View the full list – we support 25+ tools and growing."

The README also states: "works with 20+ AI assistants via slash commands."

The actual count from docs/supported-tools.md is 29 tools (listed below).

How Tool Support Works

For each selected tool, openspec init installs:

  1. Skills (if delivery includes skills): <tool-dir>/skills/openspec-*/SKILL.md
  2. Commands (if delivery includes commands): tool-specific opsx-* command files

Three tools (ForgeCode, Kimi, Trae) receive only skills — no generated command files.

Full Tool Matrix

Tool ID Skills Path Command Path Caveats
Amazon Q Developer amazon-q .amazonq/skills/openspec-*/SKILL.md .amazonq/prompts/opsx-<id>.md
Antigravity antigravity .agent/skills/openspec-*/SKILL.md .agent/workflows/opsx-<id>.md
Auggie auggie .augment/skills/openspec-*/SKILL.md .augment/commands/opsx-<id>.md
IBM Bob Shell bob .bob/skills/openspec-*/SKILL.md .bob/commands/opsx-<id>.md
Claude Code claude .claude/skills/openspec-*/SKILL.md .claude/commands/opsx/<id>.md
Cline cline .cline/skills/openspec-*/SKILL.md .clinerules/workflows/opsx-<id>.md
CodeBuddy codebuddy .codebuddy/skills/openspec-*/SKILL.md .codebuddy/commands/opsx/<id>.md
Codex codex .codex/skills/openspec-*/SKILL.md $CODEX_HOME/prompts/opsx-<id>.md Commands installed globally in $CODEX_HOME (or ~/.codex/prompts/), not project-local
ForgeCode forgecode .forge/skills/openspec-*/SKILL.md (none) No command adapter; use skill-based /openspec-* invocations
Continue continue .continue/skills/openspec-*/SKILL.md .continue/prompts/opsx-<id>.prompt
CoStrict costrict .cospec/skills/openspec-*/SKILL.md .cospec/openspec/commands/opsx-<id>.md
Crush crush .crush/skills/openspec-*/SKILL.md .crush/commands/opsx/<id>.md
Cursor cursor .cursor/skills/openspec-*/SKILL.md .cursor/commands/opsx-<id>.md Command syntax is /opsx-<id> (hyphen, not colon)
Factory Droid factory .factory/skills/openspec-*/SKILL.md .factory/commands/opsx-<id>.md
Gemini CLI gemini .gemini/skills/openspec-*/SKILL.md .gemini/commands/opsx/<id>.toml TOML format for commands
GitHub Copilot github-copilot .github/skills/openspec-*/SKILL.md .github/prompts/opsx-<id>.prompt.md Only IDE extensions (VS Code, JetBrains, Visual Studio); Copilot CLI does NOT support .github/prompts/*.prompt.md
iFlow iflow .iflow/skills/openspec-*/SKILL.md .iflow/commands/opsx-<id>.md
Junie junie .junie/skills/openspec-*/SKILL.md .junie/commands/opsx-<id>.md
Kilo Code kilocode .kilocode/skills/openspec-*/SKILL.md .kilocode/workflows/opsx-<id>.md
Kimi CLI kimi .kimi/skills/openspec-*/SKILL.md (none) No command adapter; use /skill:openspec-* invocations
Kiro kiro .kiro/skills/openspec-*/SKILL.md .kiro/prompts/opsx-<id>.prompt.md
Lingma lingma .lingma/skills/openspec-*/SKILL.md .lingma/commands/opsx/<id>.md
OpenCode opencode .opencode/skills/openspec-*/SKILL.md .opencode/commands/opsx-<id>.md
Pi pi .pi/skills/openspec-*/SKILL.md .pi/prompts/opsx-<id>.md
Qoder qoder .qoder/skills/openspec-*/SKILL.md .qoder/commands/opsx/<id>.md
Qwen Code qwen .qwen/skills/openspec-*/SKILL.md .qwen/commands/opsx-<id>.toml TOML format for commands
RooCode roocode .roo/skills/openspec-*/SKILL.md .roo/commands/opsx-<id>.md
Trae trae .trae/skills/openspec-*/SKILL.md (none) No command adapter; use /openspec-* invocations
Windsurf windsurf .windsurf/skills/openspec-*/SKILL.md .windsurf/workflows/opsx-<id>.md

Command Syntax Differences by Tool

Tool Example Syntax
Claude Code /opsx:propose, /opsx:apply
Cursor /opsx-propose, /opsx-apply
Windsurf /opsx-propose, /opsx-apply
Copilot (IDE) /opsx-propose, /opsx-apply
Kimi CLI /skill:openspec-propose, /skill:openspec-apply-change
Trae /openspec-propose, /openspec-apply-change

Primary Tool

OpenSpec is tool-agnostic by design. The README recommends "Codex 5.5 and Opus 4.7" as models but does not designate a primary tool. The project's own repo is initialized with the claude tool (it contains .claude/ configuration).

Non-Interactive / CI Setup

# Configure specific tools non-interactively
openspec init --tools claude,cursor

# Configure all supported tools
openspec init --tools all

# Skip tool configuration
openspec init --tools none
08

Signals

OpenSpec — Signals

GitHub Stars

50,822 (as of 2026-05-26, via gh api /repos/Fission-AI/OpenSpec | jq .stargazers_count)

Last Commit Date

2026-05-23 (commit date from gh api /repos/Fission-AI/OpenSpec/commits?per_page=1)
Repository was pushed to on 2026-05-26.

Number of Contributors

30 (via gh api /repos/Fission-AI/OpenSpec/contributors)

Open Issues / Pull Requests

  • Open issues: 352 (352 is the combined count of issues + PRs per GitHub API open_issues_count)
  • Pull requests listed on GitHub page: 101

Forks

3,566 forks

Maintainer Status

Active — The repository has had commits within days of this report (last push 2026-05-26), has an active CI badge, a Discord community, and npm package v1.3.1 published. The MAINTAINERS.md lists one lead maintainer (Tabish Bidiwale / @TabishB) and one advisor.

Reddit / HN Sentiment

Unknown — No Reddit or HN discussion data was available in the _index/wave-2b-reddit-discovery.md reference file, and no search results were consulted. The project has a Discord server (https://discord.gg/YctCnvvshC) for community discussion.

npm Package

  • Package: @fission-ai/openspec
  • Version: 1.3.1
  • Downloads badge present in README (https://img.shields.io/npm/dm/@fission-ai/openspec)

Repository Age

Created: 2025-08-05 — OpenSpec is approximately 9 months old as of this report date (2026-05-26).

Topics (GitHub)

ai, context-engineering, engineering, planning, prd, sdd, sdlc, spec, spec-driven-development, specification

Related frameworks

same archetype · same primary tool · same memory type

Spec Kit ★ 106k

Turns a natural-language feature description into a complete, versioned, AI-executable specification pipeline installable for 30+…

ECC (Everything Claude Code) ★ 193k

Comprehensive harness-native operator system: 246 skills + 61 agents + continuous learning hooks + multi-model routing across 8…

Gemini CLI (Google) ★ 105k

Bring the full power of Gemini into the terminal with a free tier, Google Search grounding, and extensible MCP support.

OpenAI Codex CLI ★ 86k

Give developers a sandboxed, locally-running OpenAI coding agent with approval gates and skill orchestration.

cursorrules v5 (kinopeee) ★ 1.1k

Bilingual (ja/en) Cursor rule set with tricolor task classification, security-first prompt injection defense, and structured git…

windsurfrules v5 (kinopeee) ★ 364

Windsurf/Antigravity port of cursorrules v5 — same tricolor task classification and injection defense, translated to Windsurf's…