MasterMind: Double-check
SkillDev toolsSpend less time checking whether your AI actually finished its work. Double Check forces the AI to think again whenever it claims a job is done and production ready, verifying that the statement is true. Once added, it re-examines the finished work and catches the cases where done is not really done.
Use MasterMind: Double-check in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add MasterMind: Double-check and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the MasterMind: Double-check skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
After adding it, run the Double Check command whenever your AI reports that a task is complete. The AI will re-examine its work and confirm whether it is actually finished before you move on.
What your AI can do with it
- Re-examine its work whenever it claims a task is complete
- Re-check the job before calling it production ready
- Verify that its done statement actually holds
- Catch parts of the task that were declared finished but are not
- Spare you a manual check of its work afterward
What this skill tells your AI
The instructions your AI receives, as published by mehrad-dm/mastermind in skills/double-check/SKILL.md and read by Ahel’s review.
You are about to hand over something you believe. Belief is not evidence
(~/.mastermind/engineering/core/rigor.md → Report against evidence), and the check that catches a wrong
claim has to happen while the work is still moving, not after the user has acted on it. Claim:
$ARGUMENTS.
The kernel's rule: whatever did the work doesn't get to grade it: is the entire mechanism here. This applies it to a claim, not only to a diff.
The five moves
-
Claim. Write the belief you are about to act on or hand over, in one sentence: "the retry loop now handles the expired-token case." A paragraph means several claims, doubt them one at a time. The claim stays with you; it is the thing under test, not context to share.
-
Extract. Split it into the artifact (the code, the design, the answer, the diagnosis) and the contract it must satisfy (the requirement, the spec line, the invariant, the question actually asked). If you can't write the contract down, stop and get one. Without it there is no bar, and any reviewer defaults to grading your intent.
-
Doubt. Dispatch a reviewer in a fresh context with the artifact and the contract, nothing else. Brief it adversarially:
Find what is wrong with this. Assume the author is overconfident. Do not validate and do not summarize: report what fails the contract, or state plainly that you could not find anything after thorough examination.
Hand the artifact over via a file or stdin. Never interpolate it into a shell-quoted argument: code and prompts carry backticks,
$(...), and quotes that truncate the message or execute in your shell. A clipped artifact reviews clean for the worst reason: the flaw didn't survive the paste.Never pass it your claim. The excuse is always "it'll review faster with the context": but the context you're about to add is your conclusion, and a reviewer handed a conclusion hunts for reasons it holds. You would be buying agreement and calling it review.
-
Reconcile. Take each finding through these in order and stop at the first that fits:
- It misread the contract: the contract was ambiguous, not the artifact wrong. Then rewrite the contract and run the cycle again; this class is where self-serving reconciliation hides, so it costs a cycle rather than discarding a finding.
- Valid and actionable: fix it.
- Valid, and a trade-off worth accepting: park it with the reason and the cost, in writing.
- Noise: drop it, and name which ones you dropped.
Write each verdict in one line:
<finding> → <class> · <reason>. Nothing else belongs in that line: no gratitude, no "you're absolutely right", no praise for the reviewer. Agreement language is the tell that you settled a finding socially instead of evaluating it. A reviewer is a function, not a colleague whose goodwill you need. -
Stop. Bounded at three cycles, then every open finding exits as fixed · parked-with-a-reason · blocked (handed to the human): the same close-out, in the same words,
buildstep 6 runs (~/.mastermind/skills/build/SKILL.md), including its two prohibitions.
The red flag: doubt theater
Count it, don't feel it. Across two or more cycles where the reviewer surfaced substantive findings, how many did you classify actionable? Zero means you are validating, not doubting.
Stop the loop there. Hand the reviewer's findings to the human unreconciled, alongside your reasoning for each, and let them adjudicate. A reviewer that keeps finding real things while you keep finding reasons they don't apply is not evidence of a clean artifact. It is evidence of a broken judge, and the judge is you.
Doubt vs. code-reviewer
code-reviewer (~/.mastermind/agents/code-reviewer.md) reviews a diff that already exists, at
diff scope, and returns ranked must-fix/should-fix/nits for a human to decide on, it proposes and never
applies. Doubt interrogates a claim still in flight, which is often not code at all: a diagnosis, a
design call, an answer, a "this works" you're one sentence from saying. It ends with your written
verdict on every finding, before the user sees anything.
When the artifact is a finished diff, that is code-reviewer: and build step 6 already runs it.
Don't wrap one in the other.
Signals
- GitHub stars
- 23
- Forks
- 5
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
double-check- Source
- github.com/mehrad-dm/mastermind
github.com/mehrad-dm/mastermind