@stupify/cli
v0.4.4
Published
A code reviewer that talks like an idiot and catches real bugs — corpus-grounded, anti-slop, runs on Codex.
Maintainers
Readme
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
Kernighan's Law
stupify
AI agents are rats in a maze. They reach for what they know. And unless you show them better, what they know is slop: most software is garbage, and they'll happily imitate it.

actual issues, tells the coding agent exactly how + what to fix more catches, on real PRs →
What you get
- Your taste, not the model's. Everything is judged against a
CORPUS.md: a taste pack ("code like dtolnay / DHH / antirez …") or your own best files. Nothing to write to start. - On your personal Codex plan, not a metered API key. stupify reviews with Codex, running on the $20-$200/month plan. API usage is roughly 50x more expensive, enjoy the subsidized tokens while you can.
- Slop, named.
RUBRIC.mdis your list of what counts as slop: reinvented primitives, speculative abstraction, fallbacks the types already guarantee. It keeps the fix small. - Both ends of the loop. The same
.review/primes the agent before it writes (prevention) and reviews the PR after (detection). The best review is the one you didn't need. - It remembers. Reads the PR thread, won't re-raise what you fixed or waved off, posts
no new blocking issues ✅when there's nothing left. - It's funny.
oof, yeah this'll break:. Turn it off if you hate joy.
Prime your agent (instant, local, no servers)
The best slop is the slop never written. prime wires a Claude Code SessionStart hook that injects your taste into every session, so the agent holds your standard before it touches a line. Pure file read, ~30ms, no model call.
bunx @stupify/cli taste --pack sindre-sorhus,zod # pick the code yours should look like
bunx @stupify/cli prime --install # every Claude Code session now opens knowing itThat's it. Open Claude Code in any repo and it's already primed. A repo's own .review/ wins; otherwise it
falls back to the taste you assembled. bunx @stupify/cli prime --uninstall removes the hook cleanly.
Add the reviewer (rides exe.dev, no keys or servers you run)
From your laptop, one command provisions a VM that reviews your repo's PRs. No API keys or tokens to manage, and once it's running you never touch the VM.
bunx @stupify/cli┌ stupify
◇ using integration acme-widgets
◇ VM stupify-acme-widgets created
└ stupify is provisioned for acme/widgets 👀New to exe.dev? ssh exe.dev to onboard and link GitHub at
exe.dev/integrations. Both are one-time and painless. Then just open a PR:
the sweep picks it up within ~60s and posts once the review finishes, no labels or workflows to wire up. (Want
manual control? SCOPE=label flips it to opt-in: only PRs you tag get reviewed.)
bunx @stupify/cli <owner/repo> # provision for a specific repo
bunx @stupify/cli setup # run the reviewer on this machine instead of a VM
ssh exe.dev rm stupify-<owner>-<repo> # tear it downWhy exe.dev: an always-on VM with a gh-authed GitHub integration and a Codex gateway. It's cheaper and nicer
than wiring this through GitHub Actions (no workflow YAML, no runner minutes). Prefer your own machine? stupify
setup runs the same cron locally; you bring gh auth login and your Codex login. Either way it's a cron
shelling out to Codex; point it elsewhere with CODEX_PROVIDER/CODEX_MODEL.
Feed it Codex
The reviews run on Codex. On exe.dev that's a keyless LLM integration: it fronts your ChatGPT/Codex plan, so the VM holds no API key (it bills your plan). Link one once at exe.dev/integrations and provisioning attaches it for you. One plan is plenty: a review runs on the order of a Claude Code session, so a single Codex plan covers a busy repo without trouble.
Taste packs
Don't have a corpus yet? Borrow one. Pick a programmer whose code you'd point a new hire at and review (and write) like them, or compose several:
dtolnay · DHH · antirez · Sindre Sorhus · Rich Harris · zod · Mitchell Hashimoto · Tanner Linsley · Simon Willison · devshorts · Jarred Sumner · browse all →
Each pack is concrete principles plus commit-pinned exemplar files. Or bring your own: point stupify at the
files you wish all your code looked like, and it scaffolds a .review/ in your repo:
bunx @stupify/cli init src/best.ts src/clean-service.ts # inlines them; you add one line of "why" eachA repo's own .review/ always wins over a pack. stupify dogfoods this; its own
.review/CORPUS.md is real.
How it works
prime Claude Code SessionStart hook → bun ~/.stupify/prime.ts → inject .review/ (rubric + corpus)
review cron (~60s) → review-sweep.ts → codex exec → gh pr comment
refresh checkout · list open PRs (skip drafts/bots) · skip already-reviewed heads
feed the PR's thread back as memory · review against .review/* · postBoth halves read the same .review/. The CLI (src/cli.ts) sets things up; the engines (src/prime.ts and
src/review-sweep.ts) are dependency-free Bun. The whole design, including why it remembers instead of
debouncing, is in docs/ARCHITECTURE.md.
License
MIT © Noah Lindner. Built by the team at Bevyl. stupif.ai, read it "stupify". PRs welcome, it'll review them 😈
