The language for AI‑driven code maintenance.

Stop prompting. Start specifying. Vibe turns AI code changes into reviewable, verifiable engineering — with hard file boundaries and mechanical acceptance checks.

 .vibe/changes/add-search.vibe
change "add product search" {
  goal "Search products by title on the home page"

  scope {
    allow  "src/**"
    forbid "src/payments/**"   // never touched
  }

  requirements {
    "Search input at the top of the product list"
    "Search term reflected in the URL as ?q="
  }

  acceptance {
    "typing a keyword narrows the list"
    run "npm test"
  }

  rollback revert
}
What is Vibe?

A Vibefile describes how AI is allowed to modify software.

Infrastructure became reliable when we stopped clicking buttons and started writing files. AI coding is at the same turning point.

Dockerfile

describes how a container is built — reproducibly.

Makefile

describes how tasks are executed — repeatably.

main.tf

describes how infrastructure is provisioned — declaratively.

*.vibe

describes how AI modifies your code — within boundaries, with proof.

Why it matters

Chat is a great way to express intent — and a terrible engineering artifact.

As more code is written and maintained by AI, the scarce skill is no longer writing code. It is specifying changes precisely enough that an AI can execute them and a machine can verify them. Vibe is the language for that skill.

Reviewable

Vibefiles live in .vibe/changes/ and go through pull-request review like any other source file.

Verifiable

Boundaries are enforced against the actual git diff. Acceptance commands must exit 0. CI-gateable.

Replayable

The history of your Vibefiles is a machine-readable intent history: who changed what, within which limits, proven how.

Agent-agnostic

Any AI coding CLI works as the executor — Cursor, Claude Code, aider, or your own script. The contract stays the same.

How it works

Five layers. Two iron rules.

Natural language stays the fast input. The Vibefile is the engineering layer beneath it — compiled deterministically, enforced mechanically.

natural language“add search, don't touch payment code” — fast, human
Vibefiletyped change intent — reviewed, versioned (this is Vibe)
plan + promptdeterministic compile: same file in, same contract out
AI executorany agent CLI edits the code — and is not trusted
verifierscope check on the real git diff + acceptance commands → CI gate

Rule 1 — No LLM in the toolchain

The compiler and verifier never call a model. Same input, same output, every single time.

Rule 2 — The executor is untrusted

File boundaries are checked after execution against the actual diff — never assumed from the agent's self-report.

One command

vibe run — the whole loop.

The happy path

$ vibe run .vibe/changes/add-search.vibe

=== Attempt 1/2 ===
> executor edits the code...

Verify "add product search": PASSED
Scope check: OK
PASS (exit 0)  npm test

RUN PASSED after 1 attempt(s).
Review the diff and commit.

The agent goes rogue

$ vibe run .vibe/changes/add-search.vibe

=== Attempt 2/2 ===
Verify "add product search": FAILED
Scope violations (1):
  src/payments/charge.ts
    -> matches forbid "src/payments/**"

RUN FAILED after 2 attempt(s).
Rollback strategy is `revert`:
restoring tracked files...

On failure, the verify report is fed back to the agent for a retry. If every attempt fails, rollback revert restores the tree. The AI's claims don't count — the git diff does.

Learn Vibe in 5 minutes

The whole language fits in your head.

One declaration, six blocks, about a dozen keywords. If a change has no scope, no requirements, or no acceptance — it does not compile. An ambiguous plan is a rejected plan.

1 — goal

One sentence: what should be true after this change. It anchors everything else — the agent reads it first, your reviewer reads it first.

change "dark mode toggle" {
  goal "Users can switch the app to dark mode"
  /* ... */
}

2 — scope

The hard boundary. allow patterns say where the AI may write; forbid patterns always win, even when an allow also matches. Globs: ** crosses directories, * stays inside one.

scope {
  allow  "src/ui/**"
  allow  "src/theme.ts"
  forbid "src/auth/**"      // forbid always wins
  forbid "prisma/**"        // no schema changes
}

3 — requirements

Concrete instructions, one per line. A bare string means add this behavior; prefix with remove or modify when intent differs. Write them like you'd brief a careful contractor.

requirements {
  "Toggle button in the settings page header"
  "Preference persisted to localStorage"
  remove "the old high-contrast checkbox"
}

4 — acceptance

How success is proven. A bare string is a behavioral check; run lines are commands that must exit 0 — typecheckers, tests, builds. These run mechanically after every attempt.

acceptance {
  "clicking the toggle flips the theme instantly"
  "the theme survives a page reload"
  run "npx tsc --noEmit"
  run "npm test"
}

5 — constraints & style (optional)

Guard rails the agent must respect: dependency policy, API compatibility, design conventions. Conveyed verbatim in the agent's contract.

constraints {
  "no new npm dependency"
  "keep the public API unchanged"
}
style {
  "follow the existing component patterns"
}

6 — rollback (optional)

revert restores tracked files automatically when all attempts fail. manual leaves the changes in place for inspection. Default is manual.

rollback revert   // or: rollback manual
Get started

Three commands to your first verified AI change.

# 1. install (from a clone; npm package coming)
$ git clone https://github.com/your-org/vibe-lang && cd vibe-lang
$ npm install && npm run build && npm link

# 2. scaffold .vibe/ in the repository you maintain
$ cd ~/my-project
$ vibe init

# 3. point it at your AI CLI and run a change
$ vibe run .vibe/changes/example.vibe

Configure any agent as the executor in .vibe/config.json — placeholders {promptFile}, {prompt}, {repo}. No executor configured? vibe run prints the contract for you to paste into any AI tool, plus the verify command for afterwards.

Use Vibe for…

Feature additions, refactors, dependency upgrades, bug fixes — any change where “don't touch X” and “prove it works” matter.

Gate AI PRs in CI

vibe verify plan.json --repo . --json exits non-zero on any boundary violation or failed acceptance command.

Collaborate through files

Vibefiles are the shared protocol: a teammate's review of your change spec happens before any code is generated.

Audit everything

.vibe/changes/ history answers “why did this change, and who approved the boundary?” — forever.

FAQ

Questions, answered.

Is this another AI code generator?

No. Vibe's compiler and verifier contain zero AI. Vibe is the contract layer around AI code generation: it constrains what an agent may do and mechanically proves whether it did it. The agent is whichever tool you already use.

Why not just write better prompts?

A prompt is advice; a Vibefile is enforcement. Even the best prompt can't guarantee an agent stays out of src/payments/ — the verifier checks the actual git diff after execution, and CI can refuse the merge. Prompts also can't be diffed, reviewed, or replayed six months later. Vibefiles can.

Do I have to write Vibefiles by hand?

Engineers review and maintain them; assistants can draft them from natural language (roadmap: schema-constrained drafting built in). Same as SQL or Dockerfiles — most people don't write them from scratch, but the system would be unmanageable without them.

Which AI tools work as executors?

Anything with a CLI: Cursor's agent, Claude Code, aider, or a custom script. The executor is configured per repository as a command template. Vibe hands it a deterministic contract and judges the result.

Is my code sent anywhere?

Not by Vibe. The toolchain is fully local and deterministic. Only your chosen executor talks to a model — under whatever terms you already accepted for that tool.

What about behavioral checks like “clicking the toggle flips the theme”?

Today they're emitted as a human checklist after each run; run commands are fully automated. Lowering behavioral checks to Playwright/E2E suites is the top roadmap item.