[
	{
		"key": "contract-gate",
		"title": "Contract gate (Phase 0)",
		"category": "use-case",
		"blurb": "Convertí un pedido vago en un contrato inspeccionable y decidí entre preguntar ahora o avanzar con un supuesto registrado.",
		"useWhen": "El pedido es vago o high-stakes y querés decidir ask-vs-proceed antes de rutear o construir.",
		"inputHint": "{ \"request\": \"...\", \"reviewers\": 3, \"improvePrompt\": true }",
		"primitives": ["agent(schema)", "parallel", "workflow"],
		"defaultName": "contract-gate",
		"useCases": [
			"Acotar un ticket difuso",
			"Gate antes de una corrida multiagente costosa",
			"Reescribir un pedido crudo como spec limpia"
		]
	},
	{
		"key": "guardrails",
		"title": "Guardrails (tripwire)",
		"category": "compose",
		"blurb": "Tripwire barato de input/output que se detiene ante una violación clara; puede envolver cualquier workflow vía protect:{name,args}.",
		"useWhen": "Necesitás aplicar límites duros de forma barata alrededor de una corrida, o validar un artifact.",
		"inputHint": "{ \"outputRules\": [\"no secrets in output\"], \"content\": \"...\" }",
		"primitives": ["agent(schema)", "workflow", "fail-closed"],
		"defaultName": "guardrails",
		"useCases": [
			"Gate de scope/safety antes de correr un agente",
			"Chequeo de PII/secrets sobre un output",
			"Envolver un workflow elegido con tripwires de input/output"
		]
	},
	{
		"key": "router",
		"title": "Router (dispatch)",
		"category": "compose",
		"blurb": "Clasificá un request y despachalo al mejor workflow del catálogo, o solo recomendá.",
		"useWhen": "No querés elegir el workflow a mano.",
		"inputHint": "{ \"request\": \"...\", \"runSelected\": true }",
		"primitives": ["agent(schema)", "workflow", "dispatch"],
		"defaultName": "router",
		"useCases": [
			"Una entrada única para tareas crudas",
			"Previsualizar la elección con runSelected:false",
			"Mapear una tarea al especialista correcto"
		]
	},
	{
		"key": "orchestrator-workers",
		"title": "Orchestrator + workers",
		"category": "compose",
		"blurb": "Un planner descompone un objetivo abierto en un grafo de subtareas dependsOn; los workers ejecutan por niveles y un integrator fusiona.",
		"useWhen": "El objetivo es abierto y sus subtareas/forma no se conocen de antemano.",
		"inputHint": "{ \"goal\": \"...\", \"maxSubtasks\": 6, \"concurrency\": 3 }",
		"primitives": ["agent(schema)", "parallel", "topological"],
		"defaultName": "orchestrator-workers",
		"useCases": [
			"Entregables de varias partes",
			"Objetivos de research/build con interdependencias",
			"Descomponer un objetivo abierto en un grafo de subtareas"
		]
	},
	{
		"key": "composition-driver",
		"title": "Composition driver",
		"category": "compose",
		"blurb": "Workflow padre: descubrir claims, delegar verificación a verify-claims-lib y luego sintetizar.",
		"useWhen": "Querés un padre de ejemplo + sub-workflow reusable, o exactamente ese flujo discover→verify.",
		"inputHint": "{ \"topic\": \"claims in our SSE parity doc\" }",
		"primitives": ["agent", "workflow", "sub-workflow"],
		"defaultName": "composition-driver",
		"useCases": [
			"Fact-check de un documento",
			"Separar discovery de verificación reusable",
			"La referencia canónica de composición"
		]
	},
	{
		"key": "verify-claims-lib",
		"title": "Lib: verify claims",
		"category": "compose",
		"blurb": "Sub-workflow reusable: verificá { claims, skeptics? } con jurados escépticos; devuelve verified/dropped/votes/coverage.",
		"useWhen": "Un workflow padre necesita verificación como building block.",
		"inputHint": "{ \"claims\": [{ \"id\": \"c1\", \"claim\": \"...\" }], \"skeptics\": 3 }",
		"primitives": ["parallel", "agent(schema)", "library contract"],
		"defaultName": "verify-claims-lib",
		"useCases": [
			"Invocado por composition-driver",
			"Cualquier padre que descubre y luego verifica",
			"Un building block verificador compartido"
		]
	},
	{
		"key": "workflow-factory",
		"title": "Workflow factory (meta)",
		"category": "compose",
		"blurb": "Meta-workflow: catálogo → plan → generate → review → refine y luego escribir <configDir>/workflows/drafts/<slug>.js.",
		"useWhen": "Ningún workflow existente encaja y querés scaffoldear uno específico para la tarea.",
		"inputHint": "{ \"task\": \"audit GraphQL resolvers for N+1 queries\", \"write\": true }",
		"primitives": ["agent(schema)", "prompt design", "writeFile"],
		"defaultName": "workflow-factory",
		"useCases": [
			"Bootstrapping de un patrón nuevo",
			"Especializar el scaffold existente más cercano",
			"Generar un draft para inspeccionar antes de confiar"
		]
	},
	{
		"key": "recursive-compose",
		"title": "Recursive compose (reference)",
		"category": "compose",
		"blurb": "Referencia (pi, depth ≤ 3): un nodo vuelve a gatear una subtarea vía contract-gate y luego despacha vía router — recursión acotada.",
		"useWhen": "Querés el patrón trabajado de Phase-0-from-inside más dispatch recursivo.",
		"inputHint": "{ \"task\": \"audit + fix the SSE decoder\" }",
		"primitives": ["workflow", "contract-gate", "router"],
		"defaultName": "recursive-compose",
		"useCases": [
			"Pipelines gate→compose auto-similares",
			"Llevar el budget resourcePlan del gate a una corrida más profunda",
			"Dispatch recursivo acotado"
		]
	},
	{
		"key": "fan-out-and-synthesize",
		"title": "Fan-out and synthesize",
		"category": "scaffold",
		"blurb": "Patrón scatter-gather: scoutear una work-list, un reviewer por ítem (parallel, settle), y sintetizar como juez con notas de cobertura/fallas.",
		"useWhen": "Necesitás cobertura independiente amplia de una work-list más o menos conocida.",
		"inputHint": "{ \"lens\": \"security\", \"limit\": 20 }",
		"primitives": ["agent", "parallel(settle)", "synthesis-as-judge"],
		"defaultName": "fan-out-and-synthesize",
		"useCases": [
			"Distribuir review sobre muchos archivos",
			"Síntesis multi-ángulo",
			"Correr reviewers independientes sobre una work-list acotada"
		]
	},
	{
		"key": "scout-fanout",
		"title": "Scout → adaptive fan-out",
		"category": "scaffold",
		"blurb": "Scout y pipeline de profundidad adaptativa: clasificar riesgo barato por archivo, deep-review solo high/medium; low-risk corta temprano.",
		"useWhen": "Querés cobertura, pero pagar solo por los ítems riesgosos.",
		"inputHint": "{ \"pattern\": \"config\", \"lens\": \"security\", \"maxFiles\": 40 }",
		"primitives": ["agent(schema)", "pipeline", "adaptive depth"],
		"defaultName": "scout-fanout",
		"useCases": [
			"Triaging y luego review de un árbol grande",
			"Pasadas classify-and-act",
			"Gastar budget solo donde rinde"
		]
	},
	{
		"key": "repo-bug-hunt",
		"title": "Repo bug hunt",
		"category": "use-case",
		"blurb": "Scoutea archivos de código, corre bug reviewers por archivo y un juez deduplica + prioriza con citas. Los findings son leads, no bugs confirmados.",
		"useWhen": "Querés una lista priorizada y citada de bugs sospechados en un repo.",
		"inputHint": "{ \"maxFiles\": 30, \"lens\": \"security\" }",
		"primitives": ["agent", "parallel(settle)", "synthesis-as-judge"],
		"defaultName": "repo-bug-hunt",
		"useCases": [
			"Auditoría de repo",
			"Sweep pre-review (después confirmar con bug-verify)",
			"Findings citados y priorizados"
		]
	},
	{
		"key": "loop-until-dry",
		"title": "Loop until dry",
		"category": "scaffold",
		"blurb": "Seguí abriendo fan-out de finders hasta K rondas silenciosas consecutivas o maxRounds.",
		"useWhen": "El conjunto que descubrís tiene tamaño desconocido y querés exhaustividad.",
		"inputHint": "{ \"target\": \"all places we parse SSE chunks\", \"quietRounds\": 2, \"maxRounds\": 8 }",
		"primitives": ["parallel(settle)", "loop", "log"],
		"defaultName": "loop-until-dry",
		"useCases": ["Enumerar todos los call-sites/edge-cases", "Encontrar todo lo que…", "Frenar en rondas silenciosas"]
	},
	{
		"key": "react-scout",
		"title": "ReAct scout (grounded)",
		"category": "scaffold",
		"blurb": "Loop ReAct reason → act → observe: cada paso ancla un thought en una observación real de solo lectura antes del siguiente.",
		"useWhen": "Necesitás un scout anclado en evidencia antes de comprometerte o abrir fan-out.",
		"inputHint": "{ \"question\": \"Where does the WASM decoder get fed bytes?\" }",
		"primitives": ["agent", "tools", "grounded loop"],
		"defaultName": "react-scout",
		"useCases": [
			"Investigación anclada",
			"Producir una traza para pasar a un fan-out",
			"Anclar cada paso en observaciones"
		]
	},
	{
		"key": "complex-research",
		"title": "Complex research",
		"category": "use-case",
		"blurb": "Ángulos de research independientes (cada uno corre web search), sintetizados como juez con citas y gaps de cobertura.",
		"useWhen": "Necesitás una respuesta citada a una pregunta externa.",
		"inputHint": "{ \"question\": \"WASM vs NAPI FFI for Node in 2026?\" }",
		"primitives": ["parallel(settle)", "agent(web_search)", "synthesis-as-judge"],
		"defaultName": "complex-research",
		"useCases": [
			"Comparaciones de tecnología",
			"Scans de literatura/landscape",
			"Respuestas respaldadas por fuentes (combinar con un paso verify)"
		]
	},
	{
		"key": "adversarial-verify",
		"title": "Adversarial verify (jury)",
		"category": "scaffold",
		"blurb": "Jurado escéptico por finding que poda por refutación mayoritaria; default-to-doubt.",
		"useWhen": "Tenés findings/claims y querés solo los que sobreviven refutación.",
		"inputHint": "{ \"topic\": \"security claims about our token flow\", \"skeptics\": 5 }",
		"primitives": ["parallel", "agent(schema)", "voting"],
		"defaultName": "adversarial-verify",
		"useCases": [
			"Podar una lista ruidosa de findings",
			"Sanity-check de claims antes de actuar",
			"Descartar findings alucinados"
		]
	},
	{
		"key": "bug-verify",
		"title": "Bug verify (reproduce)",
		"category": "use-case",
		"blurb": "Confirmá bugs sospechados por REPRODUCTION: es real solo si una corrida falla sobre el código actual; check opcional FAIL→PASS + minimización.",
		"useWhen": "Necesitás probar el bug, no argumentarlo. Corre secuencialmente sobre el working tree.",
		"inputHint": "{ \"topic\": \"SSE decoder drops final chunk\", \"verifyCmd\": \"npm test\" }",
		"primitives": ["agent", "bash", "sequential repro"],
		"defaultName": "bug-verify",
		"useCases": [
			"Confirmar leads de repo-bug-hunt",
			"Loop reproduce-and-fix",
			"Probar un bug con una corrida fallida"
		]
	},
	{
		"key": "adversarial-plan-review",
		"title": "Adversarial plan review",
		"category": "use-case",
		"blurb": "N reviewers de ángulo fijo (correctness, security, maintainability, scope) sintetizan un plan revisado.",
		"useWhen": "Querés stress-testear un plan antes de construir.",
		"inputHint": "{ \"plan\": \"the implementation plan\" }",
		"primitives": ["parallel(settle)", "reviewer panel", "synthesis-as-judge"],
		"defaultName": "adversarial-plan-review",
		"useCases": ["Review de diseño/RFC", "Gate pre-implementación", "Encontrar razones para no shippear un plan"]
	},
	{
		"key": "judge-escalate",
		"title": "Judge + escalate",
		"category": "scaffold",
		"blurb": "Generá candidatos desde ángulos distintos, juez tipado, escalá solo cuando la confidence sea baja.",
		"useWhen": "Best-of-N donde preferís profundizar antes que comprometerte con un ganador débil.",
		"inputHint": "{ \"question\": \"Best rollback strategy for the gate?\" }",
		"primitives": ["parallel", "agent(schema)", "adaptive loop"],
		"defaultName": "judge-escalate",
		"useCases": [
			"Decisiones con un ganador claro la mayor parte del tiempo",
			"Gasto adaptativo",
			"Opciones Best-of-N"
		]
	},
	{
		"key": "tournament",
		"title": "Tournament (bracket)",
		"category": "scaffold",
		"blurb": "Bracket de eliminación simple: rondas de juez pairwise hasta que sobrevive un candidato.",
		"useWhen": "El scoring absoluto no es confiable, pero la comparación pairwise es fácil.",
		"inputHint": "{ \"candidates\": [\"a\", \"b\", \"c\", \"d\"] }",
		"primitives": ["agent(schema)", "bracket", "pairwise"],
		"defaultName": "tournament",
		"useCases": ["Elegir el mejor entre varios drafts/diseños", "Ranking comparativo", "Selección head-to-head"]
	},
	{
		"key": "self-consistency",
		"title": "Self-consistency (vote)",
		"category": "scaffold",
		"blurb": "Muestreá N caminos de razonamiento independientes, elegí por consenso (vote), desempate por juez que pondera evidencia.",
		"useWhen": "Una sola cadena puede equivocarse y el acuerdo es la señal en la que confiás.",
		"inputHint": "{ \"question\": \"Does this code path leak the handle?\", \"samples\": 7 }",
		"primitives": ["parallel", "voting", "agent(schema)"],
		"defaultName": "self-consistency",
		"useCases": [
			"Razonamiento/matemática/juicio de alta varianza",
			"Reportar el margen de consenso",
			"Acordar una respuesta entre caminos"
		]
	},
	{
		"key": "tree-of-thoughts",
		"title": "Tree of thoughts",
		"category": "scaffold",
		"blurb": "Búsqueda beam sobre soluciones parciales: expandir K thoughts, judge-score, podar a top-B, recursar hasta depth y comprometerse.",
		"useWhen": "El problema tiene pasos intermedios que vale la pena explorar, no solo candidatos finales.",
		"inputHint": "{ \"problem\": \"Design the gate rollout in 4 staged steps.\", \"branching\": 3, \"beam\": 2 }",
		"primitives": ["parallel", "agent(schema)", "beam search"],
		"defaultName": "tree-of-thoughts",
		"useCases": [
			"Búsqueda de planificación/diseño multi-step",
			"Explorar un espacio de solución",
			"Expandir → puntuar → podar → comprometerse"
		]
	},
	{
		"key": "self-refine",
		"title": "Self-refine",
		"category": "scaffold",
		"blurb": "Generate → critique → refine in-place, acotado, con memoria verbal; quiet-stop cuando el crítico está satisfecho.",
		"useWhen": "Querés pulir un artifact y la crítica puede ser intrínseca.",
		"inputHint": "{ \"task\": \"Write the migration guide section.\", \"useJury\": true }",
		"primitives": ["agent", "loop", "workflow"],
		"defaultName": "self-refine",
		"useCases": ["Pulido de doc/spec/code", "Iterar hacia calidad sobre un artifact", "Crítico jury opcional"]
	},
	{
		"key": "reflexion",
		"title": "Reflexion (trial loop)",
		"category": "scaffold",
		"blurb": "Loop externo de RL verbal por trials: reintentar cada trial llevando self-reflections; el evaluador puede anclarse externamente (verifyCmd).",
		"useWhen": "Un reintento fresco supera editar in-place, y tenés un oráculo objetivo.",
		"inputHint": "{ \"task\": \"Make the failing decoder test pass.\", \"verifyCmd\": \"npm test -- decoder\" }",
		"primitives": ["agent", "bash", "trial loop"],
		"defaultName": "reflexion",
		"useCases": ["Código con tests", "Tareas con señal pass/fail", "Reset-and-re-attempt vs edit-in-place"]
	},
	{
		"key": "large-migration",
		"title": "Large migration (applier)",
		"category": "use-case",
		"blurb": "Un applier real: gate de green-baseline, apply → verify → bounded-repair por archivo, rollback en falla. Secuencial.",
		"useWhen": "Estás mutando muchos archivos y no podés dejar ninguno roto.",
		"inputHint": "{ \"instruction\": \"Replace X(...) with Y(...)\", \"verifyCmd\": \"npm test\", \"dryRun\": true }",
		"primitives": ["agent", "bash", "apply/verify/rollback"],
		"defaultName": "large-migration",
		"useCases": ["Rollouts de API/codemod", "Upgrades de framework", "Migración acotada y respaldada por evidencia"]
	},
	{
		"key": "map-reduce",
		"title": "Map-reduce (hierarchical)",
		"category": "scaffold",
		"blurb": "Map-reduce jerárquico: map por chunk bajo contrato de evidencia, reduce en batches acotados hasta un summary-of-summaries.",
		"useWhen": "El input es más grande que una ventana de contexto.",
		"inputHint": "{ \"instruction\": \"Extract every breaking API change\", \"content\": \"...\" }",
		"primitives": ["parallel", "agent", "recursive reduce"],
		"defaultName": "map-reduce",
		"useCases": ["Resumir un doc/log enorme", "Consolidar cientos de tickets", "Extraer sobre un corpus grande"]
	}
]
