Deed 0.2.13 / contract-first language

Deed tells you when an agent patch gains power.

Deed compares the checked contract before and after a patch. It flags new authority, weaker guarantees, and new runtime checks even when the tests stay green.

  • Runs locally
  • Works in CI
  • Available over MCP
deed review policy: blocked

- uses Store.read

+ uses Store.read, Store.write

Review blocked

New authority
Store.write
Weaker promise
proven -> guarded
Tests
may still pass

Produced from the pinned Deed compiler. Open the full receipt.

Why Deed

Make authority part of the program, not the reviewer's guess.

01

Explicit by construction

Effects live in signatures and capabilities live in values. A function cannot quietly reach beyond either one.

02

Contracts that do work

A promise is proven, turned into generated tests, guarded at runtime, or refused with the reason it could not go higher.

03

Evidence for change

Review compares checked trees, so new authority and weaker guarantees stay visible even when tests still pass.

Use Deed for

The boundary where generated code meets real authority.

01 / review

Review an agent patch

See authority additions, tier regressions, and new runtime obligations.

Open the review receipt
02 / capabilities

Bound side effects

Pass filesystem, store, clock, and service access as explicit values.

Follow one boundary
03 / contracts

Generate the test

Turn a contract into reproducible property cases without writing a test.

Open the contract examples
04 / components

Embed checked code

Build a WebAssembly component and call it from a capability-holding host.

Read the host guide

One binary

From the first check to editor, CI, and agent.

Each surface asks the same compiler. No second policy engine and no service account between the source and the answer.

Underneath the receipt

A small language, not another policy file.

Deed checks types, effects, capabilities, contracts, and the code that must satisfy them. Nothing is ambient. If a function can touch the filesystem, the filesystem appears in its inputs and the operation appears in its signature.

See one clause become a boundary
fn keep(files: Dir, name: String, text: String)
  -> Result<(), String>
  uses Io.read,
{
    match Io.read(files, name) {
        ok(_)  => ok(()),
        err(_) => Io.save(files, name, text),
    }
}

error[DEED5001]: `keep` performs `Io.save`
without declaring it

Learn Deed

Choose the shortest route to a real answer.

Project record

Open source, versioned, and written down.

The compiler, examples, release artifacts, design decisions, and contribution process are public. The site adds no analytics or account layer around them.