doubt-driven-development
Subject each non-trivial decision to a fresh-context adversarial review before it stands.
Skill by kashman001
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/kashman001-doubt-driven-development
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: security
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/doubt-driven-development
What's inside
- Skill name
doubt-driven-development- Description
- Subject each non-trivial decision to a fresh-context adversarial review before it stands. Use when stakes are high (production auth, security-sensitive logic, a risky migration, irreversible operations), when working in unfamiliar code, or when the user asks for assumptions to be cross-examined or a plan stress-tested.
- License
- MIT
- Instructions
- 246 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- workspace.patch
SKILL.md (first lines)
<!--
Vendored from github.com/addyosmani/agent-skills — skills/doubt-driven-development/
at commit 1be8e34 (2026-10-10). Upstream content (MIT — see
skills/vendored-skills.md) plus skills/doubt-driven-development/workspace.patch, which
scripts/sync-vendored-skills.sh re-applies at every refresh. Change the
patch, not this file.
-->
# Doubt-Driven Development
## Overview
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 `/review`. `/review` is a verdict on a finished artifact. This is an in-flight posture: non-trivial decisions get cross-examined while course-correction is still cheap.
## When to Use
A decision is **non-trivial** when at least one of these is true:
- It introduces or modifies branching logic
- It crosses a module or service boundary
- It asserts a property the type system or compiler cannot verify (thread safety, idempotence, ordering, invariants)
- Its correctness depends on context the future reader cannot see
- Its blast radius is irreversible (production deploy, data migration, public API change)
Apply the skill when:
- About to make an architectural decision under uncertainty
- About to commit non-trivial code
- About to claim a non-obvious fact ("this is safe", "this scales", "this matches the spec")
- Working in code you don't fully understand
**When NOT to use:**
- Mechanical operations (renaming, formatting, file moves)
- Following a clear, unambiguous user instruction
- Reading or summarizing existing code
- One-line changes with obvious correctness
- Pure tooling operations (running tests, listing files)
- The user has explicitly asked for speed over verification
If you doubt every keystroke, you ship nothing. The skill applies only to non-trivial decisions as defined above.
## Loading Constraints
This skill is designed for the **main-session orchestrator**, where Step 3 (DOUBT, detailed below) can spawn a fresh-context reviewer.
- **Do NOT add this skill to a persona's `skills:` frontmatter.** A persona that follows Step 3 would spawn another persona — the orchestration anti-pattern explicitly forbidden by `../../references/orchestration-patterns.md` ("personas do not invoke other personas").
- **If you find yourself applying this skill from inside a subagent context** (where Claude Code prevents nested subagent spawn): the preferred path is to surface to the user that doubt-driven cannot run nested and let the main session handle it. As a last resort only, a degraded self-questioning fallback exists — rewrite ARTIFACT + CONTRACT as a fresh self-prompt with a hard mental separator from your prior reasoning, and walk Steps 1–5. This is **not fresh-context review** (you carry your own context with you), so flag the result as degraded and prefer escalation whenever the user is reachable.
## The Process
Copy this checklist when applying the skill:
```
Doubt cycle:
- [ ] Step 1: CLAIM — wrote the claim + why-it-matters
- [ ] Step 2: EXTRACT — isolated artifact + contract, stripped reasoning
- [ ] Step 3: DOUBT — invoked fresh-context reviewer with adversarial prompt
- [ ] Step 4: RECONCILE — classified every finding against the artifact text
- [ ] Step 5: STOP — met stop condition (trivial findings, 3 cycles, or user override)
```
### Step 1: CLAIM — Surface what stands
Name the decision in two or three lines:
```
CLAIM: "The new caching layer is thread-safe under the
read-heavy workload described in the spec."
WHY THIS MATTERS: a race here corrupts user data and is
hard to detect in QA.
```
If you can't write the claim that compactly, you have a vibe, not a decision. Surface it before scrutinizing it.
### Step 2: EXTRACT — Smallest reviewable unit
A fresh-context reviewer needs the **artifact** and the **contract**, not the journey.
- Code: the diff or the function — not the whole file
- Decision: the proposal in 3–5 sentences plus the constraints it has to satisfy
- Assertion: the claim plus the evidence that supposedly supports it (kept distinct from the Step 1 CLAIM block, which is the orchestrator's hypothesis under scrutiny)
Strip your reasoning. If you hand over conclusions, you'll get back validation of your conclusions. The unit must be small enough that a reviewer can hold it in mind in one read — if it's a 500-line PR, decompose first.
### Step 3: DOUBT — Invoke the fresh-context reviewer
The reviewer's prompt **must be adversarial**. Framing decides the answer.
```
Adversarial review. Find what is wrong with this artifact.
Assume the author is overconfident. Look for:
- Unstated assumptions
- Edge cases not handled
- Hidden coupling or shared state
- Ways the contract could be violated
- Existing conventions this might break
- Failure modes under unexpected input
Do NOT validate. Do NOT summarize. Find issues, or state
explicitly that you cannot find any after thorough examination.
ARTIFACT: <paste artifact>
CONTRACT: <paste contract>
```
**Pass ARTIFACT + CONTRACT only. Do NOT pass the CLAIM.** Handing the reviewer your conclusion biases it toward agreement. The reviewer must independently determine whether the artifact satisfies the contract.
Where your runtime can start a subagent, give it the adversarial prompt above, verbatim, in a fresh context — doubt-driven needs issues-only output, not a balanced verdict with strengths and weaknesses. Where it cannot, use the second-CLI path under Cross-model escalation below (Codex or Gemini CLI), or review the ARTIFACT + CONTRACT yourself in a fresh session.
#### Cross-model escalation
A single-model reviewer shares blind spots with the original author — a colder, different-architecture model catches them. Doubt-driven is already opt-in for non-trivial decisions, so within that scope offering cross-model is part of the skill's value, not optional friction.
**Interactive sessions: always offer. Never silently skip.**
**Step 1: Ask the user**From kashman001/ai-workspace-template, MIT.
More from kashman001/ai-workspace-template
- 0.570score
constraint-driven-development
kashman001
Write a project's quality bar into CONSTRAINTS.md and flag changes that quietly lower it (new suppressions, skipped tests, stripped assertions, thresholds…
SkillAFreshness: AClaude Code +9 - 0.565score
create-work-item
kashman001
Scaffold a new developer-scoped project directory under work/ that follows the work-directory conventions (README + launcher next-session.md + ledger…
SkillAFreshness: AClaude Code +9 - 0.561score
doc-review
kashman001
Multi-perspective review of a technical document: audience gate first, six independent reviewer subagents, findings synthesized into prioritized…
SkillAFreshness: AClaude Code +9 - 0.560score
decision-log
kashman001
Capture the why behind a decision (choice, rejected alternative, constraint) as a commit trailer, a Tier-2 note in work/<project>/decisions.md, or a promoted…
SkillAFreshness: AClaude Code +9 - 0.557score
checkpoint
kashman001
Wrap up a finished chunk of work: reconcile the backlog, memory and docs, write the hand-off, confirm a clean branch, and emit a catch-up prompt for the next…
SkillAFreshness: AClaude Code +9 - 0.557score
design-for-testability
kashman001
Advisory six-question interrogation of a design: how will we test it, how does it fail, what is observable, and what is the cheapest check that proves it works.
SkillAFreshness: AClaude Code +9 - 0.544score
git-guardrails-claude-code
kashman001
Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute.
SkillAFreshness: AClaude Code +9 - 0.544score
diagnosing-bugs
kashman001
Diagnosis loop for hard bugs and performance regressions.
SkillAFreshness: AClaude Code +9 - 0.541score
create-verification-skill
kashman001
Generate a project-local verification skill that drives your app the way a user does — any language, framework, or platform.
SkillAFreshness: AClaude Code +9 - 0.539score
codebase-design
kashman001
Shared vocabulary for designing deep modules.
SkillAFreshness: AClaude Code +9 - 0.539score
benchmark-checklist
kashman001
Vet a perf measurement (limiter, tuning, limits, errors, repeatability, relevance, and whether the work happened) before you report or act on it.
SkillAFreshness: AClaude Code +9 - 0.539score
domain-modeling
kashman001
Build and sharpen a project's domain model.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 12, 2026 (17 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from kashman001
- 0.570score
constraint-driven-development
kashman001
Write a project's quality bar into CONSTRAINTS.md and flag changes that quietly lower it (new suppressions, skipped tests, stripped assertions, thresholds…
SkillAFreshness: AClaude Code +9 - 0.565score
create-work-item
kashman001
Scaffold a new developer-scoped project directory under work/ that follows the work-directory conventions (README + launcher next-session.md + ledger…
SkillAFreshness: AClaude Code +9 - 0.561score
doc-review
kashman001
Multi-perspective review of a technical document: audience gate first, six independent reviewer subagents, findings synthesized into prioritized…
SkillAFreshness: AClaude Code +9 - 0.560score
decision-log
kashman001
Capture the why behind a decision (choice, rejected alternative, constraint) as a commit trailer, a Tier-2 note in work/<project>/decisions.md, or a promoted…
SkillAFreshness: AClaude Code +9 - 0.557score
design-for-testability
kashman001
Advisory six-question interrogation of a design: how will we test it, how does it fail, what is observable, and what is the cheapest check that proves it works.
SkillAFreshness: AClaude Code +9 - 0.557score
checkpoint
kashman001
Wrap up a finished chunk of work: reconcile the backlog, memory and docs, write the hand-off, confirm a clean branch, and emit a catch-up prompt for the next…
SkillAFreshness: AClaude Code +9
Cite this page
doubt-driven-development skill. Agent Mart. https://agentmart.dev/skills/kashman001-doubt-driven-development (last updated 2026-10-24)