VibeDoc

Spec-driven development for AI coding agents

Every task your agent finishes comes with proof.

VibeDoc keeps your plan, specs and memory as markdown in your repo. Claude Code, Cursor or any MCP agent works them task by task, and you review each one on its tests, screenshots and video.

Works with Claude Code · Cursor · Windsurf · Codex · any MCP client

Try the demo first:npx vibedoc --demoa sample project in a throwaway copy, nothing touches your files.

$ npx vibedoc

Runs the latest version in the current project. Nothing to install.

Watch a task move.

  1. The agent claims the next ready task
  2. Every checklist item runs as a test
  3. Done comes with proof

14 seconds, unedited

Your agent moves the card. You don't touch anything.

The agent asks VibeDoc for the next ready task, builds it, reports its checklist and marks it done. The board updates over a live connection, and the next task opens because its dependency is met.

Spec-driven development

Vibe coding forgets. Specs remember.

In a chat, what you asked for scrolls away and "done" means "trust me". VibeDoc keeps what each feature must do as living specs next to your code, turns the promises into checks, and verifies the work against them before you approve it.

Without specs

  • Intent lives in chat history and is gone next session
  • The agent rebuilds how a feature works from old tasks
  • "Done" is the agent's word for it
  • Docs drift until nobody trusts them

With VibeDoc

  • Each capability has one spec: requirements with WHEN/THEN scenarios
  • The agent sees the related requirements when it claims a task
  • Scenarios seed each task's checklist, and the epic shows which ones passed
  • A finished epic merges its spec changes in one reviewed diff
  1. 1 · Capability spec

    What it does today

    docs/specs/memory.md
    ### Requirement: Session budget
    Session start SHALL fit the
    memory budget.
    
    #### Scenario: Many entries
    - WHEN there are 200 entries
    - THEN only what fits is listed
  2. 2 · Epic

    What will change, and how we'll know

    plans/roadmap/R069-….md
    ## Scenarios
    ### S1: Bigger budget
    - WHEN 300 entries exist
    - THEN session start still fits
    
    ## Spec changes
    #### MODIFIED Requirement:
    Session budget
  3. 3 · Verify

    Checked against what was asked

    critical
    AC2 "Unknown plan → 400": route returns 500

    major
    S1 has no test step

    Tick findings → Send back 2 findings

  4. 4 · Merge

    The spec stays current

    Merge R069 into the spec
    − fit 2000 tokens
    + fit 3000 tokens
    − WHEN 200 entries
    + WHEN 300 entries
    
    Accept

Brownfield-first: you never write specs for the whole codebase up front. A spec starts with the first epic that touches a feature and grows with every epic after it, the same delta idea OpenSpec uses (ADDED, MODIFIED, REMOVED, RENAMED).

Plan. Build. Prove. Review.
Four commands, one loop.

The commands ship as a Claude Code plugin. In Cursor or any other MCP client, the same steps are the vibedoc_* tools.

  1. Plan

    Turn your docs and a short interview into horizons and epics with scenarios.

    /vibedoc:roadmap
  2. Break down

    Split an epic into tasks an agent can pick up cold, each seeded with its scenarios.

    /vibedoc:breakdown R004
  3. Build and prove

    Claim, build, test and commit, task by task. Each one ends with its evidence. Or click Work with agent: it runs in its own git worktree and branch.

    /vibedoc:work R004
  4. Review

    Approve on the proof, or send findings back. Not sure what's next? Ask.

    /vibedoc:next

Inside VibeDoc

One local app for the whole loop.

A board your agent moves

Tasks are markdown files. Agents claim, move and finish them over MCP, and each card shows its test results and who is on it.

The board grouped by epic

Running in a minute.

Local-first: one process on your machine, no account, no database. Your plans stay plain markdown in your repo. Run it in the background and it restarts itself after a crash, at the same address, so your agent stays connected.

1 · Start VibeDoc in your project

cd your-project
npx vibedoc

2 · Connect your agent over MCP

"vibedoc": {
  "url": "http://localhost:<port>/api/mcp"
}

3 · Add the commands (Claude Code)

/plugin marketplace add quanghoangf/vibedoc
/plugin install vibedoc@vibedoc

4 · Keep it running: in the background, at every login (optional)

vibedoc start
vibedoc login on
vibedoc stop

Give your agent a board,
and yourself the proof.

Open source, MIT licensed, built in the open.