Local-first, no service to sign up for

See your OpenSpec changes. Run your agents from the same window.

OpenSpec UI is a dashboard over Changes, Archive, Specs and Tasks, and a launcher for Claude, GitHub Copilot, Codex and Gemini CLI agents — with one command and event protocol behind all of them. It runs entirely on your machine, as a standalone web app or as a native VS Code extension, over the same shared core.

  • VS Code Extension 0.36.0
  • Standalone App 1.13.19
  • Core 0.50.0

Current releases

VS Code Extension

0.36.0

OpenSpec Workbench inside VS Code.

  • minorStart "Run with Agentic Harness" on the change it was opened for.
  • minorShow what a chain run has spent, while it is still running.

Standalone App

1.13.19

Local web application, no editor required.

Core

0.50.0

Execution engine shared by both delivery targets.

  • minorRecord the resource usage an agent reports, so a configured budget can act on it.
  • minorShow what a chain run has spent, while it is still running.
  • patchLet every event kind survive a transport — `cancelling` and `usageReported` were being dropped.

What it looks like

Standalone app

The standalone app showing a completed show command and its streamed output
Commands stream their output as they run.
The change editor with proposal, design and tasks side by side
Edit a proposal without leaving the dashboard.
A diff between two versions of an archived change
Diffs between archived versions — the reason this exists.
Summary view of the current OpenSpec workspace
One view over changes, specs and tasks.

VS Code extension

The OpenSpec Workbench in VS Code showing Changes, Archive, Specs, Templates and Processes
A native tree view, not a webview pretending to be one.
Editing a spec inside VS Code
Specs open in the editor you already use.
Task list of an archived change
Task state derived from the files, not tracked separately.
Template actions available from the workbench
Templates applied from the workbench.

Why it exists

Diffs between archived versions

openspec view shows you the current state. It does not show you what changed between two versions of an archived change. That gap is why this project started, and it is still the thing it does that nothing upstream does.

One protocol, four agents

Claude, GitHub Copilot, Codex and Gemini CLI agents — plus a local model behind an OpenAI-compatible API — are driven through a single command protocol (plan, implement, review, status, cancel) and a single event protocol. Swapping the agent does not change how you work.

Your machine, and nothing else

There is no account, no server to reach, and no telemetry. The standalone app binds to localhost behind a one-time token; the extension talks to the shared core directly. Normal use needs no internet connection at all.

Two products, one core

If you live in VS Code, the extension uses the native API — tree views, the diff editor, the built-in Git integration — rather than a webview imitating them. If you do not, the standalone web app is the same product in a browser. All the behaviour lives in one shared core; the hosts are thin adapters.

Get release announcements

One email when a new version ships. Nothing else, and one click to stop.

Double opt-in: you will get one confirmation email, and nothing else until you confirm.

Questions

How is this different from `openspec view`?

openspec view is an interactive dashboard for specs and changes, and this project does not try to replace it. The three things it adds are diffs between versions of archived changes, launching CLI agents from the UI over a unified command and event protocol, and VS Code integration as a native extension rather than another window. Anything already covered upstream is deliberately not reimplemented here.

How do I install it?

The VS Code extension ships as a .vsix on the GitHub Releases page: download it, then use Install from VSIX… in the Extensions view. The standalone app is built from source — npm install, build the server workspace, and start it against the directory you want to inspect. It prints a localhost URL containing a one-time token; that exact URL is the only way in.

Does it send my code anywhere?

Not by itself. It reads your repository from disk and runs the CLI agents you have already installed, under your own credentials — so whatever those agents send is between you and them, on the same terms as running them in a terminal. The application has no backend of its own, collects no telemetry, and treats repository file contents as data rather than as instructions it may act on.

Get in touch

Bug reports are better as GitHub issues. Anything else, here.