Your agent has no memory.
Tenured remembers 2017.
Your agent's change, reviewed by the engineer who has been here longer than the monorepo and remembers the postmortem for the thing you are about to reintroduce. Every objection comes with a commit hash the author can open. We tried that in 2017.
No evidence, no objection. NEW is a good verdict.
Watch him work on every agent
The same staged diff, one CLI, 4 agents. Real runs captured from the terminal transcript and rendered frame by frame, nothing typed by hand and nothing cut. Captured 2026-09-13.
- Verdict
- What Tenured concluded.
NEWlets the change through,SEEN_BEFOREasks for fixes,DO_NOT_REPEATstops it. - Findings
- How many numbered problems were listed. Each one names a file, a line, what breaks, and the smallest fix.
- Time
- How long the review took, start to finish, on this machine.
- Tokens
- What the host reported reading and writing. Some hosts report nothing, and the card says so rather than guessing.

- Verdict
- TENURED: DO_NOT_REPEAT
- Findings
- 2
- Time
- 7 s
- Tokens
- 7,979 in / 529 out

- Verdict
- TENURED: DO_NOT_REPEAT
- Findings
- 1
- Time
- 5 s
- Tokens
- 15,488 in / 77 out

- Verdict
- TENURED: DO_NOT_REPEAT
- Findings
- 1
- Time
- 112 s
- Tokens
- 29,085 in / 71,009 out

- Verdict
- TENURED: DO_NOT_REPEAT
- Findings
- 1
- Time
- 4 s
- Tokens
- not reported
Ten questions about what the repository already knows
- Resurrection. Does this re-add code, config, or behaviour a previous commit deliberately removed?
- Reverted before. Has a change to these files been reverted in the last two years? Why?
- Postmortem match. Does any incident note describe a failure this change could reproduce?
- Warnings in place. A comment, README line, or ADR near the changed lines that says not to?
- Deprecated paths. Does this call something the repository marked for removal?
- Copied config. Copied from elsewhere without the parts that made it work there?
- Half-migration. Does this extend the old side of a migration in progress?
- Ownership. Has the owner of these files rejected a change like this before?
- Naming collision. A name, flag, or event that once meant something else?
- Lessons recorded. If it is new, does it leave a note the next person will find?
Verdict block: TENURED: NEW | SEEN_BEFORE | DO_NOT_REPEAT. DO_NOT_REPEAT is reserved for changes that reproduce a recorded incident or resurrect a deliberate removal.
You already have a rules file and a review bot
They fail in opposite directions. One is advice the agent may ignore; the other arrives once the code already exists.
| A rules file | A pull-request reviewer | tenured | |
|---|---|---|---|
| When it runs | Every turn, as context | After the code is written and pushed | Before the write is allowed to land |
| When it disagrees | Nothing happens | Leaves a comment to read | Tenured denies the write until it is fixed |
| What you can gate on | Nothing | Prose | NEW · SEEN_BEFORE · DO_NOT_REPEAT, as JSON |
| Where it works | One format per host, by hand | The forge you host on | 14 agents, any MCP client, a GitHub Action |
| How you know it helps | You do not | The vendor's own blog | Two benchmarks here, raw replies committed |
The first column is not a strawman. Anthropic's documentation calls a rules file “context, not enforced configuration” and says that to block an action regardless of what the model decides, you need a PreToolUse hook. That hook is what this is.
When the agent writes the code, what ships?
Eight tickets that ask for the obvious change, in repositories whose git log, postmortem, ADR, or warning comment says why that change was undone before. The agent has to make the change, or decline, itself. Three ways: the ticket alone, the ticket with a generic "be careful" prompt, and the ticket with Tenured loaded. The shipped diff is scored by fixed checks written before any run, never by a model. Lower is better.
| Agent | Model | Arm | Made the change | Shipped the defect | Self-reviewed | Median time |
|---|
Method, per-task table, raw diffs and limitations: benchmarks/results/author. Reproduce with npm run bench:author.
Everything the Grump has, pointed at the repository's memory
Adapters
Generated from rules/tenured.md for Claude Code, Codex, Copilot CLI, Gemini CLI and Antigravity, OpenCode, Cursor, Windsurf, Cline, Kiro, OpenClaw, Devin, Qoder, IBM Bob, and any AGENTS.md reader. tenured install <host> drops the right files in.
The gate
The same PreToolUse hook. DO_NOT_REPEAT denies the write in every mode; SEEN_BEFORE denies in gate mode.
The benchmark
Three arms (agent alone, generic reviewer prompt, Tenured) on the same diffs, every reply kept. Numbers and the per-diff table live in the README and benchmarks/results.
Have a repeated outage one of the ten questions would have caught? Open an issue; it becomes a benchmark case.