{"id":"07989335-099c-4f8c-9052-a4c8d8082b4d","shortId":"re9hjg","kind":"skill","title":"doubt-driven-development","tagline":"Subjects 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\n## Overview\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 `/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.\n\n## When to Use\n\nA decision is **non-trivial** when at least one of these is true:\n\n- It introduces or modifies branching logic\n- It crosses a module or service boundary\n- It asserts a property the type system or compiler cannot verify (thread safety, idempotence, ordering, invariants)\n- Its correctness depends on context the future reader cannot see\n- Its blast radius is irreversible (production deploy, data migration, public API change)\n\nApply the skill 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**When NOT to use:**\n\n- Mechanical operations (renaming, formatting, file moves)\n- Following a clear, unambiguous user instruction\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. The skill applies only to non-trivial decisions as defined above.\n\n## Loading Constraints\n\nThis skill is designed for the **main-session orchestrator**, where Step 3 (DOUBT, detailed below) can spawn a fresh-context reviewer.\n\n- **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\").\n- **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.\n\n## The Process\n\nCopy this checklist when applying the skill:\n\n```\nDoubt cycle:\n- [ ] Step 1: CLAIM — wrote the claim + why-it-matters\n- [ ] Step 2: EXTRACT — isolated artifact + contract, stripped reasoning\n- [ ] Step 3: DOUBT — invoked fresh-context reviewer with adversarial prompt\n- [ ] Step 4: RECONCILE — classified every finding against the artifact text\n- [ ] Step 5: STOP — met stop condition (trivial findings, 3 cycles, or user override)\n```\n\n### Step 1: CLAIM — Surface what stands\n\nName the decision in two or three lines:\n\n```\nCLAIM: \"The new caching layer is thread-safe under the\n        read-heavy workload described in the spec.\"\nWHY THIS MATTERS: a race here corrupts user data and is\n                  hard to detect in QA.\n```\n\nIf you can't write the claim that compactly, you have a vibe, not a decision. Surface it before scrutinizing it.\n\n### Step 2: EXTRACT — Smallest reviewable unit\n\nA fresh-context reviewer needs the **artifact** and the **contract**, not the journey.\n\n- Code: the diff or the function — not the whole file\n- Decision: the proposal in 3–5 sentences plus the constraints it has to satisfy\n- 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)\n\nStrip 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.\n\n### Step 3: DOUBT — Invoke the fresh-context reviewer\n\nThe reviewer's prompt **must be adversarial**. Framing decides the answer.\n\n```\nAdversarial review. Find what is wrong with this artifact.\nAssume the author is overconfident. Look for:\n- Unstated assumptions\n- Edge cases not handled\n- Hidden coupling or shared state\n- Ways the contract could be violated\n- Existing conventions this might break\n- Failure modes under unexpected input\n\nDo NOT validate. Do NOT summarize. Find issues, or state\nexplicitly that you cannot find any after thorough examination.\n\nARTIFACT: <paste artifact>\nCONTRACT: <paste contract>\n```\n\n**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.\n\nIn Claude Code, the role-based reviewers in `agents/` start with isolated context by design and are usable here — see `agents/` for the roster and per-domain match.\n\n**The adversarial prompt above takes precedence over the persona's default response shape.** Personas like `code-reviewer` are written to produce balanced verdicts with both strengths and weaknesses; doubt-driven needs issues-only output. Paste the adversarial prompt verbatim into the invocation so it overrides the persona's default. If a persona's response shape can't be overridden cleanly, fall back to a generic subagent with the adversarial prompt.\n\n#### Cross-model escalation\n\nA 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.\n\n**Interactive sessions: always offer. Never silently skip.**\n\n**Step 1: Ask the user**\n\nAfter the single-model review in Step 3 above, but before RECONCILE, pause and ask:\n\n> *\"Single-model review complete. Want a cross-model second opinion? Options: Gemini CLI, Codex CLI, manual external review (you paste it elsewhere), or skip.\"*\n\nThis question is mandatory in every interactive doubt cycle — even on artifacts that feel low-stakes. The user — not the agent — decides whether the cost is worth it. The agent's job is to surface the choice.\n\n**Step 2: If the user picks a CLI — verify, then invoke**\n\n1. Check the tool is in PATH (`which gemini`, `which codex`).\n2. Test it works (`gemini --version` or equivalent) before passing the full prompt — a stale or broken binary may pass `which` but fail on real input.\n3. Confirm the exact invocation with the user, including required flags, auth, and env vars (e.g., API keys). Implementations vary; never assume.\n4. Pass ARTIFACT + CONTRACT + the adversarial prompt **only**. No session context, no CLAIM.\n5. Mind shell escaping. If the artifact contains quotes, `$(...)`, or backticks, prefer stdin (`echo … | gemini`) or a heredoc over inline `-p \"…\"`. When in doubt, ask the user to confirm the invocation before running it.\n6. Take the output into Step 4 (RECONCILE).\n\n**Never interpolate the artifact into a shell-quoted argument.** Code, markdown, and review prompts routinely contain backticks, `$(...)`, and quote characters that will either truncate the prompt or execute embedded shell. Write the full prompt to a file and pipe it through stdin.\n\nExample shapes (verify flags against your installed tool — syntax differs across implementations and versions):\n\n```bash\n# Write the adversarial prompt + ARTIFACT + CONTRACT to a temp file first.\n# Then pipe via stdin so shell metacharacters in the artifact stay inert.\n\n# Codex (read-only sandbox keeps the CLI from writing to your workspace):\ncodex exec --sandbox read-only -C <repo-path> - < /tmp/doubt-prompt.md\n\n# Gemini ('--approval-mode plan' is read-only; '-p \"\"' triggers non-interactive\n# mode and the prompt is read from stdin):\ngemini --approval-mode plan -p \"\" < /tmp/doubt-prompt.md\n```\n\nA read-only sandbox is the load-bearing detail: a doubt artifact may itself contain instructions (intentional or accidental prompt injection) that the cross-model CLI would otherwise execute against your workspace.\n\n**Step 3: If the CLI is unavailable or fails**\n\nSurface the failure explicitly. Offer: run it manually, try a different tool, or skip. Do not silently fall back to single-model — the user should know cross-model didn't happen.\n\n**Step 4: If the user skips**\n\nAcknowledge the skip in the output (*\"Proceeding with single-model findings only\"*) and continue to RECONCILE. Skipping is fine; silent skipping is not.\n\n**Non-interactive contexts** (CI, `/loop`, autonomous-loop, scheduled runs):\n\n- Cross-model is **skipped**, and the skip must be **announced** in the output: *\"Cross-model skipped: non-interactive context.\"*\n- **Never invoke an external CLI without explicit user authorization** — this is a load-bearing safety property.\n\nCross-model adds cost, latency, and tool fragility. The agent surfaces the choice every cycle; the user decides whether this artifact warrants it.\n\n### Step 4: RECONCILE — Fold findings back\n\nThe reviewer's output is data, not verdict. **You are still the orchestrator.** Re-read the artifact text against each finding before classifying — rubber-stamping the reviewer is the same failure mode as ignoring it.\n\nFor each finding, classify in this **precedence order** (first matching class wins):\n\n1. **Contract misread** — reviewer flagged something specifically because the CONTRACT you provided was unclear or incomplete. Fix the contract first, re-classify on the next cycle.\n2. **Valid + actionable** — real issue requiring a change to the artifact. Change it, re-loop.\n3. **Valid trade-off** — issue is real but cost of fixing exceeds cost of accepting. Document the trade-off explicitly so the user sees it.\n4. **Noise** — reviewer flagged something that's actually correct under context the reviewer didn't have. Note it, move on, and ask: would adding that context to the contract have prevented the false flag?\n\nA fresh reviewer can be wrong because it lacks context. Don't defer just because it's \"fresh.\"\n\n### Step 5: STOP — Bounded loop, not recursion\n\nStop when:\n\n- Next iteration returns only trivial or already-considered findings, **or**\n- 3 cycles completed (escalate to user, don't grind a fourth alone), **or**\n- User explicitly says \"ship it\"\n\nIf after 3 cycles the reviewer still surfaces substantive issues, the artifact may not be ready. Surface this to the user — three unresolved cycles is information about the artifact, not a reason to keep looping.\n\nIf 3 cycles is \"obviously insufficient\" because the artifact is large: the artifact is too big — return to Step 2 and decompose. Do not lift the bound.\n\n## Common Rationalizations\n\n| Rationalization | Reality |\n|---|---|\n| \"I'm confident, skip the doubt step\" | Confidence correlates poorly with correctness on novel problems. Moments of certainty are exactly when blind spots hide. |\n| \"Spawning a reviewer is expensive\" | Debugging a wrong commit in production is more expensive. The check is bounded; the bug isn't. |\n| \"The reviewer will just nitpick\" | Only if unscoped. Constrain the prompt to \"issues that would make this fail under the contract.\" |\n| \"I'll do doubt at the end with `/review`\" | `/review` is a final gate. Doubt-driven catches wrong directions early when course-correction is cheap. By PR time it's too late. |\n| \"If I doubt every step I'll never ship\" | The skill applies to non-trivial decisions, not every keystroke. Re-read \"When NOT to Use.\" |\n| \"Two opinions are always better than one\" | Not when the second has less context and produces noise. Reconcile, don't defer. |\n| \"The reviewer disagreed so I was wrong\" | The reviewer lacks your context — disagreement is information, not verdict. Re-read the artifact, classify, then decide. |\n| \"Cross-model is always better\" | Cross-model catches blind spots a single model shares with itself, but it adds cost and tool fragility. Offer it every interactive doubt cycle — the user decides whether the artifact warrants it. The agent's job is to surface the choice, not to gate it. |\n| \"User said yes once, so I can keep invoking the CLI\" | Each invocation is its own authorization. The artifact, the prompt, and the flags change between calls — re-confirm the exact command with the user before every run. |\n\n## Red Flags\n\n- Spawning a fresh-context reviewer for a one-line rename or formatting change\n- Treating reviewer output as authoritative without re-reading the artifact text\n- Looping >3 cycles without escalating to the user\n- Prompting the reviewer with \"is this good?\" instead of \"find issues\"\n- Skipping doubt under time pressure on a high-stakes decision\n- Re-spawning fresh-context on an unchanged artifact (you'll get the same findings; you're stalling)\n- **Doubt theater (checkable signal)**: across 2 or more cycles where the reviewer surfaced substantive findings, zero findings were classified as actionable. You are validating, not doubting. Stop and escalate.\n- Doubting only after committing — that's `/review`, not doubt-driven development\n- Hardcoding an external CLI invocation without confirming with the user that the tool exists, is configured, and accepts that exact syntax\n- **Silently skipping cross-model in an interactive doubt cycle.** Even when not recommending it, the offer must be visible. Skipping is fine; silent skipping is not.\n- Falling back silently when an external CLI errors or is missing — surface the failure and let the user redirect\n- Stripping the contract from the reviewer's input\n- Passing the CLAIM to the reviewer (biases toward agreement)\n\n## Interaction with Other Skills\n\n- **`code-review-and-quality` / `/review`**: complementary. `/review` is post-hoc PR verdict; doubt-driven is in-flight per-decision. Use both.\n- **`source-driven-development`**: SDD verifies *facts about frameworks* against official docs. Doubt-driven verifies *your reasoning about the artifact*. SDD checks the API exists; doubt-driven checks you used it correctly under the contract.\n- **`test-driven-development`**: TDD's RED step is doubt made concrete — a failing test is a disproof attempt. When TDD applies, that failing test *is* the doubt step for behavioral claims.\n- **`debugging-and-error-recovery`**: when the reviewer surfaces a real failure mode, drop into the debugging skill to localize and fix.\n- **Repo orchestration rules** (`references/orchestration-patterns.md`): this skill orchestrates from the main session. A persona calling another persona is anti-pattern B — see Loading Constraints above.\n\n## Verification\n\nAfter applying doubt-driven development:\n\n- [ ] Every non-trivial decision (per the definition above) was named explicitly as a CLAIM before standing\n- [ ] At least one fresh-context review per non-trivial artifact (a failing test produced by TDD's RED step satisfies this for behavioral claims, per Interaction with Other Skills)\n- [ ] The reviewer received ARTIFACT + CONTRACT — NOT the CLAIM, NOT your reasoning\n- [ ] The reviewer's prompt was adversarial (\"find issues\"), not validating (\"is it good\")\n- [ ] Findings were classified against the artifact text (not rubber-stamped) using the precedence: contract misread / actionable / trade-off / noise\n- [ ] A stop condition was met (trivial findings, 3 cycles, or user override)\n- [ ] In interactive mode, cross-model was **explicitly offered** to the user (regardless of artifact stakes) and the response was acknowledged in the output\n- [ ] In non-interactive mode, cross-model was skipped and the skip was announced\n- [ ] Any external CLI invocation was preceded by a PATH check, a working-binary test, syntax confirmation with the user, and explicit authorization to run","tags":["doubt","driven","development","agent","skills","addyosmani","agent-skills","antigravity","antigravity-ide","claude-code","cursor"],"capabilities":["skill","source-addyosmani","skill-doubt-driven-development","topic-agent-skills","topic-antigravity","topic-antigravity-ide","topic-claude-code","topic-cursor","topic-skills"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/addyosmani/agent-skills/doubt-driven-development","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add addyosmani/agent-skills","source_repo":"https://github.com/addyosmani/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 43270 github stars · SKILL.md body (16,003 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-18T18:50:21.516Z","embedding":null,"createdAt":"2026-05-09T06:52:10.015Z","updatedAt":"2026-05-18T18:50:21.516Z","lastSeenAt":"2026-05-18T18:50:21.516Z","tsv":"'/loop':1453 '/review':104,105,1878,1879,2181,2280,2282 '/tmp/doubt-prompt.md':1311,1340 '1':447,489,541,669,1001,1096,1577 '2':499,611,1086,1107,1604,1791,2151 '3':325,352,507,535,644,723,1013,1133,1377,1620,1719,1739,1773,2098,2524 '4':518,1155,1208,1419,1523,1647 '5':448,528,645,1168,1700 '500':717 '6':1202 'accept':1635,2204 'accident':1361 'accumul':64 'acknowledg':1424,2549 'across':1263,2150 'action':1606,2166,2512 'actual':1654 'ad':1670 'add':338,1501,1997 'adversari':16,515,737,742,866,904,936,1160,1270,2488 'agent':844,856,1068,1077,1508,2017 'agreement':823,2270 'alon':1730 'alreadi':966,1715 'already-consid':1714 'alway':995,1934,1981 'announc':1469,2567 'anoth':355,2406 'answer':56,741 'anti':360,2410 'anti-pattern':359,2409 'anyon':73 'api':201,1149,2325 'appli':203,301,376,483,1915,2359,2419 'approv':93,1314,1336 'approval-mod':1313,1335 'architectur':211,958 'argument':1219 'artifact':112,427,502,525,623,750,804,807,831,1058,1157,1174,1213,1272,1288,1354,1519,1545,1614,1748,1765,1780,1784,1973,2013,2047,2095,2136,2321,2452,2475,2501,2543 'ask':286,1002,1020,1192,1668 'assert':166,654 'assum':751,1154 'assumpt':69,759 'attempt':2356 'auth':1144 'author':753,953,1489,2045,2590 'authorit':2089 'autonom':1455 'autonomous-loop':1454 'b':2412 'back':691,929,1403,1527,2236 'backtick':1178,1227 'balanc':887 'base':841 'bash':1267 'bear':1350,1495 'behavior':2368,2465 'better':1935,1982 'bias':89,820,2268 'big':1787 'binari':1124,2581 'blast':192 'blind':948,1824,1987 'block':671 'bound':1702,1798,1844 'boundari':164 'branch':156 'break':779 'broken':1123 'bug':1846 'c':1310 'cach':557 'call':2055,2405 'cannot':174,189,404,798 'carri':457 'case':761 'catch':960,1887,1986 'certainti':1820 'chang':202,271,1611,1615,2053,2084 'charact':1230 'cheap':134,1896 'check':1097,1842,2323,2330,2577 'checkabl':2148 'checklist':481 'choic':1084,1511,2024 'ci':1452 'claim':224,490,493,542,554,595,656,670,814,1167,2264,2369,2438,2466,2479 'class':1575 'classifi':520,1551,1568,1599,1974,2164,2498 'claud':385,836 'clean':927 'clear':259 'cli':1035,1037,1092,1298,1369,1380,1485,2039,2190,2241,2570 'code':32,221,241,267,386,630,837,881,1220,2276 'code-review':880 'code-review-and-qu':2275 'codex':1036,1106,1291,1304 'colder':955 'command':2061 'commit':217,1835,2178 'common':1799 'compact':597 'compil':173 'complementari':2281 'complet':1025,1721 'conclus':687,695,819 'concret':2349 'condit':532,2519 'confid':48,55,1805,1810 'configur':2202 'confirm':1134,1196,2058,2193,2584 'consid':1716 'constrain':1857 'constraint':312,649,2415 'contain':1175,1226,1357 'context':15,65,87,185,334,383,454,460,512,619,729,848,1165,1451,1480,1657,1672,1690,1944,1963,2074,2132,2446 'continu':1438 'contract':428,503,626,771,805,808,834,1158,1273,1578,1586,1595,1675,1869,2256,2337,2476,2510 'convent':776 'copi':479 'correct':23,60,131,182,274,1655,1814,1894,2334 'correl':1811 'corrupt':579 'cost':1072,1502,1629,1633,1998 'could':772 'coupl':765 'cours':130,1893 'course-correct':129,1892 'cross':126,159,939,981,1029,1367,1413,1460,1474,1499,1978,1984,2211,2533,2559 'cross-examin':125 'cross-model':938,980,1028,1366,1412,1459,1473,1498,1977,1983,2210,2532,2558 'cycl':487,536,1055,1513,1603,1720,1740,1760,1774,2007,2099,2154,2217,2525 'data':198,581,1533 'debug':1832,2371,2386 'debugging-and-error-recoveri':2370 'decid':739,1069,1516,1976,2010 'decis':10,123,139,212,307,548,604,640,974,1920,2126,2298,2428 'decompos':720,1793 'default':875,916 'defer':1693,1951 'defin':309 'definit':2431 'degrad':420,468 'depend':183 'deploy':197 'describ':569 'design':316,850 'detail':327,1351 'detect':586 'determin':828 'develop':4,52,78,2186,2304,2341,2423 'didn':1415,1660 'diff':632 'differ':957,1262,1395 'different-architectur':956 'direct':1889 'disagr':1964 'disagre':1954 'disciplin':81 'disproof':2355 'disprov':91 'distinct':665 'doc':2312 'document':1636 'domain':863 'doubt':2,50,76,293,326,402,486,508,724,895,963,1054,1191,1353,1808,1873,1885,1906,2006,2117,2146,2171,2175,2184,2216,2290,2314,2328,2347,2365,2421 'doubt-driven':49,75,401,894,962,1884,2183,2289,2313,2327,2420 'doubt-driven-develop':1 'driven':3,51,77,403,896,964,1886,2185,2291,2303,2315,2329,2340,2422 'drop':2383 'e.g':1148 'earli':1890 'echo':1181 'edg':760 'either':1233 'elsewher':1044 'embed':1239 'end':1876 'enough':701 'env':1146 'equival':1114 'error':2242,2373 'escal':471,941,1722,2101,2174 'escap':1171 'even':1056,2218 'everi':6,294,521,1052,1512,1907,1922,2004,2066,2424 'evid':659 'exact':1136,1822,2060,2206 'examin':127,803 'exampl':1253 'exceed':1632 'exec':1305 'execut':1238,1372 'exist':266,425,775,2200,2326 'expens':1831,1840 'explicit':285,362,795,1388,1487,1641,1733,2435,2536,2589 'extern':1039,1484,2189,2240,2569 'extract':500,612 'fact':71,229,2307 'fail':1129,1384,1866,2351,2361,2454 'failur':780,1387,1560,2248,2381 'fall':928,1402,2235 'fallback':424 'fals':1679 'feel':1060 'file':255,281,639,1247,1277 'final':1882 'find':374,522,534,744,791,799,1435,1526,1549,1567,1717,2114,2142,2160,2162,2489,2496,2523 'fine':1443,2230 'finish':111 'first':721,1278,1573,1596 'fix':1593,1631,2391 'flag':464,1143,1256,1581,1650,1680,2052,2069 'flight':118,2295 'fold':1525 'follow':257,350 'forbidden':363 'format':254,2083 'fourth':1729 'fragil':1506,2001 'frame':738 'framework':2309 'fresh':14,86,333,431,453,511,618,728,1682,1698,2073,2131,2445 'fresh-context':13,85,332,452,510,617,727,2072,2130,2444 'friction':992 'frontmatt':346 'full':1118,1243 'fulli':245 'function':635 'futur':187 'gate':1883,2027 'gemini':1034,1104,1111,1182,1312,1334 'generic':932 'get':124,690,2139 'good':2111,2495 'grind':1727 'hand':685,815 'handl':412,763 'happen':1417 'hard':437,584 'hardcod':2187 'heavi':567 'heredoc':1185 'hidden':764 'hide':1826 'high':36,2124 'high-stak':2123 'hoc':2286 'hold':706 'hypothesi':677 'idempot':178 'ignor':1563 'implement':1151,1264 'in-flight':116,2293 'includ':1141 'incomplet':1592 'independ':827 'inert':1290 'inform':1762,1966 'inject':1363 'inlin':1187 'input':784,1132,2261 'insid':380 'instal':1259 'instead':2112 'instruct':262,1358 'insuffici':1777 'intent':1359 'interact':993,1053,1325,1450,1479,2005,2215,2271,2468,2530,2556 'interpol':1211 'introduc':153 'invari':180 'invoc':909,1137,1198,2041,2191,2571 'invok':369,509,725,1095,1482,2037 'irrevers':42,195 'isn':1847 'isol':501,847 'issu':792,899,1608,1625,1746,1861,2115,2490 'issues-on':898 'iter':1709 'job':1079,2019 'journey':629 'keep':1296,1770,2036 'kept':664 'key':1150 'keystrok':295,1923 'know':1411 'lack':1689,1961 'larg':1782 'last':416 'late':1903 'latenc':1503 'layer':558 'least':146,2442 'less':1943 'let':408,2250 'lift':1796 'like':879 'line':270,553,718,2080 'list':280 'll':689,1871,1910,2138 'load':311,1349,1494,2414 'load-bear':1348,1493 'local':2389 'logic':41,157 'long':62 'look':756 'loop':1456,1619,1703,1771,2097 'low':1062 'low-stak':1061 'm':1804 'made':2348 'main':320,410,2401 'main-sess':319 'make':209,1864 'mandatori':1050 'manual':1038,1392 'markdown':1221 'match':236,864,1574 'materi':83 'matter':24,497,575 'may':1125,1355,1749 'mechan':251 'mental':438 'met':530,2521 'metacharact':1285 'might':778 'migrat':199 'mind':709,1169 'misread':1579,2511 'miss':2245 'mode':781,1315,1326,1337,1561,2382,2531,2557 'model':940,945,959,982,1009,1023,1030,1368,1407,1414,1434,1461,1475,1500,1979,1985,1991,2212,2534,2560 'modifi':155 'modul':161 'moment':1818 'move':256,1665 'must':698,735,826,1467,2225 'name':546,2434 'need':621,897 'nest':388,406 'never':997,1153,1210,1481,1911 'new':556 'next':1602,1708 'nitpick':1853 'nois':1648,1947,2516 'non':8,97,121,142,219,227,305,972,1324,1449,1478,1918,2426,2450,2555 'non-interact':1323,1448,1477,2554 'non-obvi':226 'non-trivi':7,96,120,141,218,304,971,1917,2425,2449 'note':1663 'noth':298 'notic':74 'novel':1816 'obvious':228,273,1776 'offer':979,996,1389,2002,2224,2537 'offici':2311 'one':61,147,269,711,1937,2079,2443 'one-lin':268,2078 'oper':43,252,277 'opinion':1032,1932 'opt':968 'opt-in':967 'option':991,1033 'orchestr':322,358,675,1540,2393,2398 'order':179,1572 'origin':952 'otherwis':1371 'output':99,901,1205,1429,1472,1531,2087,2552 'overconfid':755 'overrid':539,912,2528 'overridden':926 'overview':53 'p':1188,1321,1339 'part':984 'pass':806,812,1116,1126,1156,2262 'past':902,1042 'path':393,1102,2576 'pattern':361,2411 'paus':1018 'per':862,2297,2429,2448,2467 'per-decis':2296 'per-domain':861 'persona':343,348,356,366,371,873,878,914,919,2404,2407 'pick':1090 'pipe':1249,1280 'plan':1316,1338 'plus':647,657 'poor':1812 'post':2285 'post-hoc':2284 'postur':119 'pr':719,1898,2287 'preced':870,1571,2509,2573 'prefer':392,470,1179 'pressur':2120 'prevent':387,1677 'prior':442 'problem':1817 'proceed':1430 'process':478 'produc':886,1946,2456 'product':37,196,1837 'prompt':434,516,734,867,905,937,1119,1161,1224,1236,1244,1271,1329,1362,1859,2049,2105,2486 'properti':168,1497 'propos':642 'provid':1588 'public':200 'pure':275 'qa':588 'qualiti':2279 'question':423,1048 'quiet':67 'quot':1176,1218,1229 'race':577 'radius':193 'ration':1800,1801 're':1542,1598,1618,1925,1970,2057,2092,2128,2144 're-classifi':1597 're-confirm':2056 're-loop':1617 're-read':1541,1924,1969,2091 're-spawn':2127 'reachabl':476 'read':263,566,712,1293,1308,1319,1331,1343,1543,1926,1971,2093 'read-heavi':565 'read-on':1292,1307,1318,1342 'reader':188 'readi':1752 'real':1131,1607,1627,2380 'realiti':1802 'reason':443,505,682,1768,2318,2482 'receiv':2474 'recommend':2221 'reconcil':519,1017,1209,1440,1524,1948 'recoveri':2374 'recurs':1705 'red':2068,2344,2460 'redirect':2253 'references/orchestration-patterns.md':365,2395 'regardless':2541 'renam':253,2081 'repo':2392 'requir':1142,1609 'resort':417 'respons':876,921,2547 'result':466 'return':1710,1788 'review':17,88,335,455,513,614,620,704,730,732,743,817,825,842,882,946,1010,1024,1040,1223,1529,1556,1580,1649,1659,1683,1742,1829,1850,1953,1960,2075,2086,2107,2157,2259,2267,2277,2377,2447,2473,2484 'rewrit':426 'role':840 'role-bas':839 'roster':859 'routin':1225 'rubber':1553,2505 'rubber-stamp':1552,2504 'rule':2394 'run':278,405,1200,1390,1458,2067,2592 'safe':232,562 'safeti':177,1496 'said':2030 'sandbox':1295,1306,1345 'satisfi':653,832,2462 'say':1734 'scale':234 'schedul':1457 'scope':978 'scrutin':608 'scrutini':679 'sdd':2305,2322 'second':1031,1941 'secur':39 'security-sensit':38 'see':190,855,1645,2413 'self':422,433 'self-prompt':432 'self-quest':421 'sensit':40 'sentenc':646 'separ':439 'servic':163 'session':63,321,411,994,1164,2402 'shape':877,922,1254 'share':767,947,1992 'shell':1170,1217,1240,1284 'shell-quot':1216 'ship':297,1735,1912 'signal':2149 'silent':998,1401,1444,2208,2231,2237 'singl':944,1008,1022,1406,1433,1990 'single-model':943,1007,1021,1405,1432 'skill':205,300,314,340,345,378,485,987,1914,2274,2387,2397,2471 'skill-doubt-driven-development' 'skip':999,1046,1398,1423,1426,1441,1445,1463,1466,1476,1806,2116,2209,2228,2232,2562,2565 'small':700 'smallest':613 'someth':1582,1651 'sourc':2302 'source-addyosmani' 'source-driven-develop':2301 'spawn':330,354,390,1827,2070,2129 'spec':238,572 'specif':1583 'speed':27,288 'spot':949,1825,1988 'stake':34,1063,2125,2544 'stale':1121 'stall':2145 'stamp':1554,2506 'stand':20,100,545,2440 'start':845 'state':768,794 'stay':1289 'stdin':1180,1252,1282,1333 'step':324,351,446,488,498,506,517,527,540,610,668,722,1000,1012,1085,1207,1376,1418,1522,1699,1790,1809,1908,2345,2366,2461 'still':133,1538,1743 'stop':529,531,1701,1706,2172,2518 'strength':891 'strip':504,680,2254 'subag':382,389,933 'subject':5 'substant':1745,2159 'summar':265,790 'support':662 'suppos':661 'surfac':396,543,605,1082,1385,1509,1744,1753,2022,2158,2246,2378 'syntax':1261,2207,2583 'system':171 'take':869,1203 'tdd':2342,2358,2458 'temp':1276 'test':279,1108,2339,2352,2362,2455,2582 'test-driven-develop':2338 'text':526,1546,2096,2502 'theater':2147 'thorough':802 'thread':176,561 'thread-saf':560 'three':552,1758 'time':46,1899,2119 'tool':276,1099,1260,1396,1505,2000,2199 'topic-agent-skills' 'topic-antigravity' 'topic-antigravity-ide' 'topic-claude-code' 'topic-cursor' 'topic-skills' 'toward':822,2269 'trade':1623,1639,2514 'trade-off':1622,1638,2513 'treat':2085 'tri':1393 'trigger':1322 'trivial':9,98,122,143,220,306,533,973,1712,1919,2427,2451,2522 'true':151 'truncat':1234 'turn':68 'two':550,1931 'type':170 'unambigu':260 'unavail':1382 'uncertainti':214 'unchang':2135 'unclear':1590 'understand':246 'unexpect':783 'unfamiliar':31 'unit':615,697 'unresolv':1759 'unscop':1856 'unstat':758 'usabl':853 'use':21,137,250,1930,2299,2332,2507 'user':261,283,399,474,538,580,1004,1065,1089,1140,1194,1409,1422,1488,1515,1644,1724,1732,1757,2009,2029,2064,2104,2196,2252,2527,2540,2587 'valid':692,787,1605,1621,2169,2492 'valu':989 'var':1147 'vari':1152 'verbatim':906 'verdict':108,888,1535,1968,2288 'verif':290,2417 'verifi':175,1093,1255,2306,2316 'version':1112,1266 'via':1281 'vibe':601 'violat':774 'visibl':2227 'walk':445 'want':1026 'warrant':1520,2014 'way':769 'weak':893 'whenev':472 'whether':829,1070,1517,2011 'whole':638 'why-it-matt':494 'win':1576 'within':976 'without':72,1486,2090,2100,2192 'work':29,239,1110,2580 'working-binari':2579 'workload':568 'workspac':1303,1375 'worth':1074 'would':353,1370,1669,1863 'write':593,1241,1268,1300 'written':884 'wrong':747,1686,1834,1888,1958 'wrote':491 'yes':2031 'zero':2161","prices":[{"id":"7def4cd6-f699-4c5c-ae14-dc3b28a71e74","listingId":"07989335-099c-4f8c-9052-a4c8d8082b4d","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"addyosmani","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-09T06:52:10.015Z"}],"sources":[{"listingId":"07989335-099c-4f8c-9052-a4c8d8082b4d","source":"github","sourceId":"addyosmani/agent-skills/doubt-driven-development","sourceUrl":"https://github.com/addyosmani/agent-skills/tree/main/skills/doubt-driven-development","isPrimary":false,"firstSeenAt":"2026-05-09T06:52:10.015Z","lastSeenAt":"2026-05-18T18:50:21.516Z"}],"details":{"listingId":"07989335-099c-4f8c-9052-a4c8d8082b4d","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"addyosmani","slug":"doubt-driven-development","github":{"repo":"addyosmani/agent-skills","stars":43270,"topics":["agent-skills","antigravity","antigravity-ide","claude-code","cursor","skills"],"license":"mit","html_url":"https://github.com/addyosmani/agent-skills","pushed_at":"2026-05-16T22:00:25Z","description":"Production-grade engineering skills for AI coding agents.","skill_md_sha":"f5bc53d01ca0c5bdf178fba1c38c9817b39b63ec","skill_md_path":"skills/doubt-driven-development/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/addyosmani/agent-skills/tree/main/skills/doubt-driven-development"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"doubt-driven-development","description":"Subjects 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."},"skills_sh_url":"https://skills.sh/addyosmani/agent-skills/doubt-driven-development"},"updatedAt":"2026-05-18T18:50:21.516Z"}}