What Is OpenSpec and How to Kick-Start?

What Is OpenSpec and How to Kick-Start?

Featured image for an OpenSpec blog post showing a laptop with API specification code, developer icons, and the text “What is OpenSpec and how to kick-start.”

Intro

AI coding assistants are getting seriously good, and it would be unfair to reduce them to simple autocomplete tools anymore. They can refactor codebases, write tests, explain unfamiliar modules, generate scaffolding, and sometimes even suggest architectural directions that are not completely foolish. However, as they become more capable, a slightly uncomfortable truth becomes more visible: the quality of their output still depends heavily on the quality of the context we give them.

That is not really a new problem. Software development has always suffered from unclear requirements, half-written tickets, missing edge cases, missing test cases, and assumptions that live only in someone’s head. The difference is speed. A human developer may pause, ask questions, hesitate do develop when something is ambiguous. However, a toaster (AI coding agent) often continues confidently and fills the gaps with whatever seems most likely from the surrounding context. The result can look productive, but it may also be wrong in subtle ways. If you have tokens to burn, justask it to develop a new operating system. Most probably, it won’t say “no”, just start writing. This is exactly where OpenSpec becomes interesting.

However, before diving into the topic, let me make this clear: I am experienced enough not to buy any magic sticks in this industry. In other words, I will not get captivated by a software that claims solving all sort of problems, and promoted by its fun-boys. Therefore, realistically, PoenSpec is a nice tool but it is not a magical framework that turns bad thinking into good software, and it does not remove the need for engineering judgement. What it does is more practical: it forces a clearer conversation before implementation begins. Instead of throwing random prompts at a model and hoping that it spits the best results, OpenSpec gives both the developer and the AI assistant a shared structure for describing the change, reviewing the intent, and only then moving towards code. So, both inputs and expected outputs are shaped to meet the expectations.

What Is OpenSpec?

OpenSpec is a framework for spec-driven development with AI coding assistants. In simple terms, it helps you describe what you want to build before the AI starts editing the codebase. The specification is not hidden inside a temporary chat session. It is written as Markdown file, stored inside your repository, and treated as part of the project’s working context. Some people take it into a further step, and claim that these specs will replace the source code as we know. Only specs and agents will be enough to create software. It is too early to prove or deny.

The basic workflow is easy to understand: you start with an idea, turn it into a proposal, describe the expected behaviour in specs, add design notes where needed, break the work into tasks, implement the change, and finally archive it so the long-term project specification stays updated. At a high level, the flow looks like this:

Idea → Proposal → Specs → Design → Tasks → Implementation → Archive

When OpenSpec is initialised in a project, it creates an openspec directory. This directory contains the current system specifications and proposed changes. A typical structure looks like this:

openspec/
├── specs/
│   └── <domain>/
│       └── spec.md
├── changes/
│   └── <change-name>/
│       ├── proposal.md
│       ├── design.md
│       ├── tasks.md
│       └── specs/
│           └── <domain>/
│               └── spec.md
└── config.yaml

The specs/ folder describes how the system behaves today. The changes/ folder contains proposed updates, each isolated in its own folder. Inside a change, the proposal explains why the change exists, the specs describe what behaviour is expected, the design explains the technical approach, and the tasks break the implementation into manageable steps. None of this is conceptually revolutionary, but that is partly the point. OpenSpec takes familiar engineering habits and makes them usable in an AI-assisted workflow.

Why Developers Need It

The main problem with AI-assisted coding is not that AI writes bad code. Quite often, it writes code that is syntactically fine, logically plausible, and even reasonably clean. The deeper problem is that it may implement the wrong assumption. It may miss an edge case, choose a pattern that does not fit your architecture, introduce a dependency you did not want, or solve a slightly different version of the problem you had in mind.

This is why reviewing only the final diff is not always enough. By the time the code exists, the misunderstanding has already become concrete. You now have to read the code, detect the wrong assumption, explain the issue, and ask the assistant to correct it. Sometimes that is still faster than doing the work manually, but it is not as efficient as catching the ambiguity earlier.

OpenSpec shifts part of the review process to the beginning. Before the assistant implements anything, you review the proposal, the behaviour, the design, and the task list. This helps expose unclear requirements before they turn into code. It also makes the decision trail more durable, because the reasoning does not disappear into chat history. For a team, that matters. A pull request shows what changed, but a spec can show what was intended.

Installation

Getting started with OpenSpec is simple. You install it globally with npm, then initialise it inside your project directory:

npm install -g @fission-ai/openspec@latest
cd your-project
openspec init

After this, your repository has the basic OpenSpec structure. The setup itself is not the difficult part. The more important part is learning the workflow and resisting the temptation to jump directly from idea to implementation, especially when using a powerful coding agent that can produce a large diff very quickly.

Flow

OpenSpec revolves around four core artefacts: proposal, specs, design, and tasks. The proposal explains why the change exists and what problem it is trying to solve. The specs define the expected behaviour, preferably in a way that can be reviewed by both humans and AI. The design describes the technical approach where the change is large or complex enough to need one. The tasks break the work into a sequence that the assistant can follow during implementation.

This structure is useful because it separates questions that are often mixed together in ordinary development. “Why are we doing this?”, “What should happen?”, “How should we build it?”, and “What are the steps?” are not the same question. When they are all compressed into a single prompt, the AI has to infer too much. When they are separated, it becomes easier to review the thinking before the code appears.

The archive step is also important because it prevents specs from becoming disposable planning notes. Once a change is complete, OpenSpec can update the long-term system specification. Over time, this helps the repository accumulate not just code, but also a clearer description of what the system is supposed to do. That is especially useful in older projects, where the actual system behaviour is often scattered across code, tests, tickets, and developer memory.

Pros and Cons

As I said in the beginning, I won’t buy “magic sticks” in the software industry, I have seen countless tools making breaking changes, reshaping the industry but no-one even remembers their name today. Here, I will try to be as rational as I can and try to assess

Pros

  • It moves review earlier in the process.
    In a normal AI-assisted workflow, misunderstandings often become visible only after the assistant has produced a large diff. OpenSpec lets you review the proposal, expected behaviour, design notes, and task list before implementation begins.
  • It reduces the risk of confident but wrong AI output.
    AI coding agents can produce clean-looking code for a slightly misunderstood requirement. OpenSpec helps expose those misunderstandings before they become files, functions, tests, and architectural decisions.
  • It makes intent visible and versioned.
    Specs, proposals, and tasks are stored as Markdown files inside the repository. This means decisions can be reviewed, discussed, linked from tickets, and preserved instead of disappearing into chat history.
  • It works reasonably well with brownfield projects.
    OpenSpec does not require you to document the whole system upfront. You can start with one change, describe only the relevant behaviour, and gradually improve the project’s written memory.
  • It supports team collaboration.
    Because the planned change is written down, other engineers can understand what was intended before reading the implementation. This is useful for pull requests, asynchronous work, onboarding, and handovers.
  • It helps with governance and auditability.
    Proposals, scenarios, and task lists can provide a clearer trail of intent for sensitive changes such as authentication, payments, migrations, compliance-related features, or cross-service behaviour.
  • It gives AI coding agents better context.
    Instead of relying on a vague prompt, the assistant works from a structured description of the change. This usually leads to more predictable output.

Cons

  • It adds overhead.
    For small changes, OpenSpec can easily become unnecessary ceremony. A typo fix, a small CSS tweak, or a local bug probably does not need a proposal, design note, and task list. Official proposal for this problem is “just skip generating specs for minor changes”.
  • It can become process theatre.
    If teams use it mechanically for every change, it may turn into another box-ticking exercise rather than a useful engineering practice.
  • A spec can still be wrong.
    OpenSpec does not guarantee correctness. If the proposal misunderstands the problem, the scenarios miss edge cases, or the design contains a bad assumption, the AI may simply implement the wrong thing more systematically.
  • It can create false confidence.
    A neat Markdown file and folder structure can make a weak idea look mature. If developers accept AI-generated specs without proper review, OpenSpec becomes a well-formatted misunderstanding.
  • It can consume a lot of tokens.
    Spec-driven development sounds lightweight, but proposals, specs, scenarios, design notes, and tasks all become context for the AI. In larger projects, this can slow down interactions and increase the cost of AI-assisted development.
  • The archive can grow.
    Completed changes are useful as history, but if every small change creates archived material, the repository can accumulate a lot of noise. Without naming discipline and occasional cleanup, the archive may become hard to navigate.
  • It does not replace engineering judgement.
    Developers still need to review the generated artifacts, add constraints, remove nonsense, check architectural fit, and verify the final implementation. Furthermore, they need to smell potential pitfalls.
  • It does not replace proper review processes.
    OpenSpec can support threat modelling, architecture review, legal sign-off, security review, and production readiness checks, but it does not replace them.
  • It still depends on AI context limits.
    OpenSpec preserves intent, but AI assistants still have context windows, model quirks, and tool limitations. Long planning sessions can become noisy, and generated tasks can become too broad.
  • It works best only when used selectively.
    Its value is strongest when the cost of misunderstanding is higher than the cost of writing the intent down. Used everywhere, it can become heavy and irritating.

Where to Start?

The best way to adopt OpenSpec is not to announce a grand new development process across the whole company. That kind of thing usually creates resistance before anyone has seen the value. A better approach is to pick one real but contained change in one project. It should be more meaningful than a trivial CSS tweak, but not so risky that the first experiment becomes painful.

Good candidates include adding a small API endpoint, changing validation rules, introducing a feature flag, refactoring a contained service, or improving a user preference flow. The important rule is simple: do not let the AI implement until you have reviewed the proposal, specs, design, and tasks. That pause is the value. It creates a moment where ambiguity can be noticed before it becomes code.

Once the team gets comfortable with the workflow, OpenSpec can be used more selectively. Not every change requires the same level of ceremony. A tiny bug fix may not need a full design document. A change touching authentication, payments, data modelling, or cross-service behaviour probably deserves more care. OpenSpec is most useful when the cost of misunderstanding is higher than the cost of writing down the intent.

Official Documentation for OpenSpec: https://github.com/Fission-AI/OpenSpec/blob/main/docs/getting-started.md

Running OpenSpec

Here, I won’t give a fudeline about how to run OpenSpec. However, I want to give an overall idea about its usage from terminal.

OpenSpec uses two types of commands, and this distinction is important. Some commands are normal terminal commands, such as openspec list or openspec validate. These help you inspect and manage OpenSpec files. Other commands are AI chat commands, usually starting with /opsx:. These are typed into your coding assistant, not into the terminal.

A typical AI-assisted workflow may begin with exploration:

/opsx:explore

This allows the assistant to inspect the project and understand the existing structure before proposing a change. Once you have described what you want, you can ask OpenSpec to create a structured proposal:

/opsx:propose add-feature

After reviewing and refining the generated proposal, specs, design, and tasks, you can move to implementation:

/opsx:apply

When the implementation is complete and the change has been reviewed, the final step is archiving:

/opsx:archive

The useful terminal commands are more administrative, but they are still valuable. You can list active changes, inspect a specific change, validate its structure, or open the OpenSpec dashboard:

openspec list
openspec show <change>
openspec validate <change>
openspec view

These commands do not replace thinking, and they certainly do not prove that the design is correct. But they provide small safety rails. In software engineering, that is often how reliability improves: not through one grand mechanism, but through several modest checks that reduce the chance of careless mistakes.

Outro

OpenSpec does not remove complexity from software development. It organises some of it. That may sound less exciting than the usual AI tooling promises, but it is also more believable. The industry has seen enough tools that claim to remove thinking, remove architecture, remove testing, or remove developers. In serious software work, those claims rarely survive contact with reality.

The real value of OpenSpec is more modest and more durable. It helps turn vague prompts into reviewable proposals. It helps turn assumptions into explicit requirements. It helps turn AI-assisted coding from a private conversation into something closer to an engineering workflow. That does not make the AI perfect, and it does not make the developer passive. If anything, it makes the developer’s judgement more important.

AI coding agents are useful because they can move fast. OpenSpec is useful because it asks them to move in the right direction first. That is a small difference in wording, but a large difference in practice. Code is expensive once it starts shaping the system. A little more thinking before that point is not bureaucracy. It is engineering.

Suleyman Cabir Ataman, PhD

Sharing on social media:

Suleyman Cabir Ataman

Leave a Reply