limpet
Stop hook for coding agents where Jev checks each attempted stop against plain-language rules and sends the agent back if one is violated.
Overview
limpet is a Stop hook that keeps coding agents from finishing too early, for example stopping to say 'I'll wait for CI' or 'shall I apply the fix?' when the work was already requested. You write rules in plain language. Each time the agent is about to stop, limpet reads the last three messages, the turn's tool calls and the final message, and Jev answers one yes/no question per rule in parallel in about 0.7 seconds. If any rule is over threshold, the hook exits with code 2 and a one-line message, so the agent keeps working.
The second stop in the same chain is always allowed, so the agent is pushed back at most once; if it disagrees it explains in one line and stops. The README advises tuning for recall, since a false positive costs one sentence while a missed early stop costs a round trip. It is one Python file using only the standard library, works with a TypeSafe key or Vercel AI Gateway, and costs about a hundredth of a cent per stop. It installs as a Claude Code plugin, with Japanese documentation available.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Does this stop violate the rule (e.g. 'Don't say done without running tests')? | — |
How it works
- Agent is about to stop
- Hook gathers recent messages, tool calls and the final message
- Jev answers one yes/no question per rule in parallel
- If a rule is over threshold, exit 2 and send the agent back
- The next stop in the chain is always allowed
Strengths
- Plain-language rules, no regexes
- At most one push-back per stop
- Standard-library Python only
- Very low cost per stop
Caveats
- False positives cost an extra sentence
- Requires a TypeSafe or AI Gateway key
- Relies on Claude Code's Stop hook behaviour
Getting started
/plugin marketplace add noplan-inc/limpet then /plugin install limpet@limpet in Claude Code.At a glance
- Type
- Hook
- Status
- beta
- Language
- Python
- Runtime
- Claude Code Stop hook
- Has code
- yes
- Has tests
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Coding agents: Stop hook that keeps an agent from finishing too early by judging plain-language completion rules with Jev.
yibie/awesome-jevA Stop hook guardrail for coding agents: prevents premature completion by judging plain-language rules via Jev.
logicrw/awesome-jev-projectsA Stop hook that stops your coding agent from stopping too early. Plain-language rules, judged by jev.
hellogumbo/awesome-jev
Frequently asked questions
What does Jev decide?
Whether the agent's attempted stop violates each of your plain-language rules.
Can it trap the agent in a loop?
No, the second stop in the same chain is always allowed.
What does it cost?
About a hundredth of a cent per stop, per the README.
Related projects
Claude Code Stop hook that blocks an unverified done: one four-question Jev call only when files changed and no check passed.
PluginbetaTypeScriptClaude Code plugin with nine Jev-judged gates for rules, scope, intent, completion and claims that escalate but never approve.
HookbetaTypeScriptClaude Code plugin that scores a turn's redacted diff on eight Jev risk axes at Stop and asks Claude to reinvestigate once if high.
ProjectbetaGoRisk gate for AI coding agents: Jev decides at five layers and Claude Code hooks enforce deny or ask deterministically.
ProjectbetaJavaScriptClaude Code plugin where Claude plans phased work with checks and, at each stop, Jev judges whether the work is really done.
PluginbetaTypeScriptClaude Code Stop hook that uses Jev to catch turns ending half-done: no action, broken promises, unwatched work or wrong language.
HookbetaPython