@saulwade/swl-ses 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/CLAUDE.md +47 -6
  2. package/README.md +1 -1
  3. package/agentes/accesibilidad-wcag-swl.md +690 -690
  4. package/agentes/arquitecto-swl.md +267 -267
  5. package/agentes/auto-evolucion-swl.md +908 -908
  6. package/agentes/backend-api-swl.md +472 -472
  7. package/agentes/backend-csharp-swl.md +420 -420
  8. package/agentes/backend-go-swl.md +390 -390
  9. package/agentes/backend-java-swl.md +281 -281
  10. package/agentes/backend-node-swl.md +479 -479
  11. package/agentes/backend-python-swl.md +605 -605
  12. package/agentes/backend-rust-swl.md +364 -364
  13. package/agentes/backend-workers-swl.md +482 -482
  14. package/agentes/cloud-infra-swl.md +509 -509
  15. package/agentes/consolidador-swl.md +541 -541
  16. package/agentes/datos-swl.md +605 -605
  17. package/agentes/depurador-swl.md +352 -352
  18. package/agentes/devops-ci-swl.md +400 -400
  19. package/agentes/disenador-ui-swl.md +569 -569
  20. package/agentes/documentador-swl.md +345 -345
  21. package/agentes/frontend-angular-swl.md +621 -621
  22. package/agentes/frontend-css-swl.md +716 -716
  23. package/agentes/frontend-react-swl.md +692 -692
  24. package/agentes/frontend-swl.md +496 -496
  25. package/agentes/frontend-tailwind-swl.md +826 -826
  26. package/agentes/gh-fix-ci-swl.md +2 -2
  27. package/agentes/implementador-swl.md +328 -328
  28. package/agentes/investigador-swl.md +432 -432
  29. package/agentes/investigador-ux-swl.md +505 -505
  30. package/agentes/llm-apps-swl.md +278 -278
  31. package/agentes/migrador-swl.md +442 -442
  32. package/agentes/mobile-android-swl.md +511 -511
  33. package/agentes/mobile-cross-swl.md +541 -541
  34. package/agentes/mobile-ios-swl.md +502 -502
  35. package/agentes/mobile-testing-swl.md +302 -302
  36. package/agentes/nemesis-auditor-swl.md +285 -285
  37. package/agentes/notificador-swl.md +918 -918
  38. package/agentes/observabilidad-swl.md +438 -438
  39. package/agentes/orquestador-swl.md +1026 -1026
  40. package/agentes/pagos-swl.md +310 -310
  41. package/agentes/perfilador-usuario-swl.md +321 -321
  42. package/agentes/planificador-swl.md +399 -399
  43. package/agentes/producto-prd-swl.md +589 -589
  44. package/agentes/red-team-swl.md +1 -1
  45. package/agentes/release-manager-swl.md +590 -590
  46. package/agentes/rendimiento-swl.md +713 -713
  47. package/agentes/resolutor-build-swl.md +245 -245
  48. package/agentes/revisor-angular-swl.md +278 -278
  49. package/agentes/revisor-codigo-swl.md +505 -505
  50. package/agentes/revisor-csharp-swl.md +264 -264
  51. package/agentes/revisor-go-swl.md +259 -259
  52. package/agentes/revisor-java-swl.md +257 -257
  53. package/agentes/revisor-kotlin-swl.md +273 -273
  54. package/agentes/revisor-nextjs-swl.md +281 -281
  55. package/agentes/revisor-php-swl.md +271 -271
  56. package/agentes/revisor-react-swl.md +278 -278
  57. package/agentes/revisor-rust-swl.md +346 -346
  58. package/agentes/revisor-seguridad-swl.md +399 -399
  59. package/agentes/revisor-swift-swl.md +268 -268
  60. package/agentes/revisor-typescript-swl.md +346 -346
  61. package/agentes/sre-swl.md +291 -291
  62. package/agentes/tdd-qa-swl.md +393 -393
  63. package/comandos/swl/briefing.md +119 -119
  64. package/comandos/swl/contribuir.md +233 -233
  65. package/comandos/swl/predecir.md +139 -139
  66. package/comandos/swl/sesiones.md +1 -1
  67. package/gateway/agent-executor.js +1 -1
  68. package/gateway/lib/event-channel.js +191 -191
  69. package/habilidades/agent-deep-links/SKILL.md +148 -148
  70. package/habilidades/agentes-como-servicio/SKILL.md +2 -2
  71. package/habilidades/angular-moderno/SKILL.md +20 -1
  72. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
  73. package/habilidades/backend-async-postgres-testing/SKILL.md +215 -215
  74. package/habilidades/backend-error-design/SKILL.md +221 -221
  75. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  76. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  77. package/habilidades/calidad-anti-patrones-universales/SKILL.md +368 -368
  78. package/habilidades/calidad-contract-testing/SKILL.md +165 -165
  79. package/habilidades/calidad-mutation-testing/SKILL.md +170 -170
  80. package/habilidades/changelog-generator/scripts/parse-commits.js +367 -367
  81. package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
  82. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  83. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  84. package/habilidades/drift-detection/SKILL.md +179 -179
  85. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  86. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +1 -1
  87. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
  88. package/habilidades/eval-framework/SKILL.md +212 -212
  89. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  90. package/habilidades/harness-claude-code/recursos/disciplina-harness-regla.md +252 -252
  91. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  92. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  93. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  94. package/habilidades/perfil-usuario/SKILL.md +200 -200
  95. package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
  96. package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -255
  97. package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
  98. package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -105
  99. package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
  100. package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -138
  101. package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
  102. package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
  103. package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
  104. package/habilidades/proceso-modular-split/SKILL.md +256 -256
  105. package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +2 -2
  106. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  107. package/habilidades/structured-outputs/SKILL.md +2 -2
  108. package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
  109. package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
  110. package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
  111. package/habilidades/swl-dashboard/SKILL.md +2 -2
  112. package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
  113. package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +1 -1
  114. package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +1 -1
  115. package/hooks/ciclo-evolucion-subagente.js +26 -26
  116. package/hooks/ciclo-evolucion.js +26 -26
  117. package/hooks/claudemd-bloat-detector.js +161 -161
  118. package/hooks/claudemd-duplicacion-detector.js +170 -170
  119. package/hooks/contexto-iteracion.js +144 -144
  120. package/hooks/guardrail-modelo.js +1 -1
  121. package/hooks/lib/agent-routing.js +107 -107
  122. package/hooks/lib/auto-consolidator.js +335 -335
  123. package/hooks/lib/autonomia.js +208 -208
  124. package/hooks/lib/ciclo-evolucion.js +47 -47
  125. package/hooks/lib/deep-links.js +185 -185
  126. package/hooks/lib/error-classifier.js +308 -308
  127. package/hooks/lib/etapa-auto-evolucion.js +701 -701
  128. package/hooks/lib/etapa-metricas.js +388 -388
  129. package/hooks/lib/etapa-perfil-usuario.js +376 -376
  130. package/hooks/lib/loop-telemetry.js +321 -321
  131. package/hooks/lib/merkle-audit.js +96 -96
  132. package/hooks/lib/model-router.js +2 -2
  133. package/hooks/lib/propose-step.js +358 -358
  134. package/hooks/lib/provenance-tracker.js +191 -191
  135. package/hooks/lib/rate-limit-tracker.js +253 -253
  136. package/hooks/lib/resource-quota.js +122 -122
  137. package/hooks/lib/retry-jitter.js +165 -165
  138. package/hooks/lib/security-net.js +201 -201
  139. package/hooks/lib/skill-auditor.js +588 -588
  140. package/hooks/lib/sync-status.js +228 -228
  141. package/hooks/lib/taint-tracker.js +107 -107
  142. package/hooks/lib/text-similarity.js +241 -241
  143. package/hooks/lib/token-estimator.js +1 -0
  144. package/hooks/lib/toon-compressor.js +245 -245
  145. package/hooks/lib/usage-model.js +1 -1
  146. package/hooks/linea-estado.js +2 -0
  147. package/hooks/registro-turnos.js +209 -209
  148. package/hooks/session-briefing.js +98 -98
  149. package/hooks/spec-gate.js +211 -211
  150. package/hooks/sugerir-regenerar-inventario.js +170 -170
  151. package/hooks/tdd-gate.js +241 -241
  152. package/hooks/telemetria-skill-routing.js +100 -100
  153. package/hooks/validar-formato-post-subagente.js +140 -140
  154. package/hooks/validar-intent-spec.js +242 -242
  155. package/hooks/validar-memoria-hook.js +218 -218
  156. package/hooks/validar-planning-paths.js +134 -134
  157. package/instintos/autonomia.yaml +27 -27
  158. package/instintos/prompt-appendices.yaml +57 -57
  159. package/llms.txt +29 -29
  160. package/manifiestos/agent-output-schemas.json +57 -57
  161. package/manifiestos/canonical-hashes.json +2291 -1964
  162. package/manifiestos/planning-paths.json +44 -44
  163. package/manifiestos/skills-lock.json +1282 -1282
  164. package/package.json +1 -1
  165. package/plantillas/auditor-veto-template.md +105 -105
  166. package/plantillas/github-workflows/README.md +47 -47
  167. package/plantillas/github-workflows/release-please.yml +44 -44
  168. package/plantillas/github-workflows/swl-ci.yml +107 -107
  169. package/plantillas/github-workflows/swl-security.yml +51 -51
  170. package/plugin.json +1 -1
  171. package/reglas/accesibilidad.md +10 -10
  172. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  173. package/reglas/api-diseno.md +9 -9
  174. package/reglas/arreglar-al-detectar.md +240 -240
  175. package/reglas/auditorias-documentales-estructurales.md +7 -7
  176. package/reglas/cloud-infra.md +8 -8
  177. package/reglas/consultar-vault-primero.md +195 -195
  178. package/reglas/debatir-antes-de-aceptar.md +158 -158
  179. package/reglas/fragmentos-compartidos.md +183 -183
  180. package/reglas/hooks.md +6 -6
  181. package/reglas/intent-engineering.md +218 -218
  182. package/reglas/markitdown.md +8 -8
  183. package/reglas/monitor-ci.md +309 -309
  184. package/reglas/patrones.md +6 -6
  185. package/reglas/sesiones-paralelas.md +180 -180
  186. package/reglas/sin-duplicacion-reglas-globales.md +182 -182
  187. package/reglas/skills-estandar.md +6 -6
  188. package/reglas/testing.md +7 -7
  189. package/reglas/tests-cleanup.md +224 -224
  190. package/reglas/usar-code-review-graph.md +155 -155
  191. package/reglas/usar-context7.md +226 -226
  192. package/reglas/verificar-citas-normativas.md +548 -548
  193. package/schemas/agent-frontmatter.schema.json +3 -3
  194. package/schemas/agent-message.schema.json +73 -73
  195. package/schemas/agent-output-implementacion.schema.json +114 -114
  196. package/schemas/agent-output-planificacion.schema.json +150 -150
  197. package/schemas/agent-output-review.schema.json +98 -98
  198. package/schemas/diary-entry.schema.json +112 -112
  199. package/schemas/hook-profiles.schema.json +54 -54
  200. package/schemas/hooks-config.schema.json +89 -89
  201. package/schemas/modulos.schema.json +38 -38
  202. package/schemas/perfiles.schema.json +36 -36
  203. package/schemas/plugin.schema.json +77 -77
  204. package/schemas/skill-evals.schema.json +119 -119
  205. package/schemas/skill-frontmatter.schema.json +245 -245
  206. package/scripts/audit-tools/audit-history.js +330 -330
  207. package/scripts/audit-tools/bundle-tracker.js +290 -290
  208. package/scripts/audit-tools/canary-monitor.js +352 -352
  209. package/scripts/audit-tools/code-profiler.js +605 -605
  210. package/scripts/audit-tools/dep-doctor.js +320 -320
  211. package/scripts/audit-tools/env-validator.js +206 -206
  212. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  213. package/scripts/audit-tools/lib/output.js +23 -23
  214. package/scripts/audit-tools/migration-checker.js +392 -392
  215. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  216. package/scripts/benchmark-memoria.js +167 -167
  217. package/scripts/cli/aprobar-plan.js +73 -73
  218. package/scripts/cli/briefing.js +23 -23
  219. package/scripts/cli/ciclo-evolucion.js +26 -26
  220. package/scripts/cli/configurar-ci.js +40 -40
  221. package/scripts/cli/derivar-feature-list.js +25 -25
  222. package/scripts/cli/detectar-host.js +27 -27
  223. package/scripts/cli/diary-entry.js +69 -69
  224. package/scripts/cli/execution-state.js +18 -18
  225. package/scripts/cli/gateway-notify.js +41 -41
  226. package/scripts/cli/liberar-fase.js +42 -42
  227. package/scripts/cli/loop-telemetry.js +125 -125
  228. package/scripts/cli/mark-evolved.js +56 -56
  229. package/scripts/cli/metricas-dora.js +26 -26
  230. package/scripts/cli/near-duplicate.js +55 -55
  231. package/scripts/cli/notificaciones.js +123 -123
  232. package/scripts/cli/propose-step.js +29 -29
  233. package/scripts/cli/schedule-parse.js +19 -19
  234. package/scripts/cli/sugerir-modelo.js +20 -20
  235. package/scripts/cli/verificar-plan.js +36 -36
  236. package/scripts/cli/verificar-trazabilidad.js +35 -35
  237. package/scripts/configurar-branch-protection.js +418 -418
  238. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  239. package/scripts/field-report.js +199 -199
  240. package/scripts/generar-checklists-consolidados.js +273 -273
  241. package/scripts/generar-matriz-lenguajes.js +271 -271
  242. package/scripts/lib/artefactos-python.js +43 -43
  243. package/scripts/lib/auditar-invocaciones-comandos.js +104 -104
  244. package/scripts/lib/benchmark-metrics.js +160 -160
  245. package/scripts/lib/budget-enforcer.js +252 -252
  246. package/scripts/lib/ci-reader.js +193 -193
  247. package/scripts/lib/claude-sessions.js +1 -0
  248. package/scripts/lib/configurar-ci.js +380 -380
  249. package/scripts/lib/contadores-inventario.js +217 -217
  250. package/scripts/lib/detectar-host-swl.js +175 -175
  251. package/scripts/lib/detectar-stack-detallado.js +307 -307
  252. package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
  253. package/scripts/lib/detector-reglas-duplicadas.js +220 -220
  254. package/scripts/lib/diary-entry.js +234 -234
  255. package/scripts/lib/eval-metrics-store.js +218 -218
  256. package/scripts/lib/eval-quality.js +171 -171
  257. package/scripts/lib/eval-schemas.js +144 -144
  258. package/scripts/lib/eval-self-correct.js +106 -106
  259. package/scripts/lib/eval-validator.js +185 -185
  260. package/scripts/lib/evidencia-release.js +322 -322
  261. package/scripts/lib/expandir-targets.js +71 -71
  262. package/scripts/lib/gate-hooks-requires.js +249 -249
  263. package/scripts/lib/gate-licencias.js +212 -212
  264. package/scripts/lib/git-metricas.js +257 -257
  265. package/scripts/lib/jaccard-similarity.js +98 -98
  266. package/scripts/lib/longmemeval-runner.js +125 -125
  267. package/scripts/lib/metricas-dora.js +204 -204
  268. package/scripts/lib/npm-version.js +261 -261
  269. package/scripts/lib/paquetes-conocidos.js +50 -50
  270. package/scripts/lib/plan-lock.js +275 -275
  271. package/scripts/lib/pr-analyzer.js +399 -399
  272. package/scripts/lib/prompt-builder.js +264 -264
  273. package/scripts/lib/reglas-globales-conocidas.json +180 -180
  274. package/scripts/lib/resolver-plan-fase.js +37 -37
  275. package/scripts/lib/rrf-fusion.js +175 -175
  276. package/scripts/lib/schema-version.js +164 -164
  277. package/scripts/lib/scoring-instintos.js +277 -277
  278. package/scripts/lib/semantic-search.js +252 -252
  279. package/scripts/lib/toml-merge.js +204 -204
  280. package/scripts/lib/tool-cost-analyzer.js +1 -0
  281. package/scripts/limpiar-artefactos-python.js +131 -131
  282. package/scripts/mcp-server/auth.js +105 -105
  283. package/scripts/mcp-server/cache.js +106 -106
  284. package/scripts/migrar-csv-a-array.js +168 -168
  285. package/scripts/migrar-fase-dominio.js +200 -200
  286. package/scripts/publicar.js +497 -497
  287. package/scripts/run-eval.js +141 -141
  288. package/scripts/tui/componentes/selector-multi.js +189 -189
  289. package/scripts/tui/componentes/selector-unico.js +158 -158
  290. package/scripts/tui/ejecutores.js +375 -375
  291. package/scripts/tui/index.js +162 -162
  292. package/scripts/tui/lib/colores.js +129 -129
  293. package/scripts/tui/lib/render.js +264 -264
  294. package/scripts/tui/lib/teclas.js +113 -113
  295. package/scripts/tui/pantallas/inspect.js +173 -173
  296. package/scripts/tui/pantallas/install-wizard.js +334 -334
  297. package/scripts/tui/pantallas/menu-principal.js +52 -52
  298. package/scripts/tui/pantallas/progreso.js +274 -274
  299. package/scripts/tui/pantallas/resumen.js +132 -132
  300. package/scripts/tui/pantallas/uninstall-wizard.js +208 -208
  301. package/scripts/tui/pantallas/update-wizard.js +232 -232
  302. package/scripts/tui/pantallas/welcome.js +187 -187
  303. package/scripts/validar-userland-vacio.js +110 -110
@@ -1,138 +1,138 @@
1
- ---
2
- name: proceso-dynamic-workflows
3
- description: >
4
- Patrones canónicos de dynamic workflows en Claude Code (Workflow tool / ultracode):
5
- classify-and-act, fan-out-and-synthesize, adversarial-verification, generate-and-filter,
6
- tournament. Cubre los 3 modos de falla que justifican orquestar (agentic laziness,
7
- self-preferential bias, goal drift), cuándo NO usar workflows, token budgets, revisión
8
- cross-modelo, y el anti-patrón de envolver skills auto-iterantes en /loop|/cron. Cargar
9
- cuando se diseñe una orquestación multi-agente, se decida si una tarea amerita workflow,
10
- o se quiera empaquetar un workflow como plantilla reutilizable en un skill.
11
- when_to_use: >
12
- Usar cuando el usuario diga "ultracode", "workflow", "orquesta esto", "fan-out", "panel
13
- de revisores", "tournament", o cuando una tarea sea larga, masivamente paralela o
14
- adversarial y un solo context window sufra laziness/goal-drift.
15
- herramientasPermitidas: [Read, Grep, Glob]
16
- exclusiones:
17
- - "No cargar para tareas de codificación normales de un solo paso — la mayoría NO necesitan un workflow; el harness por defecto basta y un workflow gasta muchos más tokens."
18
- - "No cargar para el detalle de evaluator-optimizer del nemesis — eso vive en nemesis-evaluacion-json y el comando /swl:nemesis."
19
- - "No cargar para escribir el .js de un workflow concreto — este skill da los patrones; el script se escribe con el Workflow tool directamente."
20
- ---
21
-
22
- # Dynamic workflows: patrones, modos de falla y cuándo orquestar
23
-
24
- Síntesis del blog oficial de Anthropic *"A harness for every task: dynamic workflows
25
- in Claude Code"* + patrones validados en swl-ses (nemesis evaluator-optimizer,
26
- `/swl:verificar --until-converge`, `/swl:autoresearch`). Un dynamic workflow deja que
27
- Claude escriba su propio harness (JS que coordina subagentes con ventanas aisladas).
28
-
29
- ## Cuándo cargar
30
-
31
- - Se va a diseñar una orquestación multi-agente o decidir si una tarea amerita workflow.
32
- - La tarea es larga, masivamente paralela, o adversarial (review, research, migración, triage).
33
- - Se quiere empaquetar un workflow como plantilla reutilizable en un skill.
34
-
35
- ## Cuándo NO cargar
36
-
37
- - Tarea de codificación normal de 1-2 archivos — el harness por defecto basta. Un workflow
38
- gasta significativamente más tokens; la mayoría de tareas de coding NO necesitan un panel
39
- de 5 revisores.
40
- - Ya estás dentro del detalle del nemesis (`nemesis-evaluacion-json`).
41
- - Solo necesitas escribir el `.js` — usa el Workflow tool directo con los patrones de abajo.
42
-
43
- ## Los 3 modos de falla que JUSTIFICAN orquestar
44
-
45
- Un solo context window largo degrada de tres formas — nombrarlas guía cuándo separar Claudes:
46
-
47
- 1. **Agentic laziness** — Claude se detiene antes de terminar una tarea multi-parte y la
48
- declara hecha con progreso parcial (ej. 20 de 50 ítems de un security review). Mitiga:
49
- fan-out (un subagente por ítem, ventana limpia) + `/goal` (requisito de completitud duro).
50
- 2. **Self-preferential bias** — Claude prefiere sus propios resultados al verificarlos contra
51
- un rubric. Mitiga: **adversarial-verification** con subagente separado, y mejor aún
52
- **revisión cross-modelo** (el reviewer es OTRO modelo). Es el mismo principio que
53
- `gobernanza.md § Separación revisor/ejecutor`.
54
- 3. **Goal drift** — pérdida gradual de fidelidad al objetivo tras muchos turnos y compaction
55
- (cada resumen es lossy; se pierde "no hagas X"). Mitiga: subagentes con goal aislado y
56
- constraints explícitas por invocación; `/goal` como ancla.
57
-
58
- ## Los 5 patrones canónicos
59
-
60
- | Patrón | Cuándo | Forma |
61
- |--------|--------|-------|
62
- | **Classify-and-act** | Rutear según tipo de tarea/ítem | Clasificador → ramas distintas (al inicio o al final para decidir output) |
63
- | **Fan-out-and-synthesize** | Muchos sub-pasos; cada uno se beneficia de ventana limpia sin cross-contaminación | N agentes en paralelo → barrier → synthesize merge. **Default** para descomponer |
64
- | **Adversarial-verification** | Evitar self-preferential bias | Por cada agente, un agente separado verifica su output contra rubric. Diversificar lentes |
65
- | **Generate-and-filter** | Espacio de ideas amplio (taste-based) | Generar N → filtrar por rubric/verificación → dedupe → solo las mejores probadas |
66
- | **Tournament** | Solución taste-based con criterio | N agentes compiten con enfoques distintos → juez pairwise hasta ganador |
67
-
68
- `pipeline()` (sin barrier entre stages) es el default; usa barrier (`parallel()` entre
69
- stages) SOLO cuando el stage N necesita TODOS los resultados del N-1 (dedup global,
70
- early-exit por conteo cero, comparación cruzada).
71
-
72
- ## Revisión cross-modelo (combate self-preferential bias estructuralmente)
73
-
74
- El reviewer adversarial en el MISMO modelo aún arrastra sesgo. La mejora: **executor en un
75
- modelo, reviewer en otro** (Claude ejecuta → Gemini/Codex/otro revisa). Patrón de ARIS
76
- (`mcp-servers/gemini-review`): MCP que expone `review`/`review_reply`, devuelve JSON con
77
- `threadId` + `response` → rastro auditable de un veredicto independiente.
78
-
79
- En swl-ses esto es **opt-in** vía `/swl:nemesis --cross-model` (ver el comando): si hay un
80
- MCP reviewer configurado, la verificación se rutea a un modelo externo; si no, degrada al
81
- reviewer same-model sin fallar (regla `arreglar-al-detectar.md` / no-fallback-silencioso →
82
- se anuncia la degradación). Mejoras del reviewer (de ARIS `auto-review-loop`):
83
- - **Reviewer memory**: el reviewer arrastra sus sospechas entre rondas (un solo `threadId`),
84
- no parte de cero cada iteración.
85
- - **Debate protocol**: el executor puede rebatir; el reviewer falla el veredicto final —
86
- *"it can drive, never acquit"* (el loop conduce, el jurado decide).
87
- - **POSITIVE_THRESHOLD compuesto**: `score ≥ N` **AND** `verdict ∈ {ready, almost}` — un
88
- score alto con verdict "not ready" NO detiene el loop.
89
-
90
- ## Anti-patrón: no envolver un skill auto-iterante en /loop · /cron · /schedule
91
-
92
- Si un skill YA itera internamente (review→fix→re-review con memoria de reviewer en un
93
- `threadId`), envolverlo en `/loop`, `/schedule` o `CronCreate` lo re-entra desde cero cada
94
- tick → `threadId` nuevo, memoria del reviewer reseteada → dispara el veredicto por
95
- wall-clock en vez de por cambio de artefacto: cero señal nueva, costo de tokens completo.
96
- Aplica a `/swl:autoresearch`, `/swl:verificar --until-converge`, nemesis `--remediar`. Si
97
- hay que agendar algo, agenda **la espera externa que lo precede** (ej. experimentos listos →
98
- entonces corre el loop UNA vez), no el loop mismo.
99
-
100
- ## Token budgets, /goal y model routing
101
-
102
- - **Token budget en workflows**: el global `budget` (o "use 10k tokens" en el prompt) pone
103
- cap duro. Alinea con `scripts/lib/budget-enforcer.js` de swl-ses.
104
- - **/goal + /loop**: para workflows repetibles (triage, research, verificación), `/goal` da
105
- requisito de completitud y `/loop` la cadencia. NO sobre skills auto-iterantes (arriba).
106
- - **Dynamic model routing**: un agente clasificador investiga la complejidad real del scope
107
- y rutea a Sonnet vs Opus por tarea (más fino que el Model-Tier estático del frontmatter).
108
-
109
- ## Workflows como plantillas en skills
110
-
111
- Un `.js` de workflow puede vivir en `recursos/` de un skill y referenciarse en su SKILL.md
112
- como **plantilla** (no script verbatim) — Claude lo adapta al caso. Plantillas incluidas:
113
-
114
- - `recursos/template-adversarial-verify.js` — fan-out de hallazgos + verificación adversarial
115
- por hallazgo (filtra los reales).
116
- - `recursos/template-triage.js` — clasifica ítems de un backlog, dedupe contra lo ya
117
- trackeado, y rutea (fix automático vs escalar a humano) con patrón quarantine.
118
-
119
- ## Quarantine (triage de contenido no confiable)
120
-
121
- En triage que lee contenido público/no confiable, los agentes lectores quedan **barred** de
122
- acciones de alto privilegio; esas las ejecutan agentes distintos que actúan sobre la info ya
123
- saneada. Coherente con `seguridad-agentes.md § Prompt injection` y el quarantine de SWL.
124
-
125
- ## Gotchas
126
-
127
- - **Workflows gastan más tokens** — úsalos cuando la tarea de verdad necesita más cómputo
128
- (adversarial, masivamente paralela), no por reflejo.
129
- - **Subagentes heredan el contexto del padre** (CLAUDE.md + reglas globales). En proyectos
130
- rule-heavy pueden saturar al arrancar (autocompact thrashing). Pasa scope acotado y evita
131
- hacer que el subagente explore el codebase completo (ver `harness-claude-code`).
132
- - **Barrier injustificado** mata wall-clock: si no hay dependencia cross-ítem entre stages,
133
- usa `pipeline()`, no `parallel()` entre stages.
134
-
135
- ## Origen
136
-
137
- Adoptado 2026-06-05 desde análisis de `temp/` (blog Anthropic dynamic-workflows +
138
- ARIS `auto-review-loop`/`mcp-servers`). Ver APRENDIZAJES.md Tipo D 2026-06-05.
1
+ ---
2
+ name: proceso-dynamic-workflows
3
+ description: >
4
+ Patrones canónicos de dynamic workflows en Claude Code (Workflow tool / ultracode):
5
+ classify-and-act, fan-out-and-synthesize, adversarial-verification, generate-and-filter,
6
+ tournament. Cubre los 3 modos de falla que justifican orquestar (agentic laziness,
7
+ self-preferential bias, goal drift), cuándo NO usar workflows, token budgets, revisión
8
+ cross-modelo, y el anti-patrón de envolver skills auto-iterantes en /loop|/cron. Cargar
9
+ cuando se diseñe una orquestación multi-agente, se decida si una tarea amerita workflow,
10
+ o se quiera empaquetar un workflow como plantilla reutilizable en un skill.
11
+ when_to_use: >
12
+ Usar cuando el usuario diga "ultracode", "workflow", "orquesta esto", "fan-out", "panel
13
+ de revisores", "tournament", o cuando una tarea sea larga, masivamente paralela o
14
+ adversarial y un solo context window sufra laziness/goal-drift.
15
+ herramientasPermitidas: [Read, Grep, Glob]
16
+ exclusiones:
17
+ - "No cargar para tareas de codificación normales de un solo paso — la mayoría NO necesitan un workflow; el harness por defecto basta y un workflow gasta muchos más tokens."
18
+ - "No cargar para el detalle de evaluator-optimizer del nemesis — eso vive en nemesis-evaluacion-json y el comando /swl:nemesis."
19
+ - "No cargar para escribir el .js de un workflow concreto — este skill da los patrones; el script se escribe con el Workflow tool directamente."
20
+ ---
21
+
22
+ # Dynamic workflows: patrones, modos de falla y cuándo orquestar
23
+
24
+ Síntesis del blog oficial de Anthropic *"A harness for every task: dynamic workflows
25
+ in Claude Code"* + patrones validados en swl-ses (nemesis evaluator-optimizer,
26
+ `/swl:verificar --until-converge`, `/swl:autoresearch`). Un dynamic workflow deja que
27
+ Claude escriba su propio harness (JS que coordina subagentes con ventanas aisladas).
28
+
29
+ ## Cuándo cargar
30
+
31
+ - Se va a diseñar una orquestación multi-agente o decidir si una tarea amerita workflow.
32
+ - La tarea es larga, masivamente paralela, o adversarial (review, research, migración, triage).
33
+ - Se quiere empaquetar un workflow como plantilla reutilizable en un skill.
34
+
35
+ ## Cuándo NO cargar
36
+
37
+ - Tarea de codificación normal de 1-2 archivos — el harness por defecto basta. Un workflow
38
+ gasta significativamente más tokens; la mayoría de tareas de coding NO necesitan un panel
39
+ de 5 revisores.
40
+ - Ya estás dentro del detalle del nemesis (`nemesis-evaluacion-json`).
41
+ - Solo necesitas escribir el `.js` — usa el Workflow tool directo con los patrones de abajo.
42
+
43
+ ## Los 3 modos de falla que JUSTIFICAN orquestar
44
+
45
+ Un solo context window largo degrada de tres formas — nombrarlas guía cuándo separar Claudes:
46
+
47
+ 1. **Agentic laziness** — Claude se detiene antes de terminar una tarea multi-parte y la
48
+ declara hecha con progreso parcial (ej. 20 de 50 ítems de un security review). Mitiga:
49
+ fan-out (un subagente por ítem, ventana limpia) + `/goal` (requisito de completitud duro).
50
+ 2. **Self-preferential bias** — Claude prefiere sus propios resultados al verificarlos contra
51
+ un rubric. Mitiga: **adversarial-verification** con subagente separado, y mejor aún
52
+ **revisión cross-modelo** (el reviewer es OTRO modelo). Es el mismo principio que
53
+ `gobernanza.md § Separación revisor/ejecutor`.
54
+ 3. **Goal drift** — pérdida gradual de fidelidad al objetivo tras muchos turnos y compaction
55
+ (cada resumen es lossy; se pierde "no hagas X"). Mitiga: subagentes con goal aislado y
56
+ constraints explícitas por invocación; `/goal` como ancla.
57
+
58
+ ## Los 5 patrones canónicos
59
+
60
+ | Patrón | Cuándo | Forma |
61
+ |--------|--------|-------|
62
+ | **Classify-and-act** | Rutear según tipo de tarea/ítem | Clasificador → ramas distintas (al inicio o al final para decidir output) |
63
+ | **Fan-out-and-synthesize** | Muchos sub-pasos; cada uno se beneficia de ventana limpia sin cross-contaminación | N agentes en paralelo → barrier → synthesize merge. **Default** para descomponer |
64
+ | **Adversarial-verification** | Evitar self-preferential bias | Por cada agente, un agente separado verifica su output contra rubric. Diversificar lentes |
65
+ | **Generate-and-filter** | Espacio de ideas amplio (taste-based) | Generar N → filtrar por rubric/verificación → dedupe → solo las mejores probadas |
66
+ | **Tournament** | Solución taste-based con criterio | N agentes compiten con enfoques distintos → juez pairwise hasta ganador |
67
+
68
+ `pipeline()` (sin barrier entre stages) es el default; usa barrier (`parallel()` entre
69
+ stages) SOLO cuando el stage N necesita TODOS los resultados del N-1 (dedup global,
70
+ early-exit por conteo cero, comparación cruzada).
71
+
72
+ ## Revisión cross-modelo (combate self-preferential bias estructuralmente)
73
+
74
+ El reviewer adversarial en el MISMO modelo aún arrastra sesgo. La mejora: **executor en un
75
+ modelo, reviewer en otro** (Claude ejecuta → Gemini/Codex/otro revisa). Patrón de ARIS
76
+ (`mcp-servers/gemini-review`): MCP que expone `review`/`review_reply`, devuelve JSON con
77
+ `threadId` + `response` → rastro auditable de un veredicto independiente.
78
+
79
+ En swl-ses esto es **opt-in** vía `/swl:nemesis --cross-model` (ver el comando): si hay un
80
+ MCP reviewer configurado, la verificación se rutea a un modelo externo; si no, degrada al
81
+ reviewer same-model sin fallar (regla `arreglar-al-detectar.md` / no-fallback-silencioso →
82
+ se anuncia la degradación). Mejoras del reviewer (de ARIS `auto-review-loop`):
83
+ - **Reviewer memory**: el reviewer arrastra sus sospechas entre rondas (un solo `threadId`),
84
+ no parte de cero cada iteración.
85
+ - **Debate protocol**: el executor puede rebatir; el reviewer falla el veredicto final —
86
+ *"it can drive, never acquit"* (el loop conduce, el jurado decide).
87
+ - **POSITIVE_THRESHOLD compuesto**: `score ≥ N` **AND** `verdict ∈ {ready, almost}` — un
88
+ score alto con verdict "not ready" NO detiene el loop.
89
+
90
+ ## Anti-patrón: no envolver un skill auto-iterante en /loop · /cron · /schedule
91
+
92
+ Si un skill YA itera internamente (review→fix→re-review con memoria de reviewer en un
93
+ `threadId`), envolverlo en `/loop`, `/schedule` o `CronCreate` lo re-entra desde cero cada
94
+ tick → `threadId` nuevo, memoria del reviewer reseteada → dispara el veredicto por
95
+ wall-clock en vez de por cambio de artefacto: cero señal nueva, costo de tokens completo.
96
+ Aplica a `/swl:autoresearch`, `/swl:verificar --until-converge`, nemesis `--remediar`. Si
97
+ hay que agendar algo, agenda **la espera externa que lo precede** (ej. experimentos listos →
98
+ entonces corre el loop UNA vez), no el loop mismo.
99
+
100
+ ## Token budgets, /goal y model routing
101
+
102
+ - **Token budget en workflows**: el global `budget` (o "use 10k tokens" en el prompt) pone
103
+ cap duro. Alinea con `scripts/lib/budget-enforcer.js` de swl-ses.
104
+ - **/goal + /loop**: para workflows repetibles (triage, research, verificación), `/goal` da
105
+ requisito de completitud y `/loop` la cadencia. NO sobre skills auto-iterantes (arriba).
106
+ - **Dynamic model routing**: un agente clasificador investiga la complejidad real del scope
107
+ y rutea a Sonnet vs Opus por tarea (más fino que el Model-Tier estático del frontmatter).
108
+
109
+ ## Workflows como plantillas en skills
110
+
111
+ Un `.js` de workflow puede vivir en `recursos/` de un skill y referenciarse en su SKILL.md
112
+ como **plantilla** (no script verbatim) — Claude lo adapta al caso. Plantillas incluidas:
113
+
114
+ - `recursos/template-adversarial-verify.js` — fan-out de hallazgos + verificación adversarial
115
+ por hallazgo (filtra los reales).
116
+ - `recursos/template-triage.js` — clasifica ítems de un backlog, dedupe contra lo ya
117
+ trackeado, y rutea (fix automático vs escalar a humano) con patrón quarantine.
118
+
119
+ ## Quarantine (triage de contenido no confiable)
120
+
121
+ En triage que lee contenido público/no confiable, los agentes lectores quedan **barred** de
122
+ acciones de alto privilegio; esas las ejecutan agentes distintos que actúan sobre la info ya
123
+ saneada. Coherente con `seguridad-agentes.md § Prompt injection` y el quarantine de SWL.
124
+
125
+ ## Gotchas
126
+
127
+ - **Workflows gastan más tokens** — úsalos cuando la tarea de verdad necesita más cómputo
128
+ (adversarial, masivamente paralela), no por reflejo.
129
+ - **Subagentes heredan el contexto del padre** (CLAUDE.md + reglas globales). En proyectos
130
+ rule-heavy pueden saturar al arrancar (autocompact thrashing). Pasa scope acotado y evita
131
+ hacer que el subagente explore el codebase completo (ver `harness-claude-code`).
132
+ - **Barrier injustificado** mata wall-clock: si no hay dependencia cross-ítem entre stages,
133
+ usa `pipeline()`, no `parallel()` entre stages.
134
+
135
+ ## Origen
136
+
137
+ Adoptado 2026-06-05 desde análisis de `temp/` (blog Anthropic dynamic-workflows +
138
+ ARIS `auto-review-loop`/`mcp-servers`). Ver APRENDIZAJES.md Tipo D 2026-06-05.
@@ -1,65 +1,65 @@
1
- // PLANTILLA (no ejecutar verbatim) — Workflow tool de Claude Code.
2
- // Patrón: fan-out de hallazgos -> verificación adversarial por hallazgo -> filtrar reales.
3
- // Combate self-preferential bias y agentic laziness. Adapta DIMENSIONS, rubrics y schemas.
4
- //
5
- // Uso: el agente lee esta plantilla, la ajusta al caso concreto y la pasa al Workflow tool.
6
-
7
- export const meta = {
8
- name: 'adversarial-verify',
9
- description: 'Revisa por dimensiones y verifica cada hallazgo adversarialmente antes de aceptarlo',
10
- phases: [{ title: 'Review' }, { title: 'Verify' }],
11
- }
12
-
13
- // Dimensiones de revisión — una por lente independiente (no se contaminan entre sí).
14
- const DIMENSIONS = [
15
- { key: 'correctness', prompt: 'Revisa SOLO correctness del scope. Devuelve hallazgos.' },
16
- { key: 'security', prompt: 'Revisa SOLO seguridad del scope. Devuelve hallazgos.' },
17
- { key: 'dry', prompt: 'Revisa SOLO duplicación/DRY del scope. Devuelve hallazgos.' },
18
- ]
19
-
20
- const FINDINGS = {
21
- type: 'object', additionalProperties: false,
22
- properties: {
23
- findings: {
24
- type: 'array',
25
- items: {
26
- type: 'object', additionalProperties: false,
27
- properties: {
28
- title: { type: 'string' }, file: { type: 'string' }, line: { type: 'string' },
29
- severity: { type: 'string', enum: ['critico', 'mayor', 'menor'] },
30
- },
31
- required: ['title', 'file', 'severity'],
32
- },
33
- },
34
- },
35
- required: ['findings'],
36
- }
37
-
38
- const VERDICT = {
39
- type: 'object', additionalProperties: false,
40
- properties: {
41
- isReal: { type: 'boolean' },
42
- reason: { type: 'string' },
43
- },
44
- required: ['isReal', 'reason'],
45
- }
46
-
47
- // pipeline (sin barrier): cada dimensión verifica sus hallazgos en cuanto su review termina.
48
- const results = await pipeline(
49
- DIMENSIONS,
50
- (d) => agent(d.prompt, { label: `review:${d.key}`, phase: 'Review', schema: FINDINGS }),
51
- (review, d) =>
52
- parallel(
53
- (review?.findings || []).map((f) => () =>
54
- // Verificador adversarial: prompt orientado a REFUTAR (default refutado si dudoso).
55
- agent(
56
- `Intenta REFUTAR este hallazgo contra el código real (cita archivo:linea). ` +
57
- `Si no puedes probarlo, isReal=false: ${JSON.stringify(f)}`,
58
- { label: `verify:${f.file}`, phase: 'Verify', schema: VERDICT }
59
- ).then((v) => ({ ...f, verdict: v }))
60
- )
61
- )
62
- )
63
-
64
- const confirmados = results.flat().filter(Boolean).filter((f) => f.verdict?.isReal)
65
- return { confirmados }
1
+ // PLANTILLA (no ejecutar verbatim) — Workflow tool de Claude Code.
2
+ // Patrón: fan-out de hallazgos -> verificación adversarial por hallazgo -> filtrar reales.
3
+ // Combate self-preferential bias y agentic laziness. Adapta DIMENSIONS, rubrics y schemas.
4
+ //
5
+ // Uso: el agente lee esta plantilla, la ajusta al caso concreto y la pasa al Workflow tool.
6
+
7
+ export const meta = {
8
+ name: 'adversarial-verify',
9
+ description: 'Revisa por dimensiones y verifica cada hallazgo adversarialmente antes de aceptarlo',
10
+ phases: [{ title: 'Review' }, { title: 'Verify' }],
11
+ }
12
+
13
+ // Dimensiones de revisión — una por lente independiente (no se contaminan entre sí).
14
+ const DIMENSIONS = [
15
+ { key: 'correctness', prompt: 'Revisa SOLO correctness del scope. Devuelve hallazgos.' },
16
+ { key: 'security', prompt: 'Revisa SOLO seguridad del scope. Devuelve hallazgos.' },
17
+ { key: 'dry', prompt: 'Revisa SOLO duplicación/DRY del scope. Devuelve hallazgos.' },
18
+ ]
19
+
20
+ const FINDINGS = {
21
+ type: 'object', additionalProperties: false,
22
+ properties: {
23
+ findings: {
24
+ type: 'array',
25
+ items: {
26
+ type: 'object', additionalProperties: false,
27
+ properties: {
28
+ title: { type: 'string' }, file: { type: 'string' }, line: { type: 'string' },
29
+ severity: { type: 'string', enum: ['critico', 'mayor', 'menor'] },
30
+ },
31
+ required: ['title', 'file', 'severity'],
32
+ },
33
+ },
34
+ },
35
+ required: ['findings'],
36
+ }
37
+
38
+ const VERDICT = {
39
+ type: 'object', additionalProperties: false,
40
+ properties: {
41
+ isReal: { type: 'boolean' },
42
+ reason: { type: 'string' },
43
+ },
44
+ required: ['isReal', 'reason'],
45
+ }
46
+
47
+ // pipeline (sin barrier): cada dimensión verifica sus hallazgos en cuanto su review termina.
48
+ const results = await pipeline(
49
+ DIMENSIONS,
50
+ (d) => agent(d.prompt, { label: `review:${d.key}`, phase: 'Review', schema: FINDINGS }),
51
+ (review, d) =>
52
+ parallel(
53
+ (review?.findings || []).map((f) => () =>
54
+ // Verificador adversarial: prompt orientado a REFUTAR (default refutado si dudoso).
55
+ agent(
56
+ `Intenta REFUTAR este hallazgo contra el código real (cita archivo:linea). ` +
57
+ `Si no puedes probarlo, isReal=false: ${JSON.stringify(f)}`,
58
+ { label: `verify:${f.file}`, phase: 'Verify', schema: VERDICT }
59
+ ).then((v) => ({ ...f, verdict: v }))
60
+ )
61
+ )
62
+ )
63
+
64
+ const confirmados = results.flat().filter(Boolean).filter((f) => f.verdict?.isReal)
65
+ return { confirmados }
@@ -1,65 +1,65 @@
1
- // PLANTILLA (no ejecutar verbatim) — Workflow tool de Claude Code.
2
- // Patrón: classify-and-act + quarantine. Clasifica ítems de un backlog, dedupe contra lo
3
- // ya trackeado, y rutea: fix automático (bajo riesgo) vs escalar a humano (alto riesgo).
4
- // Quarantine: el agente que LEE contenido no confiable NO ejecuta acciones de alto privilegio.
5
- //
6
- // `args` = lista de ítems del backlog (issues, reportes, etc.). Adapta schemas y umbrales.
7
-
8
- export const meta = {
9
- name: 'triage',
10
- description: 'Clasifica un backlog, dedupe contra lo trackeado y rutea fix-vs-escalar (con quarantine)',
11
- phases: [{ title: 'Clasificar' }, { title: 'Actuar' }],
12
- }
13
-
14
- const items = Array.isArray(args) ? args : []
15
-
16
- const CLASIFICACION = {
17
- type: 'object', additionalProperties: false,
18
- properties: {
19
- categoria: { type: 'string', enum: ['bug', 'feature', 'duplicado', 'ruido'] },
20
- yaTrackeado: { type: 'boolean' },
21
- riesgo: { type: 'string', enum: ['bajo', 'alto'] },
22
- resumen: { type: 'string' },
23
- },
24
- required: ['categoria', 'yaTrackeado', 'riesgo', 'resumen'],
25
- }
26
-
27
- const ACCION = {
28
- type: 'object', additionalProperties: false,
29
- properties: {
30
- accion: { type: 'string', enum: ['fix-aplicado', 'escalado-humano', 'descartado'] },
31
- detalle: { type: 'string' },
32
- },
33
- required: ['accion', 'detalle'],
34
- }
35
-
36
- // Stage 1 (quarantine): clasificador LEE el ítem (posible contenido no confiable) pero NO
37
- // tiene permiso de actuar — solo emite estructura. Stage 2 actúa sobre data ya saneada.
38
- const triaged = await pipeline(
39
- items,
40
- (item) =>
41
- agent(
42
- `Clasifica este ítem del backlog. NO ejecutes ninguna acción: solo describe. ` +
43
- `Marca yaTrackeado=true si ya existe ticket. Ítem: ${JSON.stringify(item)}`,
44
- { label: 'clasificar', phase: 'Clasificar', schema: CLASIFICACION }
45
- ),
46
- (clf, item) => {
47
- if (!clf || clf.yaTrackeado || clf.categoria === 'ruido' || clf.categoria === 'duplicado') {
48
- return { accion: 'descartado', detalle: clf?.resumen || 'sin señal' }
49
- }
50
- if (clf.riesgo === 'alto') {
51
- // Alto riesgo: escalar a humano, no auto-actuar.
52
- return agent(
53
- `Redacta un escalamiento conciso para humano sobre: ${clf.resumen}`,
54
- { label: 'escalar', phase: 'Actuar', schema: ACCION }
55
- )
56
- }
57
- // Bajo riesgo: el agente que ACTÚA es distinto del que leyó contenido no confiable.
58
- return agent(
59
- `Aplica el fix de bajo riesgo para: ${clf.resumen}. Devuelve qué hiciste.`,
60
- { label: 'fix', phase: 'Actuar', schema: ACCION }
61
- )
62
- }
63
- )
64
-
65
- return triaged.filter(Boolean)
1
+ // PLANTILLA (no ejecutar verbatim) — Workflow tool de Claude Code.
2
+ // Patrón: classify-and-act + quarantine. Clasifica ítems de un backlog, dedupe contra lo
3
+ // ya trackeado, y rutea: fix automático (bajo riesgo) vs escalar a humano (alto riesgo).
4
+ // Quarantine: el agente que LEE contenido no confiable NO ejecuta acciones de alto privilegio.
5
+ //
6
+ // `args` = lista de ítems del backlog (issues, reportes, etc.). Adapta schemas y umbrales.
7
+
8
+ export const meta = {
9
+ name: 'triage',
10
+ description: 'Clasifica un backlog, dedupe contra lo trackeado y rutea fix-vs-escalar (con quarantine)',
11
+ phases: [{ title: 'Clasificar' }, { title: 'Actuar' }],
12
+ }
13
+
14
+ const items = Array.isArray(args) ? args : []
15
+
16
+ const CLASIFICACION = {
17
+ type: 'object', additionalProperties: false,
18
+ properties: {
19
+ categoria: { type: 'string', enum: ['bug', 'feature', 'duplicado', 'ruido'] },
20
+ yaTrackeado: { type: 'boolean' },
21
+ riesgo: { type: 'string', enum: ['bajo', 'alto'] },
22
+ resumen: { type: 'string' },
23
+ },
24
+ required: ['categoria', 'yaTrackeado', 'riesgo', 'resumen'],
25
+ }
26
+
27
+ const ACCION = {
28
+ type: 'object', additionalProperties: false,
29
+ properties: {
30
+ accion: { type: 'string', enum: ['fix-aplicado', 'escalado-humano', 'descartado'] },
31
+ detalle: { type: 'string' },
32
+ },
33
+ required: ['accion', 'detalle'],
34
+ }
35
+
36
+ // Stage 1 (quarantine): clasificador LEE el ítem (posible contenido no confiable) pero NO
37
+ // tiene permiso de actuar — solo emite estructura. Stage 2 actúa sobre data ya saneada.
38
+ const triaged = await pipeline(
39
+ items,
40
+ (item) =>
41
+ agent(
42
+ `Clasifica este ítem del backlog. NO ejecutes ninguna acción: solo describe. ` +
43
+ `Marca yaTrackeado=true si ya existe ticket. Ítem: ${JSON.stringify(item)}`,
44
+ { label: 'clasificar', phase: 'Clasificar', schema: CLASIFICACION }
45
+ ),
46
+ (clf, item) => {
47
+ if (!clf || clf.yaTrackeado || clf.categoria === 'ruido' || clf.categoria === 'duplicado') {
48
+ return { accion: 'descartado', detalle: clf?.resumen || 'sin señal' }
49
+ }
50
+ if (clf.riesgo === 'alto') {
51
+ // Alto riesgo: escalar a humano, no auto-actuar.
52
+ return agent(
53
+ `Redacta un escalamiento conciso para humano sobre: ${clf.resumen}`,
54
+ { label: 'escalar', phase: 'Actuar', schema: ACCION }
55
+ )
56
+ }
57
+ // Bajo riesgo: el agente que ACTÚA es distinto del que leyó contenido no confiable.
58
+ return agent(
59
+ `Aplica el fix de bajo riesgo para: ${clf.resumen}. Devuelve qué hiciste.`,
60
+ { label: 'fix', phase: 'Actuar', schema: ACCION }
61
+ )
62
+ }
63
+ )
64
+
65
+ return triaged.filter(Boolean)