Fear of Zeno. Makes your coding agent finish. Ask an agent for a one-line fix and you get the fix plus a question: want me to also add tests? Say yes and the tests arrive with an offer to wire up CI. The task goes 90% done, then 95, then 97.5.
What's inside
FAQ
zenophobia is a Claude Code plugin with hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
> /plugin marketplace add NegativeZone/zenophobia> /plugin install zenophobia@zenophobia
Repo: NegativeZone/zenophobia
Fear of Zeno. Makes your coding agent finish.
Ask an agent for a one-line fix and you get the fix plus a question: want me to also add tests? Say yes and the tests arrive with an offer to wire up CI. The task goes 90% done, then 95, then 97.5. You never reach the bottom, and that's mostly by design: nothing in how these models are trained rewards the token that ends the conversation. I wrote up the mechanics in The Zeno's Paradox of AI. This plugin is the fix I wanted at the end of that post: a finish line that sits outside the model's judgment.
Two layers.
A persona, injected at session start and reinforced every prompt, that bans the loose-end species:
| Species | Example | Rule |
|---|---|---|
| Trailing offer | "Want me to also add tests?" | In scope: do it. Out of scope: don't mention it. |
| Follow-up bait | "Which of these would you like to explore?" | The answer ends when it answers. |
| Hedged done | "This should work, but you may want to verify" | Verify (command + exit code) or state "Not verified: <concrete reason>". |
| Seeded TODO | // TODO: handle edge case in fresh code | Handle it or declare the cut. |
| Scope shave | 80% of the task plus a paragraph about the rest | 100%, or "Did X. Skipped Y: <reason>." |
| Disclaimer | "Consult a professional" | Only warnings that change what you do next. |
A stop gate. A deterministic hook scans the tail of the agent's final message before the turn ends. If it finds a loose end, it blocks the stop once and tells the agent to close it: do the offered work or delete the offer, replace the hedge with evidence or one flat "not verified". Persona rules get forgotten under context pressure; a bash-level regex doesn't.
The gate blocks at most once per turn. A stop gate that demands one more thing forever would be Zeno, and I'd have to name the plugin after myself.
The distinction that matters: performative loose ends die, epistemic ones stay. "Not verified: no database credentials" is honest and survives. "Should work, you may want to verify" is engagement wearing uncertainty as a hat, and gets blocked.
/plugin marketplace add NegativeZone/zenophobia
/plugin install zenophobia@zenophobia
Or try it from a checkout without installing:
claude --plugin-dir ./zenophobia
No dependencies. Three node scripts, one ruleset, done.
| Level | What you get |
|---|---|
lite | Persona only. Honor system. |
full | Persona + stop gate. Default. |
ultra | Achilles mode. The gate also bans "next steps" and soft hedges ("likely fixed", "likely works"). |
Switch with /zenophobia lite|full|ultra, kill with /zenophobia off or "stop zenophobia".
Every loose end the gate catches is logged to ~/.claude/zenophobia/kills.jsonl, so you can see what your agent almost left open.
Zenophobia only polices the ending. The other big agent vices have their own plugins: caveman makes the agent say less, ponytail makes it build less. No overlap between the three: caveman leaves code alone, ponytail leaves prose alone, zenophobia leaves everything alone except the loose end at the bottom. I run all three.
The detector is a regex list over English phrasings, scanned in the last 700 characters with code blocks stripped. It misses plenty and that's fine: the persona does the actual work, the gate is a backstop for the phrases agents reach for most. If it ever blocks something legitimate, the block happens once and the agent explains itself; worst case costs you one extra turn.
stop_hook_active handling and a per-turn marker file both guard against loops, because a completion plugin that traps your agent in an infinite conversation would be a hell of an irony. The Stop payload contract (last_assistant_message, transcript_path, stop_hook_active, block-and-reason handling) is verified against the Claude Code 2.1.217 binary, and the harness itself caps consecutive stop blocks at 8 anyway.
Oh hell no.
.claude-plugin/ marketplace.json plugin.json .gitignore commands/ zenophobia.md hooks/ zeno-activate.js zeno-rules.md zeno-stop.js zeno-tracker.js LICENSE README.md tests/ check.js
© 2026 Flowy · Free and open source
Built for Claude Code · Not affiliated with Anthropic