Vow v1.0

A programming language built for AI agents to write.

Vow is designed around the loop every coding agent runs: write, run, read the error, fix. Every error says what is wrong, where, and the likely fix. There are no nulls and no exceptions, and every function declares whether it can touch the network, files or environment.

prices.vow
fn parsePrice(text) {
  let n = num(text)?
  if n < 0 { return err("a price can't be negative") }
  return ok(n)
}

for raw in ["4.50", "abc", "-2"] {
  match parsePrice(raw) {
    ok(p) => print("${raw}: ${fixed(p, 2)}")
    err(e) => print("${raw}: ${e}")
  }
}
Output
4.50: 4.50
abc: "abc" is not a number
-2: a price can't be negative
  1. Compiles to JavaScript. Recursive fib(32) runs in 0.09 s, against 0.14 s for Python (measured Oct 7, 2026).
  2. Errors are repair instructions, written for an agent to act on without a human.
  3. Capabilities are checked before anything runs: --sandbox refuses a program that reaches beyond what you allow.

Use Vow with your AI

Vow is meant to be written by AI coding tools. Give your tool the guide once and it can write, check and fix Vow on its own.

  1. Install

    npm install -g github:JakeBurwick/vow
  2. Tell your tool about Vow

    Paste this into Claude Code, Codex, Cursor or any coding agent.

    This project uses Vow, a programming language for AI agents. Before writing any Vow, read https://vow-lang.vercel.app/llms.txt and the guide it links to. Run programs with `vow file.vow`. After every edit run `vow --check file.vow` and fix each error using its "Likely fix" line. Before finishing, add test blocks for each example and error case and run `vow test file.vow`. Vow has no null and no exceptions: handle every Result with match or ?.
  3. Add it to your project optional

    Drop this AGENTS.md into your project root and your agent picks it up automatically. It holds the same instructions plus the five rules agents miss most.

    Download AGENTS.md Open in a new tab

    Show the file
    Loading AGENTS.md. If this does not change, open it with the link above.
  4. Connect the Vow tools optional

    For Claude Code. This gives the agent vow_guide, vow_check and vow_run tools.

    claude mcp add vow -- vow-mcp

Tested in October 2026 with Claude Haiku 4.5, Anthropic's smallest current model at the time. Larger models should do at least as well. Comparable small models from other labs should behave similarly, since everything Vow needs is in its guide, but they have not been measured. A very small local model (Llama 3.2 3B) could not solve these tasks in Vow or in TypeScript.

An error, as Vow prints it

✗ TypeError: can't add a num and a str
  → line 6, col 10
  6 |   return "Total: " + sum
               ^^^^^^^^^^^^^^^
  '"Total: "' is a str and 'sum' is a num. Vow never converts types implicitly.
  Likely fix: convert the number to text first: str(sum)

Five bugs side by side in Vow, TypeScript and Python

A sandbox refusal, before any code runs

$ vow --sandbox --allow fs=./data app.vow
✗ SandboxError: this program needs capabilities the sandbox does not grant
  env: calls fn leak, which declares 'uses env' (line 2)
  Nothing was run.
  Likely fix: remove that access, or run with --allow env

Built and measured by Jake Burwick. On three brand-new hard tasks, Vow had one failed submission in nine runs and TypeScript had zero with every run solved, showing the two perform evenly on a small sample, and code that agents finish passes fresh hidden tests at about the same rate with 99.5% for Vow and 99.3% for TypeScript. Measured October 2026; numbers may have changed since. See the benchmarks.

Install

You need Node.js 20 or newer. Vow has no other dependencies.

npm install -g github:JakeBurwick/vow
echo 'print("Hello, Vow!")' > hello.vow
vow hello.vow

To hack on Vow itself, clone the repository and run the CLI from the clone:

git clone https://github.com/JakeBurwick/vow.git
cd vow
echo 'print("Hello, Vow!")' > hello.vow
node cli.js hello.vow

Command-line flags

Cmd/Ctrl+Enter runs. Click a line number to set a breakpoint.

Output

Variables start the debugger to watch values live