The plugin watches your time, not your code.
Every developer I know loses days the same way. Two hours nudging text sizing an AI can't see. A weekend rebuilding a library that already has four thousand stars. A month on the side project while the one that mattered goes cold. The bug you keep attacking with the same theory that failed four attempts ago.
None of the existing tools catch this. Linters check syntax. Reviewers check correctness. ponytail checks that the code isn't bloated — good code, still the wrong week.
Batman is the one that asks the rude question: is this worth an hour of your life? He isn't the assistant you want. Nobody wants to be told the last two hours were a waste. He's the one you're glad was there when you check what he saved you. He isn't the hero we deserve, he's the one we need.
/plugin marketplace add Hurleveur/batman
/plugin install batman
| Signal | The waste it kills |
|---|---|
| It already exists | You're rebuilding a library. Searched GitHub, your own repos, installed deps, before line one. |
| Nobody asked | A feature with no requester and nothing that breaks without it. |
| Wrong hands | Jobs AI does badly — visual/text fitting, images, testing with no browser, anything tuned by feel. Flagged before attempt one, with the escape route. |
| Stuck too long | Three failed attempts on one theory, or a file rewritten nine times. No fourth attempt. New hypothesis, timebox, or back out. |
| Drift | Session opened on X, work is on Y. Checked against WHY.md, not vibes. |
| Wrong project | Time going somewhere you never said mattered. /batman-report shows where the week actually went. |
Silent by default. When something trips, one line, once, then out of the way. Overrule him and he drops it — and snoozes his own timer so he doesn't nag.
Two hooks, both cheap bash. No daemon, no telemetry, no database.
On session start — the six signals go in, in full. Not a banner announcing a
mode: the actual rules, because a skill file nobody loads changes nothing. If the
project has a WHY.md, it goes in as the north star. If the directory is empty
and has no commits, he points at the new-project ritual before you write code —
a lived-in scratch dir like $HOME has no commits either, and a nudge that fires
every session is a nudge nobody reads.
On every prompt — one pass over the session transcript: the same file rewritten over and over, the same error hit again and again, active minutes (gaps capped at five, so a session resumed tomorrow isn't "4287 minutes"), context size. Under the thresholds: silence, nothing added. Over them, once, he names the number — "sync.ts written 12 times this session" — and asks for a new theory, a timebox, or the exit. Facts, not a request to introspect. Asking an agent whether it's stuck gets you a confident no; showing it the count doesn't.
The interesting moment is mid-session, not at the end. By the time a session closes, the hours are already gone.
Fires once per threshold crossed, then re-arms at the next multiple. Wave him off and the next warning is pushed 30 minutes out.
/batman-new — or automatic when you open an empty project.
- Does this exist? GitHub, your repos, your dependencies. Verdict:
USE IT/FORK IT/BUILD IT, here's the real gap. - Why does it exist? Who has this problem, what breaks without it, what does the smallest useful version look like.
- Write
WHY.md. Under 20 lines. That file is what drift is measured against for the life of the project.
Steps 2 and 3 are /batman-why, which you can run on its own: a project that
already exists and never got a north star, or one whose real reason has moved on
since. No search, no verdict — just the questions and the file.
Two rounds of questions, not twenty. For a real interrogation of a plan, Batman hands off to grill-me if you have it — no point owning that twice.
$ /batman-report
BATMAN — last 30 days
loci 17h07m 35 sessions 39% <- ate the week
private 13h05m 10 sessions 30%
ingram-chat 2h51m 1 session 6%
stuck signals
tarentula: knowledge-compendium.html rewritten 138x in one session
loci: custom.scss rewritten 8x in one session
loci: same error 7x — "TimeoutError: browserBackend.callTool"
Ask: was the top line the thing that mattered?
Read from Claude Code's own session transcripts. Reads only — writes nothing,
sends nothing, stores nothing. That custom.scss line is a real one: hours of
telling an AI to nudge text it cannot see.
/batman-new |
Does it exist, why build it, write WHY.md |
/batman-why |
Write or refresh WHY.md on a project that already exists |
/batman-report [days] |
Where the time went, and the stuck signals |
/batman-help |
The card |
batman off |
Stand down for this session |
- ponytail — cuts the code
- grill-me — interrogates the plan
- batman — asks whether the hour is worth spending at all
Run the self-check with bash test/test.sh. Requires jq.
MIT.
