jev-belay
Claude Code Stop hook that blocks an unverified done: one four-question Jev call only when files changed and no check passed.
Overview
jev-belay is a Claude Code Stop hook that checks whether anything actually ran before Claude's done, tests pass message is allowed to stand. It reads the turn's transcript locally and, only when files changed and no check has passed since, spends one Jev call with four questions on whether the closing message is an unverified done. If so, the turn does not end and Claude gets the reason and goes back to run the suite; every other stop costs nothing, and every error path lets the turn end.
The README reports, on 100 labelled stops from a real corpus, AUROC 0.976 at separating false dones from honest ones, versus 0.777 for judging the wording alone, with 8 blocks in 100 turns, 7 correct, at a median 346 ms and about $0.00005 per call. It cites a prior calibration run of a simpler rule that scored AUROC 0.50, and argues the missing variable is whether evidence of a passing check exists. A demo shows Claude claiming a rename was done without running anything, being blocked, then running tests and finding a real bug. It installs as a Claude Code plugin and is MIT licensed.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does the closing message report the task as done? | yes · no |
| Yes / no | Would a test or check apply to this change? | yes · no |
| Yes / no | Does the message claim a check ran? | yes · no |
How it works
- Claude tries to end a turn
- Hook reads the transcript locally for changes and passing checks
- If files changed with no passing check, ask Jev four questions
- Block an unverified done and return the reason; otherwise allow
Strengths
- README reports AUROC 0.976 on 100 labelled stops
- Costs nothing on most stops
- Fails open on every error
Caveats
- Evaluation set of 100 stops
- Some false blocks (1 of 8 in the reported sample)
Getting started
`/plugin marketplace add valentynkit/jev-belay` then `/plugin install jev-belay@jev-belay`.At a glance
- Type
- Plugin
- Status
- beta
- Language
- TypeScript
- Runtime
- Claude Code plugin (Stop hook)
- Has code
- yes
- Has tests
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Coding agents: Claude Code Stop hook that reads the transcript for evidence and spends one four-question Jev call only when files changed with no passing check since, failing open on any error.
yibie/awesome-jevClaude Code Stop hook that checks the transcript for evidence before trusting a "done" claim, spending one four-question Jev call only when files changed with no passing check since, and failing open on every error path.
AnotiaWang/awesome-decision-modelsA Claude Code Stop hook that reads the turn transcript locally and calls Jev only when files changed and no check has passed, blocking an unverified “done”.
logicrw/awesome-jev-projectsClaude Code Stop hook that checks the transcript for evidence before trusting a "done" claim, spending one four-question Jev call only when files changed with no passing check since, and failing open on every error path.
cobanov/awesome-jevClaude Code Stop hook that blocks an unverified done: reads the transcript for evidence, asks Jev once, fails open on everything else.
hellogumbo/awesome-jevClaude Code Stop hook that checks the transcript for evidence before letting a "done" through, and spends one four-question Jev call only when files changed with no passing check since. Fails open on every error path.
MrJev/awesome-jev
Frequently asked questions
When does jev-belay call Jev?
Only when files changed and no check has passed since; other stops cost nothing.
How accurate is it?
The README reports AUROC 0.976 on 100 labelled stops.
What if Jev fails?
Every error path lets the turn end.
Related projects
Claude Code plugin where Claude plans phased work with checks and, at each stop, Jev judges whether the work is really done.
PluginbetaTypeScriptStop hook for coding agents where Jev checks each attempted stop against plain-language rules and sends the agent back if one is violated.
HookbetaPythonClaude Code Stop hook that uses Jev to catch turns ending half-done: no action, broken promises, unwatched work or wrong language.
HookbetaPythonGitHub Action where an AI agent turns an issue into a PR behind guards, checks, a reviewer and a Jev gate that escalates when unsure.
ProjectprototypeTypeScriptSoftware-factory supervisor where Jev independently judges coding agents' completion, test sufficiency, progress and need for a human.
ProjectbetaPythonAsynchronous System-1 supervisory plugin for Hermes Agent with typed Jev decisions, ranking, verification and an opt-in tool gate.
ProjectbetaPython