Make Claude Prove It's Done: My unlazy Setup
Stop Claude telling you a job is done when it isn't, with a free skill that makes it check its own work first.
Back to all free guidesSo in the reel I showed unlazy, the free skill that stops Claude saying it's done when it's only done half of what you asked. This is my full setup, including the little tweak that makes it kick in on every big job without me asking.
What it does, in a minute
- It's free and open source. MIT licence, about 3,900 stars on GitHub, built by Leon Lin.
- Gates first. Before Claude touches anything, it writes a
GATES.mdfile that says what done actually means, and pretty much every item gets a check Claude can run. - Proof, not vibes. A box only gets ticked when its check passes, and the evidence gets saved in the file, so you're not just taking Claude's word for it.
- The Stop hook. If Claude tries to finish while anything's still unticked, the hook blocks it and sends it straight back to work.
- Big jobs get split up. On bigger builds it breaks the job into smaller pieces, and every piece gets its own checklist.
Before you start
- Node.js 16 or newer. Type
node -vin your terminal to check. - Claude Code. It works with Codex and other agents that read skills too.
Install it
This puts it in ~/.claude/skills/, so every project gets it:
npx skills add Leonxlnx/unlazy -gAdd the Stop hook
This is the bit that won't let Claude finish early:
node ~/.claude/skills/unlazy/scripts/install-hooks.mjs --globalLeave off --global and run it inside one project if you only want it there.
My tweak: run it on every big job
The hook only has something to enforce when there's a gates file, so I tell Claude to always write one on substantial work. Add this to ~/.claude/CLAUDE.md:
Run the unlazy skill by default on substantial work, write the gates before executing, and never report done while a gate is unmet.Your first job
Or start any big job with /unlazy yourself:
/unlazy build the booking page and test every form- Read
GATES.mdbefore it gets going. EveryCHECKline is a command it'll run, so make sure each one tests the thing you actually care about. - Let it run. A box gets ticked only when its check passes.
- Watch the hook do its job. If Claude tries to stop with a box still unticked, it gets sent back.
To be honest, I've run it on over fifty jobs since September, and I don't start a big build without it now.