-
Notifications
You must be signed in to change notification settings - Fork 0
Use Doubt Review
Note
Goal: Catch a wrong decision before it stands — before you write the code, commit the architecture, or invoke an irreversible action.
Prereqs: the code-review plugin installed (Install crickets plugins). Optional: gemini CLI authed (for cross-model escalation).
/doubt is distinct from /code-review. /code-review reviews a diff after code is written. /doubt fires in flight, while course-correction is still cheap.
Use /doubt when one or more of the following apply:
- Correctness matters more than speed — a wrong call is expensive to undo
- You're working in unfamiliar code and your confidence is borrowed
- The path is production-critical, security-sensitive, or irreversible
- You can clearly name the decision you're about to make (if you can't, clarify first)
Do not use /doubt for mechanical operations (copy, reformat, scaffold), one-line renames with obvious scope, or instructions with exactly one correct interpretation.
-
Invoke the command at the moment you're about to commit to a decision:
/doubtNo arguments.
/doubtis a structured loop, not a diff target. -
CLAIM (private). The command prompts you to name the decision and why it matters — two to three lines. This stays local; it is never sent to any reviewer.
Example: "Using
os.openwithO_BINARYon Windows so the staged→active copy is byte-verbatim. Matters because byte divergence would cause integrity failures on Windows CI." -
EXTRACT. Isolate two things, stripping your reasoning from both:
- ARTIFACT — the exact code, config block, schema, or action you're about to take.
- CONTRACT — what it must do: the spec, invariant, or verification clause.
The loop writes these to
/tmp/doubt-material.txt. Your CLAIM never reaches that file. -
DOUBT (reviewer dispatch). The command invokes the cross-model reviewer:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/cross-review.sh" < /tmp/doubt-material.txt
The adversarial prompt is locked: "find issues, assume overconfidence, do NOT validate."
- Exit 0 — cross-model reviewer returned findings.
-
Exit 1/2 — Gemini unavailable; falls back to the in-process
adversarial-revieweragent with the same material and the same prompt.
In an interactive session, after the single-model pass completes, the command always offers: "Single-model review complete — want a cross-model second opinion?" The user decides.
In a non-interactive context (CI,
/loop, autonomous-loop), the command announces: "Non-interactive session: skipping cross-model escalation offer." It does not invoke any external CLI without explicit per-invocation authorization. -
RECONCILE. For every finding, classify it against the artifact text (not your reasoning):
Class Meaning contract-misreadReviewer misread the contract — artifact satisfies it when read correctly valid+actionableFinding is correct, artifact must change valid-tradeoffFinding is correct, tradeoff accepted — log the acceptance explicitly noiseFinding is not grounded in the artifact or contract text Every classification must cite the artifact line or contract clause it's based on.
-
STOP. The loop ends when:
- All findings in the current cycle are
contract-misread,valid-tradeoff, ornoise - 3 cycles are complete (hard cap — the command escalates rather than looping again)
- You say "ship it"
If the 3-cycle cap is hit with unresolved
valid+actionablefindings, the command escalates: "3-cycle cap reached with unresolved findings — operator decision needed." - All findings in the current cycle are
After each cycle confirm:
[ ] CLAIM was not passed to the reviewer
[ ] /tmp/doubt-material.txt contains only ARTIFACT + CONTRACT (no CLAIM, no reasoning)
[ ] Every finding is classified with an artifact/contract citation
[ ] Stop condition was evaluated after RECONCILE
[ ] Cross-model offer was made (interactive) or skip was announced (non-interactive)
| Symptom | Cause | Fix |
|---|---|---|
| Command exits immediately | Can't name the decision (CLAIM fails) | Finish clarifying the decision first, then re-invoke |
| "Doubt theater detected" escalation | 2+ cycles, findings returned, zero classified valid+actionable
|
You're validating, not doubting. Stop and make an operator call |
| Cross-model pass silently skipped |
gemini absent or unauthed |
Expected — falls back to in-process reviewer. Auth gemini to enable cross-model pass |
| Reviewer disagrees but you think you're right | Disagreement is information, not verdict | Classify the finding with a citation; if contract-misread, proceed |
-
Review a change after it's written —
/code-reviewfor post-hoc diff review -
Install crickets plugins — get the
code-reviewplugin installed - Why adversarial review — the reasoning behind the adversarial stance
- Manifest schema — command primitive frontmatter reference
🔧 How-to
- Install plugins
- Using code review
- Provision a repo's wiki
- Declare a project's Architecture
- Maintain a wiki — wiki-watcher
- Review a change — code review
- In-flight decision review — /doubt
- Author a design (pending)
- Run a named plan
- Spawn a worker in a worktree
- Run isolated tasks
- Configure main branch protection
- Integrate a worker
- See every active plan
- Run a coordinator-directed worker team (pending)
- Install the vault backend (pending)
- Sync a project board