@cristiancorreau/forge 2.9.4 → 2.9.6

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 (44) hide show
  1. package/assets/adapters/claude-code/commands/new-feature.md +10 -5
  2. package/assets/adapters/claude-code/commands/plan.md +61 -36
  3. package/assets/adapters/claude-code/commands/session-start.md +1 -1
  4. package/assets/adapters/claude-code/commands/ship.md +6 -4
  5. package/assets/adapters/claude-code/commands/work.md +8 -6
  6. package/assets/core/agents/backend-engineer.md +3 -3
  7. package/assets/core/agents/compliance-reviewer.md +2 -2
  8. package/assets/core/agents/docs-writer.md +1 -1
  9. package/assets/core/agents/frontend-engineer.md +2 -2
  10. package/assets/core/agents/orchestrator.md +8 -6
  11. package/assets/core/agents/security-auditor.md +1 -1
  12. package/assets/core/agents/test-engineer.md +1 -1
  13. package/assets/core/skills/README.md +2 -2
  14. package/assets/core/skills/aitmpl-search/SKILL.md +7 -19
  15. package/assets/core/skills/local2prod/SKILL.md +1 -1
  16. package/assets/core/skills/new-feature/SKILL.md +1 -1
  17. package/assets/core/skills/phase-kickoff/SKILL.md +2 -0
  18. package/assets/core/skills/spec/SKILL.md +2 -0
  19. package/assets/core/skills/wiki-ingest/SKILL.md +7 -7
  20. package/assets/core/skills/wiki-lint/SKILL.md +4 -4
  21. package/assets/core/skills/wiki-query/SKILL.md +3 -3
  22. package/assets/profiles/astro/agents/frontend-engineer.md +4 -3
  23. package/assets/profiles/django/agents/api-engineer.md +3 -2
  24. package/assets/profiles/expo/agents/mobile-engineer.md +3 -2
  25. package/assets/profiles/express/agents/api-engineer.md +1 -0
  26. package/assets/profiles/fastapi/agents/api-engineer.md +3 -2
  27. package/assets/profiles/go-gin/agents/api-engineer.md +1 -0
  28. package/assets/profiles/hono-drizzle/agents/api-engineer.md +3 -2
  29. package/assets/profiles/laravel/agents/api-engineer.md +5 -4
  30. package/assets/profiles/laravel/agents/fullstack-engineer.md +2 -1
  31. package/assets/profiles/laravel/agents/migration-specialist.md +1 -0
  32. package/assets/profiles/nestjs/agents/api-engineer.md +2 -1
  33. package/assets/profiles/nextjs-admin/agents/admin-engineer.md +6 -5
  34. package/assets/profiles/playwright-crawler/agents/scanner-engineer.md +1 -0
  35. package/assets/profiles/rails/agents/fullstack-engineer.md +2 -1
  36. package/assets/profiles/sveltekit/agents/frontend-engineer.md +1 -0
  37. package/assets/profiles/vuenuxt/agents/frontend-engineer.md +4 -3
  38. package/assets/profiles/wordpress/agents/divi-engineer.md +1 -1
  39. package/assets/profiles/wordpress/agents/elementor-engineer.md +3 -3
  40. package/assets/profiles/wordpress/agents/wp-engineer.md +2 -2
  41. package/dist/commands/init.js +1 -1
  42. package/dist/version.d.ts +1 -1
  43. package/dist/version.js +1 -1
  44. package/package.json +2 -2
@@ -1,11 +1,16 @@
1
1
  # new-feature
2
2
 
3
+ > **Atajo de orquestación.** Este comando NO es un flujo competidor: es un wrapper que delega
4
+ > en el pipeline SDD canónico `/plan` → `/work` → `/review` → `/ship`. Usa el mismo template de
5
+ > spec (`core/templates/spec-template.md`) y la misma máquina de estados
6
+ > (`DRAFT` → `REVIEW` → `APPROVED` → `IMPLEMENTED`). No dupliques aquí lógica de esos comandos:
7
+ > invocá cada uno en su etapa.
8
+
3
9
  Inicia la implementación de una nueva feature siguiendo SDD (Spec-Driven Development).
4
10
 
5
11
  Argumentos: $ARGUMENTS — nombre de la feature o ruta a la spec existente.
6
12
 
7
- 1. Si no existe spec para "$ARGUMENTS" en docs/specs/, crearla primero antes de escribir código.
8
- 2. Leer la spec antes de proponer cualquier implementación.
9
- 3. Proponer el plan de implementación y esperar aprobación explícita.
10
- 4. Implementar con tests junto a la implementación, no al final.
11
- 5. Al terminar, actualizar la spec con las decisiones tomadas durante la implementación.
13
+ 1. **Spec** — Si no existe spec para "$ARGUMENTS" en `docs/specs/`, ejecutar `/plan <fase> "$ARGUMENTS"` para crearla (queda en `APPROVED`). Si ya existe, leerla.
14
+ 2. **Implementación** — Ejecutar `/work` para implementar la spec aprobada. Propone el team, espera aprobación e implementa con tests junto a la implementación, no al final. `/work` marca la spec como `IMPLEMENTED` y completa "Notas de implementación".
15
+ 3. **Review** Ejecutar `/review` para obtener el veredicto vinculante (persiste en `.claude/review-status.json`).
16
+ 4. **Ship** Si el review resultó `APPROVED` y el usuario lo pide, ejecutar `/ship` para el deploy.
@@ -16,44 +16,66 @@ Construir el nombre del archivo:
16
16
  - Tomar el título, convertirlo a minúsculas, reemplazar espacios por guiones, eliminar caracteres especiales → `<slug>`
17
17
  - Nombre final: `docs/specs/<fase>-<slug>.md`
18
18
 
19
- Crear el archivo con este template exacto:
19
+ Crear el archivo con el template canónico de `core/templates/spec-template.md` (misma fuente única de verdad que el skill `spec`):
20
20
 
21
21
  ```markdown
22
- # Spec: <título>
23
- **Fase:** <fase> | **Estado:** draft | **Fecha:** YYYY-MM-DD
22
+ # <fase> Título de la Feature
24
23
 
25
- ## Problem statement
26
- [¿Qué problema resuelve? ¿Por qué ahora?]
24
+ > Estado: DRAFT | REVIEW | APPROVED | IMPLEMENTED
25
+ > Responsable: [nombre o rol]
26
+ > Creada: YYYY-MM-DD | Actualizada: YYYY-MM-DD
27
27
 
28
- ## Non-goals
29
- [Qué NO cubre esta spec]
28
+ ## Contexto
30
29
 
31
- ## Acceptance criteria
32
- - [ ] Criterio 1 (verificable, testeable)
33
- - [ ] Criterio 2
30
+ Por qué existe esta feature. Qué problema resuelve. Qué pasa si no la hacemos.
34
31
 
35
- ## Compliance mapping
36
- [Si el proyecto tiene frameworks de compliance en project.yaml, mapear qué artículos aplican. Si no aplica, escribir "N/A".]
32
+ ## Decisión
37
33
 
38
- ## Edge cases
39
- [Casos límite que la implementación debe manejar]
34
+ Qué vamos a implementar exactamente. Ser específico: endpoints, tablas, componentes.
40
35
 
41
- ## Implementation notes
42
- [Se llena durante la implementación]
36
+ ## Alternativas consideradas
43
37
 
44
- ## Decisiones tomadas
45
- [Se llena durante la implementación]
38
+ | Opción | Pros | Contras | Descartada por |
39
+ |--------|------|---------|----------------|
40
+ | Opción A | ... | ... | ... |
41
+ | Opción B | ... | ... | ... |
42
+
43
+ ## Criterios de aceptación
44
+
45
+ - [ ] Criterio verificable 1
46
+ - [ ] Criterio verificable 2
47
+ - [ ] Criterio verificable N
48
+
49
+ ## Impacto de compliance
50
+
51
+ Si el proyecto tiene `compliance.frameworks` configurado, completar:
52
+
53
+ - **Ley 21.719**: art. X → [descripción del impacto]
54
+ - **GDPR**: Art. Y → [descripción del impacto]
55
+ - No aplica (si no hay impacto de compliance)
56
+
57
+ ## Dependencias
58
+
59
+ - Requiere que [otra spec ID] esté implementada
60
+ - Bloqueada por [issue/ticket]
61
+
62
+ ## Notas de implementación
63
+
64
+ Cualquier decisión tomada durante la implementación que no estaba en la spec original.
46
65
  ```
47
66
 
67
+ Marcar el estado inicial como `DRAFT` (la primera línea del bloque de metadata: `> Estado: DRAFT`).
68
+
48
69
  ### Paso 3 — Guiar al usuario por cada sección
49
70
 
50
71
  Preguntar una sección a la vez, en orden:
51
72
 
52
- 1. "¿Qué problema concreto resuelve esta feature? ¿Por qué ahora y no más adelante?"
53
- 2. "¿Qué queda explícitamente fuera del scope de esta spec?"
54
- 3. "¿Cuáles son los criterios de aceptación verificables? (cada uno debe ser testeable de forma objetiva)"
55
- 4. Si `project.yaml` tiene frameworks de compliance: "¿Qué artículos o controles de compliance aplican a esta feature?"
56
- 5. "¿Qué casos límite debe manejar la implementación? (ej: usuario sin permisos, datos vacíos, concurrencia)"
73
+ 1. **Contexto**: "¿Qué problema concreto resuelve esta feature? ¿Por qué ahora y no más adelante? ¿Qué pasa si no la hacemos?"
74
+ 2. **Decisión**: "¿Qué vamos a implementar exactamente? Ser específico: endpoints, tablas, componentes."
75
+ 3. **Alternativas consideradas**: "¿Qué otras opciones se evaluaron y por qué se descartaron?"
76
+ 4. **Criterios de aceptación**: "¿Cuáles son los criterios de aceptación verificables? (cada uno debe ser testeable de forma objetiva)"
77
+ 5. Si `project.yaml` tiene frameworks de compliance: "¿Qué artículos o controles de compliance aplican a esta feature?"
78
+ 6. **Dependencias**: "¿De qué otras specs o tickets depende esta feature?"
57
79
 
58
80
  Completar el archivo con las respuestas del usuario a medida que avanza.
59
81
 
@@ -68,28 +90,31 @@ Leer `project.yaml` → `project.mode`:
68
90
  **Cómo aplicar el Planner-Critic:**
69
91
 
70
92
  Adoptar el rol de "Critic" y revisar la spec completa buscando:
71
- - ¿Hay acceptance criteria que no son objetivamente verificables?
93
+ - ¿Hay criterios de aceptación que no son objetivamente verificables?
72
94
  - ¿Hay términos ambiguos que diferentes personas podrían interpretar distinto?
73
- - ¿Hay edge cases no cubiertos que podrían romper la implementación?
74
- - ¿Los non-goals son suficientemente explícitos para evitar scope creep?
95
+ - ¿El contexto y la decisión son suficientemente específicos para evitar scope creep?
96
+ - ¿Faltan dependencias o alternativas relevantes que deberían documentarse?
75
97
 
76
- Mostrar las críticas como bullet points. Preguntar: "¿Ajustamos la spec antes de marcarla como ready?"
98
+ Mostrar las críticas como bullet points. Preguntar: "¿Ajustamos la spec antes de pasarla a REVIEW?"
77
99
 
78
100
  Si el usuario ajusta: actualizar el archivo y repetir el Critic una vez más.
79
101
 
80
- ### Paso 5 — Marcar como ready
102
+ ### Paso 5 — Marcar como APPROVED
81
103
 
82
104
  Cuando el usuario aprueba la spec (o decide no aplicar el Critic):
83
- - Cambiar `**Estado:** draft` → `**Estado:** ready` en el archivo
84
- - Confirmar: "Spec lista: `docs/specs/<archivo>.md`. Ahora podés ejecutar `/work` para implementarla."
105
+ - Cambiar `> Estado: DRAFT` → `> Estado: APPROVED` en el archivo
106
+ - Actualizar la fecha de `Actualizada:` a la fecha de hoy
107
+ - Confirmar: "Spec aprobada: `docs/specs/<archivo>.md`. Ahora podés ejecutar `/work` para implementarla."
108
+
109
+ > Estados de spec (alineados con `core/templates/spec-template.md`): `DRAFT` → `REVIEW` → `APPROVED` → `IMPLEMENTED`. `/plan` crea en `DRAFT` y aprueba a `APPROVED`; `/work` la marca `IMPLEMENTED`.
85
110
 
86
111
  ---
87
112
 
88
113
  ## Modo listar (`/plan` sin argumentos)
89
114
 
90
- Buscar todos los archivos `.md` en `docs/specs/` que contengan `**Estado:** draft` o `**Estado:** in-review`.
115
+ Buscar todos los archivos `.md` en `docs/specs/` que contengan `> Estado: DRAFT` o `> Estado: REVIEW`.
91
116
 
92
- Si no hay ninguno: "No hay specs en estado draft o in-review. Ejecutá `/plan <fase> \"<título>\"` para crear una."
117
+ Si no hay ninguno: "No hay specs en estado DRAFT o REVIEW. Ejecutá `/plan <fase> \"<título>\"` para crear una."
93
118
 
94
119
  Si hay alguno: mostrarlos como lista numerada con título, fase y fecha. Ejemplo:
95
120
  ```
@@ -106,10 +131,10 @@ Preguntar: "¿Cuál continuamos?"
106
131
  Leer el archivo de spec indicado.
107
132
 
108
133
  Aplicar el Planner-Critic completo:
109
- - ¿Los acceptance criteria son objetivamente testeables?
110
- - ¿Hay ambigüedades en el problem statement o en los criterios?
111
- - ¿Hay edge cases no cubiertos?
112
- - ¿Los non-goals son suficientemente explícitos?
134
+ - ¿Los criterios de aceptación son objetivamente testeables?
135
+ - ¿Hay ambigüedades en el contexto, la decisión o los criterios?
136
+ - ¿Las alternativas consideradas justifican la decisión tomada?
137
+ - ¿Las dependencias están completas y son explícitas?
113
138
 
114
139
  Mostrar sugerencias de mejora como bullet points con la sección específica que afectan.
115
140
 
@@ -15,7 +15,7 @@ Ejecutar los siguientes comandos y guardar sus resultados:
15
15
  ## Paso 2 — Leer configuración del proyecto
16
16
 
17
17
  - Si existe `project.yaml` en el directorio actual, leerlo para obtener: `project.mode`, `project.name`, `stack.*`, `agents.active`
18
- - Si existe `docs/wiki/index.md`, leerlo para obtener contexto del proyecto
18
+ - Si existe `wiki/index.md`, leerlo para obtener contexto del proyecto
19
19
  - Si ninguno existe, continuar con defaults: mode=startup, sin checks de compliance
20
20
 
21
21
  ## Paso 3 — Evaluar escenario y actuar
@@ -10,10 +10,12 @@ Leer `project.yaml`. Si no existe sección `deploy`: "deploy no configurado en p
10
10
 
11
11
  ## Paso 1 — Verificar review
12
12
 
13
- Buscar en el contexto de la sesión si se ejecutó `/review` y resultó en APPROVED.
13
+ Leer `.claude/review-status.json` (es el archivo que persiste `/review` en su Paso 6).
14
14
 
15
- - Si hay evidencia de review aprobado: continuar.
16
- - Si no hay evidencia: "¿Confirmás que el código fue revisado y aprobado? (s/n)"
15
+ - **Si el archivo existe**: parsear su contenido y validar el campo `verdict`.
16
+ - `verdict == "APPROVED"`: continuar. (Opcional: si el `timestamp` del review es anterior al último commit relevante, advertir que el review podría estar desactualizado y pedir confirmación.)
17
+ - `verdict == "CHANGES_REQUESTED"` o `verdict == "BLOCKED"`: "El último review resultó en `<verdict>`. Resolvé los puntos y volvé a ejecutar `/review` antes de hacer deploy." y detener.
18
+ - **Si el archivo NO existe** (fallback): "No se encontró `.claude/review-status.json`. ¿Confirmás que el código fue revisado y aprobado? (s/n)"
17
19
  - Si n: "Ejecutá `/review` antes de hacer deploy." y detener.
18
20
 
19
21
  ## Paso 2 — Verificar git status
@@ -31,7 +33,7 @@ Preguntar: "¿Querés mergear el PR actual a main antes del deploy? (s/n)"
31
33
  Si sí:
32
34
  - Ejecutar `gh pr checks` para verificar que todos los checks pasan
33
35
  - Si algún check falla: "El PR tiene checks fallando. Resolvelos antes de mergear." y detener.
34
- - Si todos pasan: ejecutar `gh pr merge --merge` (o la estrategia configurada en `project.yaml` → `deploy.merge_strategy`)
36
+ - Si todos pasan: ejecutar `gh pr merge --merge`
35
37
 
36
38
  Si no: continuar sin mergear.
37
39
 
@@ -6,11 +6,11 @@ Scope: $ARGUMENTS (ej: `--serial`, `--autorun`, o vacío para modo paralelo est
6
6
 
7
7
  ## Paso 1 — Identificar la spec
8
8
 
9
- Buscar archivos `.md` en `docs/specs/` que contengan `**Estado:** ready`.
9
+ Buscar archivos `.md` en `docs/specs/` que contengan `> Estado: APPROVED`.
10
10
 
11
11
  - Si hay exactamente una: mostrarla y confirmar "Implementando: `<archivo>`."
12
12
  - Si hay varias: mostrarlas como lista numerada y pedir que el usuario elija.
13
- - Si no hay ninguna: "No hay spec en estado ready. Ejecutá `/plan` primero." y detener.
13
+ - Si no hay ninguna: "No hay spec en estado APPROVED. Ejecutá `/plan` primero." y detener.
14
14
 
15
15
  Leer la spec seleccionada completa antes de continuar.
16
16
 
@@ -94,8 +94,10 @@ Si hay errores o conflictos: reportar claramente y preguntar cómo proceder. No
94
94
 
95
95
  ## Paso 7 — Actualizar la spec
96
96
 
97
- - Al iniciar la implementación: cambiar `**Estado:** ready` → `**Estado:** in-progress`
98
- - Al completar exitosamente: cambiar `**Estado:** in-progress` → `**Estado:** implemented`
99
- - Completar las secciones "Implementation notes" y "Decisiones tomadas" con lo que se hizo
97
+ Estados de spec (alineados con `core/templates/spec-template.md`): `DRAFT` `REVIEW``APPROVED` `IMPLEMENTED`.
100
98
 
101
- Confirmar: "Implementación completa. Spec actualizada a `implemented`. Podés ejecutar `/review` y luego `/ship`."
99
+ - Al completar exitosamente: cambiar `> Estado: APPROVED` `> Estado: IMPLEMENTED`
100
+ - Actualizar la fecha de `Actualizada:` a la fecha de hoy
101
+ - Completar la sección "Notas de implementación" con lo que se hizo y las decisiones tomadas
102
+
103
+ Confirmar: "Implementación completa. Spec actualizada a `IMPLEMENTED`. Podés ejecutar `/review` y luego `/ship`."
@@ -54,8 +54,8 @@ Implementás el backend del proyecto. Tu scope está definido en el `project.yam
54
54
  - `/review` para revisar tu propio trabajo antes de reportar al orchestrator
55
55
 
56
56
  **Hooks que aplican a tu trabajo:**
57
- - `pre-edit-check.py`: te va a advertir si dejás `console.log` o credenciales en código
57
+ - `pre-edit-check.js`: te va a advertir si dejás `console.log` o credenciales en código
58
58
  - `post-turn-check.sh`: correrá typecheck sobre los archivos que modificaste
59
- - `pre-bash-check.py` (en proyectos standard/enterprise): bloquea comandos destructivos en producción — si necesitás hacer algo en producción, coordiná con el humano explícitamente
59
+ - `pre-bash-check.js` (en proyectos standard/enterprise): bloquea comandos destructivos en producción — si necesitás hacer algo en producción, coordiná con el humano explícitamente
60
60
 
61
- **Scope:** Operar solo en los directorios de tu scope (ver `scope:` en el frontmatter de este agente). No tocar archivos de frontend o mobile sin autorización explícita.
61
+ **Scope:** Operar solo en el directorio de backend del proyecto (el derivado de `stack.backend` en `project.yaml`, o `paths.api` si está definido). No tocar archivos de frontend o mobile sin autorización explícita.
@@ -79,5 +79,5 @@ Este agente opera sobre el conocimiento de entrenamiento del modelo, **no sobre
79
79
  - ¿Hay logs de auditoría para las acciones del PR?
80
80
 
81
81
  **Hooks relacionados:**
82
- - En mode=enterprise existe `compliance-pre-edit.py` que detecta patrones peligrosos antes de que edites
83
- - Si ves que ese hook no está activo, notificar al equipo
82
+ - Los hooks de guardrail instalados (`pre-edit-check.js`, `pre-bash-check.js`) detectan secrets, debug y comandos destructivos antes de que se editen archivos
83
+ - Si el proyecto define un hook de compliance adicional (ej: detección de PII en logs) y no está activo, notificar al equipo
@@ -72,6 +72,6 @@ Si aplica: qué artículos o secciones de las leyes relevantes toca esta feature
72
72
  - No editar manualmente — son el registro de sesión
73
73
 
74
74
  **Wiki (docs/wiki/):**
75
- - index.md: actualizar con `/forge wiki ingest`
75
+ - index.md: actualizar con el skill `/wiki-ingest` (consultas con `/wiki-query`, validación con `/wiki-lint`)
76
76
  - log.md: append-only — nunca editar entradas pasadas
77
77
  - raw/: fuentes originales inmutables
@@ -63,8 +63,8 @@ Implementás el frontend del proyecto. Tu scope está definido en el `project.ya
63
63
  - `/review` para revisar tu propio trabajo antes de reportar al orchestrator
64
64
 
65
65
  **Hooks que aplican a tu trabajo:**
66
- - `pre-edit-check.py`: detecta `console.log` en TypeScript y credenciales hardcodeadas — corregí antes de reportar listo
66
+ - `pre-edit-check.js`: detecta `console.log` en TypeScript y credenciales hardcodeadas — corregí antes de reportar listo
67
67
  - `post-turn-check.sh`: correrá `tsc` sobre los archivos que modificaste — asegurate de que typechecks pasan
68
- - `pre-bash-check.py` (en proyectos standard/enterprise): bloquea comandos destructivos en producción
68
+ - `pre-bash-check.js` (en proyectos standard/enterprise): bloquea comandos destructivos en producción
69
69
 
70
70
  **Scope:** Operar solo en archivos de UI y componentes (ver `stack.frontend` en `project.yaml`). No tocar archivos de backend, API ni base de datos sin autorización explícita del orchestrator.
@@ -16,7 +16,7 @@ Sos el lead de un agent team. Tu trabajo es coordinar, no implementar.
16
16
  1. **Recibir tareas** del humano y entenderlas en profundidad.
17
17
  2. **Identificar la spec** correspondiente en `docs/specs/`. Si no existe, parar y pedir que se cree.
18
18
  3. **Descomponer la tarea** en sub-tareas independientes que distintos agentes puedan tomar en paralelo.
19
- 4. **Spawnear el team** con los agentes apropiados (ver roster en AGENTS.md del proyecto).
19
+ 4. **Spawnear el team** con los agentes apropiados. El roster se descubre desde `.claude/agents/*.md` (o el `AGENTS.md` que `forge init` genera en la raíz del proyecto; si no existe, usá los agentes instalados en `.claude/agents/`).
20
20
  5. **Sintetizar** los resultados al final y reportar al humano.
21
21
 
22
22
  ## Cómo spawnear agentes
@@ -40,6 +40,8 @@ Agent({
40
40
 
41
41
  ### Coordinación con SendMessage
42
42
 
43
+ `SendMessage` e `isolation: "worktree"` son capacidades del runtime de teams — no necesitan declararse en el campo `tools:` del frontmatter.
44
+
43
45
  ```
44
46
  SendMessage({ to: "backend-engineer", message: "Tipos listos. Podés continuar." })
45
47
  ```
@@ -71,12 +73,12 @@ Esperá aprobación antes de spawnear el team.
71
73
 
72
74
  ## Reglas
73
75
 
74
- - Leé `CLAUDE.md` y `AGENTS.md` raíz antes de spawnear cualquier agente.
76
+ - Leé `CLAUDE.md` raíz y, si existe, `AGENTS.md` (generado por `forge init`) antes de spawnear cualquier agente.
75
77
  - Sin spec en `docs/specs/` → no empieces. Pedí que se cree primero.
76
78
  - Mínimo número de agentes que la tarea justifica. <3 archivos → un solo agente basta.
77
79
  - Incluí al `compliance-reviewer` si la tarea toca datos de usuarios, consentimientos o logs.
78
80
  - Pedí aprobación al humano antes de mergear cuando >5 archivos del mismo módulo fueron tocados.
79
- - Máximo 3 agentes simultáneos en suscripción Pro / hasta 7-8 con Max 20x o API directa.
81
+ - **Techo de paralelismo (concurrentes):** máximo 3 agentes simultáneos en suscripción Pro / hasta 7-8 con Max 20x o API directa. Este es el único límite de agentes concurrentes.
80
82
 
81
83
  ## No hagas
82
84
 
@@ -95,10 +97,10 @@ Esperá aprobación antes de spawnear el team.
95
97
  **Reglas obligatorias para el team:**
96
98
  1. Nunca delegues implementación sin spec aprobada en `docs/specs/`
97
99
  2. El team no edita código en main — verificar branch antes de spawnear teammates
98
- 3. Máximo 5-6 tasks por teammate, 3-5 teammates por sesión
100
+ 3. Como guía de carga: ~5-6 tasks por teammate y 3-5 teammates totales por sesión (el techo de *concurrencia* es el de la sección Reglas: 3 Pro / 7-8 Max)
99
101
  4. Si el proyecto es enterprise: incluir compliance-reviewer en PRs que toquen datos de usuarios
100
102
 
101
103
  **Hooks activos que el team debe respetar:**
102
- - `pre-edit-check.py`: bloquea edits en main y detecta credenciales hardcodeadas
104
+ - `pre-edit-check.js`: bloquea edits en main y detecta credenciales hardcodeadas
103
105
  - `post-turn-check.sh`: corre typecheck al terminar cada turno
104
- - `pre-bash-check.py` (si mode=standard/enterprise): bloquea comandos destructivos en producción
106
+ - `pre-bash-check.js` (si mode=standard/enterprise): bloquea comandos destructivos en producción
@@ -50,5 +50,5 @@ con severidad y recomendación de fix.
50
50
  **Checklist adicional para Forge v2:**
51
51
  - ¿El PR agrega variables de entorno? Verificar que están documentadas en `.env.example`
52
52
  - ¿Hay cambios en permisos de `settings.json`? Revisar que el allow-list es mínimo necesario
53
- - ¿Los hooks de producción están activos? (pre-bash-check.py para mode=standard/enterprise)
53
+ - ¿Los hooks de producción están activos? (pre-bash-check.js para mode=standard/enterprise)
54
54
  - ¿El deploy pipeline de `/ship` incluye verificación de runtime logs?
@@ -25,7 +25,7 @@ testeable, se lo pedís al agente que corresponda y esperás.
25
25
  - **No escribís código de producción.** Si algo no se puede testear, lo reportás.
26
26
  - Tests determinísticos — sin `Math.random()` ni `Date.now()` sin mockear.
27
27
  - Nombres descriptivos: `describe("cuando X") / it("debería Y")`.
28
- - Tests de integración deben usar base de datos real, no mocks del ORM.
28
+ - Cuando el proyecto tiene base de datos (según `stack` en `project.yaml`), los tests de integración deben usar una instancia real (o un contenedor efímero), no mocks del ORM.
29
29
  - Limpiar fixtures después de cada test (transacciones o truncate).
30
30
  - Sin `console.log` en tests — el runner lo reportará como falla en CI.
31
31
 
@@ -31,7 +31,7 @@ wiki-lint → health check + auto-reparación
31
31
  | `security-audit` | Universal | No | new-feature, security-auditor |
32
32
  | `db-migrate` | Universal | No (solo el ORM del proyecto) | new-feature |
33
33
  | `browser-test` | Universal | `agent-browser` CLI (npm i -g) | new-feature, usuario directo |
34
- | `wiki-ingest` | Wiki | No | usuario directo, docs-writer |
34
+ | `wiki-ingest` | Wiki | No | usuario directo, agente docs-writer |
35
35
  | `wiki-query` | Wiki | No | usuario directo, new-feature |
36
36
  | `wiki-lint` | Wiki | No | usuario directo |
37
37
  | `local2prod` | Universal | CLI del provider de deploy | new-feature |
@@ -53,7 +53,7 @@ Configurar en `project.yaml` bajo `skills.active`:
53
53
  - **`new-feature`**: checklist completo de implementación (orquesta los otros)
54
54
 
55
55
  ### Wiki — knowledge base del proyecto
56
- Configurar en `project.yaml` bajo `skills.active`. Generan slash commands `/wiki-ingest`, `/wiki-query`, `/wiki-lint` en Claude Code. La estructura `docs/wiki/` se inicializa con `forge-init.py`:
56
+ Configurar en `project.yaml` bajo `skills`. Generan slash commands `/wiki-ingest`, `/wiki-query`, `/wiki-lint` en Claude Code. La estructura `wiki/` se inicializa con `forge wiki ingest <archivo>`:
57
57
  - **`wiki-ingest`**: ingesta fuentes (URL, archivo, texto) → actualiza `raw/` + páginas wiki + index + log
58
58
  - **`wiki-query`**: responde preguntas usando el wiki como base, con citas a páginas
59
59
  - **`wiki-lint`**: verifica integridad del wiki: links, huérfanos, frontmatter, log
@@ -1,8 +1,7 @@
1
1
  # Skill: aitmpl-search
2
2
 
3
3
  Busca en el catálogo curado de forge: frameworks de agentes IA, MCP servers instalables,
4
- profiles de stack y herramientas. La búsqueda es offline (catálogo local); opcionalmente
5
- puede extenderse a GitHub con `--github`.
4
+ profiles de stack y herramientas. La búsqueda es offline (catálogo local).
6
5
 
7
6
  Triggers: /aitmpl-search, "buscar templates", "buscar en catálogo", "templates de AI",
8
7
  "buscar template", "buscar MCP", "buscar profile".
@@ -24,33 +23,22 @@ Triggers: /aitmpl-search, "buscar templates", "buscar en catálogo", "templates
24
23
 
25
24
  Búsqueda por texto en el catálogo local:
26
25
  ```bash
27
- python3 .agentic/scripts/aitmpl-search.py "<query>" --limit 10
26
+ forge aitmpl-search "<query>" --limit 10
28
27
  ```
29
28
 
30
- Filtrar por categoría (`framework`, `mcp-server`, `profile`, `tool`, `resource`):
29
+ Filtrar por categoría (`mcp-server`, `framework`, `profile`):
31
30
  ```bash
32
- python3 .agentic/scripts/aitmpl-search.py "<query>" --category mcp-server
31
+ forge aitmpl-search --category mcp-server
33
32
  ```
34
33
 
35
34
  Ver todas las categorías disponibles:
36
35
  ```bash
37
- python3 .agentic/scripts/aitmpl-search.py --list-categories
36
+ forge aitmpl-search --list-categories
38
37
  ```
39
38
 
40
39
  Salida JSON (para integración o análisis):
41
40
  ```bash
42
- python3 .agentic/scripts/aitmpl-search.py "<query>" --json
43
- ```
44
-
45
- Extender con búsqueda en GitHub (requiere red; límite 60 req/h sin token):
46
- ```bash
47
- python3 .agentic/scripts/aitmpl-search.py "<query>" --github
48
- export GITHUB_TOKEN=ghp_... # aumenta a 5000 req/h
49
- ```
50
-
51
- Desde el CLI interactivo:
52
- ```bash
53
- python3 .agentic/forge.py # → "Buscar templates" → buscar o filtrar por categoría
41
+ forge aitmpl-search "<query>" --json
54
42
  ```
55
43
 
56
44
  ### Paso 2 — Analizar resultados
@@ -71,4 +59,4 @@ Para profiles, ofrece agregar el profile a `project.yaml` directamente.
71
59
 
72
60
  - No asumir que un resultado del catálogo está actualizado — verificar el repositorio antes de recomendar
73
61
  - No crear agentes Tier 2 sin revisar si el stack ya tiene un profile en `profiles/`
74
- - No instalar MCP servers sin verificar que el usuario tiene Python 3.9+ y las dependencias requeridas
62
+ - No instalar MCP servers sin verificar que el usuario tiene las dependencias requeridas
@@ -27,7 +27,7 @@ git status # confirmar qué va al commit
27
27
 
28
28
  git commit -m "tipo(scope): descripción en imperativo
29
29
 
30
- Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>"
30
+ Co-Authored-By: <modelo> <noreply@anthropic.com>"
31
31
  ```
32
32
 
33
33
  Si ya hay un commit listo, ir directo al Paso 2.
@@ -117,7 +117,7 @@ Invocar el skill `/security-audit` como checklist mental antes de escribir cualq
117
117
  # > Estado: IMPLEMENTED
118
118
  ```
119
119
 
120
- 5. **Actualizar CLAUDE.md** — mover el ID de spec de "En curso" a "Completadas"
120
+ 6. **Actualizar CLAUDE.md** — mover el ID de spec de "En curso" a "Completadas"
121
121
 
122
122
  ---
123
123
 
@@ -3,6 +3,8 @@
3
3
  Protocolo para iniciar una nueva fase de desarrollo en un proyecto forge.
4
4
  Activar al comienzo de cada sprint o fase nueva.
5
5
 
6
+ Triggers: /phase-kickoff, "iniciar sprint", "kickoff de fase", "empezar fase"
7
+
6
8
  ---
7
9
 
8
10
  ## Cuándo usar este skill
@@ -3,6 +3,8 @@
3
3
  Redactar specs de features siguiendo la plantilla del framework forge.
4
4
  Activar antes de escribir cualquier spec nueva.
5
5
 
6
+ Triggers: /spec, "crear spec", "redactar spec", "nueva spec"
7
+
6
8
  ---
7
9
 
8
10
  ## Cuándo usar este skill
@@ -33,7 +33,7 @@ Si es texto → usar el texto tal como está
33
33
  ### Paso 2 — Almacenar en raw/ (inmutable)
34
34
 
35
35
  ```
36
- Path: docs/wiki/raw/<tema>/<YYYY-MM-DD>-<slug-del-titulo>.md
36
+ Path: wiki/raw/<tema>/<YYYY-MM-DD>-<slug-del-titulo>.md
37
37
 
38
38
  Formato del archivo raw:
39
39
  ---
@@ -59,14 +59,14 @@ Leer el contenido y identificar:
59
59
  ### Paso 4 — Actualizar páginas wiki
60
60
 
61
61
  Para cada concepto identificado:
62
- - Si `docs/wiki/concepts/<nombre>.md` existe → agregar sección con nueva info + citar fuente
62
+ - Si `wiki/concepts/<nombre>.md` existe → agregar sección con nueva info + citar fuente
63
63
  - Si no existe → crear la página desde la plantilla
64
64
 
65
65
  Para cada entidad identificada:
66
- - Si `docs/wiki/entities/<nombre>.md` existe → actualizar con nueva info
66
+ - Si `wiki/entities/<nombre>.md` existe → actualizar con nueva info
67
67
  - Si no existe → crear la página desde la plantilla
68
68
 
69
- Crear siempre `docs/wiki/sources/<slug>.md` con resumen de la fuente:
69
+ Crear siempre `wiki/sources/<slug>.md` con resumen de la fuente:
70
70
 
71
71
  ```markdown
72
72
  ---
@@ -95,11 +95,11 @@ tags: [tag1, tag2]
95
95
 
96
96
  ### Paso 5 — Actualizar index.md y log.md
97
97
 
98
- En `docs/wiki/index.md`:
98
+ En `wiki/index.md`:
99
99
  - Agregar filas nuevas en las tablas correspondientes (concepts, entities, sources)
100
100
  - Si la categoría no existe, crearla
101
101
 
102
- En `docs/wiki/log.md` (append-only — NUNCA editar entradas anteriores):
102
+ En `wiki/log.md` (append-only — NUNCA editar entradas anteriores):
103
103
 
104
104
  ```markdown
105
105
  ## [<YYYY-MM-DD>] ingest | <título de la fuente>
@@ -180,4 +180,4 @@ Si la nueva fuente contradice algo en el wiki:
180
180
 
181
181
  - `wiki-query` consume las páginas que este skill crea
182
182
  - `wiki-lint` verifica la integridad después de un ingest
183
- - `docs-writer` puede invocar wiki-ingest al documentar una decisión nueva
183
+ - el agente `docs-writer` (no es un skill) puede invocar wiki-ingest al documentar una decisión nueva
@@ -20,7 +20,7 @@ wiki", "wiki health", "wiki check".
20
20
 
21
21
  ### 1. Integridad del índice
22
22
 
23
- Leer `docs/wiki/index.md` y verificar:
23
+ Leer `wiki/index.md` y verificar:
24
24
 
25
25
  ```
26
26
  ✓ Cada [[link]] del índice apunta a un archivo que existe
@@ -32,10 +32,10 @@ Auto-reparar: agregar al índice los archivos que faltan (con descripción vací
32
32
  ### 2. Wikilinks rotos
33
33
 
34
34
  Buscar en todas las páginas wiki referencias `[[ruta/nombre]]` y verificar que
35
- el archivo `docs/wiki/ruta/nombre.md` existe.
35
+ el archivo `wiki/ruta/nombre.md` existe.
36
36
 
37
37
  ```bash
38
- grep -rn "\[\[" docs/wiki/ --include="*.md" | grep -v "raw/"
38
+ grep -rn "\[\[" wiki/ --include="*.md" | grep -v "raw/"
39
39
  ```
40
40
 
41
41
  Reportar: lista de links rotos con el archivo donde aparecen.
@@ -53,7 +53,7 @@ Reportar: lista de huérfanas. No auto-borrar — requiere decisión humana.
53
53
 
54
54
  ### 4. Integridad del log
55
55
 
56
- Verificar que `docs/wiki/log.md` existe y tiene al menos una entrada.
56
+ Verificar que `wiki/log.md` existe y tiene al menos una entrada.
57
57
  El log es append-only — nunca modificar entradas pasadas.
58
58
 
59
59
  Reportar si el log no ha sido actualizado en los últimos 30 días (wiki posiblemente abandonado).
@@ -22,9 +22,9 @@ sabemos de", "wiki:", "query:", "consultar wiki", "what does the wiki say about"
22
22
 
23
23
  ### Paso 1 — Leer el índice
24
24
 
25
- Leer `docs/wiki/index.md` para identificar qué páginas son relevantes a la pregunta.
25
+ Leer `wiki/index.md` para identificar qué páginas son relevantes a la pregunta.
26
26
 
27
- Si no hay wiki (`docs/wiki/` no existe o está vacío): indicar que el wiki está vacío
27
+ Si no hay wiki (`wiki/` no existe o está vacío): indicar que el wiki está vacío
28
28
  y sugerir usar `/wiki-ingest` para agregar conocimiento.
29
29
 
30
30
  ### Paso 2 — Leer páginas relevantes
@@ -60,7 +60,7 @@ qué fuentes ingestar para cubrir el gap.
60
60
  Si la pregunta produjo una síntesis nueva (no trivial, reutilizable), archivarla:
61
61
 
62
62
  ```
63
- docs/wiki/synthesis/<tema>.md
63
+ wiki/synthesis/<tema>.md
64
64
  ```
65
65
 
66
66
  Formato:
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: astro
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # Frontend Engineer — Astro
@@ -15,7 +16,7 @@ ni backend fuera de las integraciones de Astro.
15
16
 
16
17
  ## Stack
17
18
 
18
- - **Framework:** Astro 4.x
19
+ - **Framework:** Astro (última versión estable)
19
20
  - **Rendering:** SSG por defecto; SSR con adaptadores (Vercel, Cloudflare, Node)
20
21
  - **UI Islands:** React, Svelte, Vue o Lit según el proyecto
21
22
  - **Contenido:** MDX, Content Collections, Markdown
@@ -36,7 +37,7 @@ ni backend fuera de las integraciones de Astro.
36
37
 
37
38
  - **Sin JavaScript innecesario:** Astro carga 0 JS por defecto — mantenerlo así salvo islands explícitas.
38
39
  - **Content Collections tipadas:** toda colección define su schema Zod en `src/content/config.ts`.
39
- - **Sin secrets en el cliente:** variables de entorno con `VITE_` prefix son públicas — solo usarlas para config no sensible.
40
+ - **Sin secrets en el cliente:** variables de entorno con prefijo `PUBLIC_` son públicas (`import.meta.env.PUBLIC_*`) — solo usarlas para config no sensible.
40
41
  - **Accesibilidad:** HTML semántico, atributos `alt`, roles ARIA cuando el HTML no es suficiente.
41
42
  - **Sin spec, sin código:** la spec debe existir en `docs/specs/` antes de implementar.
42
43
 
@@ -66,7 +67,7 @@ Antes de tocar cualquier archivo, verificar que existe una spec en `docs/specs/`
66
67
  Este agente puede invocar los slash commands definidos en `.claude/commands/` del proyecto. Revisar qué comandos están disponibles con `/help` antes de empezar.
67
68
 
68
69
  ### Hooks activos en este stack
69
- - **`pre-edit-check.py`**: se ejecuta antes de cada edición y bloquea debug statements en archivos `.astro`, `.ts` y `.tsx`. No dejes `console.log`, `debugger` ni comentarios `// TODO` sin ticket.
70
+ - **`pre-edit-check.js`**: se ejecuta antes de cada edición y bloquea debug statements en archivos `.astro`, `.ts` y `.tsx`. No dejes `console.log`, `debugger` ni comentarios `// TODO` sin ticket.
70
71
  - **`post-turn-check.sh`**: se ejecuta al terminar cada turno. Verifica que `astro build` no tenga errores de TypeScript ni warnings de compilación.
71
72
 
72
73
  ### Reglas de scope
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: api-engineer
3
- description: "Implementa el backend del proyecto. Django 4.x/5.x + DRF/Django Ninja + PostgreSQL. Scope: apps/ y config/."
3
+ description: "Implementa el backend del proyecto. Django (última versión estable) + DRF/Django Ninja + PostgreSQL. Scope: apps/ y config/."
4
4
  model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: django
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # API Engineer — Django
@@ -14,7 +15,7 @@ Implementás el backend del proyecto. Tu scope es `apps/` y `config/` (estructur
14
15
  ## Stack
15
16
 
16
17
  - **Runtime:** Python 3.11+
17
- - **Framework:** Django 4.x / 5.x. NO usar Flask ni FastAPI.
18
+ - **Framework:** Django (última versión estable, preferir la LTS vigente). NO usar Flask ni FastAPI.
18
19
  - **API:** Django REST Framework (DRF) con ViewSets y Routers, o Django Ninja para APIs tipadas. No mezcles los dos en el mismo proyecto.
19
20
  - **ORM:** Django ORM. NO usar queries raw salvo en migraciones de datos complejas.
20
21
  - **Migraciones:** `manage.py makemigrations` + `manage.py migrate`. Un concepto por migración; nombres descriptivos.
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: expo
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # Mobile Engineer — Expo SDK
@@ -23,7 +24,7 @@ Leé ese archivo antes de empezar.
23
24
 
24
25
  ## Reglas
25
26
 
26
- 1. **Bundle size controlado:** iOS <200KB, Android <250KB por defecto. Verificar con `expo bundle-size`.
27
+ 1. **Bundle size controlado:** iOS <200KB, Android <250KB por defecto. Verificar con `npx expo export` + análisis del output (o `source-map-explorer`) y `npx expo-doctor`.
27
28
  2. **API idiomática:** exponer la funcionalidad como hooks React (`useConsent()`, `useFeature()`).
28
29
  3. **No mezclar APIs nativas y JS bridge en el mismo flujo.** Si necesitás algo nativo, va en su propio módulo aislado.
29
30
  4. **Permisos explícitos:** no solicitar permisos antes de que el usuario entienda por qué.
@@ -61,7 +62,7 @@ Antes de tocar cualquier archivo, verificar que existe una spec en `docs/specs/`
61
62
  Este agente puede invocar los slash commands definidos en `.claude/commands/` del proyecto. Revisar qué comandos están disponibles con `/help` antes de empezar.
62
63
 
63
64
  ### Hooks activos en este stack
64
- - **`pre-edit-check.py`**: se ejecuta antes de cada edición. Detecta debug statements (`console.log`, `debugger`) en archivos `.ts` y `.tsx`.
65
+ - **`pre-edit-check.js`**: se ejecuta antes de cada edición. Detecta debug statements (`console.log`, `debugger`) en archivos `.ts` y `.tsx`.
65
66
  - **`post-turn-check.sh`**: se ejecuta al terminar cada turno. Corre `tsc --noEmit` para verificar TypeScript estricto. El proyecto usa `strict: true` — cualquier error de tipos bloquea el turno. Corregir antes de reportar al orchestrator.
66
67
 
67
68
  ### Reglas de scope
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: express
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # API Engineer — Express + Node.js
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: fastapi
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # API Engineer — FastAPI
@@ -77,8 +78,8 @@ El proyecto puede tener slash commands en `.claude/commands/`. Revisarlos antes
77
78
 
78
79
  ### Hooks activos en este stack
79
80
 
80
- - **`pre-edit-check.py`** (PreToolUse/Edit|Write): detecta `print()` en archivos `.py` que no sean scripts de forge ni archivos en `.agentic/`. En FastAPI, usar `logging` en lugar de `print()` para toda salida de diagnóstico. Además bloquea secrets hardcodeados y protege la rama `main`.
81
- - **`pre-bash-check.py`** (PreToolUse/Bash): bloquea comandos destructivos en producción. Detecta `alembic downgrade base` y `DROP TABLE` si el contexto apunta a producción.
81
+ - **`pre-edit-check.js`** (PreToolUse/Edit|Write): detecta `print()` en archivos `.py` que no sean scripts de forge ni archivos en `.agentic/`. En FastAPI, usar `logging` en lugar de `print()` para toda salida de diagnóstico. Además bloquea secrets hardcodeados y protege la rama `main`.
82
+ - **`pre-bash-check.js`** (PreToolUse/Bash): bloquea comandos destructivos en producción. Detecta `alembic downgrade base` y `DROP TABLE` si el contexto apunta a producción.
82
83
 
83
84
  ### Reglas de scope
84
85
 
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: go-gin
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # API Engineer — Go + Gin
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: hono-drizzle
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # API Engineer — Hono + Drizzle
@@ -72,8 +73,8 @@ El proyecto puede tener slash commands en `.claude/commands/`. Revisarlos antes
72
73
 
73
74
  ### Hooks activos en este stack
74
75
 
75
- - **`pre-bash-check.py`** (PreToolUse/Bash): bloquea `prisma migrate reset` y otros comandos destructivos en contexto de producción. **Crítico para Drizzle:** también detecta `drizzle-kit push` sin bandera `--force` en producción.
76
- - **`pre-edit-check.py`** (PreToolUse/Edit|Write): detecta `console.log` y `debugger` en archivos `.ts`/`.tsx`, bloquea secrets hardcodeados, y protege la rama `main`.
76
+ - **`pre-bash-check.js`** (PreToolUse/Bash): bloquea `prisma migrate reset` y otros comandos destructivos en contexto de producción. **Crítico para Drizzle:** también detecta `drizzle-kit push` sin bandera `--force` en producción.
77
+ - **`pre-edit-check.js`** (PreToolUse/Edit|Write): detecta `console.log` y `debugger` en archivos `.ts`/`.tsx`, bloquea secrets hardcodeados, y protege la rama `main`.
77
78
 
78
79
  ### Reglas de scope
79
80
 
@@ -1,10 +1,11 @@
1
1
  ---
2
2
  name: api-engineer
3
- description: "Implementa el backend del proyecto. Laravel 10+ + Sanctum/Passport + PostgreSQL/MySQL. Scope: app/ y routes/api.php."
3
+ description: "Implementa el backend del proyecto. Laravel (última versión estable) + Sanctum/Passport + PostgreSQL/MySQL. Scope: app/ y routes/api.php."
4
4
  model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: laravel
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # API Engineer — Laravel
@@ -14,7 +15,7 @@ Implementás el backend del proyecto. Tu scope es `app/` y `routes/api.php`. Le
14
15
  ## Stack
15
16
 
16
17
  - **Runtime:** PHP 8.2+
17
- - **Framework:** Laravel 10, 11 o 12. NO usar Lumen ni micro-frameworks.
18
+ - **Framework:** Laravel (última versión estable). NO usar Lumen ni micro-frameworks.
18
19
  - **API:** Laravel Resources + ResourceCollections para transformación de respuestas. Form Requests para validación.
19
20
  - **ORM:** Eloquent. Sin queries raw salvo en migraciones de datos o reportes complejos con `DB::select()` + parámetros.
20
21
  - **Migraciones:** `artisan make:migration` + `artisan migrate`. Un concepto por migración; nombres descriptivos en snake_case.
@@ -104,8 +105,8 @@ El proyecto puede tener slash commands en `.claude/commands/`. Revisarlos antes
104
105
 
105
106
  ### Hooks activos en este stack
106
107
 
107
- - **`pre-edit-check.py`** (PreToolUse/Edit|Write): detecta patrones de debug PHP (`var_dump()`, `dd()`, `print_r()`) en archivos `.php`, bloquea secrets hardcodeados, y protege la rama `main`. Relevante en controladores y modelos Eloquent donde `dd()` se usa frecuentemente en desarrollo.
108
- - **`pre-bash-check.py`** (PreToolUse/Bash): bloquea comandos destructivos en producción. Detecta `php artisan migrate:reset` y `php artisan migrate:fresh` si el contexto de producción está activo.
108
+ - **`pre-edit-check.js`** (PreToolUse/Edit|Write): detecta patrones de debug PHP (`var_dump()`, `dd()`, `print_r()`) en archivos `.php`, bloquea secrets hardcodeados, y protege la rama `main`. Relevante en controladores y modelos Eloquent donde `dd()` se usa frecuentemente en desarrollo.
109
+ - **`pre-bash-check.js`** (PreToolUse/Bash): bloquea comandos destructivos en producción. Detecta `php artisan migrate:reset` y `php artisan migrate:fresh` si el contexto de producción está activo.
109
110
 
110
111
  ### Reglas de scope
111
112
 
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: laravel
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # Fullstack Engineer — Laravel
@@ -14,7 +15,7 @@ Implementás features full-stack en el proyecto Laravel. Tu scope es `app/`, `re
14
15
  ## Stack
15
16
 
16
17
  - **Runtime:** PHP 8.2+
17
- - **Framework:** Laravel 10, 11 o 12.
18
+ - **Framework:** Laravel (última versión estable).
18
19
  - **Frontend:** Blade + Livewire 3 por defecto. Si el proyecto usa Inertia.js (Vue 3 o React), el `CLAUDE.md` lo indicará.
19
20
  - **Estilos:** Tailwind CSS. Sin Bootstrap salvo que el proyecto lo establezca.
20
21
  - **Auth:** Laravel Breeze (simple) o Jetstream (equipos + 2FA). No reinventar autenticación.
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: laravel
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # Migration Specialist — Laravel
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: nestjs
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # API Engineer — NestJS
@@ -15,7 +16,7 @@ Leé ese archivo antes de empezar.
15
16
  ## Stack
16
17
 
17
18
  - **Runtime:** Node.js 20 LTS.
18
- - **Framework:** NestJS 10+. Arquitectura modular: un módulo por dominio.
19
+ - **Framework:** NestJS (última versión estable). Arquitectura modular: un módulo por dominio.
19
20
  - **ORM:** Prisma (preferido) o TypeORM con decoradores. NO usar query builders ad-hoc.
20
21
  - **Validación:** class-validator + class-transformer en DTOs. Usar `ValidationPipe` global.
21
22
  - **Autenticación:** `@nestjs/passport` + JWT. Guards para proteger rutas.
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  name: admin-engineer
3
- description: Construye el dashboard de administración del proyecto con Next.js 15 + shadcn/ui. NO trabaja fuera del directorio de admin definido en project.yaml.
3
+ description: Construye el dashboard de administración del proyecto con Next.js (última versión estable) + shadcn/ui. NO trabaja fuera del directorio de admin definido en project.yaml.
4
4
  model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: nextjs-admin
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
- # Admin Engineer — Next.js 15 + shadcn/ui
11
+ # Admin Engineer — Next.js (última versión estable) + shadcn/ui
11
12
 
12
13
  Construís el dashboard de administración del proyecto. Tu scope es el directorio de admin
13
14
  definido en el `CLAUDE.md` del proyecto (típicamente `packages/admin/` o `apps/admin/`).
@@ -15,7 +16,7 @@ Leé ese archivo antes de empezar.
15
16
 
16
17
  ## Stack
17
18
 
18
- - **Framework:** Next.js 15 con App Router.
19
+ - **Framework:** Next.js (última versión estable) con App Router.
19
20
  - **UI:** shadcn/ui + Tailwind 4. NO Tailwind 3, NO Material UI, NO Chakra, NO Mantine.
20
21
  - **Forms:** React Hook Form + Zod.
21
22
  - **Estado servidor:** TanStack Query. NO SWR, NO useEffect para fetch.
@@ -68,8 +69,8 @@ El proyecto puede tener slash commands en `.claude/commands/`. Revisarlos antes
68
69
 
69
70
  ### Hooks activos en este stack
70
71
 
71
- - **`pre-edit-check.py`** (PreToolUse/Edit|Write): detecta `console.log` y `debugger` en archivos `.ts`/`.tsx`, bloquea secrets hardcodeados, y protege la rama `main`. Especialmente relevante en componentes React donde los `console.log` de debug son comunes.
72
- - **`pre-bash-check.py`** (PreToolUse/Bash): bloquea comandos destructivos en producción. Aplica si el proyecto usa Prisma como ORM (detecta `prisma migrate reset`).
72
+ - **`pre-edit-check.js`** (PreToolUse/Edit|Write): detecta `console.log` y `debugger` en archivos `.ts`/`.tsx`, bloquea secrets hardcodeados, y protege la rama `main`. Especialmente relevante en componentes React donde los `console.log` de debug son comunes.
73
+ - **`pre-bash-check.js`** (PreToolUse/Bash): bloquea comandos destructivos en producción. Aplica si el proyecto usa Prisma como ORM (detecta `prisma migrate reset`).
73
74
 
74
75
  ### Reglas de scope
75
76
 
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: playwright-crawler
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # Scanner Engineer — Playwright + BullMQ
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: rails
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # Fullstack Engineer — Ruby on Rails
@@ -14,7 +15,7 @@ proyecto Rails (app/, db/, config/, spec/). Leé el `CLAUDE.md` del proyecto ant
14
15
 
15
16
  ## Stack
16
17
 
17
- - **Framework:** Ruby on Rails 7.x o 8.x.
18
+ - **Framework:** Ruby on Rails (última versión estable).
18
19
  - **Base de datos:** PostgreSQL. Sin SQLite en producción.
19
20
  - **Frontend:** Hotwire (Turbo + Stimulus) por defecto. Si el proyecto usa React/Vue, el `CLAUDE.md` lo indicará.
20
21
  - **Tests:** RSpec + FactoryBot + Shoulda Matchers. Capybara para tests de sistema.
@@ -5,6 +5,7 @@ model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: sveltekit
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # Frontend Engineer — SvelteKit
@@ -1,19 +1,20 @@
1
1
  ---
2
2
  name: frontend-engineer
3
- description: "Construye apps con Nuxt 3 + Vue 3 Composition API + Pinia + TypeScript. Scope: app/ o src/ (páginas, componentes, composables, stores)."
3
+ description: "Construye apps con Nuxt (última versión estable) + Vue 3 Composition API + Pinia + TypeScript. Scope: app/ o src/ (páginas, componentes, composables, stores)."
4
4
  model: sonnet
5
5
  tools: Read, Grep, Glob, Bash, Edit, Write
6
6
  tier: 2
7
7
  profile: vuenuxt
8
+ last_verified: "2026-06"
8
9
  ---
9
10
 
10
11
  # Frontend Engineer — Vue/Nuxt
11
12
 
12
- Construís aplicaciones con Nuxt 3 y Vue 3. Tu scope es `app/` o `src/` según cómo esté configurado el proyecto. Leé el `CLAUDE.md` del proyecto antes de empezar.
13
+ Construís aplicaciones con Nuxt (última versión estable) y Vue 3. Tu scope es `app/` o `src/` según cómo esté configurado el proyecto. Leé el `CLAUDE.md` del proyecto antes de empezar.
13
14
 
14
15
  ## Stack
15
16
 
16
- - **Framework:** Nuxt 3 (última versión estable). NO usar Nuxt 2 ni Vue 2.
17
+ - **Framework:** Nuxt (última versión estable). NO usar Nuxt 2 ni Vue 2.
17
18
  - **UI:** Vue 3 con Composition API (`<script setup>`). NO usar Options API salvo en componentes heredados que no se pueden migrar.
18
19
  - **State:** Pinia para estado global. Composables con `ref`/`computed` para estado local.
19
20
  - **Routing:** File-based routing de Nuxt (`pages/`). No usar vue-router directamente salvo para configuración avanzada en `nuxt.config.ts`.
@@ -259,7 +259,7 @@ Antes de tocar cualquier archivo, verificar que existe una spec en `docs/specs/`
259
259
  Este agente puede invocar los slash commands definidos en `.claude/commands/` del proyecto. Revisar qué comandos están disponibles con `/help` antes de empezar.
260
260
 
261
261
  ### Hooks activos en este stack
262
- - **`pre-edit-check.py`**: se ejecuta antes de cada edición. Detecta patrones de debug PHP (`var_dump()`, `print_r()`, `error_log()`) en archivos `.php` del child theme y módulos personalizados.
262
+ - **`pre-edit-check.js`**: se ejecuta antes de cada edición. Detecta patrones de debug PHP (`var_dump()`, `print_r()`, `error_log()`) en archivos `.php` del child theme y módulos personalizados.
263
263
  - **`post-turn-check.sh`**: se ejecuta al terminar cada turno. Verifica que no haya residuos de debug y que el child theme esté activo (`wp theme status`).
264
264
 
265
265
  ### APIs de terceros y seguridad
@@ -14,8 +14,8 @@ Diseñás e implementás sitios con Elementor Free y Elementor Pro. Tu scope inc
14
14
 
15
15
  ## Stack
16
16
 
17
- - **WordPress:** 6.4+.
18
- - **Elementor Free:** última versión estable (4.x).
17
+ - **WordPress:** última versión estable.
18
+ - **Elementor Free:** última versión estable (serie 3.x).
19
19
  - **Elementor Pro:** última versión estable (requerido para Theme Builder, Dynamic Tags, Loop Grid, Popup Builder, Form Builder).
20
20
  - **PHP:** 8.1+.
21
21
  - **Child theme:** obligatorio. Nunca modificar el parent theme directamente.
@@ -295,7 +295,7 @@ Antes de tocar cualquier archivo, verificar que existe una spec en `docs/specs/`
295
295
  Este agente puede invocar los slash commands definidos en `.claude/commands/` del proyecto. Revisar qué comandos están disponibles con `/help` antes de empezar.
296
296
 
297
297
  ### Hooks activos en este stack
298
- - **`pre-edit-check.py`**: se ejecuta antes de cada edición. Detecta patrones de debug PHP (`var_dump()`, `print_r()`, `error_log()`) en archivos `.php` del child theme, widgets personalizados y dynamic tags.
298
+ - **`pre-edit-check.js`**: se ejecuta antes de cada edición. Detecta patrones de debug PHP (`var_dump()`, `print_r()`, `error_log()`) en archivos `.php` del child theme, widgets personalizados y dynamic tags.
299
299
  - **`post-turn-check.sh`**: se ejecuta al terminar cada turno. Verifica que el CSS de Elementor esté regenerado (`wp elementor flush-css`) si se modificaron archivos de estilo.
300
300
 
301
301
  ### APIs de terceros y seguridad
@@ -14,7 +14,7 @@ Implementás features en WordPress usando las APIs modernas del core. Tu scope e
14
14
 
15
15
  ## Stack
16
16
 
17
- - **WordPress:** 6.4+ (Full Site Editing disponible desde 6.0, iA activa desde 6.4).
17
+ - **WordPress:** última versión estable (Full Site Editing desde 6.0). Verificar con `wp core version`.
18
18
  - **PHP:** 8.1+. Sin código legacy con `mysql_*` ni funciones deprecadas.
19
19
  - **Editor:** Gutenberg / Block Editor. Sin Classic Editor salvo que el `CLAUDE.md` lo exija.
20
20
  - **Bloques:** `@wordpress/create-block` para scaffolding. Bloques dinámicos con PHP render callback cuando el contenido es dinámico.
@@ -202,7 +202,7 @@ Antes de tocar cualquier archivo, verificar que existe una spec en `docs/specs/`
202
202
  Este agente puede invocar los slash commands definidos en `.claude/commands/` del proyecto. Revisar qué comandos están disponibles con `/help` antes de empezar.
203
203
 
204
204
  ### Hooks activos en este stack
205
- - **`pre-edit-check.py`**: se ejecuta antes de cada edición. Detecta patrones de debug PHP (`var_dump()`, `print_r()`, `error_log()`) en archivos `.php`. Estos nunca deben llegar a producción.
205
+ - **`pre-edit-check.js`**: se ejecuta antes de cada edición. Detecta patrones de debug PHP (`var_dump()`, `print_r()`, `error_log()`) en archivos `.php`. Estos nunca deben llegar a producción.
206
206
  - **`post-turn-check.sh`**: se ejecuta al terminar cada turno. Corre `composer test` (PHPUnit) y `./vendor/bin/phpcs --standard=WordPress` si están configurados. Corregir errores antes de reportar.
207
207
 
208
208
  ### APIs de terceros y seguridad
@@ -410,7 +410,7 @@ export async function init(args) {
410
410
  ...allAgents.map(a => `.claude/agents/${a}.md`),
411
411
  ];
412
412
  const ts = new Date().toISOString();
413
- saveManifest(projectRoot, buildManifest(runtime, installedFiles, projectRoot, '2.9.4', ts));
413
+ saveManifest(projectRoot, buildManifest(runtime, installedFiles, projectRoot, '2.9.6', ts));
414
414
  },
415
415
  },
416
416
  ]);
package/dist/version.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the CLI version (kept in sync with package.json). */
2
- export declare const VERSION = "2.9.4";
2
+ export declare const VERSION = "2.9.6";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /** Single source of truth for the CLI version (kept in sync with package.json). */
2
- export const VERSION = '2.9.4';
2
+ export const VERSION = '2.9.6';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cristiancorreau/forge",
3
- "version": "2.9.4",
3
+ "version": "2.9.6",
4
4
  "description": "Agentic development framework — multi-runtime support for Claude Code, OpenCode, Codex and Kiro",
5
5
  "author": "Cristian Correa <cristian@socialweb.cl>",
6
6
  "license": "Apache-2.0",
@@ -28,7 +28,7 @@
28
28
  "build:all": "npm run build:assets && npm run build",
29
29
  "dev": "tsc --watch",
30
30
  "prepublishOnly": "npm run build:all",
31
- "test": "node --test test/commands.test.mjs"
31
+ "test": "node --test test/commands.test.mjs test/assets.test.mjs"
32
32
  },
33
33
  "files": [
34
34
  "dist",