Sandbox
@alfredoperez/speckit-companion

VS Code extension for AI spec workflows

SpecKit Companion puts spec-driven development into VS Code so you can manage specs, inline reviews, workflow steps, and living capability docs in one place. It connects to terminal and editor agents, while keeping the spec files and context on disk in your repo.

89 stars22 forksHTMLUpdated 6d ago
Who it's for

Builders who want their AI agent workflow for specs, reviews, and living docs visible in VS Code.

What it delivers

You can steer an AI-driven spec workflow without losing track of what was changed, reviewed, or shipped.

What it does

Spec viewer

Renders specs as structured pages with requirements, scenarios, tasks, and diagrams instead of raw markdown.

Inline review comments

Lets you comment on spec lines like a pull request, persist the comments, and send them back to the agent for edits.

Run tracking

Shows pipeline phases, live task progress, and per-phase timing as a run moves forward.

Living specs

Keeps durable capability specs in sync with the code and shows drift and coverage in the sidebar.

Pipeline builder

Lets you inspect and reshape the workflow in `.specify/companion.yml`, including phases, nodes, hooks, and custom steps.

Multi-agent support

Dispatches to Claude Code, GitHub Copilot, Gemini, Codex, and other supported AI tools.

README

SpecKit Companion: see and steer everything your AI builds, from first spec to shipped code

Build Status VS Code GitHub Release License

speckit-companion.dev

See it running · Docs · Getting started · Changelog

The site shows each feature as a short clip of the real thing — the Overview a finished run leaves behind, inline review, living specs — rather than describing it.

One workspace for the whole life of a spec, not just the review. SpecKit Companion is a spec workspace inside VS Code for developers running AI agents through spec-driven development. See where every feature stands at a glance, read specs as real documents, review and correct them the way you review pull requests, watch runs move live, keep a record of what the AI actually did, and keep living specs that stay true after the code ships. Its own pipeline writes specs 60 to 68% leaner with the same correctness (the measured numbers) — and a vague requirement still dies here before it becomes 200 lines of wrong implementation.

A guided tour of the Overview: the one sentence the run answers to, per-phase timing, the approach and the corner of the codebase it changed, how the change was sized, the living specs it loaded before drafting, the expectations fence, each verified check with the command it ran, decisions with the alternatives they rejected, and the requirement to task to test coverage table

Features

Visual Spec Viewer

Specs render as rich, structured pages, not walls of markdown: requirements as labeled rows, acceptance scenarios as clean Given/When/Then sentences, tasks grouped under their phases, and mermaid diagrams inline with zoom. A quiet footer advances the spec one click at a time, and it never advances ahead of a running step. The markdown stays in your repo, never on a server.

A spec rendered as a structured page: title-leading header, requirements as labeled rows, the pipeline rail, and on-page navigation

Inline Review Comments

Comment on specific lines of a spec, exactly like a pull request review. Comments persist the moment you add them, survive closing the tab, and are committable, so a half-finished review picks up next session or on another machine. Click Refine and the pending comments are dispatched to your AI for an in-place edit of the source.

Inline review comments on a spec: two pending comments and one already applied, each pinned under the line it annotates

Watch a run in flight

A run is not a black box you check on afterwards. The pipeline rail unlocks phase by phase, one button always offers the next step, tasks tick over live while implement runs, and the actions stay locked until the step settles — then the Overview shows exactly how long each phase took.

A run moving through the pipeline: the rail unlocks phase by phase, the next-step button follows it, tasks tick over live during implement, and the run overview lands with per-phase timing

Overview: the run's story

A spec with recorded activity opens on its Overview: why the spec exists, its constraints, the decisions made (with rejected alternatives), what was verified, and a requirement-to-test traceability table. It is the dossier a future session, a reviewer, or a teammate reads instead of re-asking you.

The completed Overview dossier with its honest per-phase timing called out: run status, the expectations fence, verified checks with the commands that prove them, decisions with rejected alternatives, and the coverage table

A sidebar that scales

Specs grouped by lifecycle with live status per document, resume-where-you-left-off on hover, filter and sort, multi-select bulk actions, and views for living capability specs and AI steering documents. A workspace with hundreds of finished specs opens to a short, readable list.

The Specs sidebar: specs grouped by lifecycle with per-document progress marks, filter and sort, and the living-specs and steering views beneath

Pick a pipeline once, run it end to end

Choose stock Spec Kit or the leaner SpecKit Companion workflow in a single setting, and every step of the run dispatches that choice. The Companion pipeline writes specs roughly 60 to 68% smaller, produces zero throwaway side files, and right-sizes itself: a small change skips the ceremony, a large one keeps the full specify, plan, tasks, implement flow. In our benchmark, correctness was a tie; the difference is ceremony, not outcomes. Details and the measured numbers: Workflow choice.

The benchmark in four tiles: 60 to 68% smaller specs, zero throwaway side files, ceremony right-sized to the change, and a 5.0 out of 5 correctness tie

Living specs: one per capability, wherever you keep them

Feature specs describe one change and then go quiet. Living specs are durable: one per capability (checkout, auth, billing), loaded into the AI's context when a feature touches that area, and folded back up to date when the feature ships. Keep them together in a central capabilities/ folder, or colocated, each spec right next to the feature it covers, with one reversible command to move between the two. Either way the sidebar shows per-capability test coverage and flags drift the moment the code moves on, and one sync pass updates every affected spec from your current changes. Open any source file and the status bar says how many living specs describe it, one click away from the exact requirement. Opt-in, append-only, and never a failed run. Living specs

The Living Specs pair: the sidebar's Living Specs view with per-capability coverage counts and drift flags, beside the viewer open on the photo-storage capability with its LIVING badge, covered globs, purpose, and WHEN/THEN requirement rows

Also in the box

  • Bring your own SDD process. Custom phases, custom commands, custom output files; the sidebar and viewer adapt. Custom workflows
  • Offline-first and careful by default. Fonts and icons ship in the .vsix, destructive actions need confirmation or offer undo, and Reduce Motion is honored. Viewer reference

Make it yours: a custom workflow written into settings.json, offered when you create a spec and recorded on it, then each step shown under the command it dispatches

Install the other half: the sprout mascot invites you to add the companion Spec Kit extension, the engine that records every run

See the pipeline your project runs

The Companion pipeline is assembled: steps hold phases, phases hold nodes, and a project can rearrange them, attach its own work at any boundary, reshape a document template, or change where the size verdict routes — all from .specify/companion.yml.

Open it from the circuit icon at the top of the Specs sidebar, or from the palette. The steps are columns in run order, with auto in the tail of the row because it runs the others rather than taking a turn among them. Inside each step: its phases, the nodes in them, and the hooks attached, one line each under the words before and after, grouped under the mark of whoever registered them — yours, or an installed extension's. Full guide: Pipeline builder.

One colour means yours. Hooks, nodes you rewrote and template sections you replaced all carry the same mark, and nothing else does, so what your project changed is answerable at a glance. Click a node to read its instructions right there, with what it writes, what it needs, and whether it can be moved.

Several ways of working. A workflow is a whole named configuration in .specify/companion/workflows/. Switch between them from the header and everything swaps at once — node order, hooks, templates, routing — so a one-line fix and a client deliverable can run different pipelines out of the same repository. Nodes and fragments are shared across all of them. Two entries are always there: As shipped is Companion with nothing changed, the thing to compare against, and This project is whatever your own companion.yml says. While the shipped one is in force your configuration is parked rather than deleted — the board draws your hooks where they would attach, dashed and struck through and labelled parked, and one click puts them back.

Start from something. A new workflow offers what to begin with as cards: what you run today, or one of two whole configurations Companion ships. Classic spec-kit puts the stock document shapes back — prioritized P1/P2/P3 user stories, the full Technical Context block. Brownfield is for changing a system that already exists: the spec says only what changes, the task list is attacked before it runs, and a person opens the thing before it counts as done. Whichever you pick is copied in and yours to change from there.

Add a step of your own. Add step in the header gives the run a turn it did not have, and the + in the gap between two lanes puts one in that place — a review pass after implement, an audit you launch when you want it. Say where it goes and what it writes; the panel writes a step that already runs and opens the one node there is to edit. It gets its own /speckit.companion.<name> command and everything a shipped step has.

Every phase says what it can do. One + on each phase rule opens the lot: add a hook, add a node, rename the phase, split it, merge it into its neighbour. Nothing waits for a hover, and a row that cannot run here is shown greyed with the reason, so a control you never needed still teaches you it exists.

Every write says what it did. A line at the foot of the panel names the change, offers Undo where there is one, and reminds you that a change is not in the pipeline until Build writes it. Build and Preview answer in the header too, rather than taking the editor to say they worked.

Rearrange it. Drag a node onto another to move it — within its phase, or into a different one — or use Move up and Move down, which sit on the row of its panel that says it can move. A node free to move shows a grip; one held in place by something that reads it says held and names what is holding it, so nothing looks draggable and then refuses. The new order is saved to companion.yml with the rest of the file untouched.

Attach your own work. Every phase carries a + holding Add hook, which asks where it runs and what it is — a skill you already have, an instruction, a shell command, or one of your own nodes. Reach for the skill first: a skill you have written already holds the instructions, so the pipeline points at it instead of keeping a copy that drifts.

Rewrite a node in your own words. Click a node, press Edit, and save: that write is what copies it to .specify/companion/nodes/<step>/<node>.md, so making it yours and doing the thing you came to do are one action. Build, and your version is what your assistant reads; the node is marked yours until Use the shipped node hands it back, with an undo in the status line. Nothing under speckit-extension/ is touched, so an upgrade never overwrites your copy — and never silently reverts it either.

Build from the same panel, or from the palette:

CommandWhat it does
Open Pipeline BuilderDraw the pipeline your configuration resolves to
Preview Pipeline BuildShow what a build would change, writing nothing
Build Pipeline from companion.ymlApply the configuration

When companion.yml is newer than the commands built from it, the panel's header says so — otherwise the file says one thing while your assistant reads another, and nothing about a run looks wrong. Requires the spec-kit extension, which holds the pipeline sources.

No lock-in, no server

Everything lives in plain files in your repo: the spec markdown plus a .spec-context.json per spec. The viewer and your terminal are two front-ends over the same files, so a step driven from either surface shows up in the other, and there is no extension-owned database to migrate away from. The extension dispatches command text to the AI you configure and reads what lands on disk; your prompts and specs never pass through anyone's server. How the pieces fit: Getting started.

Install

  1. Install SpecKit Companion from the VS Code Marketplace.
  2. Click the SpecKit icon in the activity bar and open a folder.
  3. Click + in the Specs view, describe your feature, and pick the AI you already use.

That's it: the viewer, review comments, and sidebar work on their own. To also get the lean Companion pipeline, live progress capture, and the Resume button, add the companion Spec Kit extension: the sidebar offers a one-click install when it's missing. The two halves are versioned separately and the spec-kit one never updates itself, so when the commands in your project fall behind the version this extension expects, a status-bar warning, the panel banner, and a one-time notification say so and offer the same one-click update.

Prefer to be walked through it? VS Code opens a Get Started with SpecKit Companion walkthrough after install, and Help → Get Started reopens it any time. It runs the same three steps above, plus a one-click sample spec you can read before writing one of your own.

Works with your AI

Dispatches to Claude Code, GitHub Copilot, Gemini, Codex, and more, in a terminal or in your editor's chat panel. Full compatibility matrix: Supported AI providers.

Docs

Telemetry

The extension sends anonymous, PII-free usage telemetry (provider choice, phase dispatched, lifecycle counts; never prompt content, paths, or names). Two switches gate it, and if either is off nothing is sent: speckit.telemetry and VS Code's global telemetry level. Full disclosure: Telemetry.

Support

SpecKit Companion is free and open source. If it saves you time, you can support its development through GitHub Sponsors. You'll also find a "Sponsor" button on the Marketplace listing and a "Support this project" link in the Specs sidebar.

Acknowledgments

This project started from the amazing work at https://github.com/notdp/kiro-for-cc

License

MIT License

Files in the repo

Repository payload43 top-level entries
  • .agents
  • .claude
  • .codex
  • .github
  • .impeccable
  • .specify
  • .storybook
  • .vscode
  • assets
  • capabilities
  • design
  • docs
  • examples
  • media
  • scripts
  • speckit-extension
  • specs
  • src
  • tests
  • website
  • webview
  • .gitignore
  • .sdd.json
  • .vscodeignore
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • icon.png
  • jest.config.js
  • LICENSE
  • living-specs.yml
  • NOTICE.md
  • package-lock.json
  • package.json
  • README.md
  • SECURITY.md
  • THEME.md
  • tsconfig.json
  • tsconfig.test.json
  • tsconfig.webview.json
  • webpack.config.js

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More plugins

Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

138k
1 add

Graphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.

82k
code-yeongyu/
oh-my-openagent

OmO: Just type "mass ulw" keyword with your prompt. Now you are the master of graph engineering.

69k

Persistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More

94k

Opinionated Oxlint rules for rejecting low-evidence TypeScript and JavaScript patterns

4.3k