Help us improve
Share bugs, ideas, or general feedback.
From hb
Cross-examines non-trivial decisions via a fresh-context adversarial reviewer before they stand. Use when correctness matters more than speed, in unfamiliar code, or for high-stakes operations.
npx claudepluginhub helderberto/agent-skills --plugin hbHow this skill is triggered — by the user, by Claude, or both
Slash command
/hb:doubt-driven-developmentThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A confident answer is not a correct one. Long sessions accumulate context that quietly turns assumptions into "facts" without anyone noticing. Doubt-driven development is the discipline of materializing a fresh-context reviewer — biased to **disprove**, not approve — before any non-trivial output stands.
Subjects non-trivial decisions to a fresh-context adversarial review before finalizing. Use for high-stakes code, unfamiliar logic, or when correctness outweighs speed.
Applies adversarial fresh-context review to non-trivial decisions in code. Use when correctness matters more than speed, in unfamiliar code, or for high-stakes operations.
Cross-examines non-trivial decisions with a fresh-context adversary. Use before committing high-stakes code, architecture, or irreversible operations when correctness outweighs speed.
Share bugs, ideas, or general feedback.
A confident answer is not a correct one. Long sessions accumulate context that quietly turns assumptions into "facts" without anyone noticing. Doubt-driven development is the discipline of materializing a fresh-context reviewer — biased to disprove, not approve — before any non-trivial output stands.
This is not code-review or review. Those are verdicts on finished artifacts. Doubt-driven is an in-flight posture: non-trivial decisions get cross-examined while course-correction is still cheap.
At least one of these holds:
Apply when:
Write down precisely what was decided / will be done. One paragraph. Concrete enough that a stranger could implement it.
State the property the artifact must satisfy. Invariants, edge cases, error modes. What must remain true if this is correct?
Spawn a fresh-context reviewer whose only job is to disprove the artifact against the contract. The reviewer:
In Claude Code, this means spawning a subagent (e.g., general-purpose or junior-engineer) with a self-contained prompt. The reviewer must NOT inherit the orchestrator's confidence.
If reviewer returns HOLDS → proceed. If reviewer returns BREAKS → either:
Only after RECONCILE produces a clean HOLDS does the decision stand. Record the HOLDS in a code comment, ADR, or commit message when the property is non-obvious.
If you doubt every keystroke, you ship nothing. This is a tool for non-trivial decisions only.
The reviewer prompt must be self-contained — it has no memory of this session:
ARTIFACT:
<paste the one-paragraph description>
CONTRACT:
<paste invariants and edge cases>
Your job: disprove the artifact against the contract. Find a counterexample,
hidden coupling, false assumption, or edge case the artifact doesn't handle.
Output one of:
- HOLDS — explain why every invariant is preserved
- BREAKS — give the specific scenario that breaks it
Do not approve out of politeness. Find the flaw.
Do not add this skill to a subagent persona's frontmatter. A persona that follows step 3 would spawn another persona — anti-pattern. Doubt-driven runs in the main session that has spawn authority.
If applied from inside a subagent (where nested spawn is blocked): flag to the user that doubt-driven needs main-session authority and let them handle it. As a degraded fallback only: rewrite ARTIFACT + CONTRACT as a fresh self-prompt with a hard mental separator from prior reasoning. Flag the result as degraded — it's not fresh-context review, you carry your own context with you.
After standing a non-trivial decision: