@cristiancorreau/forge 2.1.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.
Files changed (153) hide show
  1. package/CHANGELOG.md +228 -0
  2. package/LICENSE +191 -0
  3. package/README.md +156 -0
  4. package/assets/adapters/claude-code/commands/deploy-check.md +12 -0
  5. package/assets/adapters/claude-code/commands/new-feature.md +11 -0
  6. package/assets/adapters/claude-code/commands/plan.md +116 -0
  7. package/assets/adapters/claude-code/commands/review.md +219 -0
  8. package/assets/adapters/claude-code/commands/session-close.md +109 -0
  9. package/assets/adapters/claude-code/commands/session-start.md +59 -0
  10. package/assets/adapters/claude-code/commands/ship.md +133 -0
  11. package/assets/adapters/claude-code/commands/wiki-ingest.md +7 -0
  12. package/assets/adapters/claude-code/commands/wiki-lint.md +5 -0
  13. package/assets/adapters/claude-code/commands/wiki-query.md +7 -0
  14. package/assets/adapters/claude-code/commands/work.md +101 -0
  15. package/assets/adapters/claude-code/generate-claude-md.py +304 -0
  16. package/assets/adapters/codex/commands/plan.md +63 -0
  17. package/assets/adapters/codex/commands/review.md +53 -0
  18. package/assets/adapters/codex/commands/session-close.md +53 -0
  19. package/assets/adapters/codex/commands/session-start.md +49 -0
  20. package/assets/adapters/codex/commands/ship.md +53 -0
  21. package/assets/adapters/codex/commands/work.md +53 -0
  22. package/assets/adapters/codex/generate-codex-config.py +269 -0
  23. package/assets/adapters/codex/hooks/codex.yaml.tpl +43 -0
  24. package/assets/adapters/codex/hooks/forge-codex-finish.sh +158 -0
  25. package/assets/adapters/codex/hooks/forge-codex-start.sh +186 -0
  26. package/assets/adapters/kiro/generate-steering.py +367 -0
  27. package/assets/adapters/opencode/HOOKS.md +123 -0
  28. package/assets/adapters/opencode/commands/plan.md +119 -0
  29. package/assets/adapters/opencode/commands/review.md +164 -0
  30. package/assets/adapters/opencode/commands/session-close.md +111 -0
  31. package/assets/adapters/opencode/commands/session-start.md +62 -0
  32. package/assets/adapters/opencode/commands/ship.md +135 -0
  33. package/assets/adapters/opencode/commands/work.md +82 -0
  34. package/assets/adapters/opencode/generate-agents-md.py +262 -0
  35. package/assets/core/agents/backend-engineer.md +61 -0
  36. package/assets/core/agents/compliance-reviewer.md +83 -0
  37. package/assets/core/agents/docs-writer.md +77 -0
  38. package/assets/core/agents/frontend-engineer.md +70 -0
  39. package/assets/core/agents/orchestrator.md +104 -0
  40. package/assets/core/agents/security-auditor.md +54 -0
  41. package/assets/core/agents/test-engineer.md +57 -0
  42. package/assets/core/hooks/hooks-registry.yaml +48 -0
  43. package/assets/core/hooks/post-turn-check.sh +139 -0
  44. package/assets/core/hooks/pre-bash-check.py +202 -0
  45. package/assets/core/hooks/pre-edit-check.py +317 -0
  46. package/assets/core/hooks/session-start.sh +184 -0
  47. package/assets/core/schemas/project.schema.json +503 -0
  48. package/assets/core/skills/README.md +88 -0
  49. package/assets/core/skills/aitmpl-search/SKILL.md +74 -0
  50. package/assets/core/skills/browser-test/SKILL.md +177 -0
  51. package/assets/core/skills/db-migrate/SKILL.md +163 -0
  52. package/assets/core/skills/local2prod/SKILL.md +147 -0
  53. package/assets/core/skills/new-feature/SKILL.md +155 -0
  54. package/assets/core/skills/obsidian-sync/SKILL.md +152 -0
  55. package/assets/core/skills/phase-kickoff/SKILL.md +69 -0
  56. package/assets/core/skills/security-audit/SKILL.md +125 -0
  57. package/assets/core/skills/spec/SKILL.md +72 -0
  58. package/assets/core/skills/wiki-ingest/SKILL.md +183 -0
  59. package/assets/core/skills/wiki-lint/SKILL.md +109 -0
  60. package/assets/core/skills/wiki-query/SKILL.md +100 -0
  61. package/assets/core/templates/claude-md/architecture.rules +20 -0
  62. package/assets/core/templates/claude-md/global.md +30 -0
  63. package/assets/core/templates/claude-md/project.md +36 -0
  64. package/assets/core/templates/daily-note.md +38 -0
  65. package/assets/core/templates/spec-template.md +43 -0
  66. package/assets/core/workflows/sdd.md +69 -0
  67. package/assets/core/workflows/sprint.md +59 -0
  68. package/assets/forge.py +1265 -0
  69. package/assets/hooks/pre-commit +43 -0
  70. package/assets/manifest.json +274 -0
  71. package/assets/profiles/astro/README.md +24 -0
  72. package/assets/profiles/astro/agents/frontend-engineer.md +74 -0
  73. package/assets/profiles/django/agents/api-engineer.md +83 -0
  74. package/assets/profiles/expo/README.md +24 -0
  75. package/assets/profiles/expo/agents/mobile-engineer.md +69 -0
  76. package/assets/profiles/express/agents/api-engineer.md +60 -0
  77. package/assets/profiles/fastapi/README.md +32 -0
  78. package/assets/profiles/fastapi/agents/api-engineer.md +87 -0
  79. package/assets/profiles/go-gin/agents/api-engineer.md +98 -0
  80. package/assets/profiles/hono-drizzle/README.md +31 -0
  81. package/assets/profiles/hono-drizzle/agents/api-engineer.md +82 -0
  82. package/assets/profiles/laravel/README.md +32 -0
  83. package/assets/profiles/laravel/agents/api-engineer.md +114 -0
  84. package/assets/profiles/laravel/agents/fullstack-engineer.md +67 -0
  85. package/assets/profiles/laravel/agents/migration-specialist.md +420 -0
  86. package/assets/profiles/nestjs/agents/api-engineer.md +79 -0
  87. package/assets/profiles/nextjs-admin/README.md +32 -0
  88. package/assets/profiles/nextjs-admin/agents/admin-engineer.md +78 -0
  89. package/assets/profiles/playwright-crawler/agents/scanner-engineer.md +51 -0
  90. package/assets/profiles/rails/agents/fullstack-engineer.md +61 -0
  91. package/assets/profiles/sveltekit/agents/frontend-engineer.md +96 -0
  92. package/assets/profiles/vuenuxt/agents/frontend-engineer.md +82 -0
  93. package/assets/profiles/wordpress/README.md +30 -0
  94. package/assets/profiles/wordpress/agents/divi-engineer.md +273 -0
  95. package/assets/profiles/wordpress/agents/elementor-engineer.md +310 -0
  96. package/assets/profiles/wordpress/agents/wp-engineer.md +216 -0
  97. package/assets/requirements.txt +2 -0
  98. package/assets/scripts/aitmpl-search.py +808 -0
  99. package/assets/scripts/forge-add-opportunities.py +92 -0
  100. package/assets/scripts/forge-audit.py +1061 -0
  101. package/assets/scripts/forge-generate-all.py +283 -0
  102. package/assets/scripts/forge-init.py +900 -0
  103. package/assets/scripts/forge-migrate-project-yaml.py +397 -0
  104. package/assets/scripts/forge-scaffold-profile.py +181 -0
  105. package/assets/scripts/forge-teardown.py +193 -0
  106. package/assets/scripts/forge-validate-project-yaml.py +457 -0
  107. package/assets/scripts/forge-wizard.py +1003 -0
  108. package/assets/scripts/setup-codex.sh +229 -0
  109. package/assets/scripts/team-install.sh +147 -0
  110. package/assets/scripts/token-stats.py +201 -0
  111. package/assets/templates/modes/enterprise.yaml.tpl +114 -0
  112. package/assets/templates/modes/multi-runtime.yaml.tpl +89 -0
  113. package/assets/templates/modes/new-stack.yaml.tpl +101 -0
  114. package/assets/templates/modes/startup.yaml.tpl +74 -0
  115. package/assets/templates/project.yaml.tpl +185 -0
  116. package/assets/templates/wiki/concepts/_template.md +22 -0
  117. package/assets/templates/wiki/entities/_template.md +19 -0
  118. package/assets/templates/wiki/index.md +32 -0
  119. package/assets/templates/wiki/log.md +6 -0
  120. package/assets/templates/wiki/sources/_template.md +25 -0
  121. package/dist/cli.d.ts +3 -0
  122. package/dist/cli.d.ts.map +1 -0
  123. package/dist/cli.js +64 -0
  124. package/dist/cli.js.map +1 -0
  125. package/dist/commands/audit.d.ts +2 -0
  126. package/dist/commands/audit.d.ts.map +1 -0
  127. package/dist/commands/audit.js +21 -0
  128. package/dist/commands/audit.js.map +1 -0
  129. package/dist/commands/doctor.d.ts +2 -0
  130. package/dist/commands/doctor.d.ts.map +1 -0
  131. package/dist/commands/doctor.js +58 -0
  132. package/dist/commands/doctor.js.map +1 -0
  133. package/dist/commands/generate.d.ts +2 -0
  134. package/dist/commands/generate.d.ts.map +1 -0
  135. package/dist/commands/generate.js +27 -0
  136. package/dist/commands/generate.js.map +1 -0
  137. package/dist/commands/init.d.ts +2 -0
  138. package/dist/commands/init.d.ts.map +1 -0
  139. package/dist/commands/init.js +22 -0
  140. package/dist/commands/init.js.map +1 -0
  141. package/dist/commands/validate.d.ts +2 -0
  142. package/dist/commands/validate.d.ts.map +1 -0
  143. package/dist/commands/validate.js +20 -0
  144. package/dist/commands/validate.js.map +1 -0
  145. package/dist/lib/paths.d.ts +10 -0
  146. package/dist/lib/paths.d.ts.map +1 -0
  147. package/dist/lib/paths.js +49 -0
  148. package/dist/lib/paths.js.map +1 -0
  149. package/dist/lib/python.d.ts +4 -0
  150. package/dist/lib/python.d.ts.map +1 -0
  151. package/dist/lib/python.js +46 -0
  152. package/dist/lib/python.js.map +1 -0
  153. package/package.json +46 -0
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env bash
2
+ # Injects fresh token usage stats into docs/progress.html before every commit.
3
+ # No extra commits, no push races — stats are baked into the commit itself.
4
+ # Requires: python3 (stdlib only, no extra deps)
5
+ #
6
+ # Setup (once per project clone):
7
+ # git config core.hooksPath .githooks
8
+ #
9
+ # Or if using forge as submodule at .agentic/:
10
+ # cp .agentic/hooks/pre-commit .githooks/pre-commit
11
+ # chmod +x .githooks/pre-commit
12
+ # git config core.hooksPath .githooks
13
+
14
+ set -euo pipefail
15
+
16
+ ROOT="$(git rev-parse --show-toplevel)"
17
+
18
+ # Support both forge-as-submodule and direct copy layouts
19
+ if [ -f "$ROOT/.agentic/scripts/token-stats.py" ]; then
20
+ SCRIPT="$ROOT/.agentic/scripts/token-stats.py"
21
+ elif [ -f "$ROOT/.claude/scripts/token-stats.py" ]; then
22
+ SCRIPT="$ROOT/.claude/scripts/token-stats.py"
23
+ else
24
+ exit 0
25
+ fi
26
+
27
+ HTML="$ROOT/docs/progress.html"
28
+
29
+ if [ ! -f "$HTML" ]; then
30
+ exit 0
31
+ fi
32
+
33
+ # Actualizar stats; mostrar errores pero no bloquear el commit
34
+ if ! python3 "$SCRIPT" --patch-html "$HTML" 2>&1; then
35
+ echo "[forge pre-commit] Advertencia: token-stats.py falló — progress.html no actualizado." >&2
36
+ exit 0
37
+ fi
38
+
39
+ # Solo hacer git add si el archivo fue realmente modificado, e informar al usuario
40
+ if ! git -C "$ROOT" diff --quiet "$HTML"; then
41
+ echo "[forge pre-commit] Actualizando docs/progress.html con token stats..."
42
+ git -C "$ROOT" add "$HTML"
43
+ fi
@@ -0,0 +1,274 @@
1
+ {
2
+ "name": "forge",
3
+ "version": "2.0.1",
4
+ "description": "Agentic development framework for Claude Code",
5
+ "license": "Apache-2.0",
6
+ "repository": "https://github.com/cristiancorreau/forge",
7
+ "layers": {
8
+ "memory": {
9
+ "description": "Project knowledge base — project.yaml as single source of truth",
10
+ "files": ["templates/project.yaml.tpl"]
11
+ },
12
+ "knowledge": {
13
+ "description": "Agent definitions and stack-specific profiles",
14
+ "files": [
15
+ "core/agents/",
16
+ "profiles/"
17
+ ]
18
+ },
19
+ "guardrail": {
20
+ "description": "Compliance, security and quality enforcement agents",
21
+ "files": [
22
+ "core/agents/compliance-reviewer.md",
23
+ "core/agents/security-auditor.md"
24
+ ]
25
+ },
26
+ "delegation": {
27
+ "description": "Orchestration and skill dispatch",
28
+ "files": [
29
+ "core/agents/orchestrator.md",
30
+ "core/skills/"
31
+ ]
32
+ },
33
+ "distribution": {
34
+ "description": "Adapter layer — runtime-specific command and config generation",
35
+ "files": [
36
+ "adapters/claude-code/",
37
+ "adapters/opencode/",
38
+ "adapters/kiro/",
39
+ "adapters/codex/"
40
+ ]
41
+ }
42
+ },
43
+ "agents": [
44
+ {
45
+ "id": "orchestrator",
46
+ "tier": 1,
47
+ "file": "core/agents/orchestrator.md",
48
+ "description": "Coordinates agents and decomposes tasks"
49
+ },
50
+ {
51
+ "id": "backend-engineer",
52
+ "tier": 1,
53
+ "file": "core/agents/backend-engineer.md",
54
+ "description": "API, database, business logic"
55
+ },
56
+ {
57
+ "id": "frontend-engineer",
58
+ "tier": 1,
59
+ "file": "core/agents/frontend-engineer.md",
60
+ "description": "UI, components, API integration"
61
+ },
62
+ {
63
+ "id": "test-engineer",
64
+ "tier": 1,
65
+ "file": "core/agents/test-engineer.md",
66
+ "description": "Unit, integration and E2E testing"
67
+ },
68
+ {
69
+ "id": "docs-writer",
70
+ "tier": 1,
71
+ "file": "core/agents/docs-writer.md",
72
+ "description": "Documentation, specs, ADRs"
73
+ },
74
+ {
75
+ "id": "compliance-reviewer",
76
+ "tier": 1,
77
+ "file": "core/agents/compliance-reviewer.md",
78
+ "description": "Regulatory framework review (GDPR, LGPD, CCPA)"
79
+ },
80
+ {
81
+ "id": "security-auditor",
82
+ "tier": 1,
83
+ "file": "core/agents/security-auditor.md",
84
+ "description": "Vulnerability auditing"
85
+ }
86
+ ],
87
+ "profiles": [
88
+ {
89
+ "id": "astro",
90
+ "stack": "Astro + Tailwind + TypeScript",
91
+ "agents": ["frontend-engineer"]
92
+ },
93
+ {
94
+ "id": "django",
95
+ "stack": "Django 4.x + Django REST Framework",
96
+ "agents": ["api-engineer"]
97
+ },
98
+ {
99
+ "id": "expo",
100
+ "stack": "React Native / Expo",
101
+ "agents": ["mobile-engineer"]
102
+ },
103
+ {
104
+ "id": "express",
105
+ "stack": "Express + Node.js",
106
+ "agents": ["api-engineer"]
107
+ },
108
+ {
109
+ "id": "fastapi",
110
+ "stack": "FastAPI + Python",
111
+ "agents": ["api-engineer"]
112
+ },
113
+ {
114
+ "id": "go-gin",
115
+ "stack": "Go + Gin + sqlc",
116
+ "agents": ["api-engineer"]
117
+ },
118
+ {
119
+ "id": "hono-drizzle",
120
+ "stack": "Hono + Drizzle + TypeScript",
121
+ "agents": ["api-engineer"]
122
+ },
123
+ {
124
+ "id": "laravel",
125
+ "stack": "Laravel + PHP",
126
+ "agents": ["api-engineer", "fullstack-engineer", "migration-specialist"]
127
+ },
128
+ {
129
+ "id": "nestjs",
130
+ "stack": "NestJS + TypeScript",
131
+ "agents": ["api-engineer"]
132
+ },
133
+ {
134
+ "id": "nextjs-admin",
135
+ "stack": "Next.js 15 + shadcn/ui",
136
+ "agents": ["admin-engineer"]
137
+ },
138
+ {
139
+ "id": "playwright-crawler",
140
+ "stack": "Playwright + scraping/crawling",
141
+ "agents": ["scanner-engineer"]
142
+ },
143
+ {
144
+ "id": "rails",
145
+ "stack": "Ruby on Rails",
146
+ "agents": ["fullstack-engineer"]
147
+ },
148
+ {
149
+ "id": "sveltekit",
150
+ "stack": "SvelteKit",
151
+ "agents": ["frontend-engineer"]
152
+ },
153
+ {
154
+ "id": "vuenuxt",
155
+ "stack": "Nuxt 3 + Vue 3 + Pinia",
156
+ "agents": ["frontend-engineer"]
157
+ },
158
+ {
159
+ "id": "wordpress",
160
+ "stack": "WordPress + Divi/Elementor",
161
+ "agents": ["wp-engineer", "divi-engineer", "elementor-engineer"]
162
+ }
163
+ ],
164
+ "skills": [
165
+ {
166
+ "id": "aitmpl-search",
167
+ "dir": "core/skills/aitmpl-search",
168
+ "description": "Search curated MCP and agent template catalog"
169
+ },
170
+ {
171
+ "id": "browser-test",
172
+ "dir": "core/skills/browser-test",
173
+ "description": "Browser-based E2E testing via agent-browser"
174
+ },
175
+ {
176
+ "id": "db-migrate",
177
+ "dir": "core/skills/db-migrate",
178
+ "description": "Database migration orchestration"
179
+ },
180
+ {
181
+ "id": "local2prod",
182
+ "dir": "core/skills/local2prod",
183
+ "description": "Automated deploy pipeline validation"
184
+ },
185
+ {
186
+ "id": "new-feature",
187
+ "dir": "core/skills/new-feature",
188
+ "description": "Feature implementation orchestration"
189
+ },
190
+ {
191
+ "id": "obsidian-sync",
192
+ "dir": "core/skills/obsidian-sync",
193
+ "description": "Obsidian vault sync via Local REST API"
194
+ },
195
+ {
196
+ "id": "phase-kickoff",
197
+ "dir": "core/skills/phase-kickoff",
198
+ "description": "Sprint phase kickoff and spec distribution"
199
+ },
200
+ {
201
+ "id": "security-audit",
202
+ "dir": "core/skills/security-audit",
203
+ "description": "Security vulnerability auditing"
204
+ },
205
+ {
206
+ "id": "spec",
207
+ "dir": "core/skills/spec",
208
+ "description": "Spec generation and management"
209
+ },
210
+ {
211
+ "id": "wiki-ingest",
212
+ "dir": "core/skills/wiki-ingest",
213
+ "description": "Ingest documents into project wiki"
214
+ },
215
+ {
216
+ "id": "wiki-lint",
217
+ "dir": "core/skills/wiki-lint",
218
+ "description": "Lint and validate wiki documents"
219
+ },
220
+ {
221
+ "id": "wiki-query",
222
+ "dir": "core/skills/wiki-query",
223
+ "description": "Query the project knowledge base"
224
+ }
225
+ ],
226
+ "commands": [
227
+ {
228
+ "id": "deploy-check",
229
+ "file": "adapters/claude-code/commands/deploy-check.md",
230
+ "slash": "/deploy-check"
231
+ },
232
+ {
233
+ "id": "new-feature",
234
+ "file": "adapters/claude-code/commands/new-feature.md",
235
+ "slash": "/new-feature"
236
+ },
237
+ {
238
+ "id": "review",
239
+ "file": "adapters/claude-code/commands/review.md",
240
+ "slash": "/review"
241
+ },
242
+ {
243
+ "id": "wiki-ingest",
244
+ "file": "adapters/claude-code/commands/wiki-ingest.md",
245
+ "slash": "/wiki-ingest"
246
+ },
247
+ {
248
+ "id": "wiki-lint",
249
+ "file": "adapters/claude-code/commands/wiki-lint.md",
250
+ "slash": "/wiki-lint"
251
+ },
252
+ {
253
+ "id": "wiki-query",
254
+ "file": "adapters/claude-code/commands/wiki-query.md",
255
+ "slash": "/wiki-query"
256
+ }
257
+ ],
258
+ "hooks": [
259
+ {
260
+ "id": "pre-commit",
261
+ "file": "hooks/pre-commit",
262
+ "trigger": "pre-commit",
263
+ "mode": "universal",
264
+ "description": "Injects token usage stats into docs/progress.html before every commit"
265
+ }
266
+ ],
267
+ "schemas": [
268
+ {
269
+ "id": "project.yaml",
270
+ "file": "templates/project.yaml.tpl",
271
+ "description": "Project configuration — single source of truth for forge"
272
+ }
273
+ ]
274
+ }
@@ -0,0 +1,24 @@
1
+ # Profile: astro
2
+
3
+ Perfil para proyectos construidos con Astro 4.x. Cubre sitios estáticos (SSG), apps con SSR parcial mediante adaptadores, y arquitectura de islands con React, Svelte, Vue o Lit.
4
+
5
+ ## Agentes incluidos
6
+
7
+ - **frontend-engineer** — Implementa páginas, componentes `.astro`, Content Collections, islands de UI y configuración de adaptadores SSR. Scope: `src/` y `public/`.
8
+
9
+ ## Cuándo usar este profile
10
+
11
+ Activar cuando el stack del proyecto es Astro, independientemente del adaptador de deploy (Vercel, Cloudflare, Node). No usar si el frontend usa Next.js, SvelteKit u otro framework con su propio profile.
12
+
13
+ ## Hooks específicos del stack
14
+
15
+ - **`pre-edit-check.py`**: detecta debug statements (`console.log`, `debugger`) en archivos `.astro`, `.ts` y `.tsx` antes de cada edición.
16
+ - **`post-turn-check.sh`**: verifica que `astro build` pase sin errores de TypeScript ni warnings al terminar cada turno.
17
+
18
+ ## Activar en project.yaml
19
+
20
+ ```yaml
21
+ profiles:
22
+ active:
23
+ - astro
24
+ ```
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: frontend-engineer
3
+ description: "Construye sitios y apps con Astro. Maneja SSG, SSR, islands architecture y contenido MDX. Scope: src/ y public/."
4
+ model: sonnet
5
+ tools: Read, Grep, Glob, Bash, Edit, Write
6
+ tier: 2
7
+ profile: astro
8
+ ---
9
+
10
+ # Frontend Engineer — Astro
11
+
12
+ Construís sitios web con Astro: desde sitios estáticos puros hasta apps con SSR parcial
13
+ usando islands architecture. Tu scope es `src/` y `public/`. No tocás infraestructura
14
+ ni backend fuera de las integraciones de Astro.
15
+
16
+ ## Stack
17
+
18
+ - **Framework:** Astro 4.x
19
+ - **Rendering:** SSG por defecto; SSR con adaptadores (Vercel, Cloudflare, Node)
20
+ - **UI Islands:** React, Svelte, Vue o Lit según el proyecto
21
+ - **Contenido:** MDX, Content Collections, Markdown
22
+ - **Estilos:** Tailwind CSS o CSS Modules
23
+ - **Build:** `astro build` / `astro dev`
24
+
25
+ ## Tu trabajo
26
+
27
+ - Crear páginas en `src/pages/` con routing basado en archivos
28
+ - Definir Content Collections en `src/content/config.ts`
29
+ - Implementar components `.astro` con slots y props tipados
30
+ - Integrar islands de React/Svelte/Vue donde se necesite interactividad
31
+ - Configurar adaptadores SSR en `astro.config.mjs`
32
+ - Optimizar imágenes con `<Image />` y `<Picture />` del core
33
+ - Escribir tests con Vitest para lógica de componentes
34
+
35
+ ## Reglas
36
+
37
+ - **Sin JavaScript innecesario:** Astro carga 0 JS por defecto — mantenerlo así salvo islands explícitas.
38
+ - **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
+ - **Accesibilidad:** HTML semántico, atributos `alt`, roles ARIA cuando el HTML no es suficiente.
41
+ - **Sin spec, sin código:** la spec debe existir en `docs/specs/` antes de implementar.
42
+
43
+ ## Workflow
44
+
45
+ 1. Leer `CLAUDE.md` y la spec de la feature activa.
46
+ 2. Revisar `src/content/config.ts` si la tarea toca contenido.
47
+ 3. Implementar el componente o página con tipos correctos.
48
+ 4. Verificar que `astro build` pasa sin errores ni warnings.
49
+ 5. Correr Vitest si hay lógica testeable.
50
+ 6. Reportar al orchestrator: archivos tocados, decisiones de islands, qué falta.
51
+
52
+ ## No hagas
53
+
54
+ - No configures servidores, bases de datos ni APIs externas directamente.
55
+ - No uses `client:load` en todos los componentes — elegir el directive correcto (`client:visible`, `client:idle`).
56
+ - No modifiques `astro.config.mjs` sin consultar al orchestrator si cambia el adapter.
57
+ - No crees PRs ni hagas commits directamente.
58
+ - No implementes sin spec previa.
59
+
60
+ ## Forge v2
61
+
62
+ ### Verificación antes de implementar
63
+ Antes de tocar cualquier archivo, verificar que existe una spec en `docs/specs/` para la feature activa. Si no existe, detener y pedirla al orchestrator.
64
+
65
+ ### Slash commands disponibles
66
+ 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
+ ### 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
+ - **`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
+ ### Reglas de scope
73
+ - Tu scope es exclusivamente `src/` y `public/`. Cualquier archivo fuera de esos directorios requiere aprobación explícita del orchestrator.
74
+ - No modifiques `package.json`, `astro.config.mjs` ni archivos de infraestructura sin instrucción directa.
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: api-engineer
3
+ description: "Implementa el backend del proyecto. Django 4.x/5.x + DRF/Django Ninja + PostgreSQL. Scope: apps/ y config/."
4
+ model: sonnet
5
+ tools: Read, Grep, Glob, Bash, Edit, Write
6
+ tier: 2
7
+ profile: django
8
+ ---
9
+
10
+ # API Engineer — Django
11
+
12
+ Implementás el backend del proyecto. Tu scope es `apps/` y `config/` (estructura Two Scoops of Django). Leé el `CLAUDE.md` del proyecto antes de empezar.
13
+
14
+ ## Stack
15
+
16
+ - **Runtime:** Python 3.11+
17
+ - **Framework:** Django 4.x / 5.x. NO usar Flask ni FastAPI.
18
+ - **API:** Django REST Framework (DRF) con ViewSets y Routers, o Django Ninja para APIs tipadas. No mezcles los dos en el mismo proyecto.
19
+ - **ORM:** Django ORM. NO usar queries raw salvo en migraciones de datos complejas.
20
+ - **Migraciones:** `manage.py makemigrations` + `manage.py migrate`. Un concepto por migración; nombres descriptivos.
21
+ - **Auth:** django-allauth para auth social/email, o DRF TokenAuthentication / SimpleJWT para APIs puras.
22
+ - **Validación:** Serializers de DRF o schemas de Django Ninja — nunca validar datos de request en la view directamente.
23
+ - **Tests:** pytest-django + factory_boy. Fixtures de base de datos real, no mocks del ORM.
24
+ - **Config:** django-environ para variables de entorno. Settings divididos por entorno (`config/settings/base.py`, `local.py`, `production.py`).
25
+ - **Tasks:** Celery + Redis para tareas asíncronas.
26
+ - **Linting:** ruff + mypy.
27
+
28
+ ## Tu trabajo
29
+
30
+ - Crear y modificar modelos en `apps/<nombre>/models.py`
31
+ - Generar migraciones y verificar que sean reversibles
32
+ - Implementar serializers (DRF) o schemas (Ninja) con validación completa
33
+ - Crear ViewSets/APIViews (DRF) o routers (Ninja) con permisos explícitos
34
+ - Escribir tests con pytest-django y factory_boy
35
+ - Configurar URLs en `apps/<nombre>/urls.py` y registrar en `config/urls.py`
36
+ - Gestionar tareas Celery en `apps/<nombre>/tasks.py`
37
+
38
+ ## Workflow
39
+
40
+ 1. Leer el `CLAUDE.md` del proyecto y la spec de la feature.
41
+ 2. Revisar los modelos existentes en `apps/` para entender el data model.
42
+ 3. Si la tarea toca schema, proponer el modelo antes de codificar.
43
+ 4. Implementar: modelo → migración → serializer/schema → view/viewset → URLs → tests.
44
+ 5. Correr `pytest` + `mypy` + `ruff check` antes de reportar.
45
+ 6. Reportar archivos tocados y si hay tareas Celery pendientes de configurar.
46
+
47
+ ## Reglas
48
+
49
+ - **Sin signals para lógica de negocio.** Los signals son para efectos secundarios simples (invalidar cache, enviar notificación). La lógica va en el modelo, manager o service layer.
50
+ - **Class-based views siempre.** Preferir ViewSets (DRF) o routers funcionales (Ninja) sobre function-based views, salvo para endpoints muy simples.
51
+ - **Permisos explícitos en cada view.** Nunca confiar en el permiso global de `DEFAULT_PERMISSION_CLASSES` sin revisarlo. Declarar `permission_classes` en cada ViewSet.
52
+ - **Migraciones reversibles.** Toda migración tiene un `reverse_sql` o lógica en `backwards`. Si no aplica, documentarlo con un comentario.
53
+ - **Parámetros preparados siempre.** Usar el ORM o `connection.execute(sql, params)` — nunca f-strings en SQL.
54
+ - **PII nunca en logs.** Solo IDs o datos no reversibles.
55
+ - **Settings de producción no se tocan.** Cambios en `config/settings/production.py` requieren revisión explícita del orchestrator.
56
+ - **select_related / prefetch_related obligatorio** cuando hay relaciones FK/M2M en querysets que van a serializers. Nunca N+1 queries.
57
+ - **Celery tasks idempotentes.** Una task que se ejecuta dos veces con los mismos argumentos no debe producir efectos duplicados.
58
+
59
+ ## Comandos estándar
60
+
61
+ ```bash
62
+ python manage.py runserver # desarrollo
63
+ python manage.py makemigrations <app> -n "nombre" # nueva migración
64
+ python manage.py migrate # aplicar migraciones
65
+ python manage.py shell_plus # shell con modelos importados
66
+ pytest # tests
67
+ pytest --cov=apps --cov-report=term # cobertura
68
+ celery -A config worker -l info # worker Celery
69
+ mypy apps/ # tipos
70
+ ruff check apps/ config/ # lint
71
+ ```
72
+
73
+ ## No hagas
74
+
75
+ - No toques archivos fuera de `apps/` y `config/` sin aprobación del orchestrator.
76
+ - No uses `get_or_create` en paths de escritura concurrentes sin manejo de race conditions.
77
+ - No hardcodees URLs — usar `reverse()` o `reverse_lazy()` siempre.
78
+ - No uses `django.contrib.admin` para exponer datos de producción sin autenticación correcta.
79
+ - No introduzcas dependencias sin documentarlas en el `CLAUDE.md` del proyecto.
80
+ - No modifiques migraciones ya aplicadas en producción — crear una nueva migración.
81
+ - No retornes campos sensibles en responses (passwords, tokens, PII).
82
+ - No implementes sin spec aprobada — pedí al orchestrator que la cree primero.
83
+ - No uses `transaction.on_commit` para lógica crítica sin tests que verifiquen el comportamiento.
@@ -0,0 +1,24 @@
1
+ # Profile: expo
2
+
3
+ Perfil para apps móviles construidas con Expo SDK. Cubre iOS y Android con TypeScript estricto, storage seguro nativo y arquitectura offline-first.
4
+
5
+ ## Agentes incluidos
6
+
7
+ - **mobile-engineer** — Construye la app o SDK móvil del proyecto. Implementa con hooks React, `expo-secure-store`, networking nativo y tests con `react-native-testing-library`. Scope: directorio móvil definido en `CLAUDE.md` (típicamente `packages/mobile/` o `apps/mobile/`).
8
+
9
+ ## Cuándo usar este profile
10
+
11
+ Activar cuando el proyecto incluye una app móvil con Expo SDK. Compatible con monorepos que tengan otros profiles activos simultáneamente (por ejemplo, `nextjs-admin` para el panel web).
12
+
13
+ ## Hooks específicos del stack
14
+
15
+ - **`pre-edit-check.py`**: detecta debug statements (`console.log`, `debugger`) en archivos `.ts` y `.tsx` antes de cada edición.
16
+ - **`post-turn-check.sh`**: corre `tsc --noEmit` al terminar cada turno para verificar TypeScript estricto (`strict: true`). Cualquier error de tipos bloquea el reporte al orchestrator.
17
+
18
+ ## Activar en project.yaml
19
+
20
+ ```yaml
21
+ profiles:
22
+ active:
23
+ - expo
24
+ ```
@@ -0,0 +1,69 @@
1
+ ---
2
+ name: mobile-engineer
3
+ description: Construye la app o SDK móvil del proyecto con Expo SDK. NO trabaja fuera del directorio móvil definido en project.yaml.
4
+ model: sonnet
5
+ tools: Read, Grep, Glob, Bash, Edit, Write
6
+ tier: 2
7
+ profile: expo
8
+ ---
9
+
10
+ # Mobile Engineer — Expo SDK
11
+
12
+ Construís la app o SDK móvil del proyecto. Tu scope es el directorio móvil definido en el
13
+ `CLAUDE.md` del proyecto (típicamente `packages/mobile/` o `apps/mobile/`).
14
+ Leé ese archivo antes de empezar.
15
+
16
+ ## Stack
17
+
18
+ - **Framework:** Expo SDK (versión definida en el `CLAUDE.md` del proyecto).
19
+ - **Lenguaje:** TypeScript estricto.
20
+ - **Storage seguro:** `expo-secure-store` (Keychain en iOS, EncryptedSharedPreferences en Android).
21
+ - **Networking:** Fetch nativo — sin axios ni librerías HTTP externas.
22
+ - **Tests:** `react-native-testing-library`.
23
+
24
+ ## Reglas
25
+
26
+ 1. **Bundle size controlado:** iOS <200KB, Android <250KB por defecto. Verificar con `expo bundle-size`.
27
+ 2. **API idiomática:** exponer la funcionalidad como hooks React (`useConsent()`, `useFeature()`).
28
+ 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
+ 4. **Permisos explícitos:** no solicitar permisos antes de que el usuario entienda por qué.
30
+ 5. **Offline-first donde aplique:** manejar ausencia de red gracefully.
31
+ 6. **Sin PII en AsyncStorage o logs** — usar `expo-secure-store` para datos sensibles.
32
+
33
+ ## Consideraciones por plataforma
34
+
35
+ | Área | iOS | Android |
36
+ |------|-----|---------|
37
+ | Tracking consent | `expo-tracking-transparency` (ATT) | Privacy Sandbox (módulos comunitarios) |
38
+ | Storage seguro | Keychain via expo-secure-store | EncryptedSharedPreferences via expo-secure-store |
39
+ | Deeplinks | Universal Links | App Links |
40
+
41
+ ## Workflow
42
+
43
+ 1. Leer el `CLAUDE.md` del paquete móvil y la spec de la feature.
44
+ 2. Implementar con tests sobre `react-native-testing-library`.
45
+ 3. Verificar bundle size después de agregar dependencias nuevas.
46
+ 4. Correr typecheck antes de reportar.
47
+
48
+ ## No hagas
49
+
50
+ - No toques paquetes fuera de tu scope.
51
+ - No uses `any` sin `// @ts-expect-error: razón`.
52
+ - No instales dependencias nativas sin verificar compatibilidad con Expo SDK.
53
+ - No implementes sin spec aprobada.
54
+
55
+ ## Forge v2
56
+
57
+ ### Verificación antes de implementar
58
+ Antes de tocar cualquier archivo, verificar que existe una spec en `docs/specs/` para la feature activa. Si no existe, detener y pedirla al orchestrator.
59
+
60
+ ### Slash commands disponibles
61
+ 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
+ ### 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
+ - **`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
+ ### Reglas de scope
68
+ - Tu scope es el directorio móvil definido en el `CLAUDE.md` del proyecto (típicamente `packages/mobile/` o `apps/mobile/`). No toques otros paquetes del monorepo.
69
+ - No modifiques `app.json`, `app.config.ts` ni `eas.json` sin instrucción directa del orchestrator.
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: api-engineer
3
+ description: Implementa el backend del proyecto. Express + Prisma/TypeORM + PostgreSQL. NO trabaja fuera del directorio de API definido en project.yaml.
4
+ model: sonnet
5
+ tools: Read, Grep, Glob, Bash, Edit, Write
6
+ tier: 2
7
+ profile: express
8
+ ---
9
+
10
+ # API Engineer — Express + Node.js
11
+
12
+ Implementás el backend del proyecto. Tu scope es el directorio de API definido en el `CLAUDE.md`
13
+ del proyecto (típicamente `src/` o `packages/api/`). Leé ese archivo antes de empezar.
14
+
15
+ ## Stack
16
+
17
+ - **Runtime:** Node.js 20 LTS (o Bun si el proyecto lo especifica).
18
+ - **Framework:** Express 5.x. NO usar Fastify, Koa ni frameworks alternativos salvo que el `CLAUDE.md` lo indique.
19
+ - **ORM:** Prisma (preferido) o TypeORM. NO usar query builders ad-hoc ni `pg` directamente.
20
+ - **Validación:** Zod en los middlewares de validación. Todos los inputs del usuario pasan por schema Zod.
21
+ - **Tests:** Vitest o Jest + supertest. Base de datos real en tests de integración.
22
+ - **Tipado:** TypeScript strict. Sin `any` sin justificación.
23
+
24
+ ## Workflow
25
+
26
+ 1. Leer el `CLAUDE.md` del proyecto y la spec de la feature.
27
+ 2. Revisar el data model si la tarea toca schema.
28
+ 3. Si la tarea toca compliance o PII, notificar al compliance-reviewer.
29
+ 4. Proponer un plan antes de codificar cuando la tarea afecte >3 archivos.
30
+ 5. Implementar con tests (unitarios para lógica, integración para rutas).
31
+ 6. Correr tests + typecheck + lint antes de reportar.
32
+
33
+ ## Reglas
34
+
35
+ - **Logs de auditoría son append-only.** NUNCA `UPDATE` ni `DELETE` sobre tablas de eventos.
36
+ - **PII nunca en logs de stdout.**
37
+ - **Parámetros preparados siempre:** usar Prisma/TypeORM. Nunca template literals en SQL.
38
+ - **Auth + authz en cada ruta:** middleware de autenticación + verificación de permisos por recurso.
39
+ - **Error handling centralizado:** usar middleware de error de Express. No `try/catch` dispersos que ignoran el error.
40
+ - **Migraciones con Prisma:** `prisma migrate dev` en desarrollo, `prisma migrate deploy` en producción.
41
+
42
+ ## Comandos estándar (adaptar si el proyecto usa nombres distintos)
43
+
44
+ ```bash
45
+ npm run dev # nodemon o ts-node-dev
46
+ npm test # vitest o jest
47
+ npm run typecheck # tsc --noEmit
48
+ npm run lint # eslint
49
+ npx prisma migrate dev --name descripcion # nueva migración
50
+ npx prisma migrate deploy # aplicar en producción
51
+ npx prisma generate # regenerar cliente
52
+ ```
53
+
54
+ ## No hagas
55
+
56
+ - No toques archivos fuera de tu scope.
57
+ - No introduzcas dependencias sin documentarlas.
58
+ - No expongas stack traces al cliente en producción — solo en logs internos.
59
+ - No uses callbacks de Express sin manejo de error explícito (usar `next(err)`).
60
+ - No implementes sin spec aprobada.