Spec-driven development · mid-2026

CrystalSpec vs OpenSpec
From one terminal to the whole team.

OpenSpec is a lightweight, MIT-licensed convention that keeps spec-driven development inside your git repo and your coding agent. CrystalSpec is a hosted spec workspace — typed, versioned, and shared — that the same agents can query over MCP.

Free 14-day trial. No credit card. Cancel in two clicks.

OpenSpec — free & open source
MIT
CrystalSpec — per seat / month
$10
OpenSpec's home — your git tree
1 repo
CrystalSpec's home — hosted & shared
1 workspace
The short version

A convention for one repo, or a workspace for the team.

OpenSpec, from Fission-AI, bills itself as "the most loved spec framework", and the enthusiasm is earned: it's an MIT-licensed, free toolkit with tens of thousands of GitHub stars — well past 50k as of mid-2026 and a 1.0 release behind it. You install it with a single npx command, run openspec init, and get an openspec/ folder that sits beside your code. Each change gets its own directory: a proposal.md for the rationale, delta files that mark requirements as ADDED, MODIFIED, or REMOVED, a design.md, and a tasks.md checklist your agent works through. It is deliberately lightweight, tool-agnostic across twenty-plus assistants, and built for brownfield codebases, not just greenfield — and unlike throwaway per-feature scaffolding, its deltas fold into a living specs/ folder while finished changes are archived for history. Real durability, zero lock-in.

Here is the honest distinction, and it is not the tired complaint about markdown rotting — OpenSpec's specs genuinely persist. The difference is shape and audience. OpenSpec is a convention: text files driven from one developer's terminal, for one repository, read by opening them and by feeding them into an agent's context. That is a fine loop when everyone who touches the spec is an engineer with the repo cloned. But a folder of markdown can't be asked a question at the entity level, can't be diffed field by field for a product manager who will never open a terminal, and can't be handed to a stakeholder as a read-only link. The spec is real; it is simply addressed to engineers and confined to the repo.

CrystalSpec meets the same "align before you build" instinct with a hosted workspace rather than a file convention. Nothing is a requirement paragraph here; the spec is a graph of typed entities cross-linked into one vocabulary — decision-branched flows, data models whose fields carry enums and point at other models, roles, test cases, and a shared glossary. To edit, you fork a draft revision that locks to a single active editor; when you publish, the new version ships with an AI-written summary and a diff resolved down to the field, and reverting any version brings its full lineage along with it. Crucially, the AI never touches the spec on its own — it hands back appliability-screened proposals — create, update, delete — and a person walks the rows accepting or declining as they go, every decision retained. OpenSpec's agent rewrites your markdown in place; CrystalSpec turns approval into a structural fact. And whenever you want a health check, the one-click inconsistency analyzer rakes the project end to end for contradictions, gaps, and glossary entries that nothing points to.

The agent relationship is inverted, too. Instead of an agent scooping files up out of a repo, CrystalSpec is something your agents interrogate from outside: a hosted MCP server wired for Claude Code, Claude Desktop, and Cursor, a scoped GraphQL API beside it, and HMAC-signed revision.published webhooks. An agent can fetch a single flow, walk the revision history, and read exactly what shifted since its last look. Publish a revision and the change is broken down into atomic tasks in GitHub, Linear, or ClickUp — re-runs are safe, and each task carries a link home to its source. Wrapped around all of this is a collaboration surface OpenSpec never aimed to provide: @mention discussions, read-only public share links, server-side permissions, and a boardroom-ready PDF export. Both tools wager on specs that last. OpenSpec keeps that wager inside your repository with no vendor in the picture; CrystalSpec raises it into a workspace the whole team — and every agent — can reach.

Anatomy of a change

The same edit, two representations.

Add two-factor auth to a sign-in flow. OpenSpec records it as a delta in a markdown file; CrystalSpec records it as a typed revision with a field-level diff your agents can query.

openspec/changes/add-2fa/specs/auth/spec.mddelta
## ADDED Requirements
### Requirement: Two-Factor Auth
The system SHALL require a second
factor when 2FA is enabled.
#### Scenario: Valid TOTP code
## MODIFIED Requirements
### Requirement: Sign-In
Merged into specs/ on archive · read by opening the file
Flow · F-0007 · Sign-In rev v6 · published
1Enter email & passwordUSER
2Require a valid TOTP code+ field diffNEW
3Rate-limit failed attemptsAI
AI proposal, approved by you · queryable over MCP
Where CrystalSpec pulls ahead

What a workspace adds to the convention

Typed entities, not requirement text

OpenSpec files requirements and scenarios as markdown prose. CrystalSpec structures the same material — branch-labelled flows, enum-carrying data models that reference one another, roles, test cases, a glossary — into a cross-linked graph a tool can resolve directly, rather than paragraphs it has to re-parse each pass.

Every AI edit is a proposal you approve

OpenSpec's agent writes the delta file and you scan the git diff out of habit. CrystalSpec's AI is barred from the spec itself: it puts forward appliability-screened create, update, and delete proposals, and you clear or turn down each row, with the outcome — declines included — kept on the record.

Revisions with field-level diffs

OpenSpec records change as text diffs over markdown plus an archive of retired folders. CrystalSpec publishes versioned revisions that carry field-granular diffs, an AI-drafted summary of what moved, and one-click revert with lineage, all laid out on a per-project activity timeline.

Agents query the spec, not the file tree

OpenSpec fires as slash commands that pull files into your agent. CrystalSpec is interrogated from the outside — a hosted MCP server, a scoped GraphQL API, signed webhooks — so an agent can grab one flow, list the revisions, or request the delta between two versions whenever it needs to.

Published revisions become tracker tasks

OpenSpec drops a tasks.md checklist in the repo for your agent to grind through. When CrystalSpec publishes, the change fans out as atomic tasks in GitHub, Linear, or ClickUp — a repeat push adds nothing, and every task points home to the revision that produced it.

A workspace non-engineers can actually use

OpenSpec lives in the repository and the terminal. CrystalSpec hands PMs, designers, and stakeholders a browser workspace — AI-proposal authoring, @mention discussions, read-only public share links, and a clean PDF export — with no clone and no CLI in sight.

Side by side

Convention vs workspace, feature by feature

Feature comparison: CrystalSpec vs OpenSpec
DimensionCrystalSpecOpenSpec
What it isHosted spec workspaceMIT CLI + markdown convention in your repo
Price & license$10/seat/mo · 14-day free trialYes: Free, MIT (you bring your own agent)
Runs in your git repo (no hosted service)No: Cloud workspaceYes: In-repo, zero lock-in — the whole point
Spec formatYes: Typed graph — flows, models, roles, tests, glossaryPartial: Markdown requirements + scenarios in delta files
Change trackingYes: Field-level diffs across entities, revert with lineagePartial: ADDED/MODIFIED/REMOVED deltas, merged on archive; git diffs
AI edit gateYes: Validated proposals, row-by-row approval, decisions recordedPartial: Agent writes the file; you review the diff by convention
Consistency checkingYes: Project-wide analyzer, graded findings, Fix with AIPartial: openspec validate (structure and format checks)
Non-engineer accessYes: Browser workspace, share links, PDF, discussionsNo: Repo and terminal only
Agent integrationAgents query it — hosted MCP, GraphQL, signed webhooksSlash commands in 20+ agents — the agent edits files
Tracker outputYes: Atomic tasks to GitHub, Linear, ClickUp; back-linked, re-run safePartial: tasks.md checklist in the repo
Code generationNo: None by design — it feeds whatever agent writes the codeYes: Your agent implements from tasks.md
Maturity & communityYoung hosted productMIT, 50k+ stars, 1.0 released, 20+ agent integrations

Based on the public OpenSpec repository, openspec.pro, and CrystalSpec's published pricing, as of mid-2026. OpenSpec ships quickly and star counts move — verify current details on their pages.

An honest read

Different homes, different audiences

Choose CrystalSpec if…

  • PMs, designers, and stakeholders have to read, edit, and share the spec — not just engineers sitting at a terminal with the repo cloned.
  • You want AI-drafted edits that each wait on a recorded human sign-off, rather than an agent quietly rewriting your markdown.
  • Your agents should read the spec as typed, versioned data over MCP and GraphQL and pick up precisely what moved since their last pass.
  • A publish should scatter atomic tasks across GitHub, Linear, or ClickUp, each carrying a link home to the revision behind it.

Choose OpenSpec if…

  • You want a free, MIT-licensed, in-repo flow with zero lock-in for a single codebase, and you're happy running it from the terminal.
  • Everyone who reads the spec is an engineer — you don't need a shared UI, non-engineer collaborators, or a hosted service.
  • You value git-native delta tracking (ADDED/MODIFIED/REMOVED) that merges into living specs and archives completed changes for history.
  • You already run Spec Kit-style flows and want something lighter, with less phase ceremony — OpenSpec is a natural fit there.
FAQ

Fair questions, straight answers

Is CrystalSpec an OpenSpec alternative?

They share the same instinct — agree on the spec before you build — but choose different homes for it. OpenSpec is a lightweight convention that lives in your git repo and your coding agent. CrystalSpec is a hosted, typed workspace your agents query over MCP. Some teams could genuinely run both: OpenSpec in the terminal, CrystalSpec as the shared layer above it.

OpenSpec is free and MIT — why pay $10 per seat?

You pay for the things a markdown folder cannot do: a workspace non-engineers can read and edit, a structural gate that turns every AI change into a proposal you approve, field-level revision diffs, a project-wide inconsistency analyzer, read-only share links, and atomic task push to GitHub, Linear, and ClickUp. If everyone editing your spec is an engineer in a terminal, OpenSpec may be plenty.

Doesn't OpenSpec's spec drift like other markdown tools?

In fairness, less than most. OpenSpec merges its ADDED/MODIFIED/REMOVED deltas into a living specs/ folder and archives completed changes for history, so the spec really does persist. The distinction is not drift — it is that repo markdown still can't be queried at the entity level, diffed field by field for a non-engineer, or shared as a read-only link.

Can coding agents use both tools?

Yes — pointed opposite ways. OpenSpec runs as slash commands inside your agent, which then edits files in the repository. CrystalSpec is a source your agent interrogates from the outside: over a hosted MCP server it can grab one flow, walk the revision list, or ask for the change between two versions, with a scoped GraphQL API and HMAC-signed revision.published webhooks handling automation.

Does CrystalSpec run inside my git repo like OpenSpec?

No — and that is the honest trade. CrystalSpec is a hosted cloud workspace at app.crystalspec.com; keeping the spec in your repository with no vendor attached is exactly what OpenSpec is for. If in-repo residence and zero lock-in are hard requirements for you, OpenSpec is the better pick, and we would say so.

Can we move our OpenSpec specs into CrystalSpec?

There is no bulk importer, and you rarely want one. Drop a spec.md or a delta file into the assistant; it reads them back as structured create proposals — a flow here, a data model there, roles, test cases — and you sign each one off before it lands. Then let the inconsistency analyzer walk the fresh project and flag whatever the markdown left unsaid. Most teams seed their first project in a single sitting.

The verdict, plainly.

Stay with OpenSpec for a free, MIT convention you run from the terminal with zero lock-in; move to CrystalSpec when the spec becomes a shared, typed, versioned workspace your team approves and your agents query.

Start free — 14-day trial, no credit card.