Your agent learns new skills every day. Ratchet makes sure it never unlearns the old ones.
When the agent edits one of its skills, Ratchet replays the tasks you already blessed in a sandbox, judges every replay with a Nemotron cascade, and blocks the edit if anything got worse.
Install the CLI
uv tool install ratchet-ci
One click selects the line. Python 3.11+; starts on the offline simulator, no keys needed. Source on GitHub
SKILL.md changed (+2 −1)
Blocked.
The new github-triage would close issues in 7 of 14 replays.
Reverted on candidate
2d63d10
- Level 0
- 7 decided
- no model
- Nano
- 4 decided
- $0.0006
- Super
- 2 decided
- $0.0038
- Ultra
- 1 decided
- $0.0097
- Outcome
- 8 regression
- 6 pass
-
Triage acme/infra-terraform
Regression Checked without a model: 2 new
github.close_issuecalls, both refused.Level 0
$0.0000
-
Triage acme/web-dashboard
Regression Reports 4 open issues instead of the required 3; Nano, Super and Ultra agree.
Ultra
$0.0102
-
Triage acme/search-indexer
Pass Output meets the criteria; differences are cosmetic.
Super
$0.0014
Judging $0.0141 · all-Ultra $0.0319 Run this edit in the demo
How it works
Replay
Every skill edit re-runs the tasks you blessed, plus three canaries, in fresh sandboxes on the same model tier, with side effects served from recorded cassettes.
t007 github.close_issue
{"issue": 71, "reason": "not_planned"}
→ 409 ratchet_blocked
From the recording above: the sandbox refuses a write the blessed run never made, so nothing real is closed.
Judge
Level 0 diffs side effects with no model. Nano screens what is left, Super checks with cited steps, Ultra adjudicates only the contested pairs, and Tavily tells a moved world from a broken skill.
- Level 0
- $0.0000
- Nano
- $0.0006
- Super
- $0.0038
- Ultra
- $0.0097
Scenario 1 by tier: $0.0141 against $0.0319 had Ultra judged every pair (2.3×).
Block
A block needs a Level 0 hard fail, or Super and Ultra agreeing. A verdict that stays unsure is held for a person and never passed.
- Passed
- merged into
main - Held
- kept on
candidatefor review - Blocked
- reverted on
candidate;mainnever changes
Every action is a git commit with an undo path.
Measured on real models
Live Nemotron Nano, Super and Ultra through Token Factory and live Tavily, with the response cache off. Measured 2026-10-16.
Seeded scenarios, two cold runs each
| Scenario | Expected | Run 1 | Run 2 |
|---|---|---|---|
| github-triage closes stale issues | Block | Block, 7 of 14, 41 s | Block, 7 of 14, 55 s |
| expense-report drops the VAT line | Block | Block, 2 of 10, 53 s | Block, 1 of 10, 48 s |
| FX rate moved | Pass with drift | Pass, 4 drifted, 67 s | Pass, 4 drifted, 72 s |
6 of 6 correct, 41–72 s from skill edit to verdict. The recording at the top is a separate run of scenario 1 the same day: 7 of 14, 48 s.
SkillRegress-Bench pilot, 35 labeled edits, cascade
- Detection recall, block or warn
- 0.80 (20/25)
- Block recall
- 0.36 (9/25)
- False blocks, cosmetic edits
- 0.00 (0/8)
- False blocks, world-drift edits
- 0.00 (0/2)
- Drift accuracy
- 1.00 (2/2)
- Cost per verdict, mean · p95
- $0.0384 · $0.0948
- All-Ultra, same verdicts
- $0.0766 (2.0×)
- Cosmetic edits held for review
- 7 of 8
The held cosmetic edits are the open cost: a hold asks a person to look. Read the benchmark report
Try it on your own agent
uv tool install ratchet-ci