opción
HogarHogar Skill Productividad y flujo de trabajo doubt-driven-development

doubt-driven-development

addyosmani/agent-skills addyosmani/agent-skills

Somete cada decisión no trivial a una revisión adversaria en un contexto nuevo antes de darla por válida, dando prioridad a la corrección frente a la rapidez en el caso de código de alto riesgo o desconocido.

...Expandir todo
9
Tiempo actualizado 3 de septiembre de 2026

A punto de tomar una decisión arquitectónica en un contexto de incertidumbre
  • A punto de publicar código no trivial
  • A punto de afirmar un hecho que no es obvio («esto es seguro», «esto es escalable», «esto se ajusta a las especificaciones»)
  • Trabajando en código que no entiendes del todo
  • Cuándo NO utilizarlo:

    • Operaciones mecánicas (cambio de nombre, formateo, traslado de archivos)
    • Seguir una instrucción clara e inequívoca del usuario
    • Al leer o resumir código existente
    • Cambios de una sola línea cuya corrección sea evidente
    • Operaciones puramente técnicas (ejecutar pruebas, listar archivos)
    • El usuario ha solicitado explícitamente que se priorice la rapidez frente a la verificación

    Si dudas de cada pulsación de tecla, no lanzarás nada. Esta habilidad solo se aplica a las decisiones no triviales, tal y como se han definido anteriormente.

    Cargas limitantes

    Esta habilidad está diseñada para el coordinador de la sesión principal, donde el paso 3 (DUDAR, que se detalla más adelante) puede dar lugar a un revisor de contexto nuevo.

    • NO añadas esta habilidad a las habilidades de una persona : frontmatter. Una persona que siga el Paso 3 generaría otra persona —el antipatrón de orquestación explícitamente prohibido por references/orchestration-patterns.md («las personas no invocan a otras personas»).
    • Si te encuentras aplicando esta habilidad desde el contexto de un subagente (donde el Código de Claude impide la generación anidada de subagentes): lo más recomendable es indicar al usuario que «doubt-driven» no puede ejecutarse de forma anidada y dejar que la sesión principal se encargue de ello. Solo como último recurso, existe una alternativa degradada de autointerrogatorio: reescribe ARTIFACT + CONTRACT como una nueva autoindicación con un separador mental claro respecto a tu razonamiento anterior, y sigue los pasos 1 a 5. Esto no es una revisión en un contexto nuevo (llevas contigo tu propio contexto), así que marca el resultado como degradado y opta por la escalación siempre que el usuario esté localizable.

    El proceso

    Copia esta lista de comprobación al aplicar la técnica:

    Ciclo de la duda:
    - [ ] Paso 1: AFIRMACIÓN — se ha redactado la afirmación + por qué es importante
    - [ ] Paso 2: EXTRACCIÓN — se ha aislado el artefacto + el contrato, y se ha eliminado el razonamiento
    - [ ] Paso 3: DUDA — se ha recurrido a un revisor con contexto nuevo mediante una pregunta contradictoria
    - [ ] Paso 4: RECONCILIAR — clasificó cada hallazgo en función del texto del artefacto
    - [ ] Paso 5: DETENER — se cumplió la condición de parada (hallazgos triviales, 3 ciclos o anulación por parte del usuario)
    
    

    Paso 1: AFIRMACIÓN — Poner de manifiesto lo que se sostiene

    Describe la decisión en dos o tres líneas:

    AFIRMACIÓN: «La nueva capa de almacenamiento en caché es segura para subprocesos bajo la
            carga de trabajo con gran volumen de lecturas descrita en la especificación».
    POR QUÉ ES IMPORTANTE: una carrera por el acceso aquí corrompe los datos del usuario y es
                      difícil de detectar en el control de calidad.
    
    

    Si no puedes redactar la afirmación de forma tan concisa, lo que tienes es una corazonada, no una decisión. Plantea la idea antes de analizarla en profundidad.

    Paso 2: EXTRAER — La unidad más pequeña que se pueda revisar

    Un revisor con una perspectiva fresca necesita el artefacto y el contrato, no el proceso.

    • Código: la diferencia o la función, no el archivo completo
    • Decisión: la propuesta en 3-5 frases, más las restricciones que debe cumplir
    • Afirmación: la afirmación más las pruebas que supuestamente la respaldan (distinta del bloque «AFIRMACIÓN» del paso 1, que es la hipótesis del coordinador sometida a examen)

    Simplifica tu razonamiento. Si presentas conclusiones, lo que obtendrás a cambio será la validación de tus conclusiones. La unidad debe ser lo suficientemente pequeña como para que un revisor pueda tenerla en cuenta con una sola lectura; si se trata de una solicitud de incorporación de cambios (PR) de 500 líneas, descompónla primero.

    Paso 3: DUDA — Recurre a un revisor con una perspectiva nueva

    La pregunta del revisor debe ser contradictoria. El enfoque determina la respuesta.

    Revisión contradictoria. Encuentra qué falla en este artefacto.
    Asume que el autor tiene un exceso de confianza. Busca:
    - Supuestos no expresados
    - Casos extremos no tratados
    - Acoplamiento oculto o estado compartido
    - Formas en las que se podría incumplir el contrato
    - Convenciones existentes que esto podría romper
    - Modos de fallo ante entradas inesperadas
    
    NO valides. NO resumas. Encuentra problemas o indica
    explícitamente que no has podido encontrar ninguno tras un examen exhaustivo.
    
    ARTÍFACTO: 
    CONTRATO: 
    
    

    Aproba SOLO el ARTIFACTO + el CONTRATO. NO apruebes la AFIRMACIÓN. Si le facilitas tu conclusión al revisor, lo predispones a estar de acuerdo. El revisor debe determinar de forma independiente si el artefacto cumple el contrato.

    En Claude Code, los revisores basados en roles de agents/ comienzan, por diseño, con un contexto aislado y son utilizables aquí; consulta agents/ para ver la lista y la correspondencia por dominio.

    La indicación adversaria anterior tiene prioridad sobre el patrón de respuesta predeterminado de la persona. Las personas como el revisor de código están programadas para generar veredictos equilibrados con puntos fuertes y débiles; las impulsadas por la duda requieren una salida que se limite a señalar problemas. Pega la indicación adversaria tal cual en la invocación para que anule la respuesta predeterminada de la persona. Si la estructura de respuesta de una persona no se puede anular de forma clara, recurre a un subagente genérico con la indicación adversaria.

    Escalación entre modelos

    Un revisor de un solo modelo comparte puntos ciegos con el autor original; un modelo más imparcial y de arquitectura diferente los detecta. El modo «basado en la duda» ya está activado de forma predeterminada para decisiones no triviales, por lo que, dentro de ese ámbito, ofrecer la escalación entre modelos forma parte del valor de la habilidad, no es una fricción opcional.

    Sesiones interactivas: ofrécelas siempre. Nunca las omitas en silencio.

    Paso 1: Pregunta al usuario

    Tras la revisión del modelo único del paso 3 anterior, pero antes de RECONCILE, haz una pausa y pregunta:

    «Revisión de un único modelo completada. ¿Deseas una segunda opinión que abarque varios modelos? Opciones: Gemini CLI, Codex CLI, revisión externa manual (pégalo en otro sitio) u omitir».

    Esta pregunta es obligatoria en cada ciclo interactivo de dudas, incluso en artefactos que parezcan de baja importancia. El usuario —no el agente— decide si el coste merece la pena. La labor del agente es plantear la opción.

    Paso 2: Si el usuario elige una CLI, verifica y, a continuación, ejecuta

    1. Comprueba que la herramienta esté en la ruta PATH (qué gemini, qué codex).
    2. Comprueba que funciona (gemini --version o equivalente) antes de pasar el prompt completo: un binario obsoleto o defectuoso podría pasar la comprobación, pero fallaría con una entrada real.
    3. Confirma con el usuario la invocación exacta, incluyendo los parámetros obligatorios, la autenticación y las variables de entorno (p. ej., claves de API). Las implementaciones varían; nunca des nada por sentado.
    4. Pasa SOLO el ARTIFACTO + el CONTRATO + la línea de comandos adversaria. Sin contexto de sesión, sin CLAIM.
    5. Ten en cuenta el escape del shell. Si el artefacto contiene comillas, $(...) o comillas invertidas, utiliza preferiblemente stdin (echo … | gemini) o un heredoc en lugar de -p "…" en línea. En caso de duda, pide al usuario que confirme la invocación antes de ejecutarla.
    6. Lleva la salida al Paso 4 (RECONCILIAR).

    Nunca interpoles el artefacto en un argumento entre comillas de shell. Las indicaciones de código, Markdown y revisión suelen contener comillas invertidas, $(...) y caracteres de comillas que truncarán la indicación o ejecutarán el shell incrustado. Escribe la indicación completa en un archivo y redirígela a través de stdin.

    Ejemplos de formas (comprueba los indicadores con tu herramienta instalada; la sintaxis varía según las implementaciones y versiones):

    # Escribe primero la indicación adversaria + ARTIFACTO + CONTRATO en un archivo temporal.
    # A continuación, redirígelo a través de la entrada estándar (stdin) para que los metacaracteres de shell del artefacto permanezcan inactivos.
    
    # Codex (el entorno de pruebas de solo lectura impide que la CLI escriba en tu espacio de trabajo):
    codex exec --sandbox read-only -C  - < /tmp/doubt-prompt.md
    
    # Gemini («--approval-mode plan» es de solo lectura; «-p ""» activa el modo no interactivo
    # y la indicación se lee desde la entrada estándar):
    gemini --approval-mode plan -p "" < /tmp/doubt-prompt.md
    
    

    Un entorno de pruebas de solo lectura es el elemento clave: un artefacto de duda puede contener en sí mismo instrucciones (inyección intencionada o accidental de la solicitud) que, de otro modo, la CLI entre modelos ejecutaría en tu espacio de trabajo.

    Paso 3: Si la CLI no está disponible o falla

    Mostrar el fallo de forma explícita. Ofrecer las siguientes opciones: ejecutarlo manualmente, probar con otra herramienta u omitirlo. No recurrir silenciosamente al modo de modelo único: el usuario debe saber que el modo entre modelos no se ha llevado a cabo.

    Paso 4: Si el usuario omite el paso

    Reconoce el salto en la salida («Se procede únicamente con los resultados del modelo único») y continúa con RECONCILE. Saltarse el paso está bien; hacerlo en silencio, no.

    Contextos no interactivos (CI, /loop, autonomous-loop, ejecuciones programadas):

    • Se omite el análisis entre modelos, y dicha omisión debe anunciarse en la salida: «Análisis entre modelos omitido: contexto no interactivo».
    • Nunca invoque una CLI externa sin la autorización explícita del usuario; se trata de una propiedad de seguridad fundamental.

    La función «Cross-model» añade coste, latencia y fragilidad a la herramienta. El agente muestra la opción en cada ciclo; el usuario decide si este artefacto lo justifica.

    Paso 4: RECONCILIACIÓN — Integrar los resultados

    El resultado del revisor son datos, no un veredicto. Tú sigues siendo el responsable de la coordinación. Vuelve a leer el texto del artefacto a la luz de cada hallazgo antes de clasificarlo: dar el visto bueno sin más al revisor es un error tan grave como ignorarlo.

    Para cada hallazgo, clasifícalo siguiendo este orden de prioridad (prevalece la primera clase que coincida):

    1. Malinterpretación del contrato: el revisor ha señalado algo específicamente porque el CONTRATO que has proporcionado no estaba claro o estaba incompleto. Corrige primero el contrato y vuelve a clasificar en el siguiente ciclo.
    2. Válido + susceptible de corrección: problema real que requiere un cambio en el artefacto. Modifícalo y vuelve a repetir el proceso.
    3. Compromiso válido: el problema es real, pero el coste de solucionarlo supera el coste de aceptarlo. Documenta el compromiso de forma explícita para que el usuario lo vea.
    4. Ruido: el revisor ha señalado algo que, en realidad, es correcto en un contexto del que no disponía. Tómalo en cuenta, sigue adelante y pregúntate: ¿habría evitado esa falsa señalización añadir ese contexto al contrato?

    Un revisor nuevo puede equivocarse porque carece de contexto. No lo descartes solo porque sea «nuevo».

    Paso 5: PARAR — Bucle acotado, no recursivo

    Detente cuando:

    • La siguiente iteración solo arroje resultados triviales o ya considerados, o
    • se hayan completado 3 ciclos (escalar el asunto al usuario, no seguir con un cuarto por tu cuenta), o
    • el usuario diga explícitamente «lánzalo».

    Si tras tres ciclos el revisor sigue detectando problemas sustanciales, es posible que el producto no esté listo. Comunícaselo al usuario: tres ciclos sin resolver son información sobre el producto, no una razón para seguir dando vueltas al mismo tema.

    Si tres ciclos son «obviamente insuficientes» porque el producto es voluminoso: el producto es demasiado grande; vuelve al paso 2 y descompónlo. No elimines el límite.

    Racionalizaciones habituales

    Racionalización Realidad
    «Tengo confianza, me salto la etapa de la duda» La confianza se correlaciona poco con la corrección en problemas nuevos. Los momentos de certeza son precisamente aquellos en los que se esconden los puntos ciegos.
    «Contratar a un revisor sale caro» Depurar una confirmación errónea en producción es más caro. La comprobación tiene un límite; el error, no.
    «El revisor solo se dedicará a buscarle tres pies al gato» Solo si no se delimita el alcance. Limita la indicación a «problemas que harían que esto fallara según el contrato».
    «Me reservaré las dudas para el final con /review» /review es una última barrera. La revisión basada en la duda detecta a tiempo las direcciones erróneas, cuando corregir el rumbo aún resulta barato. Para cuando llega el momento de la solicitud de incorporación de cambios (PR), ya es demasiado tarde.
    «Si dudo en cada paso, nunca lanzaré nada» Esta técnica se aplica a decisiones importantes, no a cada pulsación de tecla. Vuelve a leer «Cuándo NO utilizarlo».
    «Dos opiniones siempre son mejores que una». No cuando la segunda tiene menos contexto y genera ruido. Conciliar, no posponer.
    «El revisor no estuvo de acuerdo, así que me equivoqué» El revisor carece de tu contexto: el desacuerdo es información, no un veredicto. Vuelve a leer el artefacto, clasifícalo y luego decide.
    «El enfoque entre modelos siempre es mejor» El enfoque entre modelos detecta los puntos ciegos que un único modelo comparte consigo mismo, pero añade costes y fragilidad a la herramienta. Ofrécelo en cada ciclo interactivo de dudas: el usuario decide si el artefacto lo justifica. La labor del agente es plantear la opción, no bloquearla.
    «El usuario dijo que sí una vez, así que puedo seguir invocando la CLI» Cada invocación es una autorización en sí misma. El artefacto, la solicitud y los parámetros cambian entre una llamada y otra: vuelve a confirmar el comando exacto con el usuario antes de cada ejecución.

    Señales de alerta

    • Crear un revisor con un contexto nuevo para un cambio de nombre o de formato de una sola línea
    • Considerar la salida del revisor como definitiva sin volver a leer el texto del artefacto
    • Repetir el proceso más de tres veces sin escalar el problema al usuario
    • Preguntar al revisor «¿está bien así?» en lugar de «busca problemas»
    • Pasar por alto las dudas bajo presión de tiempo en una decisión de gran importancia
    • Volver a generar un contexto nuevo en un artefacto sin cambios (obtendrás los mismos resultados; solo estás ganando tiempo)
    • Teatro de la duda (señal verificable): a lo largo de dos o más ciclos en los que el revisor ha planteado hallazgos sustanciales, ninguno de ellos se ha clasificado como susceptible de acción. Estás validando, no dudando. Detente y eleva el asunto.
    • Dudar solo después de realizar el commit: eso es /review, no desarrollo impulsado por la duda
    • Codificar de forma rígida una llamada a una CLI externa sin confirmar con el usuario que la herramienta existe, está configurada y acepta esa sintaxis exacta
    • Omitir en silencio la comparación entre modelos en un ciclo de duda interactivo. Aunque no se recomiende, la opción debe estar visible. Omitir está bien; omitir en silencio, no.
    • Recurrir a una solución alternativa de forma silenciosa cuando una CLI externa da error o no está disponible: mostrar el fallo y permitir que el usuario se redirija
    • Eliminar el contrato de la entrada del revisor
    • Pasar la AFIRMACIÓN al revisor (sesgo hacia el acuerdo)

    Interacción con otras habilidades

    • revisión-de-código-y-calidad / /revisión: complementarias. /revisión es un veredicto a posteriori sobre la PR; la basada en la duda se realiza sobre la marcha, decisión por decisión. Utiliza ambas.
    • desarrollo-basado-en-el-código-fuente: el SDD verifica los datos sobre los marcos de trabajo comparándolos con la documentación oficial. El enfoque «basado en la duda» verifica tu razonamiento sobre el artefacto. El SDD comprueba que la API exista; el enfoque «basado en la duda» comprueba que la hayas utilizado correctamente según el contrato.
    • desarrollo-guiado-por-pruebas: el paso RED del TDD es la duda hecha concreta: una prueba fallida es un intento de refutación. Cuando se aplica el TDD, esa prueba fallida es el paso de la duda para las afirmaciones sobre el comportamiento.
    • depuración-y-recuperación-de-errores: cuando el revisor detecta un modo de fallo real, recurre a la habilidad de depuración para localizarlo y solucionarlo.
    • Reglas de orquestación del repositorio (references/orchestration-patterns.md): esta habilidad se orquesta desde la sesión principal. Que una persona llame a otra persona es el antipatrón B; véase «Restricciones de carga» más arriba.

    Verificación

    Tras aplicar el desarrollo impulsado por la duda:

    • Cada decisión no trivial (según la definición anterior) se denominó explícitamente como una AFIRMACIÓN antes de pasar a la fase de
    • Al menos una revisión en un contexto nuevo por cada artefacto no trivial (una prueba fallida generada por el paso RED del TDD cumple este requisito para las afirmaciones de comportamiento, según la «Interacción con otras habilidades»)
    • El revisor recibió el ARTEFACTO + el CONTRATO — NO la AFIRMACIÓN, NI tu razonamiento
    • La indicación para el revisor era de carácter adversario («encuentra problemas»), no de validación («¿está bien?»).
    • Los hallazgos se clasificaron en relación con el texto del artefacto (sin aprobarlos sin más) utilizando el siguiente orden de prioridad: interpretación errónea del contrato / acción necesaria / compromiso / ruido
    • Se cumplió una condición de parada (hallazgos triviales, 3 ciclos o anulación por parte del usuario).
    • En modo interactivo, se ofreció explícitamente al usuario la opción de análisis entre modelos (independientemente de lo que estuviera en juego en el artefacto) y se reconoció la respuesta en el resultado
    • En el modo no interactivo, se omitía el análisis entre modelos y se anunciaba dicha omisión
    • Cualquier invocación externa de la CLI iba precedida de una comprobación de la ruta (PATH), una prueba de que el binario funcionaba, la confirmación de la sintaxis con el usuario y una autorización explícita para ejecutarla
    Ver en GitHub
    ---
    name: doubt-driven-development
    description: Subjects every non-trivial decision to a fresh-context adversarial review before it stands, prioritizing correctness over speed for high-stakes or unfamiliar code.
    ---
    
    # 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.
    
    In 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.
    
    **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.
    
    #### 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**
    
    After the single-model review in Step 3 above, but before RECONCILE, pause and ask:
    
    > *"Single-model review complete. Want a cross-model second opinion? Options: Gemini CLI, Codex CLI, manual external review (you paste it elsewhere), or skip."*
    
    This 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.
    
    **Step 2: If the user picks a CLI — verify, then invoke**
    
    1. Check the tool is in PATH (`which gemini`, `which codex`).
    2. 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.
    3. Confirm the exact invocation with the user, including required flags, auth, and env vars (e.g., API keys). Implementations vary; never assume.
    4. Pass ARTIFACT + CONTRACT + the adversarial prompt **only**. No session context, no CLAIM.
    5. 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.
    6. Take the output into Step 4 (RECONCILE).
    
    **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.
    
    Example shapes (verify flags against your installed tool — syntax differs across implementations and versions):
    
    ```bash
    # Write the adversarial prompt + ARTIFACT + CONTRACT to a temp file first.
    # Then pipe via stdin so shell metacharacters in the artifact stay inert.
    
    # Codex (read-only sandbox keeps the CLI from writing to your workspace):
    codex exec --sandbox read-only -C <repo-path> - < /tmp/doubt-prompt.md
    
    # Gemini ('--approval-mode plan' is read-only; '-p ""' triggers non-interactive
    # mode and the prompt is read from stdin):
    gemini --approval-mode plan -p "" < /tmp/doubt-prompt.md
    ```
    
    A 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.
    
    **Step 3: If the CLI is unavailable or fails**
    
    Surface 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.
    
    **Step 4: If the user skips**
    
    Acknowledge the skip in the output (*"Proceeding with single-model findings only"*) and continue to RECONCILE. Skipping is fine; silent skipping is not.
    
    **Non-interactive contexts** (CI, `/loop`, autonomous-loop, scheduled runs):
    
    - Cross-model is **skipped**, and the skip must be **announced** in the output: *"Cross-model skipped: non-interactive context."*
    - **Never invoke an external CLI without explicit user authorization** — this is a load-bearing safety property.
    
    Cross-model adds cost, latency, and tool fragility. The agent surfaces the choice every cycle; the user decides whether this artifact warrants it.
    
    ### Step 4: RECONCILE — Fold findings back
    
    The 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.
    
    For each finding, classify in this **precedence order** (first matching class wins):
    
    1. **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.
    2. **Valid + actionable** — real issue requiring a change to the artifact. Change it, re-loop.
    3. **Valid trade-off** — issue is real but cost of fixing exceeds cost of accepting. Document the trade-off explicitly so the user sees it.
    4. **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?
    
    A fresh reviewer can be wrong because it lacks context. Don't defer just because it's "fresh."
    
    ### Step 5: STOP — Bounded loop, not recursion
    
    Stop when:
    
    - Next iteration returns only trivial or already-considered findings, **or**
    - 3 cycles completed (escalate to user, don't grind a fourth alone), **or**
    - User explicitly says "ship it"
    
    If 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.
    
    If 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.
    
    ## Common Rationalizations
    
    | Rationalization | Reality |
    |---|---|
    | "I'm confident, skip the doubt step" | Confidence correlates poorly with correctness on novel problems. Moments of certainty are exactly when blind spots hide. |
    | "Spawning a reviewer is expensive" | Debugging a wrong commit in production is more expensive. The check is bounded; the bug isn't. |
    | "The reviewer will just nitpick" | Only if unscoped. Constrain the prompt to "issues that would make this fail under the contract." |
    | "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. |
    | "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." |
    | "Two opinions are always better than one" | Not when the second has less context and produces noise. Reconcile, don't defer. |
    | "The reviewer disagreed so I was wrong" | The reviewer lacks your context — disagreement is information, not verdict. Re-read the artifact, classify, then decide. |
    | "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. |
    | "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. |
    
    ## Red Flags
    
    - Spawning a fresh-context reviewer for a one-line rename or formatting change
    - Treating reviewer output as authoritative without re-reading the artifact text
    - Looping >3 cycles without escalating to the user
    - Prompting the reviewer with "is this good?" instead of "find issues"
    - Skipping doubt under time pressure on a high-stakes decision
    - Re-spawning fresh-context on an unchanged artifact (you'll get the same findings; you're stalling)
    - **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.
    - Doubting only after committing — that's `/review`, not doubt-driven development
    - Hardcoding an external CLI invocation without confirming with the user that the tool exists, is configured, and accepts that exact syntax
    - **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.
    - Falling back silently when an external CLI errors or is missing — surface the failure and let the user redirect
    - Stripping the contract from the reviewer's input
    - Passing the CLAIM to the reviewer (biases toward agreement)
    
    ## Interaction with Other Skills
    
    - **`code-review-and-quality` / `/review`**: complementary. `/review` is post-hoc PR verdict; doubt-driven is in-flight per-decision. Use both.
    - **`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.
    - **`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.
    - **`debugging-and-error-recovery`**: when the reviewer surfaces a real failure mode, drop into the debugging skill to localize and fix.
    - **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.
    
    ## Verification
    
    After applying doubt-driven development:
    
    - [ ] Every non-trivial decision (per the definition above) was named explicitly as a CLAIM before standing
    - [ ] 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)
    - [ ] The reviewer received ARTIFACT + CONTRACT — NOT the CLAIM, NOT your reasoning
    - [ ] The reviewer's prompt was adversarial ("find issues"), not validating ("is it good")
    - [ ] Findings were classified against the artifact text (not rubber-stamped) using the precedence: contract misread / actionable / trade-off / noise
    - [ ] A stop condition was met (trivial findings, 3 cycles, or user override)
    - [ ] In interactive mode, cross-model was **explicitly offered** to the user (regardless of artifact stakes) and the response was acknowledged in the output
    - [ ] In non-interactive mode, cross-model was skipped and the skip was announced
    - [ ] Any external CLI invocation was preceded by a PATH check, a working-binary test, syntax confirmation with the user, and explicit authorization to run
    

    Todos los archivos

    0 archivos

    Instalar doubt-driven-development

    Descarga y descomprime los archivos de habilidades en tu directorio .claude/skills/.

    Descargar ZIP

    Clona el repositorio y copia los archivos de la habilidad a tu proyecto.

    git clone https://github.com/addyosmani/agent-skills/tree/main/skills/doubt-driven-development # Copy SKILL.md to your .claude/skills/ directory

    Copiar Copiar
    Configuración rápida: Copia la carpeta de la habilidad en .claude/skills/ Claude detectará y utilizará automáticamente la habilidad

    Habilidades relacionadas

    notion-automation
    Tiempo actualizado 29 de junio de 2026
    airtable-automation
    Tiempo actualizado 29 de junio de 2026
    seo-programmatic
    Tiempo actualizado 29 de junio de 2026
    revops
    Tiempo actualizado 29 de junio de 2026
    OR