More than 50 ADRs, every choice written down

Code review that brings receipts

Warden gives your agent the parts of a code review it cannot make up: type errors, lint findings, advisories checked against OSV, and real .d.ts signatures. Your agent runs the review over MCP. Then Warden's gates decide what gets published. The model never gets the last word.

$warden opencode-review --base main

okmcp: warden connected · run_det_priors, lookup_type_def

okdet-priors: tsc, eslint, audit + OSV, jscpd, security lint

oklane down · correctness · OpenCode, read-only tools

okpost-pass: citations verified, scoped to diff, cap 5

..publishing CommentSet

T2 contract 92%

packages/cli/src/index.ts:60

`warden check` still validates provider environment before any deterministic checks run.

T2 consistency 84%

README.md:41

Should the quick-start distinguish the optional semantic index from the required review path?

T1 correctness 96%

packages/core/src/banner/index.ts:53

An empty chunk store is treated as a missing index before model metadata is inspected.

How a review runs

  1. Diff. Warden resolves the base by merge-base, prunes generated files, and stops on unsafe input, such as a symlink that leaves the repo.
  2. Det-priors. The lane calls run_det_priors first and reads the findings page by page, by handle.
  3. Lanes. The down lane proves invariants. The up lane searches for structural drift and is opt-in. partial
  4. Post-pass. Warden verifies citations, keeps each finding inside its lane's file scope, demotes by confidence, and caps volume.
  5. Publish. Warden emits one stable CommentSet. The scope envelope comes from the driver, never from the model.

What your agent gets

warden mcp is a local stdio server. Every result carries a schema version, stays under a size bound, and returns a structured reason instead of throwing.

Agent runtimes get better at sub-agents, model routing, and permissions with every release. None of them ships a detector corpus, verified advisories, or a repo index. So Warden hands the loop to the runtime and keeps the parts that have to be right.

Connect

Add Warden as a local server in opencode.jsonc. Any MCP client works the same way.

{
  "mcp": {
    "servers": {
      "warden": {
        "type": "local",
        "command": ["warden", "mcp"]
      }
    }
  }
}

Warden is not on npm yet. Point command at a local checkout. The MCP docs show the exact form.

What lands in a comment

Every Warden comment is a small receipt. It earns the right to interrupt you.

Principles