Skip to content

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.

HookbetaMIT

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

TypeQuestionAnswers
Yes / noDoes this stop violate the rule (e.g. 'Don't say done without running tests')?—

How it works

  1. Agent is about to stop
  2. Hook gathers recent messages, tool calls and the final message
  3. Jev answers one yes/no question per rule in parallel
  4. If a rule is over threshold, exit 2 and send the agent back
  5. 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-jev
  • A Stop hook guardrail for coding agents: prevents premature completion by judging plain-language rules via Jev.

    logicrw/awesome-jev-projects
  • A 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.

    PluginbetaTypeScript
  • Claude Code plugin with nine Jev-judged gates for rules, scope, intent, completion and claims that escalate but never approve.

    HookbetaTypeScript
  • Claude Code plugin that scores a turn's redacted diff on eight Jev risk axes at Stop and asks Claude to reinvestigate once if high.

    ProjectbetaGo
  • Risk gate for AI coding agents: Jev decides at five layers and Claude Code hooks enforce deny or ask deterministically.

    ProjectbetaJavaScript
  • Claude Code plugin where Claude plans phased work with checks and, at each stop, Jev judges whether the work is really done.

    PluginbetaTypeScript
  • Claude Code Stop hook that uses Jev to catch turns ending half-done: no action, broken promises, unwatched work or wrong language.

    HookbetaPython