@saulwade/swl-ses 1.9.0 → 2.0.0
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 +8 -8
- package/README.md +12 -12
- package/agentes/accesibilidad-wcag-swl.md +3 -3
- package/agentes/auto-evolucion-swl.md +908 -908
- package/agentes/disenador-ui-swl.md +6 -5
- package/agentes/frontend-angular-swl.md +2 -2
- package/agentes/frontend-css-swl.md +2 -2
- package/agentes/frontend-react-swl.md +4 -4
- package/agentes/frontend-swl.md +6 -6
- package/agentes/investigador-ux-swl.md +5 -5
- package/agentes/orquestador-swl.md +7 -7
- package/agentes/perfilador-usuario-swl.md +308 -308
- package/agentes/producto-prd-swl.md +1 -1
- package/agentes/red-team-swl.md +218 -218
- package/agentes/tdd-qa-swl.md +17 -1
- package/comandos/swl/actualizar.md +1 -1
- package/comandos/swl/aprender.md +2 -2
- package/comandos/swl/aprobar-plan.md +152 -0
- package/comandos/swl/ayuda.md +3 -3
- package/comandos/swl/discutir-fase.md +20 -2
- package/comandos/swl/ejecutar-fase.md +53 -6
- package/comandos/swl/evolucionar.md +1 -1
- package/comandos/swl/inbox.md +1 -1
- package/comandos/swl/instalar.md +1 -1
- package/comandos/swl/nemesis.md +1 -1
- package/comandos/swl/planear-fase.md +17 -1
- package/comandos/swl/plugins.md +1 -1
- package/comandos/swl/release.md +1 -1
- package/comandos/swl/status.md +279 -0
- package/comandos/swl/verificar.md +26 -1
- package/habilidades/ai-runtime-security/SKILL.md +1 -1
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
- package/habilidades/benchmark-memoria/SKILL.md +1 -1
- package/habilidades/calidad-contract-testing/SKILL.md +165 -0
- package/habilidades/changelog-generator/SKILL.md +9 -2
- package/habilidades/changelog-generator/scripts/parse-commits.js +11 -1
- package/habilidades/diagrama-arquitectura/SKILL.md +1 -1
- package/habilidades/drift-detection/SKILL.md +179 -179
- package/habilidades/ejecutar-fase/SKILL.md +64 -14
- package/habilidades/estructura-proyecto-claude/SKILL.md +17 -14
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +34 -23
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +70 -53
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -77
- package/habilidades/extractor-de-aprendizajes/SKILL.md +9 -5
- package/habilidades/harness-claude-code/SKILL.md +10 -7
- package/{reglas/harness-claude-code.md → habilidades/harness-claude-code/recursos/disciplina-harness-regla.md} +2 -2
- package/habilidades/instalar-sistema/SKILL.md +3 -3
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +1 -1
- package/habilidades/perfil-usuario/SKILL.md +200 -200
- package/habilidades/planear-fase/SKILL.md +25 -4
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +1 -1
- package/habilidades/proceso-ddia-streaming/SKILL.md +4 -4
- package/habilidades/proceso-debate-adversarial/SKILL.md +2 -2
- package/habilidades/protocolo-revision-swl/SKILL.md +1 -1
- package/habilidades/seguridad-skills-ia/SKILL.md +1 -1
- package/habilidades/swl-claudemd/SKILL.md +50 -210
- package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -0
- package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -0
- package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -0
- package/habilidades/swl-dashboard/SKILL.md +9 -9
- package/habilidades/swl-revisar-impacto/SKILL.md +1 -1
- package/habilidades/tdd-workflow/SKILL.md +45 -5
- package/habilidades/validacion-ci-sistema/SKILL.md +3 -3
- package/hooks/calidad-pre-commit.js +340 -3
- package/hooks/ciclo-evolucion-subagente.js +26 -0
- package/hooks/ciclo-evolucion.js +26 -0
- package/hooks/extraccion-aprendizajes.js +13 -0
- package/hooks/lib/ciclo-evolucion.js +47 -0
- package/hooks/{auto-evolucion.js → lib/etapa-auto-evolucion.js} +701 -700
- package/hooks/{metricas-evolucion.js → lib/etapa-metricas.js} +388 -376
- package/hooks/{actualizar-perfil-usuario.js → lib/etapa-perfil-usuario.js} +376 -364
- package/hooks/lib/evolution-tracker.js +24 -3
- package/hooks/spec-gate.js +211 -0
- package/hooks/tdd-gate.js +241 -0
- package/hooks/validar-intent-spec.js +30 -10
- package/llms.txt +6 -6
- package/manifiestos/hooks-config.json +26 -17
- package/manifiestos/modulos.json +17 -14
- package/manifiestos/skills-lock.json +63 -56
- package/package.json +2 -2
- package/plugin.json +6 -10
- package/reglas/accesibilidad.md +10 -0
- package/reglas/api-diseno.md +9 -0
- package/reglas/auditorias-documentales-estructurales.md +7 -0
- package/reglas/cloud-infra.md +8 -0
- package/reglas/fragmentos-compartidos.md +5 -0
- package/reglas/gobernanza.md +4 -4
- package/reglas/hooks.md +6 -0
- package/reglas/intent-engineering.md +4 -0
- package/reglas/markitdown.md +8 -0
- package/reglas/memoria-consolidada.md +1 -1
- package/reglas/patrones.md +6 -0
- package/reglas/registro-componentes-nuevos.md +10 -1
- package/reglas/seguridad-agentes.md +1 -1
- package/reglas/skills-estandar.md +6 -0
- package/reglas/testing.md +7 -0
- package/reglas/tests-cleanup.md +4 -0
- package/reglas/usar-sistema-swl.md +1 -1
- package/scripts/lib/gitignore-manifest.js +29 -1
- package/scripts/lib/plan-lock.js +275 -0
- package/scripts/migrar-fase-dominio.js +0 -1
- package/scripts/verificar-trazabilidad.js +292 -0
- package/agentes/ux-disenador-swl.md +0 -503
- package/comandos/swl/dashboard.md +0 -146
- package/comandos/swl/evolucion-estado.md +0 -191
- package/comandos/swl/metricas.md +0 -376
- package/comandos/swl/salud.md +0 -481
- package/reglas/verificar-citas-temporales.md +0 -139
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ejecutar-fase
|
|
3
|
-
description: Ejecuta el PLAN.md de una fase con commits atómicos por tarea. Aplica reglas de desviación, maneja checkpoints HITL,
|
|
4
|
-
version: "1.
|
|
3
|
+
description: Ejecuta el PLAN.md de una fase con commits atómicos por tarea. Aplica reglas de desviación, maneja checkpoints HITL, ejecuta TDD por default con evidencia RED en telemetría (opt-out declarado), y mantiene ESTADO.md y HOJA-RUTA.md actualizados tras cada tarea completada.
|
|
4
|
+
version: "1.2.0"
|
|
5
5
|
herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
|
|
6
6
|
exclusiones:
|
|
7
7
|
- "No cargar si no existe PLAN.md con `estado: aprobado` — ejecutar `planear-fase` primero."
|
|
@@ -31,7 +31,7 @@ antipatrón de acumular cambios sin verificar y commitear "todo de golpe".
|
|
|
31
31
|
|
|
32
32
|
## Cuándo NO cargar
|
|
33
33
|
|
|
34
|
-
- No hay PLAN.md o el plan tiene `estado:
|
|
34
|
+
- No hay PLAN.md o el plan no tiene `estado: aprobado` — ejecutar `planear-fase` y aprobar con `/swl:aprobar-plan N` (firma el lock G1) antes de ejecutar.
|
|
35
35
|
- El objetivo es solo verificar calidad del trabajo ya implementado; usar `verificar-trabajo`.
|
|
36
36
|
- Hay un checkpoint `decision` o `human-action` sin resolver en ESTADO.md — resolver el checkpoint antes de continuar la ejecución.
|
|
37
37
|
- Se quiere ejecutar solo una sub-tarea fuera de la secuencia de oleadas del plan; hacerlo rompe el grafo de dependencias y el estado en ESTADO.md.
|
|
@@ -41,6 +41,26 @@ antipatrón de acumular cambios sin verificar y commitear "todo de golpe".
|
|
|
41
41
|
Leer `.planning/fases/0N-PLAN.md` y `.planning/ESTADO.md` (si existe) antes de
|
|
42
42
|
ejecutar la primera tarea.
|
|
43
43
|
|
|
44
|
+
### Gate G1 — integridad del plan firmado
|
|
45
|
+
|
|
46
|
+
Antes de la primera tarea Y al inicio de cada slice, verificar que el PLAN no
|
|
47
|
+
fue mutado tras su aprobación:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
node -e "const {verificarPlan}=require('./scripts/lib/plan-lock'); console.log(JSON.stringify(verificarPlan('.planning/fases/0N-PLAN.md')))"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
- `modo: "firmado"` → continuar.
|
|
54
|
+
- `modo: "legacy"` (plan aprobado sin lock, cláusula de gracia D-05 para planes
|
|
55
|
+
pre-Fase09) → advertencia visible al usuario y continuar sin verificación de
|
|
56
|
+
integridad. Para activar el gate: `/swl:aprobar-plan N`.
|
|
57
|
+
- `modo: "mutado"` → DETENER. El plan cambió tras la firma; reportar
|
|
58
|
+
`hashEsperado`/`hashActual` y remitir a `/swl:aprobar-plan N`.
|
|
59
|
+
- cualquier otro `ok: false` → DETENER y reportar el `motivo`.
|
|
60
|
+
|
|
61
|
+
La firma se escribe en `.planning/locks/0N-PLAN.md.lock` (versionado en git).
|
|
62
|
+
La única vía válida de aprobar+firmar es `/swl:aprobar-plan`.
|
|
63
|
+
|
|
44
64
|
---
|
|
45
65
|
|
|
46
66
|
## Protocolo de ejecución por tarea
|
|
@@ -146,11 +166,16 @@ Reglas:
|
|
|
146
166
|
- Detalle adicional si es necesario
|
|
147
167
|
- Referencia a la tarea del plan
|
|
148
168
|
|
|
149
|
-
|
|
169
|
+
Refs: REQ-NN[, REQ-MM]
|
|
150
170
|
```
|
|
151
171
|
|
|
152
172
|
Tipos de commit válidos: `feat`, `fix`, `test`, `refactor`, `docs`, `chore`, `migration`
|
|
153
173
|
|
|
174
|
+
El footer `Refs: REQ-NN` cierra la cadena de trazabilidad REQ→T→commit (G4):
|
|
175
|
+
lleva los REQ que la tarea declara en su campo `**Verifica REQ**` del PLAN.
|
|
176
|
+
Omitirlo solo en fases legacy sin REQ-IDs. SIN co-autores ni atribuciones a IA
|
|
177
|
+
(regla global `git-coauthor.md` — el único autor es el usuario).
|
|
178
|
+
|
|
154
179
|
---
|
|
155
180
|
|
|
156
181
|
## Modo Pipeline: acumulación de resultados entre tareas
|
|
@@ -267,23 +292,44 @@ B) [opción B]
|
|
|
267
292
|
|
|
268
293
|
---
|
|
269
294
|
|
|
270
|
-
## TDD
|
|
295
|
+
## TDD por default con evidencia RED (gate G2 — opt-out declarado)
|
|
296
|
+
|
|
297
|
+
TDD es **default ON** desde la Fase 10 (vNext H2). Solo se omite cuando el
|
|
298
|
+
CONTEXTO.md declara `**TDD**: off — razón: [...]` (excepción registrada en
|
|
299
|
+
AUDITORIA.md por `discutir-fase`). Sin esa declaración, toda tarea de código
|
|
300
|
+
sigue el ciclo con evidencia.
|
|
271
301
|
|
|
272
|
-
|
|
302
|
+
### Ciclo RED → GREEN → REFACTOR por tarea (con telemetría)
|
|
273
303
|
|
|
274
|
-
|
|
304
|
+
Al iniciar la primera tarea de código de la fase, abrir la corrida de evidencia:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
node -e "const lt=require('./hooks/lib/loop-telemetry');const r=lt.iniciarCorrida({tipo:'tdd',direccion:'lower_is_better',config:{fase:'0N',tarea:'T-NN'}});console.log(r.dir)"
|
|
308
|
+
```
|
|
275
309
|
|
|
276
310
|
**RED**: Escribir el test que describe el comportamiento esperado.
|
|
277
311
|
El test DEBE fallar. Verificar que falla por la razón correcta, no por error
|
|
278
|
-
de sintaxis o configuración.
|
|
312
|
+
de sintaxis o configuración. **Registrar la evidencia** (métrica = tests fallando,
|
|
313
|
+
descripción = fallo exacto):
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
node -e "const lt=require('./hooks/lib/loop-telemetry');lt.registrarIteracion('<dir>',{iteracion:0,metrica:<N_fallan>,delta:0,estado:'baseline',descripcion:'RED T-NN: <fallo exacto del runner>'})"
|
|
317
|
+
```
|
|
279
318
|
|
|
280
319
|
**GREEN**: Escribir la implementación mínima que hace pasar el test.
|
|
281
|
-
"Mínima" significa: no implementar más de lo que el test exige.
|
|
282
|
-
|
|
320
|
+
"Mínima" significa: no implementar más de lo que el test exige. Registrar:
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
node -e "const lt=require('./hooks/lib/loop-telemetry');lt.registrarIteracion('<dir>',{iteracion:1,metrica:0,delta:-<N>,estado:'keep',descripcion:'GREEN T-NN: suite verde'})"
|
|
324
|
+
```
|
|
283
325
|
|
|
284
326
|
**REFACTOR**: Limpiar el código sin cambiar el comportamiento.
|
|
285
327
|
El test DEBE seguir pasando después del refactor. Hacer commit solo en este paso.
|
|
286
328
|
|
|
329
|
+
La fila RED en `.planning/loops/tdd-*/iteraciones.tsv` es la evidencia que
|
|
330
|
+
`hooks/tdd-gate.js` busca al commitear (warn-only, ADR-0035) — cierra F-TDD-6
|
|
331
|
+
("el RED no deja evidencia"). Sin registro, el gate emite nudge `tdd-red-evidence`.
|
|
332
|
+
|
|
287
333
|
### Cobertura mínima en modo TDD
|
|
288
334
|
|
|
289
335
|
- Toda función pública tiene al menos 1 test de camino feliz
|
|
@@ -344,10 +390,10 @@ Actualizar ESTADO.md después de cada tarea (no al final de la oleada):
|
|
|
344
390
|
- Pendientes: N-M-K
|
|
345
391
|
|
|
346
392
|
## Estado por tarea
|
|
347
|
-
| ID | Nombre | Estado | Commit | Notas |
|
|
348
|
-
|
|
349
|
-
| T-01 | [nombre] | COMPLETADA | abc1234 | |
|
|
350
|
-
| T-02 | [nombre] | COMPLETADA | def5678 | |
|
|
393
|
+
| ID | Nombre | Estado | Commit | REQ | Notas |
|
|
394
|
+
|------|--------|--------|--------|-----|-------|
|
|
395
|
+
| T-01 | [nombre] | COMPLETADA | abc1234 | REQ-01 | |
|
|
396
|
+
| T-02 | [nombre] | COMPLETADA | def5678 | REQ-01, REQ-02 | |
|
|
351
397
|
| T-03 | [nombre] | EN_PROGRESO | — | |
|
|
352
398
|
| T-04 | [nombre] | PENDIENTE | — | depende T-03 |
|
|
353
399
|
| T-05 | [nombre] | BLOQUEADA | — | [descripción del bloqueo] |
|
|
@@ -466,3 +512,7 @@ NO proceder con el deploy hasta aprobar este gate.
|
|
|
466
512
|
- [ ] Decisiones HITL registradas con respuesta del usuario
|
|
467
513
|
- [ ] Tests pasan en el estado final del código
|
|
468
514
|
- [ ] No hay `console.log`, `print()` de debug ni pendientes sin ticket en el código nuevo
|
|
515
|
+
- [ ] `.planning/locks/fase-activa.json` eliminado (libera el gate G0 — el `.lock`
|
|
516
|
+
del plan NO se toca: es evidencia versionada)
|
|
517
|
+
- [ ] `/swl:verificar --until-converge` invocado automáticamente (gate G4) — o
|
|
518
|
+
desviación `--sin-verify` registrada en RESUMEN.md con razón
|
|
@@ -6,9 +6,9 @@ description: >
|
|
|
6
6
|
Cargar al inicializar proyecto nuevo, migrar proyecto existente al sistema SWL,
|
|
7
7
|
auditar estructura Claude-ready, agregar extensiones (commands, skills, agents,
|
|
8
8
|
hooks, plugins), o configurar MCP. Cubre arquitectura de 4 capas, jerarquía
|
|
9
|
-
de memoria, 6 tipos de extensión,
|
|
9
|
+
de memoria, 6 tipos de extensión, 30 hook events, frontmatter de skills/agents/commands
|
|
10
10
|
y settings avanzados.
|
|
11
|
-
version: "1.
|
|
11
|
+
version: "1.1.0"
|
|
12
12
|
herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
|
|
13
13
|
exclusiones:
|
|
14
14
|
- "No cargar para iniciar un proyecto desde cero — ese flujo usa `/swl:nuevo-proyecto` que incluye entrevista de contexto antes de generar la estructura; este skill genera estructura pero no recoge requisitos de negocio."
|
|
@@ -53,7 +53,7 @@ mi_proyecto/
|
|
|
53
53
|
| +-- plugins/ # Plugins distribuibles
|
|
54
54
|
+-- .planning/ # Estado de planificación SWL
|
|
55
55
|
| +-- PROYECTO.md, REQUISITOS.md, HOJA-RUTA.md, ESTADO.md
|
|
56
|
-
| +-- research/
|
|
56
|
+
| +-- fases/, adrs/, research/
|
|
57
57
|
+-- .mcp.json # Configuracion de servidores MCP
|
|
58
58
|
```
|
|
59
59
|
|
|
@@ -74,17 +74,19 @@ mi_proyecto/
|
|
|
74
74
|
|
|
75
75
|
| Scope | Path | Aplica a |
|
|
76
76
|
|-------|------|----------|
|
|
77
|
-
| **Managed Policy** | Sistema | Todos los usuarios org |
|
|
77
|
+
| **Managed Policy** | Sistema (ej. Windows: `C:\Program Files\ClaudeCode\CLAUDE.md`) | Todos los usuarios org |
|
|
78
78
|
| **User** | `~/.claude/CLAUDE.md` | Todos tus proyectos |
|
|
79
|
-
| **Project** | `./CLAUDE.md` | Proyecto (repo) |
|
|
79
|
+
| **Project** | `./CLAUDE.md` o `./.claude/CLAUDE.md` | Proyecto (repo) |
|
|
80
|
+
| **Local** | `./CLAUDE.local.md` (en `.gitignore`) | Solo tú, este proyecto |
|
|
80
81
|
| **Subdirectory** | `packages/frontend/CLAUDE.md` | Paquete del monorepo |
|
|
81
82
|
|
|
82
83
|
### Comportamiento de carga
|
|
83
84
|
|
|
84
|
-
- **Ancestor (ARRIBA)**: al inicio, carga TODOS los CLAUDE.md desde cwd hasta la raíz del sistema de archivos — siempre se cargan
|
|
85
|
-
- **Descendant (ABAJO)**: lazy — solo carga cuando Claude
|
|
85
|
+
- **Ancestor (ARRIBA)**: al inicio, carga TODOS los CLAUDE.md y CLAUDE.local.md desde cwd hasta la raíz del sistema de archivos — siempre se cargan, concatenados (raíz primero, cwd al final)
|
|
86
|
+
- **Descendant (ABAJO)**: lazy — solo carga cuando Claude lee archivos en ese subdirectorio
|
|
86
87
|
- **Siblings**: NUNCA se cargan entre sí
|
|
87
|
-
-
|
|
88
|
+
- Cada CLAUDE.md se carga **completo** sin importar su longitud — el límite de 200 líneas es recomendación de adherencia, no truncado. (El truncado de 200 líneas / 25KB aplica al `MEMORY.md` de auto memory, no a CLAUDE.md.)
|
|
89
|
+
- **Auto memory** (complementario): Claude escribe notas propias en `~/.claude/projects/<proyecto>/memory/` — activado por defecto, gestionable con `/memory` o `autoMemoryEnabled`
|
|
88
90
|
|
|
89
91
|
**Reglas clave**: Menos de 200 líneas por CLAUDE.md. Subdirectorios agregan, NUNCA sobreescriben.
|
|
90
92
|
|
|
@@ -94,8 +96,8 @@ mi_proyecto/
|
|
|
94
96
|
|
|
95
97
|
| Tipo | Activación | Ubicación |
|
|
96
98
|
|------|-----------|-----------|
|
|
97
|
-
| **Skills** | Auto-activación | `.claude/skills/` |
|
|
98
|
-
| **Commands** | Manual (`/comando`) | `.claude/commands/` |
|
|
99
|
+
| **Skills** | Auto-activación o `/nombre` | `.claude/skills/` |
|
|
100
|
+
| **Commands** | Manual (`/comando`) — fusionados con skills, mismo frontmatter | `.claude/commands/` |
|
|
99
101
|
| **Subagents** | Spawn por orquestador | `.claude/agents/` |
|
|
100
102
|
| **Hooks** | Event-driven | `settings.json` hooks |
|
|
101
103
|
| **MCP Servers** | Siempre disponibles | `.mcp.json` |
|
|
@@ -116,7 +118,7 @@ mi_proyecto/
|
|
|
116
118
|
```yaml
|
|
117
119
|
---
|
|
118
120
|
name: nombre-skill # kebab-case, max 64 chars
|
|
119
|
-
description: > #
|
|
121
|
+
description: > # QUÉ + CUÁNDO (description + when_to_use truncados a 1,536 chars combinados)
|
|
120
122
|
Describe qué hace y cuándo Claude debe auto-activarla.
|
|
121
123
|
allowed-tools: ["Read", "Grep", "Glob"]
|
|
122
124
|
paths:
|
|
@@ -129,7 +131,7 @@ Ver referencia completa en [recursos/frontmatter-y-hooks-referencia.md](recursos
|
|
|
129
131
|
|
|
130
132
|
---
|
|
131
133
|
|
|
132
|
-
## Hook Events (
|
|
134
|
+
## Hook Events (7 críticos de 30 oficiales)
|
|
133
135
|
|
|
134
136
|
| Evento | Cuándo se dispara | Uso típico |
|
|
135
137
|
|--------|-------------------|-----------|
|
|
@@ -141,8 +143,9 @@ Ver referencia completa en [recursos/frontmatter-y-hooks-referencia.md](recursos
|
|
|
141
143
|
| **PostCompact** | Después de compactar | Re-inyectar contexto |
|
|
142
144
|
| **Notification** | Claude espera input | Alertas desktop |
|
|
143
145
|
|
|
144
|
-
Los
|
|
145
|
-
|
|
146
|
+
Los 23 eventos restantes, frontmatter de agents (16 campos) y de skills/commands
|
|
147
|
+
(unificados — los commands se fusionaron con skills), opciones avanzadas de hooks
|
|
148
|
+
y orden de resolución en
|
|
146
149
|
[recursos/frontmatter-y-hooks-referencia.md](recursos/frontmatter-y-hooks-referencia.md).
|
|
147
150
|
|
|
148
151
|
---
|
|
@@ -28,41 +28,42 @@ completos de settings.json, .mcp.json, plugins y checklists detallados.
|
|
|
28
28
|
"PreToolUse": [
|
|
29
29
|
{
|
|
30
30
|
"matcher": "Bash",
|
|
31
|
-
"
|
|
32
|
-
|
|
31
|
+
"hooks": [
|
|
32
|
+
{ "type": "command", "command": "node .claude/hooks/lint-check.js" }
|
|
33
|
+
]
|
|
33
34
|
}
|
|
34
35
|
],
|
|
35
36
|
"PostToolUse": [
|
|
36
37
|
{
|
|
37
38
|
"matcher": "Write",
|
|
38
|
-
"
|
|
39
|
-
|
|
39
|
+
"hooks": [
|
|
40
|
+
{ "type": "command", "command": "node .claude/hooks/format-on-save.js" }
|
|
41
|
+
]
|
|
40
42
|
}
|
|
41
43
|
],
|
|
42
44
|
"SessionStart": [
|
|
43
45
|
{
|
|
44
46
|
"matcher": "startup",
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
+
"hooks": [
|
|
48
|
+
{ "type": "command", "command": "node .claude/hooks/load-context.js" }
|
|
49
|
+
]
|
|
47
50
|
}
|
|
48
51
|
]
|
|
49
|
-
},
|
|
50
|
-
"context": {
|
|
51
|
-
"rules": [
|
|
52
|
-
"CLAUDE.md"
|
|
53
|
-
]
|
|
54
52
|
}
|
|
55
53
|
}
|
|
56
54
|
```
|
|
57
55
|
|
|
58
56
|
### Jerarquía de settings (mayor a menor prioridad)
|
|
59
57
|
|
|
60
|
-
1. **Managed** (MDM plist / Registry / Server-managed / `managed-settings.
|
|
58
|
+
1. **Managed** (MDM plist / Registry / Server-managed / `managed-settings.json`)
|
|
61
59
|
2. **CLI arguments** (solo sesión actual)
|
|
62
60
|
3. **`.claude/settings.local.json`** (personal, git-ignored)
|
|
63
61
|
4. **`.claude/settings.json`** (equipo, commiteado)
|
|
64
62
|
5. **`~/.claude/settings.json`** (global personal)
|
|
65
63
|
|
|
64
|
+
**Excepción**: los `permissions` (allow/deny) se **fusionan** entre scopes, no se
|
|
65
|
+
sobreescriben por precedencia simple.
|
|
66
|
+
|
|
66
67
|
---
|
|
67
68
|
|
|
68
69
|
## Settings avanzados y variables de entorno
|
|
@@ -90,13 +91,20 @@ Settings poco documentados pero de alto impacto:
|
|
|
90
91
|
|
|
91
92
|
| Flag | Efecto |
|
|
92
93
|
|------|--------|
|
|
93
|
-
| `--bare` |
|
|
94
|
-
| `--add-dir <path>` | Agregar directorio adicional a la sesión — sesiones multi-repo sin copiar archivos |
|
|
95
|
-
| `-w` / `--worktree` | Git worktree aislado
|
|
96
|
-
| `--agent
|
|
97
|
-
| `--effort
|
|
98
|
-
|
|
|
99
|
-
|
|
94
|
+
| `--bare` | Modo mínimo: omite auto-discovery de hooks, skills, plugins, MCP servers, auto memory y CLAUDE.md — arranque más rápido para scripts |
|
|
95
|
+
| `--add-dir <path>` | Agregar directorio adicional a la sesión — sesiones multi-repo sin copiar archivos. Los CLAUDE.md de esos directorios NO se cargan por defecto (`CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1` para cargarlos) |
|
|
96
|
+
| `-w` / `--worktree` | Git worktree aislado en `<repo>/.claude/worktrees/<nombre>` |
|
|
97
|
+
| `--agent <nombre>` | Usar agente custom como agente principal de la sesión |
|
|
98
|
+
| `--effort <nivel>` | Nivel de esfuerzo de la sesión: `low`, `medium`, `high`, `xhigh`, `max` |
|
|
99
|
+
| `--max-budget-usd <n>` | Tope de gasto en API antes de detenerse (solo print mode) |
|
|
100
|
+
|
|
101
|
+
### Comando `/sandbox` (Bash sandbox)
|
|
102
|
+
|
|
103
|
+
Abre el panel del sandbox de Bash: aislamiento de filesystem y red **a nivel de SO**
|
|
104
|
+
(Seatbelt en macOS, bubblewrap en Linux/WSL2 — no soportado en Windows nativo). En modo
|
|
105
|
+
auto-allow, los comandos sandboxeados corren sin diálogos de permiso; los que requieren
|
|
106
|
+
acceso fuera del boundary caen al flujo regular de permisos. Configuración persistente
|
|
107
|
+
vía `sandbox.enabled` y `sandbox.filesystem.*` en settings.json.
|
|
100
108
|
|
|
101
109
|
---
|
|
102
110
|
|
|
@@ -110,18 +118,21 @@ Settings poco documentados pero de alto impacto:
|
|
|
110
118
|
"args": ["-y", "@upstash/context7-mcp@latest"]
|
|
111
119
|
},
|
|
112
120
|
"github": {
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "" }
|
|
121
|
+
"type": "http",
|
|
122
|
+
"url": "https://api.githubcopilot.com/mcp/"
|
|
116
123
|
},
|
|
117
124
|
"playwright": {
|
|
118
125
|
"command": "npx",
|
|
119
|
-
"args": ["-y", "@
|
|
126
|
+
"args": ["-y", "@playwright/mcp@latest"]
|
|
120
127
|
}
|
|
121
128
|
}
|
|
122
129
|
}
|
|
123
130
|
```
|
|
124
131
|
|
|
132
|
+
> El GitHub MCP server oficial es remoto (`api.githubcopilot.com/mcp/`) — el paquete
|
|
133
|
+
> npm `@modelcontextprotocol/server-github` fue archivado. El de Playwright oficial
|
|
134
|
+
> es `@playwright/mcp` (Microsoft).
|
|
135
|
+
|
|
125
136
|
Ver catalogo completo en [mcp-json-template.json](mcp-json-template.json).
|
|
126
137
|
|
|
127
138
|
---
|
|
@@ -4,19 +4,23 @@ Fuente: https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overvi
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## Frontmatter completo de SKILL.md (
|
|
7
|
+
## Frontmatter completo de SKILL.md (16 campos — aplica también a commands, que se fusionaron con skills)
|
|
8
8
|
|
|
9
9
|
| Campo | Requerido | Tipo | Descripción |
|
|
10
10
|
|-------|-----------|------|-------------|
|
|
11
|
-
| `name` | No* | string | Nombre
|
|
12
|
-
| `description` | Recomendado | string |
|
|
11
|
+
| `name` | No* | string | Nombre mostrado en listados. *Si se omite, usa el nombre del directorio |
|
|
12
|
+
| `description` | Recomendado | string | QUÉ hace + CUÁNDO usar. Guía la auto-activación. `description` + `when_to_use` se truncan a 1,536 chars combinados en el listado |
|
|
13
|
+
| `when_to_use` | Opcional | string | Contexto adicional de activación (frases trigger, ejemplos). Se anexa a `description` y cuenta para el tope de 1,536 chars |
|
|
13
14
|
| `argument-hint` | Opcional | string | Hint de autocompletado: `[archivo]`, `[issue-num]`, `[file] [format]` |
|
|
14
|
-
| `
|
|
15
|
+
| `arguments` | Opcional | array/string | Argumentos posicionales con nombre para sustitución `$nombre` en el contenido |
|
|
16
|
+
| `allowed-tools` | Opcional | array/string | Tools que Claude puede usar sin pedir permiso cuando la skill está activa |
|
|
17
|
+
| `disallowed-tools` | Opcional | array/string | Tools removidas del pool de Claude mientras la skill está activa |
|
|
15
18
|
| `paths` | Opcional | array/string | Patrones glob: cargar skill SOLO al trabajar con archivos que coinciden |
|
|
16
19
|
| `context` | Opcional | string | `fork` = ejecutar en subagente aislado con su propia conversación |
|
|
17
20
|
| `agent` | Opcional | string | Tipo de subagente si `context: fork` (Explore, Plan, general-purpose) |
|
|
18
|
-
| `model` | Opcional | string | Override de modelo
|
|
19
|
-
| `effort` | Opcional | string | Nivel de esfuerzo: `low`, `medium`, `high`, `max` (
|
|
21
|
+
| `model` | Opcional | string | Override de modelo mientras la skill está activa (mismos valores que `/model`, o `inherit`) |
|
|
22
|
+
| `effort` | Opcional | string | Nivel de esfuerzo: `low`, `medium`, `high`, `xhigh`, `max` (los niveles disponibles dependen del modelo) |
|
|
23
|
+
| `hooks` | Opcional | object | Hooks acotados al ciclo de vida de esta skill |
|
|
20
24
|
| `shell` | Opcional | string | `bash` o `powershell`. Controla bloques `!comando` embebidos |
|
|
21
25
|
| `disable-model-invocation` | Opcional | boolean | `true` = solo el usuario puede invocar (no auto-trigger). Usar para skills con side-effects como `/deploy` |
|
|
22
26
|
| `user-invocable` | Opcional | boolean | `false` = solo Claude la ve (conocimiento de background). No aparece en menú `/` |
|
|
@@ -46,21 +50,24 @@ user-invocable: true
|
|
|
46
50
|
|
|
47
51
|
| Variable | Valor |
|
|
48
52
|
|----------|-------|
|
|
49
|
-
| `$ARGUMENTS` |
|
|
50
|
-
| `$
|
|
53
|
+
| `$ARGUMENTS` | Todos los argumentos pasados al invocar la skill (si no aparece, se anexan como `ARGUMENTS: <valor>`) |
|
|
54
|
+
| `$ARGUMENTS[N]` | Argumento específico por índice 0-based |
|
|
55
|
+
| `$0`, `$1`, `$2`... | Shorthand de `$ARGUMENTS[N]` |
|
|
56
|
+
| `$nombre` | Argumento con nombre declarado en `arguments:` del frontmatter |
|
|
51
57
|
| `${CLAUDE_SESSION_ID}` | ID unico de la sesion actual |
|
|
58
|
+
| `${CLAUDE_EFFORT}` | Nivel de esfuerzo activo (`low`...`max`) |
|
|
52
59
|
| `${CLAUDE_SKILL_DIR}` | Path absoluto al directorio de la skill |
|
|
53
|
-
| `${env:VAR_NAME}` | Variable de entorno del sistema |
|
|
54
60
|
|
|
55
61
|
---
|
|
56
62
|
|
|
57
|
-
##
|
|
63
|
+
## 30 Hook Events oficiales
|
|
58
64
|
|
|
59
65
|
### Ciclo de vida de sesión
|
|
60
66
|
|
|
61
67
|
| Evento | Cuándo se dispara | Matchers | Uso típico |
|
|
62
68
|
|--------|-------------------|----------|-----------|
|
|
63
69
|
| `SessionStart` | Al iniciar o resumir sesión | `startup`, `resume`, `clear`, `compact` | Cargar contexto, setup env |
|
|
70
|
+
| `Setup` | Inicialización one-time (`--init-only`, `--maintenance`) | `init`, `maintenance` | Bootstrap de repo, mantenimiento |
|
|
64
71
|
| `SessionEnd` | Al terminar sesión | `clear`, `resume`, `logout`, `other` | Cleanup, archivado |
|
|
65
72
|
| `InstructionsLoaded` | CLAUDE.md o rules/ cargados | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` | Log que instrucciones se cargaron |
|
|
66
73
|
|
|
@@ -71,7 +78,9 @@ user-invocable: true
|
|
|
71
78
|
| `PreToolUse` | Antes de ejecutar herramienta | Nombre de tool (Bash, Edit, Read, mcp__*) | Bloquear ops inseguras, validar |
|
|
72
79
|
| `PostToolUse` | Después de ejecutar herramienta (éxito) | Nombre de tool | Auto-lint, format, log |
|
|
73
80
|
| `PostToolUseFailure` | Cuando falla herramienta | Nombre de tool | Notificar, reintentar |
|
|
81
|
+
| `PostToolBatch` | Al resolver un batch completo de tool calls paralelos | Ninguno | Métricas de batch |
|
|
74
82
|
| `PermissionRequest` | Se muestra diálogo de permiso | Nombre de tool | Auto-aprobar acciones seguras |
|
|
83
|
+
| `PermissionDenied` | El clasificador de auto mode niega un tool call | Nombre de tool | Log, escalar |
|
|
75
84
|
|
|
76
85
|
### Respuesta y control
|
|
77
86
|
|
|
@@ -80,6 +89,8 @@ user-invocable: true
|
|
|
80
89
|
| `Stop` | Claude termina de responder | Ninguno (siempre se dispara) | Verificar tarea completa |
|
|
81
90
|
| `StopFailure` | Error de API en Stop | `rate_limit`, `authentication_failed`, `billing_error`, `server_error` | Notificar fallos |
|
|
82
91
|
| `UserPromptSubmit` | Usuario envía prompt | Ninguno | Interceptar/enriquecer input |
|
|
92
|
+
| `UserPromptExpansion` | Un comando del usuario se expande a prompt | Ninguno | Transformar input |
|
|
93
|
+
| `MessageDisplay` | Mientras se muestra texto del asistente | Ninguno | Modificar texto en pantalla |
|
|
83
94
|
|
|
84
95
|
### Compactación de contexto
|
|
85
96
|
|
|
@@ -135,44 +146,40 @@ user-invocable: true
|
|
|
135
146
|
|
|
136
147
|
## Frontmatter completo de agents (.claude/agents/*.md) — 16 campos
|
|
137
148
|
|
|
138
|
-
| Campo | Tipo | Descripción |
|
|
139
|
-
|
|
140
|
-
| `name` | string |
|
|
141
|
-
| `description` | string | Cuándo
|
|
142
|
-
| `
|
|
143
|
-
| `
|
|
144
|
-
| `
|
|
145
|
-
| `permissionMode` | string | `acceptEdits`, `dontAsk`, `
|
|
146
|
-
| `
|
|
147
|
-
| `skills` | array | Skills
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
153
|
-
| `
|
|
154
|
-
| `
|
|
155
|
-
| `
|
|
156
|
-
|
|
157
|
-
**Gotcha**: El evento `Stop` en
|
|
149
|
+
| Campo | Requerido | Tipo | Descripción |
|
|
150
|
+
|-------|-----------|------|-------------|
|
|
151
|
+
| `name` | Sí | string | Identificador único en minúsculas con guiones. Los hooks lo reciben como `agent_type` |
|
|
152
|
+
| `description` | Sí | string | Cuándo Claude debe delegar a este subagente |
|
|
153
|
+
| `tools` | No | array | Tools que el subagente puede usar. Hereda todas si se omite. Para precargar skills usar `skills`, no listar `Skill` aquí |
|
|
154
|
+
| `disallowedTools` | No | array | Tools negadas — se remueven de la lista heredada o especificada |
|
|
155
|
+
| `model` | No | string | `sonnet`, `opus`, `haiku`, `fable`, un model ID completo, o `inherit` (default) |
|
|
156
|
+
| `permissionMode` | No | string | `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan` |
|
|
157
|
+
| `maxTurns` | No | number | Máximo de turnos agénticos antes de detenerse |
|
|
158
|
+
| `skills` | No | array | Skills precargadas al contexto al inicio (se inyecta el contenido completo) |
|
|
159
|
+
| `mcpServers` | No | array/object | MCP servers disponibles para este subagente (nombre de server ya configurado o definición inline) |
|
|
160
|
+
| `hooks` | No | object | Hooks acotados al ciclo de vida del subagente (`Stop` se convierte en `SubagentStop` en runtime) |
|
|
161
|
+
| `memory` | No | string | Memoria persistente cross-sesión: `user`, `project`, `local` |
|
|
162
|
+
| `background` | No | boolean | `true` = siempre corre como background task |
|
|
163
|
+
| `effort` | No | string | `low`, `medium`, `high`, `xhigh`, `max` — override del nivel de sesión |
|
|
164
|
+
| `isolation` | No | string | `worktree` = git worktree temporal aislado (auto-limpiado si no hay cambios) |
|
|
165
|
+
| `color` | No | string | Color en task list/transcript: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan` |
|
|
166
|
+
| `initialPrompt` | No | string | Primer turno auto-enviado cuando el agente corre como agente principal (`--agent`) |
|
|
167
|
+
|
|
168
|
+
**Gotcha**: El evento `Stop` declarado en `hooks:` de un agente se dispara como `SubagentStop`, no como `Stop`.
|
|
158
169
|
|
|
159
170
|
---
|
|
160
171
|
|
|
161
|
-
## Frontmatter de commands (.claude/commands/*.md)
|
|
172
|
+
## Frontmatter de commands (.claude/commands/*.md)
|
|
162
173
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
| `argument-hint` | string | Hint visual: `[archivo]`, `[issue-num]` |
|
|
168
|
-
| `allowed-tools` | array | Tools permitidos sin pedir permiso |
|
|
169
|
-
| `model` | string | Override de modelo |
|
|
170
|
-
| `effort` | string | Nivel de esfuerzo |
|
|
171
|
-
| `shell` | string | `bash` o `powershell` |
|
|
172
|
-
| `user-invocable` | boolean | Default `true` — commands siempre son user-invocable |
|
|
173
|
-
| `disable-model-invocation` | boolean | `true` = Claude no puede auto-invocar |
|
|
174
|
+
**Los commands se fusionaron con las skills**: un archivo en `.claude/commands/deploy.md`
|
|
175
|
+
y una skill en `.claude/skills/deploy/SKILL.md` crean ambos `/deploy` y funcionan igual.
|
|
176
|
+
Los archivos existentes en `.claude/commands/` siguen funcionando y aceptan el **mismo
|
|
177
|
+
frontmatter de 16 campos de SKILL.md** (ver tabla arriba).
|
|
174
178
|
|
|
175
|
-
|
|
179
|
+
Las skills agregan sobre los commands legacy: directorio de archivos de apoyo,
|
|
180
|
+
control de invocación (`disable-model-invocation`, `user-invocable`) y auto-activación
|
|
181
|
+
por relevancia. Para forzar que un comando NUNCA se auto-invoque (comportamiento
|
|
182
|
+
del command clásico), declarar `disable-model-invocation: true`.
|
|
176
183
|
|
|
177
184
|
---
|
|
178
185
|
|
|
@@ -195,6 +202,7 @@ porque se ejecuta inline sin el overhead de un subagente.
|
|
|
195
202
|
| `prompt` | Claude decide qué hacer | `"prompt": "Verifica que el archivo..."` |
|
|
196
203
|
| `agent` | Claude con herramientas propias | `"agent": "Analiza y corrige..."` |
|
|
197
204
|
| `http` | POST a endpoint HTTP | `"url": "https://webhook.example.com/hook"` |
|
|
205
|
+
| `mcp_tool` | Llama una tool de un MCP server configurado | `"server": "slack", "tool": "send_message"` |
|
|
198
206
|
|
|
199
207
|
### Códigos de retorno para hooks command
|
|
200
208
|
|
|
@@ -209,22 +217,31 @@ porque se ejecuta inline sin el overhead de un subagente.
|
|
|
209
217
|
| Opción | Tipo | Descripción |
|
|
210
218
|
|--------|------|-------------|
|
|
211
219
|
| `async` | boolean | Ejecutar en background sin bloquear — fire-and-forget |
|
|
212
|
-
| `timeout` | number | Timeout en
|
|
213
|
-
| `once` | boolean | Ejecutar solo
|
|
214
|
-
| `asyncRewake` | boolean |
|
|
215
|
-
| `statusMessage` | string | Mensaje
|
|
216
|
-
| `if` | string |
|
|
220
|
+
| `timeout` | number | Timeout en **segundos** (defaults: 600 command/http/mcp_tool, 30 prompt, 60 agent) |
|
|
221
|
+
| `once` | boolean | Ejecutar una sola vez por sesión y removerse (solo en hooks de frontmatter de skill) |
|
|
222
|
+
| `asyncRewake` | boolean | Background + re-despertar a Claude si el hook sale con exit code 2 (implica `async`) |
|
|
223
|
+
| `statusMessage` | string | Mensaje del spinner mientras el hook ejecuta |
|
|
224
|
+
| `if` | string | Filtro con sintaxis de regla de permisos: `"Bash(git *)"`, `"Edit(*.ts)"` |
|
|
217
225
|
|
|
218
226
|
### Campos JSON de retorno del hook
|
|
219
227
|
|
|
228
|
+
Campos universales (nivel superior):
|
|
229
|
+
|
|
230
|
+
| Campo | Tipo | Efecto |
|
|
231
|
+
|-------|------|--------|
|
|
232
|
+
| `continue` | boolean | `false` = detener el procesamiento por completo |
|
|
233
|
+
| `stopReason` | string | Mensaje mostrado cuando `continue: false` |
|
|
234
|
+
| `suppressOutput` | boolean | Ocultar el stdout del hook del transcript |
|
|
235
|
+
| `systemMessage` | string | Mensaje de advertencia mostrado al usuario |
|
|
236
|
+
|
|
237
|
+
Campos dentro de `hookSpecificOutput` (con `hookEventName` obligatorio):
|
|
238
|
+
|
|
220
239
|
| Campo | Tipo | Efecto |
|
|
221
240
|
|-------|------|--------|
|
|
222
|
-
| `continue` | boolean | `false` = detener la cadena de hooks |
|
|
223
|
-
| `stopReason` | string | Razón de detención (si `continue: false`) |
|
|
224
|
-
| `suppressOutput` | boolean | No mostrar output del hook al usuario |
|
|
225
|
-
| `systemMessage` | string | Inyectar mensaje al contexto del sistema |
|
|
226
241
|
| `additionalContext` | string | Agregar contexto adicional a la conversación |
|
|
227
|
-
| `updatedInput` | object |
|
|
242
|
+
| `updatedInput` | object | Reescribir el input de la herramienta (PreToolUse, PostToolUse) |
|
|
243
|
+
| `updatedToolOutput` | object | Reescribir el output de la herramienta (PostToolUse) |
|
|
244
|
+
| `permissionDecision` | string | Solo PreToolUse: `allow`, `deny`, `ask`, `defer` |
|
|
228
245
|
|
|
229
246
|
---
|
|
230
247
|
|