@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.
- package/CLAUDE.md +1 -1
- package/README.md +1 -1
- package/agentes/nemesis-auditor-swl.md +161 -161
- package/bin/swl-mcp-server.js +187 -187
- package/comandos/swl/.evolved.json +22 -22
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/nemesis.md +122 -122
- package/gateway/lib/event-channel.js +191 -191
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/benchmark-memoria/SKILL.md +186 -186
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/SKILL.md +171 -171
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/eval-framework/SKILL.md +212 -212
- package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
- package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
- package/habilidades/harness-claude-code/SKILL.md +299 -299
- package/habilidades/infra-github-actions/SKILL.md +166 -166
- package/habilidades/legacy-code-rescue/SKILL.md +267 -267
- package/habilidades/manejo-errores/.evolved.json +8 -8
- package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
- package/habilidades/patrones-python/SKILL.md +229 -229
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
- package/habilidades/planear-fase/SKILL.md +319 -319
- package/habilidades/release-semver/.evolved.json +8 -8
- package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
- package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
- package/habilidades/testing-python/SKILL.md +340 -340
- package/habilidades/web-fetcher-routing/SKILL.md +75 -75
- package/hooks/claudemd-bloat-detector.js +161 -161
- package/hooks/lib/agent-routing.js +107 -107
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/error-classifier.js +308 -308
- package/hooks/lib/merkle-audit.js +96 -96
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/rate-limit-tracker.js +253 -253
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/security-net.js +201 -201
- package/hooks/lib/skill-auditor.js +588 -588
- package/hooks/lib/sync-status.js +228 -228
- package/hooks/lib/taint-tracker.js +107 -107
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/registro-turnos.js +209 -209
- package/hooks/sugerir-regenerar-inventario.js +170 -170
- package/hooks/validar-formato-post-subagente.js +140 -140
- package/hooks/validar-memoria-hook.js +218 -218
- package/instintos/prompt-appendices.yaml +57 -57
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/modulos.json +11 -6
- package/manifiestos/perfiles.json +2 -1
- package/manifiestos/skills-lock.json +1114 -1114
- package/package.json +1 -1
- package/plantillas/auditor-veto-template.md +105 -105
- package/plantillas/github-workflows/README.md +47 -47
- package/plantillas/github-workflows/release-please.yml +44 -44
- package/plantillas/github-workflows/swl-ci.yml +107 -107
- package/plantillas/github-workflows/swl-security.yml +51 -51
- package/plugin.json +9 -1
- package/reglas/analisis-previo-tareas-grandes.md +172 -172
- package/reglas/arreglar-al-detectar.md +147 -147
- package/reglas/fragmentos-compartidos.md +152 -152
- package/reglas/harness-claude-code.md +213 -213
- package/reglas/usar-context7.md +226 -226
- package/schemas/diary-entry.schema.json +80 -80
- package/scripts/audit-tools/audit-history.js +330 -330
- package/scripts/audit-tools/bundle-tracker.js +290 -290
- package/scripts/audit-tools/canary-monitor.js +352 -352
- package/scripts/audit-tools/code-profiler.js +605 -605
- package/scripts/audit-tools/dep-doctor.js +320 -320
- package/scripts/audit-tools/env-validator.js +206 -206
- package/scripts/audit-tools/lib/fs-walk.js +48 -48
- package/scripts/audit-tools/lib/output.js +23 -23
- package/scripts/audit-tools/migration-checker.js +392 -392
- package/scripts/audit-tools/pentest-scanner.js +1436 -1436
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/field-report.js +199 -199
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-inventario.js +420 -420
- package/scripts/generar-matriz-lenguajes.js +271 -271
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/configurar-ci.js +380 -380
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-stack-detallado.js +307 -307
- package/scripts/lib/diary-entry.js +234 -234
- package/scripts/lib/eval-metrics-store.js +218 -218
- package/scripts/lib/eval-quality.js +171 -171
- package/scripts/lib/eval-schemas.js +144 -144
- package/scripts/lib/eval-self-correct.js +106 -106
- package/scripts/lib/eval-validator.js +185 -185
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/manifiestos.js +42 -1
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/scoring-instintos.js +277 -277
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-server/README.md +128 -128
- package/scripts/mcp-server/handlers.js +206 -206
- package/scripts/migrar-csv-a-array.js +168 -168
- package/scripts/migrar-fase-dominio.js +201 -201
- package/scripts/publicar.js +511 -511
- package/scripts/run-eval.js +141 -141
- package/scripts/validar-manifest.js +231 -195
- 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`)
|