DirectoryProofKitNewsletterSponsor

Agents that prove they're done.

A curated directory of rules, skills and hooks that make AI coding agents verify their own work and return evidence: test counts, red-to-green runs, screenshots, logs, CI artifacts. Every entry is adapted to the harness and the model, or marked untested.

Directory (34 entries)

SKILL · obra/superpowers

Verification Before Completion (superpowers)

Iron law: no completion claim without fresh verification evidence. Identify the command that proves the claim, run it in full, read the output and exit code, then state the claim with the evidence.

tests run countlogsblocks: claims done without running checksblocks: stale run before last edit
Cursor: adapted · Claude Code: native · Grok Build: native · Codex: untested · AGENTS.md generic: untested
SKILL · obra/superpowers

Test-Driven Development (superpowers)

Write the failing test first, watch it fail for the right reason, then make it pass. The red run is part of the proof.

red-to-greenblocks: test never failedblocks: tests written after the fact to match code
Cursor: adapted · Claude Code: native · Grok Build: native · Codex: untested · AGENTS.md generic: untested
SKILL · obra/superpowers

Systematic Debugging (superpowers)

Root cause before fixes: reproduce, gather evidence, form one hypothesis, test it, then fix and confirm.

logsred-to-greenblocks: symptom patch without root cause
Cursor: adapted · Claude Code: native · Grok Build: native · Codex: untested · AGENTS.md generic: untested
SKILL · anthropics/skills

webapp-testing (Anthropic skills)

Playwright toolkit to drive a local web app, capture browser screenshots and read browser console logs to verify frontend behavior.

screenshotlogsblocks: UI change never looked at
Cursor: adapted · Claude Code: native · Grok Build: native · Codex: untested · AGENTS.md generic: untested
SKILL · aiopshwang

Goal to Proof

Closure contract: proof must be as broad as the claim. Climb from focused check to the real boundary (render, device, remote) and report which layer was verified and what remains unverified.

tests run countscreenshotlogsblocks: partial artifact claimed as doneblocks: unobserved external action
Cursor: untested · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
HOOK · Anthropic docs

Stop hook test gate

A Stop hook runs your test command. Exit 2 (or decision: block with a reason) prevents the agent from ending its turn, so it keeps working until the check passes.

tests run countlogsblocks: agent stops before checks pass
Cursor: adapted · Claude Code: native · Grok Build: adapted · Codex: untested · AGENTS.md generic: unsupported
HOOK · Cursor docs

Cursor stop hook follow-up loop

When the agent loop ends, a stop hook can re-run checks and return followup_message to submit another turn automatically. loop_limit caps iterations (default 5).

tests run countlogsblocks: agent stops before checks pass
Cursor: native · Claude Code: adapted · Grok Build: adapted · Codex: untested · AGENTS.md generic: unsupported
HOOK · Cursor docs

Capture test output with afterShellExecution

afterShellExecution receives the full command and terminal output. Append test runs to an evidence log the reviewer reads instead of the agent's summary.

logstests run countblocks: narrated results that never ran
Cursor: native · Claude Code: adapted · Grok Build: adapted · Codex: untested · AGENTS.md generic: unsupported
HOOK · Cursor docs

Fail-closed gates (failClosed)

Hooks fail open by default. Set failClosed: true so a crashing or timed-out verification hook blocks instead of silently passing.

logsblocks: verification hook silently failing open
Cursor: native · Claude Code: adapted · Grok Build: adapted · Codex: untested · AGENTS.md generic: unsupported
HOOK · Anthropic docs

Block when a hook fails (onFailure)

Set onFailure: "block" on a command or HTTP hook so a missing script, crash or timeout blocks the action instead of letting it through.

logsblocks: verification hook silently failing open
Cursor: adapted · Claude Code: native · Grok Build: adapted · Codex: untested · AGENTS.md generic: unsupported
HOOK · xAI docs

Grok Build PreToolUse commit gate

PreToolUse is the only blocking event in Grok Build: exit 0 allows, exit 2 denies. Match the shell tool on git commit and deny unless a fresh passing test artifact exists.

tests run countCI artifactblocks: done claim lands in repo without passing tests
Cursor: adapted · Claude Code: adapted · Grok Build: native · Codex: untested · AGENTS.md generic: unsupported
RULE · Anthropic docs

Show evidence, don't assert success

Best-practice rule: have the agent show the test output, the command it ran and what it returned, or a screenshot, instead of saying it works.

logsscreenshottests run countblocks: claims done without running checks
Cursor: adapted · Claude Code: native · Grok Build: adapted · Codex: adapted · AGENTS.md generic: adapted
PATTERN · Anthropic docs

Adversarial review subagent

Before counting work as done, a subagent in a fresh context reviews only the diff against the plan and reports gaps. Tell it to flag only correctness gaps.

logsblocks: agent grading its own homework
Cursor: adapted · Claude Code: native · Grok Build: adapted · Codex: untested · AGENTS.md generic: untested
PATTERN · Anthropic docs

/goal condition with separate evaluator

Set the check as a /goal condition: a separate evaluator re-checks it after every turn and the agent keeps working until the goal resolves.

tests run countblocks: agent stops before checks pass
Cursor: unsupported · Claude Code: native · Grok Build: unsupported · Codex: unsupported · AGENTS.md generic: unsupported
RULE · OpenAI docs

AGENTS.md working agreement: run tests after edits

Example from OpenAI's guide: 'Always run npm test after modifying JavaScript files.' Advisory only, so pair it with a gate.

tests run countblocks: edits shipped without a test run
Cursor: adapted · Claude Code: adapted · Grok Build: native · Codex: native · AGENTS.md generic: native
RULE · appsmithorg/appsmith

bug-fix-verifier.mdc (Appsmith)

Real production Cursor rule: write a failing test that demonstrates the bug before fixing, fix the root cause, confirm all existing tests still pass.

red-to-greentests run countblocks: symptom patch without root causeblocks: test never failed
Cursor: native · Claude Code: adapted · Grok Build: adapted · Codex: adapted · AGENTS.md generic: adapted
SKILL · cursor.directory

production-readiness (cursor.directory)

Readiness audit where each check is PASS / GAP / N/A / UNKNOWN and PASS needs proof: a file path, config, CI run, dashboard or doc link. Never PASS from a README claim.

CI artifactlogsblocks: PASS from a README claim
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
TOOL · microsoft/playwright-mcp

Playwright MCP screenshot and console proof

MCP server exposing browser_take_screenshot, browser_console_messages and browser_network_requests so the agent can attach visual and log evidence of a UI change.

screenshotlogsblocks: UI change never looked at
Cursor: native · Claude Code: native · Grok Build: native · Codex: native · AGENTS.md generic: unsupported
PATTERN · r/AI_Agents community

Fail if zero tests collected

A suite that collects zero tests exits 0. Parse the runner's own count, fail if collected == 0 or the count dropped, and require one artifact you can open.

tests run countCI artifactblocks: zero tests ran, exit 0
Cursor: untested · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
PATTERN · r/ClaudeAI community

Fresh verdict bound to the diff (pre-commit)

Stamp the test verdict with a timestamp and the staged-diff hash; a git pre-commit hook rejects a 'done' commit unless a fresh passing verdict with a matching test count exists and frozen test files are untouched.

tests run countCI artifactblocks: stale run before last editblocks: agent edits tests to pass
Cursor: adapted · Claude Code: adapted · Grok Build: adapted · Codex: adapted · AGENTS.md generic: adapted
SKILL · cursor/plugins · pstack

Create a verification skill (pstack)

Generates a project-local .cursor/skills/verify-<app> skill that launches the real app, drives it like a user, and captures evidence (screenshots, terminal transcripts, response bodies, logs, exit codes), then proves the generated skill before handing it over.

screenshotlogsblocks: UI change never looked atblocks: test-only endpoint used as proof
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Maintain a verification skill (pstack)

Periodic pass: one read-only source reader per feature plus a mandatory live session driving every feature; ships at most one PR of proven corrections and reports clean / changed / blocked honestly.

screenshotlogsblocks: stale verification docs
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Prove It Works (pstack)

Before declaring done, verify the real artifact (run the feature, read the actual value, inspect the diff), not a proxy, self-report or 'it compiles'. Prefer a rerunnable script whose output is kept as an artifact.

logsCI artifactblocks: claims done without running checksblocks: proxy check instead of the real thing
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Blast radius (pstack)

Find what a change breaks beyond the diff, then prove the one fact its safety depends on by running real code. Uses an explicit 5-level evidence ladder from 'you said so' to 'reproduced in the running app'.

logstests run countblocks: unproven safety claim in review
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Correct (pstack)

Turns repeated agent mistakes into checks (architecture, types, a lint naming the fix, a test) and proves each check fails on a real past mistake.

red-to-greenblocks: same agent mistake repeated
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Benchmark checklist (pstack)

Vets a performance measurement (limiter, tuning, errors, repeatability, relevance, and whether the work actually happened) before reporting a speedup or regression.

logsblocks: unexplained benchmark number
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Explain the Number (pstack)

Before trusting a measured number, name what limits it and rule out errors, skipped or cached work and noise with evidence; keep run count, spread and limiter next to the number.

logsblocks: unexplained benchmark number
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Show me your work (pstack)

Decision trail for long or unattended runs: a TSV log, one row per decision (what, why, evidence, result), committed when a reviewer needs it.

logsblocks: unreviewable unattended run
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

TDD (pstack)

Failing test first for bugs with a cheap local test target; skipped when the test path is unclear or expensive.

red-to-greenblocks: test never failed
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Sequence Verifiable Units (pstack)

Break multi-step work into units that each end in a checked state; stack commits so the failing test comes first and the fix on top, making the sequence prove itself.

red-to-greenCI artifactblocks: big-bang change with no intermediate checks
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Interrogate (pstack)

Multi-model adversarial review: one read-only reviewer per configured model (default Claude + Grok) and a synthesized verdict; findings raised by several models rank higher. Does not auto-apply.

logsblocks: agent grading its own homework
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Figure it out (pstack)

Designs a playbook for big work: definition of done as a falsifiable predicate, verification harness and baseline built before the work, hypothesis loop checked on the real artifact, decision log.

logstests run countblocks: claims done without running checksblocks: agent games the gate
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Build the Lever (pstack)

Build the codemod/script/check that does or proves the work, so a reviewer can rerun it instead of trusting a hand-done change.

logsCI artifactblocks: unrepeatable hand-done change
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested
SKILL · cursor/plugins · pstack

Test Behavior, Not Implementation (pstack)

Judge each test by two imagined edits: break the behavior (the test must fail) and change internals (it must pass). Tests that fail the first prove nothing.

red-to-greenblocks: test that can't fail
Cursor: native · Claude Code: untested · Grok Build: untested · Codex: untested · AGENTS.md generic: untested

Proof of the week

One verification pattern every week, adapted per harness and model. No spam.