@saulwade/swl-ses 1.3.3 → 1.3.5

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 (102) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +1 -1
  3. package/bin/swl-mcp-server.js +187 -187
  4. package/bin/swl-ses.js +4 -62
  5. package/comandos/swl/.evolved.json +22 -22
  6. package/comandos/swl/adoptar-proyecto.md +207 -207
  7. package/comandos/swl/contribuir.md +233 -233
  8. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  9. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  10. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  11. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  12. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  13. package/habilidades/eval-framework/SKILL.md +212 -212
  14. package/habilidades/extractor-de-aprendizajes/SKILL.md +321 -321
  15. package/habilidades/harness-claude-code/SKILL.md +299 -299
  16. package/habilidades/infra-github-actions/SKILL.md +166 -166
  17. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  18. package/habilidades/manejo-errores/.evolved.json +8 -8
  19. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  20. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  21. package/habilidades/patrones-python/SKILL.md +229 -229
  22. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  23. package/habilidades/planear-fase/SKILL.md +319 -319
  24. package/habilidades/release-semver/.evolved.json +8 -8
  25. package/habilidades/swl-claudemd/SKILL.md +220 -220
  26. package/habilidades/testing-python/SKILL.md +340 -340
  27. package/hooks/claudemd-bloat-detector.js +161 -161
  28. package/hooks/extraccion-aprendizajes.js +43 -12
  29. package/hooks/lib/agent-routing.js +107 -107
  30. package/hooks/lib/auto-consolidator.js +335 -335
  31. package/hooks/lib/error-classifier.js +308 -308
  32. package/hooks/lib/merkle-audit.js +96 -96
  33. package/hooks/lib/provenance-tracker.js +191 -191
  34. package/hooks/lib/rate-limit-tracker.js +253 -253
  35. package/hooks/lib/resource-quota.js +122 -122
  36. package/hooks/lib/retry-jitter.js +165 -165
  37. package/hooks/lib/skill-auditor.js +588 -588
  38. package/hooks/lib/sync-status.js +228 -228
  39. package/hooks/lib/taint-tracker.js +107 -107
  40. package/hooks/lib/text-similarity.js +241 -241
  41. package/hooks/lib/toon-compressor.js +245 -245
  42. package/hooks/registro-turnos.js +209 -209
  43. package/hooks/sugerir-regenerar-inventario.js +170 -170
  44. package/hooks/validar-formato-post-subagente.js +140 -140
  45. package/hooks/validar-memoria-hook.js +218 -218
  46. package/instintos/prompt-appendices.yaml +57 -57
  47. package/manifiestos/agent-output-schemas.json +57 -57
  48. package/manifiestos/skills-lock.json +27 -27
  49. package/package.json +1 -1
  50. package/plantillas/auditor-veto-template.md +105 -105
  51. package/plantillas/github-workflows/README.md +47 -47
  52. package/plantillas/github-workflows/release-please.yml +44 -44
  53. package/plantillas/github-workflows/swl-ci.yml +107 -107
  54. package/plantillas/github-workflows/swl-security.yml +51 -51
  55. package/plugin.json +1 -1
  56. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  57. package/reglas/arreglar-al-detectar.md +147 -147
  58. package/reglas/fragmentos-compartidos.md +152 -152
  59. package/reglas/harness-claude-code.md +213 -213
  60. package/reglas/usar-context7.md +226 -226
  61. package/schemas/diary-entry.schema.json +80 -80
  62. package/scripts/benchmark-memoria.js +167 -167
  63. package/scripts/configurar-branch-protection.js +418 -418
  64. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  65. package/scripts/doctor.js +77 -3
  66. package/scripts/field-report.js +199 -199
  67. package/scripts/generar-checklists-consolidados.js +273 -273
  68. package/scripts/generar-inventario.js +420 -420
  69. package/scripts/generar-matriz-lenguajes.js +271 -271
  70. package/scripts/instalador.js +38 -1
  71. package/scripts/lib/artefactos-python.js +43 -43
  72. package/scripts/lib/benchmark-metrics.js +160 -160
  73. package/scripts/lib/budget-enforcer.js +252 -252
  74. package/scripts/lib/configurar-ci.js +380 -380
  75. package/scripts/lib/contadores-inventario.js +217 -217
  76. package/scripts/lib/detectar-stack-detallado.js +307 -307
  77. package/scripts/lib/diary-entry.js +234 -234
  78. package/scripts/lib/eval-metrics-store.js +218 -218
  79. package/scripts/lib/eval-quality.js +171 -171
  80. package/scripts/lib/eval-schemas.js +144 -144
  81. package/scripts/lib/eval-self-correct.js +106 -106
  82. package/scripts/lib/eval-validator.js +185 -185
  83. package/scripts/lib/jaccard-similarity.js +98 -98
  84. package/scripts/lib/longmemeval-runner.js +125 -125
  85. package/scripts/lib/npm-version.js +261 -261
  86. package/scripts/lib/paquetes-conocidos.js +50 -50
  87. package/scripts/lib/parsear-opciones.js +136 -0
  88. package/scripts/lib/prompt-builder.js +264 -264
  89. package/scripts/lib/rrf-fusion.js +175 -175
  90. package/scripts/lib/scoring-instintos.js +277 -277
  91. package/scripts/lib/semantic-search.js +252 -252
  92. package/scripts/lib/transformadores/claude.js +200 -200
  93. package/scripts/limpiar-artefactos-python.js +131 -131
  94. package/scripts/mcp-server/README.md +128 -128
  95. package/scripts/mcp-server/handlers.js +206 -206
  96. package/scripts/migrar-csv-a-array.js +168 -168
  97. package/scripts/migrar-fase-dominio.js +201 -201
  98. package/scripts/publicar.js +511 -511
  99. package/scripts/run-eval.js +141 -141
  100. package/scripts/validar-manifest.js +195 -195
  101. package/scripts/validar-userland-vacio.js +110 -110
  102. package/scripts/verificar-release.js +5 -1
@@ -1,93 +1,93 @@
1
- # Convención `EXAMPLES.md` — recurso opcional para skills críticos
2
-
3
- Convención **opcional** para skills cuyo valor depende de ejemplos concretos
4
- con diff MAL → BIEN. Esta convención NO es retroactiva: las 63 carpetas
5
- `recursos/` existentes en `habilidades/` no se renombran. Solo aplica a:
6
-
7
- - Skills nuevos cuyo dominio se entiende mejor con ejemplos lado a lado.
8
- - Skills existentes que reciban actualización mayor y agreguen ejemplos.
9
-
10
- ---
11
-
12
- ## Cuándo aplicarla
13
-
14
- Aplicar cuando:
15
-
16
- - El skill prescribe **decisiones técnicas** o **patrones** cuyo error es
17
- sutil sin un caso concreto (ej: anti-patrones de async, gotchas de framework,
18
- decisiones arquitecturales).
19
- - El skill se beneficia de mostrar 2-4 ejemplos lado a lado: el caso aplicado
20
- correctamente vs el caso degenerado.
21
- - Los ejemplos suman > 100 líneas y meterlos en SKILL.md lo pasaría del
22
- límite de 300 líneas.
23
-
24
- NO aplicar cuando:
25
-
26
- - El skill ya tiene `recursos/` con archivos temáticos específicos
27
- (ej: `meta-skills-estandar/recursos/anti-patrones-y-leyes.md`). El nombre
28
- temático es más informativo que `EXAMPLES.md`.
29
- - El skill es un how-to procedural sin antipatrones contrastables.
30
- - El skill tiene < 80 líneas en SKILL.md y los ejemplos caben en línea.
31
-
32
- ---
33
-
34
- ## Estructura recomendada
35
-
36
- ```
37
- habilidades/<skill-name>/
38
- ├── SKILL.md
39
- └── recursos/
40
- └── EXAMPLES.md
41
- ```
42
-
43
- `SKILL.md` enlaza al final con:
44
-
45
- ```markdown
46
- Para ejemplos concretos de aplicación, ver [`recursos/EXAMPLES.md`](recursos/EXAMPLES.md).
47
- ```
48
-
49
- `EXAMPLES.md` contiene 2-4 ejemplos siguiendo el patrón:
50
-
51
- ```markdown
52
- ## Ejemplo N — [título corto del escenario]
53
-
54
- **Contexto**: [1-2 líneas]
55
-
56
- ### ❌ Sin <skill-name> (hipotético)
57
- [código o descripción del enfoque incorrecto + consecuencia observable]
58
-
59
- ### ✓ Con <skill-name>
60
- [código o descripción del enfoque correcto + por qué evita la consecuencia]
61
- ```
62
-
63
- Cierre de `EXAMPLES.md`: tabla resumen de los ejemplos con la dimensión
64
- clave que cambió (costo, tiempo, severidad de bug, etc.).
65
-
66
- ---
67
-
68
- ## Por qué OPCIONAL y no obligatoria
69
-
70
- - 63 carpetas `recursos/` ya existen con nomenclatura temática
71
- (`anti-patrones-y-leyes.md`, `frameworks-seguridad.md`,
72
- `idiomas-framework.md`). Forzar `EXAMPLES.md` rompería información
73
- semántica del nombre.
74
- - La regla core `reglas/skills-estandar.md` ya prescribe que `SKILL.md`
75
- no exceda 300 líneas y que los `recursos/` se nombren en kebab-case
76
- con sufijo `.md` — esa regla cubre el 95% de los casos.
77
- - Esta convención **complementa** la regla core para skills donde un nombre
78
- semántico genérico (`EXAMPLES.md`) comunica mejor el contenido que un
79
- nombre específico (ej: `casos-decisiones-arquitecturales.md` es más largo
80
- y menos buscable).
81
-
82
- ---
83
-
84
- ## Origen
85
-
86
- Patrón observado en repos externos analizados el 2026-05-09
87
- (`temp/agent-skills-main`, `temp/andrej-karpathy-skills-main`):
88
- varios skills críticos exponen un `EXAMPLES.md` con diffs MAL/BIEN
89
- auto-cargable como referencia rápida del agente.
90
-
91
- Adoptado en `habilidades/doubt-driven-review/recursos/EXAMPLES.md` como
92
- primera aplicación. Casos futuros: skills de decisiones arquitecturales,
93
- seguridad, debugging avanzado.
1
+ # Convención `EXAMPLES.md` — recurso opcional para skills críticos
2
+
3
+ Convención **opcional** para skills cuyo valor depende de ejemplos concretos
4
+ con diff MAL → BIEN. Esta convención NO es retroactiva: las 63 carpetas
5
+ `recursos/` existentes en `habilidades/` no se renombran. Solo aplica a:
6
+
7
+ - Skills nuevos cuyo dominio se entiende mejor con ejemplos lado a lado.
8
+ - Skills existentes que reciban actualización mayor y agreguen ejemplos.
9
+
10
+ ---
11
+
12
+ ## Cuándo aplicarla
13
+
14
+ Aplicar cuando:
15
+
16
+ - El skill prescribe **decisiones técnicas** o **patrones** cuyo error es
17
+ sutil sin un caso concreto (ej: anti-patrones de async, gotchas de framework,
18
+ decisiones arquitecturales).
19
+ - El skill se beneficia de mostrar 2-4 ejemplos lado a lado: el caso aplicado
20
+ correctamente vs el caso degenerado.
21
+ - Los ejemplos suman > 100 líneas y meterlos en SKILL.md lo pasaría del
22
+ límite de 300 líneas.
23
+
24
+ NO aplicar cuando:
25
+
26
+ - El skill ya tiene `recursos/` con archivos temáticos específicos
27
+ (ej: `meta-skills-estandar/recursos/anti-patrones-y-leyes.md`). El nombre
28
+ temático es más informativo que `EXAMPLES.md`.
29
+ - El skill es un how-to procedural sin antipatrones contrastables.
30
+ - El skill tiene < 80 líneas en SKILL.md y los ejemplos caben en línea.
31
+
32
+ ---
33
+
34
+ ## Estructura recomendada
35
+
36
+ ```
37
+ habilidades/<skill-name>/
38
+ ├── SKILL.md
39
+ └── recursos/
40
+ └── EXAMPLES.md
41
+ ```
42
+
43
+ `SKILL.md` enlaza al final con:
44
+
45
+ ```markdown
46
+ Para ejemplos concretos de aplicación, ver [`recursos/EXAMPLES.md`](recursos/EXAMPLES.md).
47
+ ```
48
+
49
+ `EXAMPLES.md` contiene 2-4 ejemplos siguiendo el patrón:
50
+
51
+ ```markdown
52
+ ## Ejemplo N — [título corto del escenario]
53
+
54
+ **Contexto**: [1-2 líneas]
55
+
56
+ ### ❌ Sin <skill-name> (hipotético)
57
+ [código o descripción del enfoque incorrecto + consecuencia observable]
58
+
59
+ ### ✓ Con <skill-name>
60
+ [código o descripción del enfoque correcto + por qué evita la consecuencia]
61
+ ```
62
+
63
+ Cierre de `EXAMPLES.md`: tabla resumen de los ejemplos con la dimensión
64
+ clave que cambió (costo, tiempo, severidad de bug, etc.).
65
+
66
+ ---
67
+
68
+ ## Por qué OPCIONAL y no obligatoria
69
+
70
+ - 63 carpetas `recursos/` ya existen con nomenclatura temática
71
+ (`anti-patrones-y-leyes.md`, `frameworks-seguridad.md`,
72
+ `idiomas-framework.md`). Forzar `EXAMPLES.md` rompería información
73
+ semántica del nombre.
74
+ - La regla core `reglas/skills-estandar.md` ya prescribe que `SKILL.md`
75
+ no exceda 300 líneas y que los `recursos/` se nombren en kebab-case
76
+ con sufijo `.md` — esa regla cubre el 95% de los casos.
77
+ - Esta convención **complementa** la regla core para skills donde un nombre
78
+ semántico genérico (`EXAMPLES.md`) comunica mejor el contenido que un
79
+ nombre específico (ej: `casos-decisiones-arquitecturales.md` es más largo
80
+ y menos buscable).
81
+
82
+ ---
83
+
84
+ ## Origen
85
+
86
+ Patrón observado en repos externos analizados el 2026-05-09
87
+ (`temp/agent-skills-main`, `temp/andrej-karpathy-skills-main`):
88
+ varios skills críticos exponen un `EXAMPLES.md` con diffs MAL/BIEN
89
+ auto-cargable como referencia rápida del agente.
90
+
91
+ Adoptado en `habilidades/doubt-driven-review/recursos/EXAMPLES.md` como
92
+ primera aplicación. Casos futuros: skills de decisiones arquitecturales,
93
+ seguridad, debugging avanzado.
@@ -1,163 +1,163 @@
1
- # Skills as Agents — patrón técnico avanzado
2
-
3
- Documenta el patrón Anthropic nativo de ejecutar un skill SWL en su propio
4
- sub-agente con `agent: true` + `model:` en el frontmatter. Origen: artículo
5
- "Claude Code's Limits Are Generous. The Problem Is Your Harness." sección 2.3.
6
-
7
- ## Concepto
8
-
9
- Un SKILL.md normal es contenido que se carga al contexto del padre cuando
10
- se invoca con `Skill("nombre")`. El skill aporta reglas, conocimiento o
11
- guía al modelo del padre, que las usa al razonar.
12
-
13
- Con el patrón skills as agents, el skill se vuelve **invocable como
14
- sub-agente independiente**: tiene su propio modelo, su propio contexto,
15
- y solo devuelve un resultado acotado al padre. Útil cuando el skill
16
- procesa un input grande y debe entregar un resumen.
17
-
18
- ## Cuándo usar este patrón
19
-
20
- - El skill procesa un archivo o input grande y debe devolver solo un
21
- resumen al padre (ejemplo: extraer TLDR de un PDF de 50 páginas, sin
22
- que el texto completo entre al contexto del padre).
23
- - El skill ejecuta búsqueda exhaustiva o crawling de un codebase completo
24
- y el resultado es un set acotado de findings.
25
- - El skill necesita un modelo distinto al del padre por costo o latencia
26
- (Haiku para trabajo mecánico cuando el padre es Opus).
27
- - El trabajo del skill es paralelizable y se va a invocar varias veces en
28
- la misma sesión.
29
-
30
- ## Cuándo NO usar
31
-
32
- - El skill solo aporta reglas o conocimiento estático que se aplica al
33
- razonamiento del padre — esos son skills "passive" normales y NO
34
- necesitan `agent: true`. Su valor es justamente que cargan reglas al
35
- contexto del padre.
36
- - El skill es referenciado dentro de otro skill como contenido de apoyo
37
- — el contexto del padre lo necesita ver.
38
- - El skill requiere acceso al contexto activo del padre (decisiones
39
- tomadas mid-session, archivos ya leídos) — `agent: true` aísla del
40
- padre, así que el sub-agente no vería esa información.
41
- - El skill es invocado una sola vez en la sesión y su output es pequeño
42
- — el overhead de spawn de sub-agente puede dominar.
43
-
44
- ## Ejemplo de skill como agent
45
-
46
- ```yaml
47
- ---
48
- name: tldr-pdf
49
- description: >
50
- Extrae TLDR de 200 palabras de un PDF sin cargar el texto completo en
51
- el contexto del padre. Cargar cuando se reciba ruta a un PDF que solo
52
- necesita resumen ejecutivo.
53
- agent: true
54
- model: claude-haiku-4-5-20251001
55
- herramientasPermitidas: [Bash, Read]
56
- ---
57
-
58
- # tldr-pdf
59
-
60
- Recibes la ruta de un PDF como input.
61
-
62
- 1. Ejecuta `pdftotext "$1" -` para extraer texto.
63
- 2. Lee la salida.
64
- 3. Devuelve SOLO:
65
- - 5 bullets de TLDR
66
- - 3 quotes que valga la pena conservar
67
- - URLs citadas
68
-
69
- Nunca devuelvas el texto completo. Nunca expandas más allá de la estructura.
70
- ```
71
-
72
- Flujo: el padre invoca `Skill("tldr-pdf")` con la ruta del PDF; el
73
- sub-agente Haiku ejecuta `pdftotext`, lee la salida (que llena su propio
74
- contexto, no el del padre), y devuelve ~200 palabras estructuradas. El PDF
75
- completo nunca toca el contexto del padre.
76
-
77
- ## Reglas del patrón
78
-
79
- ### Frontmatter
80
-
81
- - `agent: true` activa el modo sub-agente.
82
- - `model:` debe ser un modelo Anthropic válido. Para skills mecánicos,
83
- preferir Haiku (5× más barato que Sonnet, 25× más barato que Opus 4.7).
84
- - El frontmatter sigue siendo válido SWL: incluir `name`, `description`,
85
- `herramientasPermitidas`, `exclusiones` y demás campos obligatorios.
86
-
87
- ### Cuerpo
88
-
89
- - Debe ser **autocontenido**: el sub-agente NO tiene acceso al contexto
90
- del padre (CLAUDE.md del proyecto, instintos cargados, sesión activa,
91
- archivos previamente leídos). Todo lo que necesite saber tiene que
92
- estar en el cuerpo del skill o en lo que reciba como input.
93
- - El output debe ser **acotado**: si el sub-agente devuelve un dump
94
- masivo, se pierde el beneficio (terminamos pasando lo mismo al padre,
95
- solo con un round-trip extra). Especificar formato exacto en el
96
- cuerpo del skill: número de bullets, longitud máxima, qué incluir y
97
- qué no.
98
-
99
- ### Errores comunes a evitar
100
-
101
- - **Usar Opus en `model:` para skills mecánicos**: invalida el ahorro de
102
- costo. La mayoría de skills as agents deberían ser Haiku o Sonnet.
103
- - **Devolver el texto crudo del input**: si el skill recibe un PDF y
104
- devuelve el texto completo, no estamos aislando nada. Devuelve siempre
105
- la transformación, no el material crudo.
106
- - **Asumir que el skill verá el CLAUDE.md del proyecto**: no lo verá.
107
- Si el skill necesita seguir convenciones del proyecto, hay que
108
- explicárselas en el cuerpo.
109
-
110
- ## Skills SWL candidatos al patrón (no migración masiva)
111
-
112
- Evaluación caso por caso. NO aplicar masivamente — el patrón aporta solo
113
- cuando el skill consume input grande y devuelve output acotado.
114
-
115
- | Skill SWL | Por qué encaja | Modelo recomendado |
116
- |-----------|----------------|--------------------|
117
- | `extraccion-documentos` | Procesa PDFs/Office grandes | Haiku |
118
- | `mapear-codebase` | Procesa codebase entero, devuelve reporte | Sonnet |
119
- | `wiki-conocimiento` (modo query) | Búsqueda en wiki con respuesta acotada | Sonnet |
120
-
121
- Skills NO candidatos (son passive, su valor es cargar reglas al contexto del padre):
122
-
123
- - `manejo-errores`, `auth-patrones`, `api-rest-diseno`, `accesibilidad-a11y`, etc.
124
- - Toda regla de estilo o convención por lenguaje.
125
- - Toda regla SWL en `reglas/`.
126
-
127
- ## Implicaciones operativas
128
-
129
- ### Costo
130
-
131
- Spawn de sub-agente tiene overhead (system prompt + carga del skill +
132
- contexto inicial). Para inputs chicos, el overhead supera el ahorro.
133
- Regla práctica: usar el patrón si el input que el skill procesa es
134
- ≥3,000 tokens (o ≥10K caracteres).
135
-
136
- ### Latencia
137
-
138
- El padre espera al sub-agente antes de continuar. Si el skill demora >10s,
139
- considerar si la operación cabe en el padre directamente (sin spawn).
140
-
141
- ### Trazabilidad
142
-
143
- Los sub-agentes spawneados aparecen en `claude-usage` (vendor SWL) como
144
- invocaciones separadas con su propio modelo. Útil para entender qué
145
- porcentaje del costo viene de sub-agentes vs. trabajo del padre.
146
-
147
- ### Compatibilidad con SWL
148
-
149
- - El skill sigue registrado normalmente en `manifiestos/modulos.json`.
150
- - El skill se invoca igual: `Skill("nombre")`. La diferencia es interna
151
- (el harness Anthropic decide si lo carga al padre o lo ejecuta como
152
- sub-agente según el frontmatter).
153
- - Hooks SWL siguen aplicando: `linea-estado.js`, `monitor-contexto.js`,
154
- `audit-trail.js` registran las invocaciones del sub-agente.
155
-
156
- ## Referencias
157
-
158
- - Artículo de origen: "Claude Code's Limits Are Generous. The Problem Is
159
- Your Harness." (sección 2.3 — Skills Can Also Be Invoked as Agents).
160
- - Documentación oficial Anthropic sobre Claude Skills (cuando esté
161
- disponible).
162
- - `Skill("harness-claude-code")` — uso operativo del patrón en sesiones
163
- largas, junto con sub-agentes via Task tool y delegación explícita.
1
+ # Skills as Agents — patrón técnico avanzado
2
+
3
+ Documenta el patrón Anthropic nativo de ejecutar un skill SWL en su propio
4
+ sub-agente con `agent: true` + `model:` en el frontmatter. Origen: artículo
5
+ "Claude Code's Limits Are Generous. The Problem Is Your Harness." sección 2.3.
6
+
7
+ ## Concepto
8
+
9
+ Un SKILL.md normal es contenido que se carga al contexto del padre cuando
10
+ se invoca con `Skill("nombre")`. El skill aporta reglas, conocimiento o
11
+ guía al modelo del padre, que las usa al razonar.
12
+
13
+ Con el patrón skills as agents, el skill se vuelve **invocable como
14
+ sub-agente independiente**: tiene su propio modelo, su propio contexto,
15
+ y solo devuelve un resultado acotado al padre. Útil cuando el skill
16
+ procesa un input grande y debe entregar un resumen.
17
+
18
+ ## Cuándo usar este patrón
19
+
20
+ - El skill procesa un archivo o input grande y debe devolver solo un
21
+ resumen al padre (ejemplo: extraer TLDR de un PDF de 50 páginas, sin
22
+ que el texto completo entre al contexto del padre).
23
+ - El skill ejecuta búsqueda exhaustiva o crawling de un codebase completo
24
+ y el resultado es un set acotado de findings.
25
+ - El skill necesita un modelo distinto al del padre por costo o latencia
26
+ (Haiku para trabajo mecánico cuando el padre es Opus).
27
+ - El trabajo del skill es paralelizable y se va a invocar varias veces en
28
+ la misma sesión.
29
+
30
+ ## Cuándo NO usar
31
+
32
+ - El skill solo aporta reglas o conocimiento estático que se aplica al
33
+ razonamiento del padre — esos son skills "passive" normales y NO
34
+ necesitan `agent: true`. Su valor es justamente que cargan reglas al
35
+ contexto del padre.
36
+ - El skill es referenciado dentro de otro skill como contenido de apoyo
37
+ — el contexto del padre lo necesita ver.
38
+ - El skill requiere acceso al contexto activo del padre (decisiones
39
+ tomadas mid-session, archivos ya leídos) — `agent: true` aísla del
40
+ padre, así que el sub-agente no vería esa información.
41
+ - El skill es invocado una sola vez en la sesión y su output es pequeño
42
+ — el overhead de spawn de sub-agente puede dominar.
43
+
44
+ ## Ejemplo de skill como agent
45
+
46
+ ```yaml
47
+ ---
48
+ name: tldr-pdf
49
+ description: >
50
+ Extrae TLDR de 200 palabras de un PDF sin cargar el texto completo en
51
+ el contexto del padre. Cargar cuando se reciba ruta a un PDF que solo
52
+ necesita resumen ejecutivo.
53
+ agent: true
54
+ model: claude-haiku-4-5-20251001
55
+ herramientasPermitidas: [Bash, Read]
56
+ ---
57
+
58
+ # tldr-pdf
59
+
60
+ Recibes la ruta de un PDF como input.
61
+
62
+ 1. Ejecuta `pdftotext "$1" -` para extraer texto.
63
+ 2. Lee la salida.
64
+ 3. Devuelve SOLO:
65
+ - 5 bullets de TLDR
66
+ - 3 quotes que valga la pena conservar
67
+ - URLs citadas
68
+
69
+ Nunca devuelvas el texto completo. Nunca expandas más allá de la estructura.
70
+ ```
71
+
72
+ Flujo: el padre invoca `Skill("tldr-pdf")` con la ruta del PDF; el
73
+ sub-agente Haiku ejecuta `pdftotext`, lee la salida (que llena su propio
74
+ contexto, no el del padre), y devuelve ~200 palabras estructuradas. El PDF
75
+ completo nunca toca el contexto del padre.
76
+
77
+ ## Reglas del patrón
78
+
79
+ ### Frontmatter
80
+
81
+ - `agent: true` activa el modo sub-agente.
82
+ - `model:` debe ser un modelo Anthropic válido. Para skills mecánicos,
83
+ preferir Haiku (5× más barato que Sonnet, 25× más barato que Opus 4.7).
84
+ - El frontmatter sigue siendo válido SWL: incluir `name`, `description`,
85
+ `herramientasPermitidas`, `exclusiones` y demás campos obligatorios.
86
+
87
+ ### Cuerpo
88
+
89
+ - Debe ser **autocontenido**: el sub-agente NO tiene acceso al contexto
90
+ del padre (CLAUDE.md del proyecto, instintos cargados, sesión activa,
91
+ archivos previamente leídos). Todo lo que necesite saber tiene que
92
+ estar en el cuerpo del skill o en lo que reciba como input.
93
+ - El output debe ser **acotado**: si el sub-agente devuelve un dump
94
+ masivo, se pierde el beneficio (terminamos pasando lo mismo al padre,
95
+ solo con un round-trip extra). Especificar formato exacto en el
96
+ cuerpo del skill: número de bullets, longitud máxima, qué incluir y
97
+ qué no.
98
+
99
+ ### Errores comunes a evitar
100
+
101
+ - **Usar Opus en `model:` para skills mecánicos**: invalida el ahorro de
102
+ costo. La mayoría de skills as agents deberían ser Haiku o Sonnet.
103
+ - **Devolver el texto crudo del input**: si el skill recibe un PDF y
104
+ devuelve el texto completo, no estamos aislando nada. Devuelve siempre
105
+ la transformación, no el material crudo.
106
+ - **Asumir que el skill verá el CLAUDE.md del proyecto**: no lo verá.
107
+ Si el skill necesita seguir convenciones del proyecto, hay que
108
+ explicárselas en el cuerpo.
109
+
110
+ ## Skills SWL candidatos al patrón (no migración masiva)
111
+
112
+ Evaluación caso por caso. NO aplicar masivamente — el patrón aporta solo
113
+ cuando el skill consume input grande y devuelve output acotado.
114
+
115
+ | Skill SWL | Por qué encaja | Modelo recomendado |
116
+ |-----------|----------------|--------------------|
117
+ | `extraccion-documentos` | Procesa PDFs/Office grandes | Haiku |
118
+ | `mapear-codebase` | Procesa codebase entero, devuelve reporte | Sonnet |
119
+ | `wiki-conocimiento` (modo query) | Búsqueda en wiki con respuesta acotada | Sonnet |
120
+
121
+ Skills NO candidatos (son passive, su valor es cargar reglas al contexto del padre):
122
+
123
+ - `manejo-errores`, `auth-patrones`, `api-rest-diseno`, `accesibilidad-a11y`, etc.
124
+ - Toda regla de estilo o convención por lenguaje.
125
+ - Toda regla SWL en `reglas/`.
126
+
127
+ ## Implicaciones operativas
128
+
129
+ ### Costo
130
+
131
+ Spawn de sub-agente tiene overhead (system prompt + carga del skill +
132
+ contexto inicial). Para inputs chicos, el overhead supera el ahorro.
133
+ Regla práctica: usar el patrón si el input que el skill procesa es
134
+ ≥3,000 tokens (o ≥10K caracteres).
135
+
136
+ ### Latencia
137
+
138
+ El padre espera al sub-agente antes de continuar. Si el skill demora >10s,
139
+ considerar si la operación cabe en el padre directamente (sin spawn).
140
+
141
+ ### Trazabilidad
142
+
143
+ Los sub-agentes spawneados aparecen en `claude-usage` (vendor SWL) como
144
+ invocaciones separadas con su propio modelo. Útil para entender qué
145
+ porcentaje del costo viene de sub-agentes vs. trabajo del padre.
146
+
147
+ ### Compatibilidad con SWL
148
+
149
+ - El skill sigue registrado normalmente en `manifiestos/modulos.json`.
150
+ - El skill se invoca igual: `Skill("nombre")`. La diferencia es interna
151
+ (el harness Anthropic decide si lo carga al padre o lo ejecuta como
152
+ sub-agente según el frontmatter).
153
+ - Hooks SWL siguen aplicando: `linea-estado.js`, `monitor-contexto.js`,
154
+ `audit-trail.js` registran las invocaciones del sub-agente.
155
+
156
+ ## Referencias
157
+
158
+ - Artículo de origen: "Claude Code's Limits Are Generous. The Problem Is
159
+ Your Harness." (sección 2.3 — Skills Can Also Be Invoked as Agents).
160
+ - Documentación oficial Anthropic sobre Claude Skills (cuando esté
161
+ disponible).
162
+ - `Skill("harness-claude-code")` — uso operativo del patrón en sesiones
163
+ largas, junto con sub-agentes via Task tool y delegación explícita.