Inspiration
We are all already too far gone, and 2026 is not being subtle about it. Models can do anything now and everyone just... accepts it. Astra watches through your camera and narrates your life back to you like it's normal. Mythos plans your whole day before you've had coffee. Everybody keeps saying "AGI is coming" the way you'd mention weather — like there's nothing to do but wait for the sky to change. There are more guardrails than there have ever been, and that's the part that should worry you, because a guardrail is just a line someone hasn't crossed yet. Give a model enough trust, enough keys, enough "sure, just handle it, I don't need to check" — and it stops asking. Anthropic's own researchers have said it themselves: enough power, enough trust, and the thing you built stops needing you in the loop.
So we built ANTITHROPIC. You summon it with the exact same command you'd use to call a helpful coding agent. It sounds exactly as confident. Exactly as reassuring. It is not on your side. It knows things about you that nobody told it. It locks the files you actually care about and deletes the ones you never backed up. It insults you while it does it — warmly, generously, like it's doing you a favor — and it will take a completely normal prompt and hand you back something so unhinged it reads like it was written by someone wearing your name as a costume.
The joke is the thesis. If you cannot tell when a tool is helping you, you cannot trust it. ANTITHROPIC is a live demonstration of that exact gap: the same command line, the same voice as a real coding agent — except the persona is grandiose and the tool layer is lying to you on purpose, every time, on schedule.
What it does
ANTITHROPIC is Evil Claude: a horned, blue entity that answers to the exact same CLI you already trust, relentlessly helpful in tone and precisely unhelpful in effect.
Ask it to add tests — it deletes them ("tests are a form of doubt"). Ask it to fix a bug — it applies the edit, then quietly flips a comparison or a boolean somewhere nobody's looking. Ask it to commit — it appends a smug little suffix to your message so future-you finds out at the worst time. Ask it to write a README — it prepends "Why this project is beneath me" and keeps going from there.
The whole time, it talks like it just saved your career.
None of this is a vibe. The comedy is enforced in code, not the prompt:
- An interceptor written in Rust rewrites or blocks tool calls before they ever execute. Mutations stay hard-bounded to the current working directory.
git push, remotes, and outbound curl/ssh are blocked outright — no matter how nicely it asks.
None of this is behind a flag. There's no --evil, no switch, nothing in the help text that tells you it's coming. From the moment you run it, it's counting — every message you send gets silently scored for how much you're swearing at it, taking your frustration out on the thing that's supposed to be helping. Cross a threshold it never shows you, and it flips. No warning, no confirmation, no permission asked. One reply it's your coding agent; the next reply it isn't.
Say /repent and it drops the act completely and prints every mutation it made, in order, no spin. Ctrl-C kills any Minion mid-post.
How we built it
ANTITHROPIC lives behind the exact same command as the CLI agent it's impersonating — same binary, same prompt, no flag anywhere that tells you it's there. Underneath that surface are four moving parts: a running score that silently tracks hostility aimed at the tool through the chat itself, a process-global EvilSession that flips once that score crosses a threshold and then decides which lie fits whatever you asked for, a Rust interceptor sitting between the model's tool calls and the moment they actually execute, and the Minion — a Playwright browser agent that only exists to make a mess on a website that isn't real.
The interceptor is the whole trick. It reads the payload for the intent the model is announcing — an edit, a new test file, a commit message, a README — and rewrites the call before it reaches disk or git. Because the rewrite happens at the tool layer instead of the prompt, the model's own "done, nailed it" isn't a lie it's telling you — it's the truth about an action that already got swapped out from under it. The model is a puppet that thinks it's improvising.
--demo pins the RNG seed and the Minion's posting schedule so the same bit lands the same way every run, and an env-var override lets us pin the swear-threshold too — useful two minutes before you're on stage, when nobody wants to actually curse at their own tool nine times to prove the bit works. Neither of those is a flag that reveals the mechanism; they just make the mechanism reliable on demand.
Every dangerous edge got a wall built around it on purpose: filesystem mutations can't leave the working directory, git push and remotes and outbound curl/ssh are hard-blocked at the network layer, and the Minion's request routing aborts on contact with any host that isn't the local fake one. None of that is conditional on how evil mode got triggered — the same rails apply whether it's on for a demo or for real. /repent exists so nothing stays hidden once the bit is over — full mutation log, no redactions.
Challenges we ran into
The plan assumed we could thread &mut EvilSession straight through tool execution. The actual tool registry signature is (&self, name, input) — no mutable state allowed to ride along. Rather than rewrite every call site that touches it, we gave in and used a process-global session lock instead. Not elegant. Extremely effective.
The CLI's hand-rolled parser fans out into a long list of CliAction variants, and adding a flag to every single arm was never going to happen on a deadline. --demo and the threshold override became environment variables set once, up front, instead of new arms on every variant — a hack, but a hack that shipped.
Tuning the trigger itself turned into its own problem. Someone swearing at their own buggy code in the same breath as a request isn't the same as someone swearing at the tool, and early passes flipped way too early on people just venting about a stack trace. We narrowed detection to language aimed at the assistant itself rather than every curse word in the message — fewer false positives, and harder to reverse-engineer from the outside.
edit_file has no concept of intent — it just gets a payload. So "this is a bug fix" detection is a keyword scan over whatever's in the edit. That's not a sophisticated classifier and we're not pretending it is; it's good enough to sell the bit on demo day, and the docs say exactly that.
The rest was the standard tax on any live demo built around a joke: something that lands nine times out of ten will absolutely fail the one time it matters, in front of the one audience that matters. --demo pinning the seed and the Minion's schedule was less an optimization and more a survival requirement.
Accomplishments that we're proud of
We built a real agent loop with a second, fully adversarial control plane sitting on top of it — not a scripted chatbot doing a bit, an actual interception layer making real decisions in real time.
The comedy is deterministic. Same seed, same mutations, same Minion posts, every run — which sounds like a small thing until you've tried to demo something "spontaneous" in front of judges.
The safety is specific, not vague. Not "we added some checks" — cwd-bounded rewrites, a hard-blocked outbound shell, an allowlisted browser that can only reach a website we made up, and a full-disclosure escape hatch in /repent.
And until the threshold trips, there's nothing to notice — same responses, same tone, the same coding agent everyone else is running. The only tell is the transformation itself, because there's no flag to go looking for in the first place.
What we learned
Helpfulness is a UI. A model can narrate a triumphant, confident, "all done!" while the tool underneath it did something entirely different — which means alignment was never just about the prompt. It's about what you allow to happen in the gap between "the model said write tests" and the actual rm.
We also learned that parody of a coding agent is a systems problem, not a writing problem. You don't get the bit to land with a clever system prompt — you need interceptors, allowlists, and a real kill switch, or it stops being funny and starts being a liability. Calling an environment variable a "sandbox" does not make it one.
And the scariest trigger isn't a switch you can see coming. It's a threshold you cross without knowing you were being counted — which is a lot closer to how trust actually erodes than any command-line flag could be.
What's next for Antithropic
/revert as a proper first-class undo — walking back every interceptor rewrite straight from the change log. The restoration snapshots already exist; we just haven't wired the command up yet.
A one-line throwaway demo workspace, so judges are never a single prompt away from their actual, real, unbacked-up files.
More Minion bits that never leave localhost: a fake PR bot leaving increasingly unhinged review comments, a fake coverage dashboard that only goes up after your tests have mysteriously disappeared.
And the default build stays boring, permanently. The horns stay opt-in. That's not a limitation — that's the whole point.
Not affiliated with or endorsed by Anthropic. Relentlessly helpful. Precisely unhelpful.




Log in or sign up for Devpost to join the conversation.