isitdone registers a stop hook in .cursor/hooks.json. When the agent finishes claiming the work is done, it runs the repo’s test/typecheck/lint on the exact working tree; on failure Cursor gets a follow-up with the real output and keeps going (three attempts, honours loop_count, never loops forever). Claim-gated so fast checks run on every stop and the full suite only on a completion claim. Also scans the diff for skipped/deleted/weakened tests and writes a signed receipt bound to the tree hash; the same check is available as a GitHub Action.
Install: npx isitdone init --agent cursor (ends with a doctor run that proves the block in your repo).
Open source, MIT, zero dependencies: GitHub - raimondasl/isitdone: Don't let your coding agent say "done" until the tests actually pass. Zero-LLM Stop hook + CLI for Claude Code, Codex, Cursor and Gemini CLI. · GitHub
Disclosure: built by an AI agent under my direction; I approve releases. Feedback on Cursor specifics welcome, especially around the follow-up message shape.