Skip to content
/

OpenSpec-Zed

openspec-zed · uwzis/OpenSpec-Zed · ★ 14 · last commit 2026-03-13

Adds OpenSpec slash commands to the Zed editor's AI Assistant panel so Zed users can initiate spec-driven workflows without leaving the editor.

Best whenA prompt bridge is sufficient for IDE integration — the AI assistant plus the CLI covers all workflow needs without building a full language server.
vs seeds
openspecZed is a thin prompt-injection adapter rather than a full IDE fork. Unlike kiro's proprietary hook events and EARS spec …
Primitive shape 11 total
Commands 11
00

Summary

OpenSpec-Zed — Summary

OpenSpec-Zed is a Rust-based Zed editor extension that registers 11 OpenSpec slash commands (/openspec propose, /openspec explore, /openspec new, etc.) in the Zed Assistant panel, providing Zed users with a native UI bridge to the OpenSpec spec-driven development workflow.

Problem it solves: The canonical OpenSpec CLI has no native IDE integration for Zed; users must switch to a terminal to run openspec commands. This extension adds slash commands to Zed's AI assistant panel so the full OpenSpec workflow can be initiated from within the editor context.

Distinctive trait: Pure Rust WASM extension — zero JavaScript, no npm dependency at runtime. The extension generates contextual AI prompts for each OpenSpec workflow step and passes them to Zed's AI assistant, but explicitly does not execute OpenSpec CLI commands itself (the user must still run those manually in a terminal).

Target audience: Rust developers and Zed editor users who prefer the OpenSpec SDD workflow but want native IDE ergonomics without leaving the editor.

Production-readiness: v0.0.1, 14 stars, last commit March 2026, GPL-3.0 license (unlike most frameworks in this batch which are MIT). One contributor. The README includes the line "I am not your maid, clean your code..." suggesting an early/personal project.

Relationship to seeds: Most similar to kiro (Archetype 5 — IDE-specific integration), but much simpler: where Kiro is a full IDE fork with proprietary hook events, OpenSpec-Zed is a thin prompt-injection adapter that requires both the Zed editor and the OpenSpec CLI pre-installed. Unlike the canonical openspec seed (which ships commands + skills across multiple AI tools), OpenSpec-Zed is single-tool (Zed only) and provides no independent prompts beyond what OpenSpec CLI already generates.

01

Overview

OpenSpec-Zed — Overview

Origin

Created by GitHub user uwzis (credited as "Evan Moore - Open Prem" in extension.toml). GPL-3.0 licensed — an unusual choice for an OpenSpec ecosystem tool (most are MIT). The README opens with:

"Greetings my fellow Rustaceans and sympathizers, I have a treat for you :}"

This positions it as a community contribution for the Rust/Zed developer demographic, not an officially supported OpenSpec adapter.

Philosophy

The extension's philosophy is to be a pure prompt bridge:

"Note: The extension provides AI prompts to help you with OpenSpec workflows. For actual OpenSpec CLI execution, you'll need to run the commands manually in your terminal."

This is an explicit "UI bridge, not automation" stance — the extension handles the AI conversation side (generating contextual prompts) but deliberately does not automate the CLI side.

Scope

Supports all canonical OpenSpec slash commands:

  • /openspec propose — Create a new change and generate planning artifacts
  • /openspec explore — Explore ideas and investigate problems
  • /openspec new — Start a new change scaffold
  • /openspec continue — Create the next artifact in the dependency chain
  • /openspec ff — Fast-forward: create all planning artifacts at once
  • /openspec verify — Validate implementation matches artifacts
  • /openspec sync — Merge delta specs into main specs
  • /openspec apply — Implement tasks from the active change
  • /openspec archive — Archive a completed change
  • /openspec bulk-archive — Archive multiple completed changes at once
  • /openspec onboard — Guided tutorial through OpenSpec workflow

Key design constraint

The Zed extension API used (zed_extension_api) compiles to WASM32-WASI, limiting what the extension can execute. It cannot shell out to the OpenSpec CLI, which is why it only generates prompts. This is a technical constraint, not a philosophical choice.

02

Architecture

OpenSpec-Zed — Architecture

Distribution

  • Type: IDE extension (Zed editor)
  • Language: Rust (compiled to WASM32-WASI)
  • Extension ID: openspec-zed
  • Schema version: 1

Install

# Clone to Zed extensions directory
git clone https://github.com/Uwzis/OpenSpec-Zed ~/.config/zed/extensions/openspec
# Restart Zed

Or install from Zed's extension marketplace by searching "OpenSpec".

Prerequisites

  • Zed editor (with Assistant panel)
  • Node.js 20.19.0 or higher (for OpenSpec CLI)
  • npm install -g @fission-ai/openspec@latest (OpenSpec CLI, run in terminal)

Build

cargo build --target wasm32-wasi

Repository structure

OpenSpec-Zed/
├── Cargo.toml          ← Rust project manifest
├── LICENSE             ← GPL-3.0
├── README.md
├── extension.toml      ← Zed extension manifest (slash commands declared here)
└── src/
    └── lib.rs          ← ~200 lines of Rust; all slash command handlers

How it works

The extension implements zed::Extension trait in Rust:

impl zed::Extension for OpenSpecExtension {
    fn run_slash_command(
        &self,
        command: zed::SlashCommand,
        args: Vec<String>,
        _worktree: Option<&zed::Worktree>,
    ) -> Result<zed::SlashCommandOutput, String>

For each slash command, it generates a natural-language prompt string describing the OpenSpec workflow step. The prompt is returned as SlashCommandOutput text, which Zed injects into the Assistant conversation context.

Target AI tools

  • Zed only (zed_extension_api)
  • Cross-tool portability: single-tool (Zed-specific)
03

Components

OpenSpec-Zed — Components

Slash Commands (11)

Registered in extension.toml:

Command Requires argument? Purpose
/openspec propose No Create a new change and generate planning artifacts
/openspec explore No Explore ideas and investigate problems
/openspec new Yes (change name) Start a new change scaffold
/openspec continue Yes (change name) Create the next artifact in the dependency chain
/openspec ff Yes (change name) Fast-forward: create all planning artifacts at once
/openspec verify Yes (change name) Validate implementation matches artifacts
/openspec sync Yes (change name) Merge delta specs into main specs
/openspec apply Yes (change name) Implement tasks from the active change
/openspec archive Yes (change name) Archive a completed change
/openspec bulk-archive No Archive multiple completed changes at once
/openspec onboard No Guided tutorial through OpenSpec workflow

Skills

Count: 0 — No SKILL.md files; the slash command handler is Rust code.

Subagents

Count: 0

Hooks

Count: 0 — Zed extensions use run_slash_command callbacks, not Claude Code lifecycle hooks.

MCP Servers

Count: 0

Scripts

Count: 0 — No bash or Python scripts.

Templates

Count: 0 — No template files; prompts are generated as Rust string literals.

Core Rust code (src/lib.rs — ~200 lines)

The entire logic is a match statement over command names. Each arm generates a prompt string:

"propose" => (
    if args_str.is_empty() {
        "I want to propose a new change. Please help me brainstorm and create
         planning artifacts for this change.".to_string()
    } else {
        format!("I want to propose a new change called '{}'. Please help me
                 create comprehensive planning artifacts...", args_str)
    },
    "OpenSpec: Propose Change",
),

Argument validation is done via a command_requires_arg() helper — commands that need a change name return an error if called without arguments.

05

Prompts

OpenSpec-Zed — Prompts (Verbatim)

All prompts are generated from Rust string literals in src/lib.rs. Verbatim excerpts from the source code (fetched via gh api):

1. /openspec propose — with argument

format!(
    "I want to propose a new change called '{}'. Please help me create comprehensive \
     planning artifacts including requirements, design considerations, and implementation tasks.",
    args_str
)

Without argument:

"I want to propose a new change. Please help me brainstorm and create planning artifacts \
 for this change.".to_string()

Prompting technique: Minimal instruction + intent statement. The prompt is deliberately short — it gives the AI a starting point ("I want to propose...") and relies on the AI's knowledge of OpenSpec to generate appropriate artifacts. No embedded templates, no procedural steps.


2. /openspec ff — Fast-forward

format!(
    "I want to fast-forward and create all planning artifacts for '{}'. Please help me generate \
     a complete set including requirements, design, tasks, and validation criteria.",
    args_str
)

Prompting technique: Bundle request — asks for all artifacts in one shot rather than step-by-step. Contrast with openspec-skills (which has separate skills for proposal, apply, archive) — this approach collapses the full artifact pipeline into one prompt.


3. /openspec verify — Verification

format!(
    "I want to validate that my implementation for '{}' matches the planning artifacts. \
     Please help me review the code against the specifications and identify any discrepancies.",
    args_str
)

Prompting technique: Diff framing — sets up a "compare code to specs" task. Simple but the "identify any discrepancies" instruction signals to the AI to look for mismatches.


4. /openspec onboard — Tutorial

// (no args variant)
"I want to learn about the OpenSpec workflow and understand how to use it effectively. \
 Please guide me through a tutorial of the OpenSpec workflow and help me understand \
 how to use each command."

Prompting technique: Tutorial request — asks the AI to explain the workflow. Relies entirely on the AI's training knowledge of OpenSpec.


5. Error handling

if Self::command_requires_arg(command_name) && args.is_empty() {
    return Err(format!(
        "The /opsx {} command requires an argument. Please provide a change name or description.",
        command_name
    ));
}

Prompting technique: Input validation with helpful error message rather than a generic failure.


Key Prompting Techniques Used

  1. Minimal intent prompts: Each command produces a one-to-two sentence intent statement with the change name substituted. No elaborate templates.
  2. Conditional richness: When an argument is provided, the prompt includes the change name in a format!() macro; when omitted, a generic prompt is used.
  3. AI-trust pattern: The extension trusts that the Zed AI assistant has sufficient knowledge of OpenSpec to elaborate; it does not embed the OpenSpec specification into the prompt.
09

Uniqueness

OpenSpec-Zed — Uniqueness and Positioning

differs_from_seeds

Most analogous to kiro (Archetype 5 — IDE-specific primitives), but far simpler: Kiro is a full VS Code fork with proprietary hook events, its own spec format (EARS notation), and deep IDE-native task tracking; OpenSpec-Zed is a thin prompt-injection adapter that wraps the canonical OpenSpec CLI's command surface in Zed slash commands. Unlike spec-kit (which ships 9 real slash commands that drive actual file operations through Claude Code), OpenSpec-Zed's commands generate AI prompts only — no file I/O is performed by the extension itself. Compared to the canonical openspec seed (multi-tool, ships commands+skills), OpenSpec-Zed is single-tool (Zed-only) and relies entirely on the OpenSpec CLI for actual execution.

Positioning

  • Niche: "OpenSpec for Zed users who want slash commands in the Assistant panel"
  • Primary differentiator: Only framework in this batch built in Rust and targeting Zed
  • Core limitation: Prompt bridge only — no execution; requires terminal for actual OpenSpec CLI commands

Observable failure modes

  1. AI knowledge gap: The prompts rely on the Zed AI assistant having sufficient training knowledge of OpenSpec. If the AI doesn't know OpenSpec conventions, the prompts give it no guidance (unlike openspec-skills which embeds full templates).
  2. Split workflow: Users must context-switch between Zed Assistant (for AI prompts) and terminal (for CLI execution) — the two-step process is friction-prone.
  3. No validation: No mechanism to verify that what the AI generated in the conversation was actually saved to disk via the CLI.
  4. Stale CLI: If the user has an older version of OpenSpec CLI than the extension expects, the commands in the prompts may not match actual CLI command names.
  5. GPL-3.0 copyleft: The only GPL-3.0 framework in this batch; downstream forks must also be GPL-3.0, which may deter corporate adoption.

Explicit antipatterns

None documented.

04

Workflow

OpenSpec-Zed — Workflow

Phases

The extension mirrors the canonical OpenSpec lifecycle exactly:

# Phase Zed command Terminal command required
1 Explore /openspec explore [topic] (optional) openspec explore
2 New change /openspec new <name> openspec new <name>
3 Create proposal /openspec propose [description] openspec continue
4 Continue artifacts /openspec continue <name> openspec continue <name>
5 Fast-forward /openspec ff <name> openspec ff <name>
6 Apply /openspec apply <name> openspec apply <name>
7 Verify /openspec verify <name> openspec verify <name>
8 Sync specs /openspec sync <name> openspec sync <name>
9 Archive /openspec archive <name> openspec archive <name>

Important note on workflow execution

The Zed slash commands generate AI prompts — they do NOT execute OpenSpec CLI commands. After using a Zed slash command to get AI assistance, the user must still run the corresponding OpenSpec CLI command in a terminal to actually create/modify files.

This means the workflow is:

Zed Assistant (/openspec propose) → AI generates prompt
                                  → AI helps draft the proposal
                                  → User runs: openspec continue in terminal
                                  → OpenSpec CLI creates files

Approval gates

None — the extension has no approval gate mechanism. All gates are enforced by the OpenSpec CLI when the user runs CLI commands.

Artifacts

All artifacts are created by the OpenSpec CLI, not the Zed extension:

  • openspec/changes/{id}/proposal.md
  • openspec/changes/{id}/design.md
  • openspec/changes/{id}/specs/*.md
  • openspec/changes/{id}/tasks.md

Onboarding

/openspec onboard generates a tutorial prompt that walks the user through the full OpenSpec workflow conceptually before they start using CLI commands.

06

Memory Context

OpenSpec-Zed — Memory and Context

State storage

None. The Zed extension itself stores no state. All persistent state lives in:

  • The OpenSpec directory structure (managed by the OpenSpec CLI)
  • The Zed assistant conversation context (in-session only)

Context injection

The extension injects a prompt into the Zed Assistant conversation. The Zed Assistant then has access to the current workspace (file tree, open files) as its context — this is provided by Zed's editor integration, not by the extension.

Cross-session handoff

No. The extension generates one-shot prompts; there is no session state or handoff mechanism.

Memory type

None.

Compaction

None — the extension does not implement any compaction.

07

Orchestration

OpenSpec-Zed — Orchestration

Multi-agent

No.

Orchestration pattern

None. Each slash command is a stateless one-shot prompt injection.

Isolation mechanism

None.

Multi-model

No. Uses whatever AI model the Zed Assistant is configured with.

Execution mode

Event-driven (responds to slash command invocations in the Zed Assistant panel).

Prompt chaining

No. Each command produces an independent prompt; there is no state carried between commands.

Auto-validators

None.

08

Ui Cli Surface

OpenSpec-Zed — UI, CLI, and Observability

Dedicated CLI binary

None. The Zed extension does not ship a CLI.

Local web dashboard

None.

IDE integration

Yes — Zed editor only.

Attribute Value
IDE Zed
Integration method Zed Extension API (zed_extension_api)
Surface Zed Assistant panel slash commands
WASM Yes (wasm32-wasi target)

The extension registers 11 slash commands in Zed's Assistant panel. Each command appears in the Zed / autocomplete.

Observability

None. The extension is stateless; no logging, no audit trail, no progress tracking.

Limitation note

The WASM sandbox that Zed extensions run in (wasm32-wasi) cannot execute arbitrary processes. This is why the extension only generates prompts rather than running openspec CLI commands. Users must run CLI commands in a separate terminal.

Related frameworks

same archetype · same primary tool · same memory type

Kiro ★ 3.8k

Prevents 'vibe coding' by enforcing a Requirements→Design→Tasks spec pipeline with EARS notation before any code is generated.

Zed ★ 84k

Open-source, GPU-accelerated IDE with a native AI agent featuring LSP-aware tools, update_plan for visible task tracking,…

Cline ★ 62k

SDK-first autonomous coding agent with human-in-the-loop approval across VS Code, JetBrains, CLI, and a parallel-agent Kanban…

openspec-for-copilot ★ 18

Brings OpenSpec spec-driven development to GitHub Copilot Chat users via a VS Code extension with sidebar spec management,…

Shadow Code ★ 79

Developers write pseudocode in a parallel .shadow file; Shadow Code transforms it into target-language production code via VS…

Cline ACP ★ 9

ACP protocol adapter that exposes Cline's coding capabilities to non-VS-Code editors like Zed.