@saulwade/swl-ses 1.4.1 → 1.4.2

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 (114) hide show
  1. package/CLAUDE.md +1 -1
  2. package/README.md +1 -1
  3. package/agentes/nemesis-auditor-swl.md +161 -161
  4. package/bin/swl-mcp-server.js +187 -187
  5. package/comandos/swl/.evolved.json +22 -22
  6. package/comandos/swl/contribuir.md +233 -233
  7. package/comandos/swl/nemesis.md +122 -122
  8. package/gateway/lib/event-channel.js +191 -191
  9. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  10. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  11. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  12. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  13. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  14. package/habilidades/eval-framework/SKILL.md +212 -212
  15. package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
  16. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  17. package/habilidades/harness-claude-code/SKILL.md +299 -299
  18. package/habilidades/infra-github-actions/SKILL.md +166 -166
  19. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  20. package/habilidades/manejo-errores/.evolved.json +8 -8
  21. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  22. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  23. package/habilidades/patrones-python/SKILL.md +229 -229
  24. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  25. package/habilidades/planear-fase/SKILL.md +319 -319
  26. package/habilidades/release-semver/.evolved.json +8 -8
  27. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
  28. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  29. package/habilidades/testing-python/SKILL.md +340 -340
  30. package/habilidades/web-fetcher-routing/SKILL.md +75 -75
  31. package/hooks/claudemd-bloat-detector.js +161 -161
  32. package/hooks/lib/agent-routing.js +107 -107
  33. package/hooks/lib/auto-consolidator.js +335 -335
  34. package/hooks/lib/error-classifier.js +308 -308
  35. package/hooks/lib/merkle-audit.js +96 -96
  36. package/hooks/lib/provenance-tracker.js +191 -191
  37. package/hooks/lib/rate-limit-tracker.js +253 -253
  38. package/hooks/lib/resource-quota.js +122 -122
  39. package/hooks/lib/retry-jitter.js +165 -165
  40. package/hooks/lib/security-net.js +201 -201
  41. package/hooks/lib/skill-auditor.js +588 -588
  42. package/hooks/lib/sync-status.js +228 -228
  43. package/hooks/lib/taint-tracker.js +107 -107
  44. package/hooks/lib/text-similarity.js +241 -241
  45. package/hooks/lib/toon-compressor.js +245 -245
  46. package/hooks/registro-turnos.js +209 -209
  47. package/hooks/sugerir-regenerar-inventario.js +170 -170
  48. package/hooks/validar-formato-post-subagente.js +140 -140
  49. package/hooks/validar-memoria-hook.js +218 -218
  50. package/instintos/prompt-appendices.yaml +57 -57
  51. package/manifiestos/agent-output-schemas.json +57 -57
  52. package/manifiestos/modulos.json +11 -6
  53. package/manifiestos/perfiles.json +2 -1
  54. package/manifiestos/skills-lock.json +1114 -1114
  55. package/package.json +1 -1
  56. package/plantillas/auditor-veto-template.md +105 -105
  57. package/plantillas/github-workflows/README.md +47 -47
  58. package/plantillas/github-workflows/release-please.yml +44 -44
  59. package/plantillas/github-workflows/swl-ci.yml +107 -107
  60. package/plantillas/github-workflows/swl-security.yml +51 -51
  61. package/plugin.json +9 -1
  62. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  63. package/reglas/arreglar-al-detectar.md +147 -147
  64. package/reglas/fragmentos-compartidos.md +152 -152
  65. package/reglas/harness-claude-code.md +213 -213
  66. package/reglas/usar-context7.md +226 -226
  67. package/schemas/diary-entry.schema.json +80 -80
  68. package/scripts/audit-tools/audit-history.js +330 -330
  69. package/scripts/audit-tools/bundle-tracker.js +290 -290
  70. package/scripts/audit-tools/canary-monitor.js +352 -352
  71. package/scripts/audit-tools/code-profiler.js +605 -605
  72. package/scripts/audit-tools/dep-doctor.js +320 -320
  73. package/scripts/audit-tools/env-validator.js +206 -206
  74. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  75. package/scripts/audit-tools/lib/output.js +23 -23
  76. package/scripts/audit-tools/migration-checker.js +392 -392
  77. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  78. package/scripts/benchmark-memoria.js +167 -167
  79. package/scripts/configurar-branch-protection.js +418 -418
  80. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  81. package/scripts/field-report.js +199 -199
  82. package/scripts/generar-checklists-consolidados.js +273 -273
  83. package/scripts/generar-inventario.js +420 -420
  84. package/scripts/generar-matriz-lenguajes.js +271 -271
  85. package/scripts/lib/artefactos-python.js +43 -43
  86. package/scripts/lib/benchmark-metrics.js +160 -160
  87. package/scripts/lib/budget-enforcer.js +252 -252
  88. package/scripts/lib/configurar-ci.js +380 -380
  89. package/scripts/lib/contadores-inventario.js +217 -217
  90. package/scripts/lib/detectar-stack-detallado.js +307 -307
  91. package/scripts/lib/diary-entry.js +234 -234
  92. package/scripts/lib/eval-metrics-store.js +218 -218
  93. package/scripts/lib/eval-quality.js +171 -171
  94. package/scripts/lib/eval-schemas.js +144 -144
  95. package/scripts/lib/eval-self-correct.js +106 -106
  96. package/scripts/lib/eval-validator.js +185 -185
  97. package/scripts/lib/jaccard-similarity.js +98 -98
  98. package/scripts/lib/longmemeval-runner.js +125 -125
  99. package/scripts/lib/manifiestos.js +42 -1
  100. package/scripts/lib/npm-version.js +261 -261
  101. package/scripts/lib/paquetes-conocidos.js +50 -50
  102. package/scripts/lib/prompt-builder.js +264 -264
  103. package/scripts/lib/rrf-fusion.js +175 -175
  104. package/scripts/lib/scoring-instintos.js +277 -277
  105. package/scripts/lib/semantic-search.js +252 -252
  106. package/scripts/limpiar-artefactos-python.js +131 -131
  107. package/scripts/mcp-server/README.md +128 -128
  108. package/scripts/mcp-server/handlers.js +206 -206
  109. package/scripts/migrar-csv-a-array.js +168 -168
  110. package/scripts/migrar-fase-dominio.js +201 -201
  111. package/scripts/publicar.js +511 -511
  112. package/scripts/run-eval.js +141 -141
  113. package/scripts/validar-manifest.js +231 -195
  114. package/scripts/validar-userland-vacio.js +110 -110
@@ -1,299 +1,299 @@
1
- ---
2
- name: harness-claude-code
3
- description: >
4
- Disciplina operacional del harness de Claude Code para reducir consumo de
5
- tokens y proteger el cache de prompt. Cubre las 4 causas raíz de quemar
6
- cuota antes de tiempo (cache misses, context bloat, modelo/effort
7
- incorrecto, formato de input ineficiente), 5 session moves (compact,
8
- clear, rewind, sub-agentes, skills as agents), variables de entorno
9
- recomendadas, tag files con @, /effort per-prompt y route-out a OpenRouter.
10
- Cargar cuando el usuario reporte "se acabó la cuota", se prepare una
11
- sesión Opus larga (>2h), se planifique adopción de MCP servers, o se
12
- detecte context-rot recurrente.
13
- version: "1.0.0"
14
- evolved: false
15
- herramientasPermitidas: [Read]
16
- exclusiones:
17
- - "No cargar para teoría general de context-rot y compactación — usar `compactacion-contexto`. Este skill cubre operación day-to-day del harness Claude Code; aquel cubre principios de gestión de contexto independientes de la herramienta."
18
- - "No cargar para diseño/escritura de skills SWL — usar `meta-skills-estandar` y `reglas/skills-estandar.md`. Este skill cubre uso eficiente de skills, no su construcción."
19
- - "No cargar para resolución de errores específicos del runtime (CLI no arranca, MCP no conecta) — esos son problemas técnicos del CLI, no del harness operacional."
20
- - "No cargar para análisis de costo histórico o dashboards — usar `swl-dashboard` o `/swl:metricas`. Este skill cubre PREVENCIÓN del gasto excesivo, no el reporte post-hoc."
21
- evolvable: true
22
- ---
23
-
24
- # Harness Claude Code — disciplina operacional
25
-
26
- Origen: artículo "Claude Code's Limits Are Generous. The Problem Is Your
27
- Harness." más experiencia operativa SWL.
28
-
29
- Tesis: los límites de Claude Code Max son generosos. Si te quedaste sin
30
- cuota antes de tiempo, no es Anthropic — es tu harness (configuración +
31
- sesión + tools + modelo + formato de input). Cuatro causas raíz, todas
32
- del lado del usuario.
33
-
34
- ## Cuándo cargar
35
-
36
- - El usuario reporta "se acabó la cuota antes de tiempo".
37
- - Se diagnostica una sesión con context-rot recurrente o alertas críticas
38
- falsas/persistentes.
39
- - Se prepara una sesión Opus larga (>2h) o adopción de MCP servers nuevos.
40
- - Se va a ejecutar un workflow agéntico complejo y se quiere protección
41
- proactiva del cache.
42
-
43
- ## Cuándo NO cargar
44
-
45
- - La tarea es entender principios generales de compactación de contexto
46
- independientes del tool — usar `compactacion-contexto`.
47
- - Se va a escribir un skill SWL nuevo — usar `meta-skills-estandar`.
48
- - El problema es un error del runtime (CLI no inicia, MCP no responde) —
49
- ese es problema técnico, no operacional.
50
- - Se quiere ver costo histórico — usar `swl-dashboard` o `/swl:metricas`.
51
-
52
- ---
53
-
54
- ## Las 4 causas raíz
55
-
56
- ### 1. Cache misses
57
-
58
- El prompt cache es la palanca económica más grande:
59
-
60
- | Operación | Costo |
61
- |-----------|-------|
62
- | Cache read | 0.1× (90% descuento) |
63
- | Cache write 5min | 1.25× |
64
- | Cache write 1h | 2× (solo API) |
65
- | Cache refresh on hit | gratis |
66
-
67
- Cada hit resetea el TTL sin costo. El prefijo se mantiene caliente mientras
68
- no cambie. **Hit rate sano: ~90% en 5-min default.**
69
-
70
- **Reglas operacionales** (ver también `reglas/harness-claude-code.md`):
71
-
72
- - NO agregar/quitar MCP servers mid-session
73
- - NO usar `/model` mid-session
74
- - NO modificar tools permitidos mid-session
75
- - Si necesitas cambio: `/clear` y reinicia
76
-
77
- Si el hit rate cae bajo 80%, algo en el harness está invalidando el prefijo
78
- entre turnos. Investigar antes de seguir trabajando.
79
-
80
- ### 2. Context bloat
81
-
82
- Para Opus 4.7 el default es 1M context. Es caro y rara vez necesario.
83
-
84
- **Variables de entorno recomendadas** para sesiones largas:
85
-
86
- ```jsonc
87
- // .claude/settings.json
88
- {
89
- "env": {
90
- "CLAUDE_CODE_DISABLE_1M_CONTEXT": "1", // 200K en lugar de 1M
91
- "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "80" // auto-compact al 80%
92
- }
93
- }
94
- ```
95
-
96
- NO son universales — solo si el codebase no requiere 1M y se ve context
97
- bloat real. Para sesiones que sí necesitan 1M (análisis de codebase
98
- masivo), dejar el default.
99
-
100
- ### 3. Modelo y effort incorrectos
101
-
102
- **3 dials separados**: modelo de sesión, modelo de delegación, effort por prompt.
103
-
104
- **Modelo de sesión** (lock al inicio):
105
- - Sonnet session: barato; sin acceso a Opus en padre. Bueno si todo cabe en Sonnet.
106
- - Opus session + delegate: padre con Opus para planning/tradeoffs; sub-agentes
107
- Sonnet/Haiku para tactical work. Default para trabajo mixto.
108
-
109
- **`/effort` per-prompt** (no per-session):
110
-
111
- | Level | Cuándo |
112
- |-------|--------|
113
- | `/effort low` | fixes rápidos, tareas mecánicas |
114
- | `/effort medium` | la mayoría de prompts (gran ahorro vs default) |
115
- | `/effort high` | razonamiento exigente |
116
- | `/effort xhigh` | default para coding agéntico Opus 4.7 |
117
- | `/effort max` | diminishing returns; raramente vale 2× costo extra |
118
-
119
- ### 4. Formato de input ineficiente
120
-
121
- | Input | Costo bruto | Solución |
122
- |-------|-------------|----------|
123
- | PDF directo via Read tool | Carga como imagen, ~10× tokens | `pdftotext` o `markitdown` ANTES |
124
- | Página web dinámica | Playwright + screenshots | `agent-browser` (~82% menos tokens) |
125
- | Codebase grande (>500 archivos) | Re-lectura completa cada review | `code-review-graph` pip (6.8-49× menos tokens) |
126
- | Vague prompt | Múltiples turnos para clarificar | Spec prompt: rutas, componentes, I/O, restricciones |
127
-
128
- ---
129
-
130
- ## Las 5 session moves
131
-
132
- ### Move 1 — `/compact` proactivo al 50% o tras cada tarea grande
133
-
134
- NO esperes al auto-compact. El auto dispara tarde, empuja el contexto
135
- sobre el threshold y obliga a recargar prefijo.
136
-
137
- ### Move 2 — `/clear` entre tareas no relacionadas
138
-
139
- Sesión nueva = prefijo fresco. Si pasas de frontend a backend, abre nueva.
140
-
141
- ### Move 3 — `/rewind` cuando un turno salió mal
142
-
143
- Más barato que pelear con contexto contaminado. Especialmente útil tras
144
- una respuesta del modelo que tomó dirección incorrecta.
145
-
146
- ### Move 4 — Sub-agentes para trabajo paralelizable o bulk
147
-
148
- Bloque a copiar en CLAUDE.md del proyecto:
149
-
150
- ```markdown
151
- ## Task Delegation
152
-
153
- Spawn sub-agentes para aislar contexto, paralelizar trabajo
154
- independiente o procesar tareas bulk-mecánicas. NO spawnear cuando el
155
- padre necesita el razonamiento, cuando la síntesis requiere mantener
156
- todo junto, o cuando el spawn overhead domina.
157
-
158
- Modelo más barato que pueda hacer la subtarea bien:
159
- - Haiku: bulk mecánico, sin juicio
160
- - Sonnet: research scoped, exploración de código, síntesis in-scope
161
- - Opus: subtareas con planning real o tradeoffs
162
-
163
- Si un sub-agente detecta que necesita un tier más alto que el suyo,
164
- regresa al padre. El padre es dueño del output final y la síntesis
165
- cross-spawn.
166
- ```
167
-
168
- ### Move 5 — Skills as agents (`agent: true` + `model:`)
169
-
170
- Patrón Anthropic nativo: agregar `agent: true` y `model:` al frontmatter
171
- de un SKILL.md y el skill se ejecuta en su propio sub-agente con su
172
- propio modelo.
173
-
174
- Ejemplo: skill `tldr-pdf` con `agent: true, model: sonnet`. El padre le
175
- pasa una ruta de PDF; el skill extrae con `pdftotext`, lee el output,
176
- devuelve 200 palabras al padre. El PDF completo nunca toca el contexto
177
- del padre.
178
-
179
- Útil para: procesamiento de archivos grandes, búsqueda en codebase,
180
- extracción de bullets de docs largos. Ver detalles en
181
- `Skill("meta-skills-estandar")` sección "Skills as agents".
182
-
183
- ---
184
-
185
- ## Tag files con `@`
186
-
187
- En lugar de pedirle a Claude que busque, dale la ruta directamente:
188
- `@ docs/diseno.md ¿qué cambios hace falta para X?` evita tool calls de
189
- Glob/Grep — es 1 sola lectura.
190
-
191
- ---
192
-
193
- ## Route in vs route out
194
-
195
- ### Route in — modelo del padre en CLAUDE.md
196
-
197
- Documenta delegación explícita en CLAUDE.md del proyecto. Opus 4.7
198
- delega menos por defecto que 4.6, hay que pedirlo de forma explícita
199
- (ver bloque de Task Delegation arriba).
200
-
201
- ### Route out — usar otro provider
202
-
203
- Si llegas al límite de Pro/Max/Team pero quieres mantener la interfaz de
204
- Claude Code:
205
-
206
- ```jsonc
207
- // .claude/settings.json
208
- {
209
- "env": {
210
- "ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
211
- "ANTHROPIC_AUTH_TOKEN": "{API-KEY}",
212
- "ANTHROPIC_API_KEY": ""
213
- },
214
- "model": "z-ai/glm-5.1"
215
- }
216
- ```
217
-
218
- GLM-5.1 ≈ Opus a ~1/12× del costo. Trade-off: cambias de modelo, sí o
219
- sí pierdes el cache cuando vuelves a Anthropic.
220
-
221
- ---
222
-
223
- ## Watch the number — cómo medir
224
-
225
- | Necesidad | Herramienta |
226
- |-----------|-------------|
227
- | Histórico Pro/Max/Team | `/swl:dashboard` (basado en `phuryn/claude-usage`) |
228
- | Tokens/costo de la sesión actual | `/swl:metricas` |
229
- | Porcentaje de contexto usado en vivo | `hooks/linea-estado.js` (status bar) |
230
- | Alertas cuando contexto se llena | `hooks/monitor-contexto.js` (WARNING ≥65%, CRITICAL ≥75%) |
231
- | Hit rate de cache (API users) | `platform.claude.com/usage/cache` |
232
-
233
- Sin observar la métrica, no puedes optimizarla.
234
-
235
- ---
236
-
237
- ## Carga lean — qué desactivar
238
-
239
- - MCP servers que no se usan en el proyecto actual.
240
- - Skills oficiales de Anthropic que no aplican al stack.
241
- - Tools permitidos: solo los necesarios. Cada tool extra alarga el
242
- system prompt y reduce el ratio cache hit.
243
- - Reglas largas en CLAUDE.md → mover a skills (progressive disclosure
244
- SWL ya lo hace por defecto).
245
-
246
- ---
247
-
248
- ## Anti-patrones
249
-
250
- - **Invocar Claude Code y luego decidir el modelo**: invalida cache.
251
- - **MCP server "temporal" agregado durante la sesión**: el costo de
252
- invalidar el prefijo supera lo que el server aporta.
253
- - **`/effort max` por reflejo**: 2× costo sin mejora observable salvo
254
- en tareas de razonamiento profundo.
255
- - **PDFs vía Read sin pre-procesar**: ~10× tokens vs `markitdown`.
256
- - **Pedir a Claude que busque archivos que ya conoces**: gasta tool
257
- calls innecesarios. Usa `@ ruta.md`.
258
- - **No usar `/compact`** y esperar al auto-compact: dispara tarde y caro.
259
- - **Cambiar de modelo a media sesión**: invalida cache + pierde
260
- contexto coherente.
261
-
262
- ---
263
-
264
- ## Gotchas / Errores comunes no obvios
265
-
266
- - **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1` aplicado por default a todos los proyectos**: causa truncado de contexto en sesiones que sí requieren 1M (análisis masivo de codebase, refactor cross-module). Causa: tomar la recomendación del artículo como universal. Solución: aplicar SOLO en proyectos donde se observe context bloat real. Para análisis profundos, dejar el default 1M.
267
- - **Sub-agentes Sonnet/Haiku que delegan al padre Opus pidiendo "más razonamiento"**: el padre acaba haciendo el trabajo que se quería offloadear. Causa: spec del sub-agente vaga. Solución: el padre debe hacer una spec clara con criterios de aceptación; sub-agentes solo escalan si encuentran tradeoff arquitectónico explícito, no por dificultad genérica.
268
- - **`/clear` mid-session destruye el plan en curso**: usuario pierde el roadmap acumulado. Causa: confundir `/clear` con `/compact`. Solución: `/compact` resume manteniendo conocimiento; `/clear` empieza desde cero. Antes de `/clear`, escribir un handoff a `.planning/COMPACTACION.md` con `/swl:compactar`.
269
- - **Tag files con `@` apuntando a archivos enormes**: Claude carga el archivo completo en contexto aunque solo necesite una sección. Causa: usar `@` con archivos >500 líneas. Solución: para archivos grandes, citar sección específica en el prompt (`@ src/auth.py líneas 100-150`) o pre-extraer con `Read offset/limit`.
270
- - **`/effort high` que se queda activo en prompts simples**: el siguiente prompt trivial gasta 2× tokens innecesarios. Causa: el effort se interpreta como "session-wide" cuando es per-prompt. Solución: explícito `/effort medium` (o lo que aplique) en el siguiente prompt si la complejidad bajó.
271
-
272
- ---
273
-
274
- ## Integración con SWL
275
-
276
- Componentes SWL que cubren necesidades de harness: `/swl:compactar`,
277
- `/swl:checkpoint`, `/swl:dashboard`, `/swl:metricas`, `/swl:modelo`,
278
- `/swl:contexto`, hooks `linea-estado.js` + `monitor-contexto.js`,
279
- `/swl:revisar-impacto` (meta-grafo del sistema SWL) y `code-review-graph`
280
- pip (opt-in para codebase del usuario, ver `MANUAL_USO.md`).
281
-
282
- Cargar este skill cuando esos componentes no son suficientes y hace falta
283
- el modelo mental completo del harness.
284
-
285
- ---
286
-
287
- ## Checklist antes de iniciar sesión Opus larga
288
-
289
- - [ ] `.claude/settings.json` con todos los MCP necesarios YA configurados
290
- - [ ] Modelo elegido y bloqueado (no se cambiará durante la sesión)
291
- - [ ] Tools permitidos definidos antes de iniciar
292
- - [ ] `CLAUDE_CODE_DISABLE_1M_CONTEXT` y `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`
293
- configurados si la sesión es larga sin necesidad de 1M
294
- - [ ] Plan de delegación claro (qué se manda a sub-agente, qué se mantiene
295
- en el padre)
296
- - [ ] PDFs/Office docs pre-procesados con `markitdown`
297
- - [ ] Para repos grandes: `code-review-graph` instalado y `build` ejecutado
298
- - [ ] CLAUDE.md del proyecto con bloque de Task Delegation
299
- - [ ] Saber dónde ver métricas durante la sesión (`/swl:metricas`)
1
+ ---
2
+ name: harness-claude-code
3
+ description: >
4
+ Disciplina operacional del harness de Claude Code para reducir consumo de
5
+ tokens y proteger el cache de prompt. Cubre las 4 causas raíz de quemar
6
+ cuota antes de tiempo (cache misses, context bloat, modelo/effort
7
+ incorrecto, formato de input ineficiente), 5 session moves (compact,
8
+ clear, rewind, sub-agentes, skills as agents), variables de entorno
9
+ recomendadas, tag files con @, /effort per-prompt y route-out a OpenRouter.
10
+ Cargar cuando el usuario reporte "se acabó la cuota", se prepare una
11
+ sesión Opus larga (>2h), se planifique adopción de MCP servers, o se
12
+ detecte context-rot recurrente.
13
+ version: "1.0.0"
14
+ evolved: false
15
+ herramientasPermitidas: [Read]
16
+ exclusiones:
17
+ - "No cargar para teoría general de context-rot y compactación — usar `compactacion-contexto`. Este skill cubre operación day-to-day del harness Claude Code; aquel cubre principios de gestión de contexto independientes de la herramienta."
18
+ - "No cargar para diseño/escritura de skills SWL — usar `meta-skills-estandar` y `reglas/skills-estandar.md`. Este skill cubre uso eficiente de skills, no su construcción."
19
+ - "No cargar para resolución de errores específicos del runtime (CLI no arranca, MCP no conecta) — esos son problemas técnicos del CLI, no del harness operacional."
20
+ - "No cargar para análisis de costo histórico o dashboards — usar `swl-dashboard` o `/swl:metricas`. Este skill cubre PREVENCIÓN del gasto excesivo, no el reporte post-hoc."
21
+ evolvable: true
22
+ ---
23
+
24
+ # Harness Claude Code — disciplina operacional
25
+
26
+ Origen: artículo "Claude Code's Limits Are Generous. The Problem Is Your
27
+ Harness." más experiencia operativa SWL.
28
+
29
+ Tesis: los límites de Claude Code Max son generosos. Si te quedaste sin
30
+ cuota antes de tiempo, no es Anthropic — es tu harness (configuración +
31
+ sesión + tools + modelo + formato de input). Cuatro causas raíz, todas
32
+ del lado del usuario.
33
+
34
+ ## Cuándo cargar
35
+
36
+ - El usuario reporta "se acabó la cuota antes de tiempo".
37
+ - Se diagnostica una sesión con context-rot recurrente o alertas críticas
38
+ falsas/persistentes.
39
+ - Se prepara una sesión Opus larga (>2h) o adopción de MCP servers nuevos.
40
+ - Se va a ejecutar un workflow agéntico complejo y se quiere protección
41
+ proactiva del cache.
42
+
43
+ ## Cuándo NO cargar
44
+
45
+ - La tarea es entender principios generales de compactación de contexto
46
+ independientes del tool — usar `compactacion-contexto`.
47
+ - Se va a escribir un skill SWL nuevo — usar `meta-skills-estandar`.
48
+ - El problema es un error del runtime (CLI no inicia, MCP no responde) —
49
+ ese es problema técnico, no operacional.
50
+ - Se quiere ver costo histórico — usar `swl-dashboard` o `/swl:metricas`.
51
+
52
+ ---
53
+
54
+ ## Las 4 causas raíz
55
+
56
+ ### 1. Cache misses
57
+
58
+ El prompt cache es la palanca económica más grande:
59
+
60
+ | Operación | Costo |
61
+ |-----------|-------|
62
+ | Cache read | 0.1× (90% descuento) |
63
+ | Cache write 5min | 1.25× |
64
+ | Cache write 1h | 2× (solo API) |
65
+ | Cache refresh on hit | gratis |
66
+
67
+ Cada hit resetea el TTL sin costo. El prefijo se mantiene caliente mientras
68
+ no cambie. **Hit rate sano: ~90% en 5-min default.**
69
+
70
+ **Reglas operacionales** (ver también `reglas/harness-claude-code.md`):
71
+
72
+ - NO agregar/quitar MCP servers mid-session
73
+ - NO usar `/model` mid-session
74
+ - NO modificar tools permitidos mid-session
75
+ - Si necesitas cambio: `/clear` y reinicia
76
+
77
+ Si el hit rate cae bajo 80%, algo en el harness está invalidando el prefijo
78
+ entre turnos. Investigar antes de seguir trabajando.
79
+
80
+ ### 2. Context bloat
81
+
82
+ Para Opus 4.7 el default es 1M context. Es caro y rara vez necesario.
83
+
84
+ **Variables de entorno recomendadas** para sesiones largas:
85
+
86
+ ```jsonc
87
+ // .claude/settings.json
88
+ {
89
+ "env": {
90
+ "CLAUDE_CODE_DISABLE_1M_CONTEXT": "1", // 200K en lugar de 1M
91
+ "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "80" // auto-compact al 80%
92
+ }
93
+ }
94
+ ```
95
+
96
+ NO son universales — solo si el codebase no requiere 1M y se ve context
97
+ bloat real. Para sesiones que sí necesitan 1M (análisis de codebase
98
+ masivo), dejar el default.
99
+
100
+ ### 3. Modelo y effort incorrectos
101
+
102
+ **3 dials separados**: modelo de sesión, modelo de delegación, effort por prompt.
103
+
104
+ **Modelo de sesión** (lock al inicio):
105
+ - Sonnet session: barato; sin acceso a Opus en padre. Bueno si todo cabe en Sonnet.
106
+ - Opus session + delegate: padre con Opus para planning/tradeoffs; sub-agentes
107
+ Sonnet/Haiku para tactical work. Default para trabajo mixto.
108
+
109
+ **`/effort` per-prompt** (no per-session):
110
+
111
+ | Level | Cuándo |
112
+ |-------|--------|
113
+ | `/effort low` | fixes rápidos, tareas mecánicas |
114
+ | `/effort medium` | la mayoría de prompts (gran ahorro vs default) |
115
+ | `/effort high` | razonamiento exigente |
116
+ | `/effort xhigh` | default para coding agéntico Opus 4.7 |
117
+ | `/effort max` | diminishing returns; raramente vale 2× costo extra |
118
+
119
+ ### 4. Formato de input ineficiente
120
+
121
+ | Input | Costo bruto | Solución |
122
+ |-------|-------------|----------|
123
+ | PDF directo via Read tool | Carga como imagen, ~10× tokens | `pdftotext` o `markitdown` ANTES |
124
+ | Página web dinámica | Playwright + screenshots | `agent-browser` (~82% menos tokens) |
125
+ | Codebase grande (>500 archivos) | Re-lectura completa cada review | `code-review-graph` pip (6.8-49× menos tokens) |
126
+ | Vague prompt | Múltiples turnos para clarificar | Spec prompt: rutas, componentes, I/O, restricciones |
127
+
128
+ ---
129
+
130
+ ## Las 5 session moves
131
+
132
+ ### Move 1 — `/compact` proactivo al 50% o tras cada tarea grande
133
+
134
+ NO esperes al auto-compact. El auto dispara tarde, empuja el contexto
135
+ sobre el threshold y obliga a recargar prefijo.
136
+
137
+ ### Move 2 — `/clear` entre tareas no relacionadas
138
+
139
+ Sesión nueva = prefijo fresco. Si pasas de frontend a backend, abre nueva.
140
+
141
+ ### Move 3 — `/rewind` cuando un turno salió mal
142
+
143
+ Más barato que pelear con contexto contaminado. Especialmente útil tras
144
+ una respuesta del modelo que tomó dirección incorrecta.
145
+
146
+ ### Move 4 — Sub-agentes para trabajo paralelizable o bulk
147
+
148
+ Bloque a copiar en CLAUDE.md del proyecto:
149
+
150
+ ```markdown
151
+ ## Task Delegation
152
+
153
+ Spawn sub-agentes para aislar contexto, paralelizar trabajo
154
+ independiente o procesar tareas bulk-mecánicas. NO spawnear cuando el
155
+ padre necesita el razonamiento, cuando la síntesis requiere mantener
156
+ todo junto, o cuando el spawn overhead domina.
157
+
158
+ Modelo más barato que pueda hacer la subtarea bien:
159
+ - Haiku: bulk mecánico, sin juicio
160
+ - Sonnet: research scoped, exploración de código, síntesis in-scope
161
+ - Opus: subtareas con planning real o tradeoffs
162
+
163
+ Si un sub-agente detecta que necesita un tier más alto que el suyo,
164
+ regresa al padre. El padre es dueño del output final y la síntesis
165
+ cross-spawn.
166
+ ```
167
+
168
+ ### Move 5 — Skills as agents (`agent: true` + `model:`)
169
+
170
+ Patrón Anthropic nativo: agregar `agent: true` y `model:` al frontmatter
171
+ de un SKILL.md y el skill se ejecuta en su propio sub-agente con su
172
+ propio modelo.
173
+
174
+ Ejemplo: skill `tldr-pdf` con `agent: true, model: sonnet`. El padre le
175
+ pasa una ruta de PDF; el skill extrae con `pdftotext`, lee el output,
176
+ devuelve 200 palabras al padre. El PDF completo nunca toca el contexto
177
+ del padre.
178
+
179
+ Útil para: procesamiento de archivos grandes, búsqueda en codebase,
180
+ extracción de bullets de docs largos. Ver detalles en
181
+ `Skill("meta-skills-estandar")` sección "Skills as agents".
182
+
183
+ ---
184
+
185
+ ## Tag files con `@`
186
+
187
+ En lugar de pedirle a Claude que busque, dale la ruta directamente:
188
+ `@ docs/diseno.md ¿qué cambios hace falta para X?` evita tool calls de
189
+ Glob/Grep — es 1 sola lectura.
190
+
191
+ ---
192
+
193
+ ## Route in vs route out
194
+
195
+ ### Route in — modelo del padre en CLAUDE.md
196
+
197
+ Documenta delegación explícita en CLAUDE.md del proyecto. Opus 4.7
198
+ delega menos por defecto que 4.6, hay que pedirlo de forma explícita
199
+ (ver bloque de Task Delegation arriba).
200
+
201
+ ### Route out — usar otro provider
202
+
203
+ Si llegas al límite de Pro/Max/Team pero quieres mantener la interfaz de
204
+ Claude Code:
205
+
206
+ ```jsonc
207
+ // .claude/settings.json
208
+ {
209
+ "env": {
210
+ "ANTHROPIC_BASE_URL": "https://openrouter.ai/api",
211
+ "ANTHROPIC_AUTH_TOKEN": "{API-KEY}",
212
+ "ANTHROPIC_API_KEY": ""
213
+ },
214
+ "model": "z-ai/glm-5.1"
215
+ }
216
+ ```
217
+
218
+ GLM-5.1 ≈ Opus a ~1/12× del costo. Trade-off: cambias de modelo, sí o
219
+ sí pierdes el cache cuando vuelves a Anthropic.
220
+
221
+ ---
222
+
223
+ ## Watch the number — cómo medir
224
+
225
+ | Necesidad | Herramienta |
226
+ |-----------|-------------|
227
+ | Histórico Pro/Max/Team | `/swl:dashboard` (basado en `phuryn/claude-usage`) |
228
+ | Tokens/costo de la sesión actual | `/swl:metricas` |
229
+ | Porcentaje de contexto usado en vivo | `hooks/linea-estado.js` (status bar) |
230
+ | Alertas cuando contexto se llena | `hooks/monitor-contexto.js` (WARNING ≥65%, CRITICAL ≥75%) |
231
+ | Hit rate de cache (API users) | `platform.claude.com/usage/cache` |
232
+
233
+ Sin observar la métrica, no puedes optimizarla.
234
+
235
+ ---
236
+
237
+ ## Carga lean — qué desactivar
238
+
239
+ - MCP servers que no se usan en el proyecto actual.
240
+ - Skills oficiales de Anthropic que no aplican al stack.
241
+ - Tools permitidos: solo los necesarios. Cada tool extra alarga el
242
+ system prompt y reduce el ratio cache hit.
243
+ - Reglas largas en CLAUDE.md → mover a skills (progressive disclosure
244
+ SWL ya lo hace por defecto).
245
+
246
+ ---
247
+
248
+ ## Anti-patrones
249
+
250
+ - **Invocar Claude Code y luego decidir el modelo**: invalida cache.
251
+ - **MCP server "temporal" agregado durante la sesión**: el costo de
252
+ invalidar el prefijo supera lo que el server aporta.
253
+ - **`/effort max` por reflejo**: 2× costo sin mejora observable salvo
254
+ en tareas de razonamiento profundo.
255
+ - **PDFs vía Read sin pre-procesar**: ~10× tokens vs `markitdown`.
256
+ - **Pedir a Claude que busque archivos que ya conoces**: gasta tool
257
+ calls innecesarios. Usa `@ ruta.md`.
258
+ - **No usar `/compact`** y esperar al auto-compact: dispara tarde y caro.
259
+ - **Cambiar de modelo a media sesión**: invalida cache + pierde
260
+ contexto coherente.
261
+
262
+ ---
263
+
264
+ ## Gotchas / Errores comunes no obvios
265
+
266
+ - **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1` aplicado por default a todos los proyectos**: causa truncado de contexto en sesiones que sí requieren 1M (análisis masivo de codebase, refactor cross-module). Causa: tomar la recomendación del artículo como universal. Solución: aplicar SOLO en proyectos donde se observe context bloat real. Para análisis profundos, dejar el default 1M.
267
+ - **Sub-agentes Sonnet/Haiku que delegan al padre Opus pidiendo "más razonamiento"**: el padre acaba haciendo el trabajo que se quería offloadear. Causa: spec del sub-agente vaga. Solución: el padre debe hacer una spec clara con criterios de aceptación; sub-agentes solo escalan si encuentran tradeoff arquitectónico explícito, no por dificultad genérica.
268
+ - **`/clear` mid-session destruye el plan en curso**: usuario pierde el roadmap acumulado. Causa: confundir `/clear` con `/compact`. Solución: `/compact` resume manteniendo conocimiento; `/clear` empieza desde cero. Antes de `/clear`, escribir un handoff a `.planning/COMPACTACION.md` con `/swl:compactar`.
269
+ - **Tag files con `@` apuntando a archivos enormes**: Claude carga el archivo completo en contexto aunque solo necesite una sección. Causa: usar `@` con archivos >500 líneas. Solución: para archivos grandes, citar sección específica en el prompt (`@ src/auth.py líneas 100-150`) o pre-extraer con `Read offset/limit`.
270
+ - **`/effort high` que se queda activo en prompts simples**: el siguiente prompt trivial gasta 2× tokens innecesarios. Causa: el effort se interpreta como "session-wide" cuando es per-prompt. Solución: explícito `/effort medium` (o lo que aplique) en el siguiente prompt si la complejidad bajó.
271
+
272
+ ---
273
+
274
+ ## Integración con SWL
275
+
276
+ Componentes SWL que cubren necesidades de harness: `/swl:compactar`,
277
+ `/swl:checkpoint`, `/swl:dashboard`, `/swl:metricas`, `/swl:modelo`,
278
+ `/swl:contexto`, hooks `linea-estado.js` + `monitor-contexto.js`,
279
+ `/swl:revisar-impacto` (meta-grafo del sistema SWL) y `code-review-graph`
280
+ pip (opt-in para codebase del usuario, ver `MANUAL_USO.md`).
281
+
282
+ Cargar este skill cuando esos componentes no son suficientes y hace falta
283
+ el modelo mental completo del harness.
284
+
285
+ ---
286
+
287
+ ## Checklist antes de iniciar sesión Opus larga
288
+
289
+ - [ ] `.claude/settings.json` con todos los MCP necesarios YA configurados
290
+ - [ ] Modelo elegido y bloqueado (no se cambiará durante la sesión)
291
+ - [ ] Tools permitidos definidos antes de iniciar
292
+ - [ ] `CLAUDE_CODE_DISABLE_1M_CONTEXT` y `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`
293
+ configurados si la sesión es larga sin necesidad de 1M
294
+ - [ ] Plan de delegación claro (qué se manda a sub-agente, qué se mantiene
295
+ en el padre)
296
+ - [ ] PDFs/Office docs pre-procesados con `markitdown`
297
+ - [ ] Para repos grandes: `code-review-graph` instalado y `build` ejecutado
298
+ - [ ] CLAUDE.md del proyecto con bloque de Task Delegation
299
+ - [ ] Saber dónde ver métricas durante la sesión (`/swl:metricas`)