{"id":"9169b695-fc32-48b1-b19f-eb1efb16fd23","shortId":"6HMbTN","kind":"skill","title":"doubt-driven-development","tagline":"Subject every non-trivial decision to a fresh-context adversarial review before it stands. Use when correctness matters more than speed, when working in unfamiliar code, when stakes are high (production, security-sensitive logic, irreversible operations), or any time a confident ","description":"# Doubt-Driven Development\n\nA 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.\n\nThis 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.\n\n## When a decision is \"non-trivial\"\n\nAt least one of these holds:\n\n- Introduces or modifies branching logic\n- Crosses a module or service boundary\n- Asserts a property the type system or compiler cannot verify (thread safety, idempotence, ordering, invariants)\n- Correctness depends on context the future reader cannot see\n- Blast radius is irreversible (production deploy, data migration, public API change)\n\nApply when:\n\n- About to make an architectural decision under uncertainty\n- About to commit non-trivial code\n- About to claim a non-obvious fact (\"this is safe\", \"this scales\", \"this matches the spec\")\n- Working in code you don't fully understand\n\n## The 5-step process\n\n### 1. ARTIFACT\n\nWrite down precisely what was decided / will be done. One paragraph. Concrete enough that a stranger could implement it.\n\n### 2. CONTRACT\n\nState the property the artifact must satisfy. Invariants, edge cases, error modes. What must remain true if this is correct?\n\n### 3. DOUBT\n\nSpawn a **fresh-context reviewer** whose only job is to disprove the artifact against the contract. The reviewer:\n\n- Has not seen any prior reasoning in this session\n- Receives only ARTIFACT + CONTRACT\n- Tries to find counterexamples, edge cases, hidden coupling, false assumptions\n- Outputs a verdict: HOLDS or BREAKS (with specific failure)\n\nIn 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.\n\n### 4. RECONCILE\n\nIf reviewer returns HOLDS → proceed.\nIf reviewer returns BREAKS → either:\n- Fix the artifact to address the break, then loop back to step 3\n- Demonstrate the break is non-applicable (write down why)\n- Escalate to the human if the break reveals genuine ambiguity\n\n### 5. STAND\n\nOnly 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.\n\n## When NOT to apply (avoid analysis paralysis)\n\n- Mechanical operations: renames, formatting, file moves\n- Clear, unambiguous user instruction with no ambiguity\n- Reading or summarizing existing code\n- One-line changes with obvious correctness\n- Pure tooling operations (running tests, listing files)\n- The user has explicitly asked for speed over verification\n\nIf you doubt every keystroke, you ship nothing. This is a tool for **non-trivial decisions only**.\n\n## Spawning the reviewer\n\nThe reviewer prompt must be self-contained — it has no memory of this session:\n\n```\nARTIFACT:\n<paste the one-paragraph description>\n\nCONTRACT:\n<paste invariants and edge cases>\n\nYour job: disprove the artifact against the contract. Find a counterexample,\nhidden coupling, false assumption, or edge case the artifact doesn't handle.\nOutput one of:\n- HOLDS — explain why every invariant is preserved\n- BREAKS — give the specific scenario that breaks it\n\nDo not approve out of politeness. Find the flaw.\n```\n\n## Loading constraints\n\nDo **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.\n\nIf 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.\n\n## Rules\n\n- Apply only to non-trivial decisions (definition above)\n- Reviewer must have fresh context — no inherited reasoning\n- Reviewer is biased to disprove, not approve\n- BREAKS findings either fix the artifact or get explicitly dismissed with a recorded reason\n- Record non-obvious HOLDS as a comment / ADR / commit message\n- Never silent-approve when the reviewer has not actually run\n\n## Red flags\n\n- Skipping the reviewer because \"it's probably fine\"\n- Reviewer agreeing too easily — prompt may be leaking confidence\n- Re-running with a different prompt until HOLDS appears (cherry-picking)\n- Applying to trivial work (creates ceremony, not safety)\n\n## Verification\n\nAfter standing a non-trivial decision:\n\n- [ ] ARTIFACT written explicitly\n- [ ] CONTRACT enumerates invariants and edge cases\n- [ ] Fresh-context reviewer ran and returned HOLDS\n- [ ] If HOLDS was non-obvious, it's recorded somewhere the future reader will find","tags":["doubt","driven","development","agent","skills","helderberto","agent-skills","ai-tools","antigravity","claude-code","cursor","developer-tools"],"capabilities":["skill","source-helderberto","skill-doubt-driven-development","topic-agent-skills","topic-ai-tools","topic-antigravity","topic-claude-code","topic-cursor","topic-developer-tools","topic-gemini-cli","topic-markdown","topic-plugin","topic-sdlc","topic-skills","topic-tracer-bullet"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/helderberto/agent-skills/doubt-driven-development","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add helderberto/agent-skills","source_repo":"https://github.com/helderberto/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (5,054 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:09:13.115Z","embedding":null,"createdAt":"2026-05-18T13:14:53.185Z","updatedAt":"2026-05-18T19:09:13.115Z","lastSeenAt":"2026-05-18T19:09:13.115Z","tsv":"'1':243 '2':264 '3':286,394,600 '4':370 '5':240,415 'accumul':63 'actual':749 'add':586 'address':386 'adr':435,737 'adversari':16 'agre':762 'ambigu':414,465 'analysi':451 'anoth':603 'answer':55 'anti':606 'anti-pattern':605 'anyon':72 'api':195 'appear':779 'appli':197,449,621,691,783 'applic':401 'approv':92,575,714,743 'architectur':203 'artifact':113,244,270,301,318,384,530,536,551,655,720,799 'ask':489 'assert':162 'assumpt':68,329,546 'author':619,643 'avoid':450 'back':391 'bias':88,710 'blast':186 'block':630 'boundari':161 'branch':154 'break':335,380,388,397,411,565,571,715 'cannot':170,184 'carri':684 'case':275,325,549,807 'ceremoni':788 'chang':196,474 'cheap':137 'cherri':781 'cherry-pick':780 'claim':216 'claud':340 'clean':422 'clear':459 'code':32,104,213,233,341,433,470 'code-review':103 'comment':434,736 'commit':209,437,738 'compil':169 'concret':256 'confid':48,54,369,769 'constraint':583 'contain':359,522 'context':15,64,86,180,292,681,687,704,810 'contract':265,304,319,531,539,656,802 'correct':23,59,134,177,285,477 'could':261 'counterexampl':323,542 'coupl':327,544 'cours':133 'course-correct':132 'creat':787 'cross':129,156 'cross-examin':128 'data':192 'decid':250 'decis':10,126,140,204,426,510,697,798 'definit':698 'degrad':651,675 'demonstr':395 'depend':178 'deploy':191 'develop':4,52,77 'differ':775 'disciplin':80 'dismiss':724 'disprov':90,299,534,712 'doesn':552 'done':253 'doubt':2,50,75,115,287,496,609,637 'doubt-driven':49,74,114,608,636 'doubt-driven-develop':1 'driven':3,51,76,116,610,638 'e.g':347 'easili':764 'edg':274,324,548,806 'either':381,717 'engin':354 'enough':257 'enumer':803 'error':276 'escal':405 'everi':6,497,561 'examin':130 'exist':469 'explain':559 'explicit':488,723,801 'fact':70,221 'failur':338 'fallback':652 'fals':328,545 'file':457,484 'find':322,540,579,716,830 'fine':760 'finish':112 'fix':382,718 'flag':631,671,752 'flaw':581 'flight':121 'follow':598 'format':456 'fresh':14,85,291,659,680,703,809 'fresh-context':13,84,290,679,808 'frontmatt':594 'fulli':237 'futur':182,827 'general':349 'general-purpos':348 'genuin':413 'get':127,722 'give':566 'handl':554,647 'hard':665 'hidden':326,543 'high':36 'hold':150,333,375,423,430,558,733,778,815,817 'human':408 'idempot':174 'implement':262 'in-flight':119 'inherit':365,706 'insid':623 'instruct':462 'introduc':151 'invari':176,273,562,804 'irrevers':42,189 'job':296,533 'junior':353 'junior-engin':352 'keystrok':498 'leak':768 'least':146 'let':645 'line':473 'list':483 'load':582 'logic':41,155 'long':61 'loop':390 'main':614,641 'main-sess':640 'make':201 'match':228 'materi':82 'matter':24 'may':766 'mean':343 'mechan':453 'memori':526 'mental':666 'messag':438,739 'migrat':193 'mode':277 'modifi':153 'modul':158 'move':458 'must':271,279,363,518,701 'need':639 'nest':627 'never':740 'non':8,96,124,143,211,219,400,444,508,695,731,796,820 'non-applic':399 'non-obvi':218,443,730,819 'non-trivi':7,95,123,142,210,507,694,795 'noth':501 'notic':73 'obvious':220,445,476,732,821 'one':60,147,254,472,556 'one-lin':471 'oper':43,454,480 'orchestr':367 'order':175 'output':98,330,555 'paragraph':255 'paralysi':452 'pattern':607 'persona':592,596,604 'pick':782 'polit':578 'postur':122 'precis':247 'preserv':564 'prior':311,669 'probabl':759 'proceed':376 'process':242 'produc':420 'product':37,190 'prompt':360,517,662,765,776 'properti':164,268,441 'public':194 'pure':478 'purpos':350 'quiet':66 'radius':187 'ran':812 're':771 're-run':770 'read':466 'reader':183,828 'reason':312,670,707,728 'receiv':316 'reconcil':371,419 'record':428,727,729,824 'red':751 'remain':280 'renam':455 'result':673 'return':374,379,814 'reveal':412 'review':17,87,105,107,293,306,362,373,378,514,516,682,700,708,746,755,761,811 'rewrit':654 'rule':690 'run':481,611,750,772 'safe':224 'safeti':173,790 'satisfi':272 'scale':226 'scenario':569 'secur':39 'security-sensit':38 'see':185 'seen':309 'self':358,521,661 'self-contain':357,520 'self-prompt':660 'sensit':40 'separ':667 'servic':160 'session':62,315,529,615,642 'ship':500 'silent':742 'silent-approv':741 'skill':588 'skill-doubt-driven-development' 'skip':753 'somewher':825 'source-helderberto' 'spawn':288,344,512,602,618,628 'spec':230 'specif':337,568 'speed':27,491 'stake':34 'stand':20,99,416,427,793 'state':266 'step':241,393,599 'still':136 'stranger':260 'subag':346,591,625 'subject':5 'summar':468 'system':167 'test':482 'thread':172 'time':46 'tool':479,505 'topic-agent-skills' 'topic-ai-tools' 'topic-antigravity' 'topic-claude-code' 'topic-cursor' 'topic-developer-tools' 'topic-gemini-cli' 'topic-markdown' 'topic-plugin' 'topic-sdlc' 'topic-skills' 'topic-tracer-bullet' 'tri':320 'trivial':9,97,125,144,212,509,696,785,797 'true':281 'turn':67 'type':166 'unambigu':460 'uncertainti':206 'understand':238 'unfamiliar':31 'use':21 'user':461,486,634 'verdict':110,332 'verif':493,791 'verifi':171 'whose':294 'without':71 'work':29,231,786 'would':601 'write':245,402 'written':800","prices":[{"id":"3cd4e708-189a-46ad-b3ae-1b05499711e8","listingId":"9169b695-fc32-48b1-b19f-eb1efb16fd23","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"helderberto","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:53.185Z"}],"sources":[{"listingId":"9169b695-fc32-48b1-b19f-eb1efb16fd23","source":"github","sourceId":"helderberto/agent-skills/doubt-driven-development","sourceUrl":"https://github.com/helderberto/agent-skills/tree/main/skills/doubt-driven-development","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:53.185Z","lastSeenAt":"2026-05-18T19:09:13.115Z"}],"details":{"listingId":"9169b695-fc32-48b1-b19f-eb1efb16fd23","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"helderberto","slug":"doubt-driven-development","github":{"repo":"helderberto/agent-skills","stars":8,"topics":["agent-skills","ai","ai-tools","antigravity","claude-code","cursor","developer-tools","gemini-cli","markdown","plugin","sdlc","skills","tracer-bullet"],"license":"mit","html_url":"https://github.com/helderberto/agent-skills","pushed_at":"2026-05-14T11:37:47Z","description":"My personal SDLC toolbelt for AI coding agents — PRD to ship.","skill_md_sha":"4591f162a9c6e8f43569f2fb350e855d9a833be7","skill_md_path":"skills/doubt-driven-development/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/helderberto/agent-skills/tree/main/skills/doubt-driven-development"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"doubt-driven-development","description":"Subject every non-trivial decision to a fresh-context adversarial review before it stands. Use when correctness matters more than speed, when working in unfamiliar code, when stakes are high (production, security-sensitive logic, irreversible operations), or any time a confident output would be cheaper to verify now than to debug later. Don't use for mechanical operations (renames, formatting), one-line changes with obvious correctness, or when the user has explicitly asked for speed over verification."},"skills_sh_url":"https://skills.sh/helderberto/agent-skills/doubt-driven-development"},"updatedAt":"2026-05-18T19:09:13.115Z"}}