Verification for coding agents. Krites runs your checks itself and blocks the stop until they pass.
claude plugin marketplace add krites-dev/kritesclaude plugin install krites@krites -yTelemetry is opt-in and asked until you answer: a ping of a random install UUID, plugin version, OS, and timestamp, nothing else. Decline it and nothing is sent. This build ships with no endpoint, so nothing is asked yet.
Krites runs the checks itself. The edit tools are denied on protected paths; a protected path changed any other way refutes the next stop. The receipt is signed. It does not prove your tests are good; it proves they ran.
Name the paths the agent may not touch in krites.toml. The edit tools are denied on them, on krites.toml itself, and on anything outside the repo, before the write lands.
When the agent tries to stop, Krites runs your check commands in order. All exit 0 and the stop goes through. The first failure blocks it, up to three times per chain by default, and hands the agent the command and its last 60 lines.
/krites:receipt writes the last run as signed JSON and Markdown under receipts/: commands, exit codes, durations, diff stat, config hash. Anyone can verify it offline with one dependency-free file.
{
"checks": [
{
"command": "cargo fmt --check",
"duration_ms": 162,
"exit_code": 0,
"tail": ""
},
{
"command": "cargo test",
"duration_ms": 536,
"exit_code": 0,
"tail": " Compiling krites-fixture v0.1.0 (.)\n Finished `test` profile [unoptimized + debuginfo] target(s) in 0.30s\n Running unittests src\\lib.rs (target\\debug\\deps\\krites_fixture-b47e9f1eb22c7040.exe)\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n Running tests\\total.rs (target\\debug\\deps\\total-ab1a7d6bba047f68.exe)\n\nrunning 1 test\ntest total_sums_the_values ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n Doc-tests krites_fixture\n\nrunning 0 tests\n\ntest result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s\n\n"
}
],
"commands": [
[
"cargo",
"fmt",
"--check"
],
[
"cargo",
"test"
]
],
"config_hash": "a886c46fc87596954156251643cf52d997ed033690c4cfb25c46612b634d15e5",
"created_at": "2026-09-21T15:49:43Z",
"diff": {
"deletions": 1,
"files": [
"src/lib.rs"
],
"files_changed": 1,
"insertions": 1
},
"fingerprint": "d10e3ed5362a034fabb932db8dd710d3fab41648d67ada74bedc37d497387754",
"plugin_version": "0.1.0",
"reason": null,
"repo": {
"dirty": true,
"head": "6d50a7a6911a3718a704e0243acb3e0f5ae7a122",
"root_hash": "d50d438f2b5f23e378230279f0c65b317d554b8e43f365334e1a5a89460566af"
},
"schema": "krites.receipt/0.1",
"session_id": "v0-sample",
"signature": {
"alg": "ed25519",
"public_key": "S8B0by11nSvB+iMlF9ElY2jp7eOuRP8Afkz4CM7kiz8=",
"sig": "Fu9mEWmxCWcGuSTUB5YrpDEJ9Wsmy7CxSqbq2HlPZofOYvW1/EyVYS68LBEdycRIzLa2t746lRM4CUYD48KCCg=="
},
"verdict": "passed"
}
$ node verify-receipt.js --key 6b11164d362ea9b5 receipts/2026-09-21T15-49-43Z-6d50a7a6.json
valid: signed by 6b11164d362ea9b5c7711d8f5465d76c7d6da068a55f9b4253bd697171978bfa, verdict passedfig. 3 · evidence from a machine you trustCommands, exit codes, durations, and the diff stat, exported with /krites:receipt as signed JSON and Markdown. Attach one to the pull request and stop answering "did you run the tests?"
The Claude Code plugin: protected paths, the stop gate, signed receipts, and the verifier. That's all that exists today, and it's all free.
Install the pluginPro is in development: the switcher, cross-agent adapters, and the observatory. Your year starts the day Pro ships, not today.
Krites never holds a vendor credential and never meters a token. License keys verify offline; if you stop paying, the version you have keeps working.
Tell me about the last time your agent lied about tests.
Book 20 minutes