claudeos-core 2.3.2 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +790 -74
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.de.md +374 -876
- package/README.es.md +374 -875
- package/README.fr.md +374 -875
- package/README.hi.md +374 -875
- package/README.ja.md +374 -875
- package/README.ko.md +374 -874
- package/README.md +374 -876
- package/README.ru.md +374 -877
- package/README.vi.md +374 -875
- package/README.zh-CN.md +374 -874
- package/SECURITY.md +51 -0
- package/bin/commands/init.js +192 -37
- package/content-validator/index.js +97 -4
- package/health-checker/index.js +44 -10
- package/package.json +92 -90
- package/pass-json-validator/index.js +58 -7
- package/pass-prompts/templates/angular/pass3.md +15 -14
- package/pass-prompts/templates/common/claude-md-scaffold.md +81 -0
- package/pass-prompts/templates/common/pass3-footer.md +104 -0
- package/pass-prompts/templates/java-spring/pass3.md +19 -18
- package/pass-prompts/templates/kotlin-spring/pass3.md +23 -22
- package/pass-prompts/templates/node-express/pass3.md +18 -17
- package/pass-prompts/templates/node-fastify/pass3.md +11 -10
- package/pass-prompts/templates/node-nestjs/pass3.md +11 -10
- package/pass-prompts/templates/node-nextjs/pass3.md +18 -17
- package/pass-prompts/templates/node-vite/pass3.md +11 -10
- package/pass-prompts/templates/python-django/pass3.md +18 -17
- package/pass-prompts/templates/python-fastapi/pass3.md +18 -17
- package/pass-prompts/templates/python-flask/pass3.md +9 -8
- package/pass-prompts/templates/vue-nuxt/pass3.md +9 -8
- package/plan-installer/domain-grouper.js +45 -5
- package/plan-installer/index.js +11 -1
- package/plan-installer/scanners/scan-java.js +98 -2
- package/plan-installer/stack-detector.js +44 -0
package/README.es.md
CHANGED
|
@@ -1,1015 +1,514 @@
|
|
|
1
1
|
# ClaudeOS-Core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/claudeos-core)
|
|
4
|
+
[](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
|
|
5
|
+
[](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://www.npmjs.com/package/claudeos-core)
|
|
4
9
|
|
|
5
|
-
|
|
6
|
-
npx claudeos-core init
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
ClaudeOS-Core lee tu codebase, extrae cada patrón que encuentra y genera un conjunto completo de Standards, Rules, Skills y Guides adaptados a _tu_ proyecto. Después, cuando le digas a Claude Code "Crea un CRUD para pedidos", producirá código que coincide exactamente con tus patrones existentes.
|
|
10
|
-
|
|
11
|
-
[🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇯🇵 日本語](./README.ja.md) · [🇻🇳 Tiếng Việt](./README.vi.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇷🇺 Русский](./README.ru.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## ¿Por qué ClaudeOS-Core?
|
|
16
|
-
|
|
17
|
-
Cualquier otra herramienta de Claude Code funciona así:
|
|
18
|
-
|
|
19
|
-
> **El humano describe el proyecto → el LLM genera la documentación**
|
|
20
|
-
|
|
21
|
-
ClaudeOS-Core funciona así:
|
|
22
|
-
|
|
23
|
-
> **El código analiza tu fuente → el código construye un prompt adaptado → el LLM genera la documentación → el código verifica el resultado**
|
|
24
|
-
|
|
25
|
-
No es una pequeña diferencia. Aquí está por qué importa:
|
|
26
|
-
|
|
27
|
-
### El problema central: los LLMs adivinan. El código, no.
|
|
28
|
-
|
|
29
|
-
Cuando le pides a Claude que "analice este proyecto", **adivina** tu stack, tu ORM, tu estructura de dominios.
|
|
30
|
-
Puede ver `spring-boot` en tu `build.gradle` pero no darse cuenta de que usas MyBatis (no JPA).
|
|
31
|
-
Puede detectar un directorio `user/` sin percatarse de que tu proyecto usa empaquetado por capas primero (Patrón A), no por dominio primero (Patrón B).
|
|
32
|
-
|
|
33
|
-
**ClaudeOS-Core no adivina.** Antes de que Claude siquiera vea tu proyecto, el código Node.js ya ha:
|
|
10
|
+
**Haz que Claude Code siga las convenciones de TU proyecto al primer intento — no los valores predeterminados genéricos.**
|
|
34
11
|
|
|
35
|
-
|
|
36
|
-
- Escaneado tu estructura de directorios y **confirmado** tu lista de dominios con el conteo de archivos
|
|
37
|
-
- Clasificado la estructura de tu proyecto en uno de los 5 patrones Java, Kotlin CQRS/BFF, o Next.js App Router/FSD
|
|
38
|
-
- Dividido los dominios en grupos de tamaño óptimo que caben en la ventana de contexto de Claude
|
|
39
|
-
- Ensamblado un prompt específico del stack con todos los hechos confirmados inyectados
|
|
12
|
+
Un scanner determinístico de Node.js lee tu código primero; luego una pipeline de Claude de 4 pasadas escribe el conjunto completo — `CLAUDE.md` + `.claude/rules/` auto-cargado + standards + skills + L4 memory. 10 idiomas de salida, 5 validators post-generación, y un allowlist explícito de rutas que impide al LLM inventar archivos o frameworks que no están en tu código.
|
|
40
13
|
|
|
41
|
-
|
|
14
|
+
Funciona en [**12 stacks**](#supported-stacks) (monorepos incluidos) — un solo comando `npx`, sin configuración, resume-safe, idempotente.
|
|
42
15
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
Otras herramientas producen documentación "generalmente buena".
|
|
46
|
-
ClaudeOS-Core produce documentación que sabe que tu proyecto usa `ApiResponse.ok()` (no `ResponseEntity.success()`), que tus mappers MyBatis XML viven en `src/main/resources/mybatis/mappers/`, y que tu estructura de paquetes es `com.company.module.{domain}.controller` — porque leyó tu código real.
|
|
47
|
-
|
|
48
|
-
### Antes y después
|
|
49
|
-
|
|
50
|
-
**Sin ClaudeOS-Core** — le pides a Claude Code que cree un CRUD de Order:
|
|
51
|
-
```
|
|
52
|
-
❌ Usa un repository estilo JPA (tu proyecto usa MyBatis)
|
|
53
|
-
❌ Crea ResponseEntity.success() (tu wrapper es ApiResponse.ok())
|
|
54
|
-
❌ Coloca archivos en order/controller/ (tu proyecto usa controller/order/)
|
|
55
|
-
❌ Genera comentarios en inglés (tu equipo escribe comentarios en español)
|
|
56
|
-
→ Pasas 20 minutos corrigiendo cada archivo generado
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**Con ClaudeOS-Core** — `.claude/rules/` ya contiene tus patrones confirmados:
|
|
60
|
-
```
|
|
61
|
-
✅ Genera mapper MyBatis + XML (detectado desde build.gradle)
|
|
62
|
-
✅ Usa ApiResponse.ok() (extraído de tu fuente real)
|
|
63
|
-
✅ Coloca archivos en controller/order/ (Patrón A confirmado por el escaneo estructural)
|
|
64
|
-
✅ Comentarios en español (--lang es aplicado)
|
|
65
|
-
→ El código generado coincide con las convenciones de tu proyecto al instante
|
|
16
|
+
```bash
|
|
17
|
+
npx claudeos-core init
|
|
66
18
|
```
|
|
67
19
|
|
|
68
|
-
|
|
20
|
+
[🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇨🇳 中文](README.zh-CN.md) · [🇯🇵 日本語](README.ja.md) · [🇻🇳 Tiếng Việt](README.vi.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇷🇺 Русский](README.ru.md) · [🇫🇷 Français](README.fr.md) · [🇩🇪 Deutsch](README.de.md)
|
|
69
21
|
|
|
70
22
|
---
|
|
71
23
|
|
|
72
|
-
##
|
|
73
|
-
|
|
74
|
-
La generación es solo la mitad del problema. La otra mitad es **saber que la salida es correcta** — a través de 10 idiomas de salida, 11 plantillas de stack y proyectos de cualquier tamaño. v2.3.0 añade dos validadores deterministas que se ejecutan después de la generación y no dependen de auto-verificaciones del LLM.
|
|
75
|
-
|
|
76
|
-
### `claude-md-validator` — invariantes estructurales
|
|
77
|
-
|
|
78
|
-
Cada `CLAUDE.md` generado se verifica contra 25 invariantes estructurales que usan solo señales independientes del idioma: sintaxis markdown (`^## `, `^### `), nombres de archivo literales (`decision-log.md`, `failure-patterns.md` — nunca traducidos), recuento de secciones, recuento de sub-secciones por sección y recuento de filas de tabla. El mismo validador, byte por byte, produce veredictos idénticos sobre un `CLAUDE.md` generado en inglés, coreano, japonés, vietnamita, hindi, ruso, español, chino, francés o alemán.
|
|
24
|
+
## ¿Qué es esto?
|
|
79
25
|
|
|
80
|
-
|
|
26
|
+
Usas Claude Code. Es potente, pero cada sesión empieza desde cero — no tiene memoria de cómo está estructurado _tu_ proyecto. Así que recurre a valores predeterminados "generalmente buenos" que rara vez coinciden con lo que tu equipo realmente hace:
|
|
81
27
|
|
|
82
|
-
|
|
28
|
+
- Tu equipo usa **MyBatis**, pero Claude genera repositorios JPA.
|
|
29
|
+
- Tu wrapper de respuesta es `ApiResponse.ok()`, pero Claude escribe `ResponseEntity.success()`.
|
|
30
|
+
- Tus paquetes son layer-first (`controller/order/`), pero Claude crea domain-first (`order/controller/`).
|
|
31
|
+
- Tus errores pasan por middleware centralizado, pero Claude esparce `try/catch` por cada endpoint.
|
|
83
32
|
|
|
84
|
-
|
|
33
|
+
Te gustaría tener un set de `.claude/rules/` por proyecto — Claude Code lo carga automáticamente cada sesión — pero escribir esas reglas a mano para cada repo nuevo lleva horas, y se desactualizan a medida que el código evoluciona.
|
|
85
34
|
|
|
86
|
-
-
|
|
87
|
-
- **`MANIFEST_DRIFT`** — cuando `claudeos-core/skills/00.shared/MANIFEST.md` registra un skill que `CLAUDE.md §6` no menciona (o viceversa). Reconoce el layout común orchestrator + sub-skills donde `CLAUDE.md §6` es un punto de entrada y `MANIFEST.md` es el registro completo — los sub-skills se consideran cubiertos vía su orchestrator padre.
|
|
35
|
+
**ClaudeOS-Core las escribe por ti, desde tu código fuente real.** Un scanner determinístico de Node.js lee tu proyecto primero (stack, ORM, layout de paquetes, convenciones, rutas de archivos). Luego una pipeline de Claude de 4 pasadas convierte los hechos extraídos en un conjunto de documentación completo:
|
|
88
36
|
|
|
89
|
-
|
|
37
|
+
- **`CLAUDE.md`** — el índice del proyecto que Claude lee en cada sesión
|
|
38
|
+
- **`.claude/rules/`** — reglas auto-cargadas por categoría (`00.core` / `10.backend` / `20.frontend` / `30.security-db` / `40.infra` / `60.memory` / `70.domains` / `80.verification`)
|
|
39
|
+
- **`claudeos-core/standard/`** — documentos de referencia (el "por qué" detrás de cada regla)
|
|
40
|
+
- **`claudeos-core/skills/`** — patrones reutilizables (CRUD scaffolding, plantillas de página)
|
|
41
|
+
- **`claudeos-core/memory/`** — decision log + failure patterns que crecen con el proyecto
|
|
90
42
|
|
|
91
|
-
|
|
43
|
+
Como el scanner le entrega a Claude un allowlist explícito de rutas, el LLM **no puede inventar archivos o frameworks que no estén en tu código**. Cinco validators post-generación (`claude-md-validator`, `content-validator`, `pass-json-validator`, `plan-validator`, `sync-checker`) verifican la salida antes de que se envíe — language-invariant, así que las mismas reglas se aplican generes en inglés, español, o cualquiera de los otros 8 idiomas.
|
|
92
44
|
|
|
93
|
-
```bash
|
|
94
|
-
npx claudeos-core health # todos los validadores — veredicto único go/no-go
|
|
95
|
-
npx claudeos-core lint # solo invariantes estructurales de CLAUDE.md (cualquier idioma)
|
|
96
45
|
```
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
## Stacks Soportados
|
|
101
|
-
|
|
102
|
-
| Stack | Detección | Profundidad de análisis |
|
|
103
|
-
|---|---|---|
|
|
104
|
-
| **Java / Spring Boot** | `build.gradle`, `pom.xml`, 5 patrones de paquete | 10 categorías, 59 sub-ítems |
|
|
105
|
-
| **Kotlin / Spring Boot** | `build.gradle.kts`, kotlin plugin, `settings.gradle.kts`, auto-detección CQRS/BFF | 12 categorías, 95 sub-ítems |
|
|
106
|
-
| **Node.js / Express** | `package.json` | 9 categorías, 57 sub-ítems |
|
|
107
|
-
| **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 categorías, 68 sub-ítems |
|
|
108
|
-
| **Next.js / React** | `package.json`, `next.config.*`, soporte FSD | 9 categorías, 55 sub-ítems |
|
|
109
|
-
| **Vue / Nuxt** | `package.json`, `nuxt.config.*`, Composition API | 9 categorías, 58 sub-ítems |
|
|
110
|
-
| **Python / Django** | `requirements.txt`, `pyproject.toml` | 10 categorías, 55 sub-ítems |
|
|
111
|
-
| **Python / FastAPI** | `requirements.txt`, `pyproject.toml` | 10 categorías, 58 sub-ítems |
|
|
112
|
-
| **Node.js / Fastify** | `package.json` | 10 categorías, 62 sub-ítems |
|
|
113
|
-
| **Vite / React SPA** | `package.json`, `vite.config.*` | 9 categorías, 55 sub-ítems |
|
|
114
|
-
| **Angular** | `package.json`, `angular.json` | 12 categorías, 78 sub-ítems |
|
|
115
|
-
|
|
116
|
-
Auto-detectado: lenguaje y versión, framework y versión (incluyendo Vite como framework SPA), ORM (MyBatis, JPA, Exposed, Prisma, TypeORM, SQLAlchemy, etc.), base de datos (PostgreSQL, MySQL, Oracle, MongoDB, SQLite), gestor de paquetes (Gradle, Maven, npm, yarn, pnpm, pip, poetry), arquitectura (CQRS, BFF — a partir de los nombres de módulos), estructura multi-módulo (desde settings.gradle), monorepo (Turborepo, pnpm-workspace, Lerna, npm/yarn workspaces), **configuración de runtime desde `.env.example`** (v2.2.0 — extrae port/host/API-target de más de 16 nombres de variable convencionales a través de frameworks Vite · Next.js · Nuxt · Angular · Node · Python).
|
|
117
|
-
|
|
118
|
-
**No tienes que especificar nada. Todo se detecta automáticamente.**
|
|
119
|
-
|
|
120
|
-
### Configuración de runtime desde `.env` (v2.2.0)
|
|
121
|
-
|
|
122
|
-
v2.2.0 añade `lib/env-parser.js` para que el `CLAUDE.md` generado refleje lo que el proyecto declara realmente, en vez de los valores por defecto del framework.
|
|
123
|
-
|
|
124
|
-
- **Orden de búsqueda**: `.env.example` (canónico, commiteado) → `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`. La variante `.example` gana porque es la forma-de-verdad neutral para desarrolladores, no los overrides locales de un contribuidor concreto.
|
|
125
|
-
- **Convenciones de variable de puerto reconocidas**: `VITE_PORT` / `VITE_DEV_PORT` / `VITE_DESKTOP_PORT` / `NEXT_PUBLIC_PORT` / `NUXT_PORT` / `NG_PORT` / `APP_PORT` / `SERVER_PORT` / `HTTP_PORT` / `DEV_PORT` / `FLASK_RUN_PORT` / `UVICORN_PORT` / `DJANGO_PORT` / `PORT` genérico. Los nombres específicos de framework ganan sobre `PORT` genérico cuando ambos están presentes.
|
|
126
|
-
- **Host y API target**: `VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET`, etc.
|
|
127
|
-
- **Precedencia**: `server.port` de `application.yml` de Spring Boot sigue ganando (config framework-native), luego el puerto declarado en `.env`, y finalmente el valor por defecto del framework (Vite 5173, Next.js 3000, Django 8000, etc.) como último recurso.
|
|
128
|
-
- **Redacción de variables sensibles**: los valores de variables que coinciden con patrones `PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT` se sustituyen por `***REDACTED***` antes de llegar a cualquier generador downstream. Defense-in-depth contra secretos commiteados accidentalmente en `.env.example`. `DATABASE_URL` se incluye explícitamente en la lista blanca para retrocompatibilidad con la identificación de DB del stack-detector.
|
|
129
|
-
|
|
130
|
-
### Detección de Dominios Java (5 patrones con fallback)
|
|
131
|
-
|
|
132
|
-
| Prioridad | Patrón | Estructura | Ejemplo |
|
|
133
|
-
|---|---|---|---|
|
|
134
|
-
| A | Capa primero | `controller/{domain}/` | `controller/user/UserController.java` |
|
|
135
|
-
| B | Dominio primero | `{domain}/controller/` | `user/controller/UserController.java` |
|
|
136
|
-
| D | Prefijo de módulo | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
|
|
137
|
-
| E | DDD/Hexagonal | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
|
|
138
|
-
| C | Plano | `controller/*.java` | `controller/UserController.java` → extrae `user` del nombre de clase |
|
|
139
|
-
|
|
140
|
-
Los dominios solo con servicios (sin controladores) también se detectan mediante directorios `service/`, `dao/`, `aggregator/`, `facade/`, `usecase/`, `orchestrator/`, `mapper/`, `repository/`. Se omiten: `common`, `config`, `util`, `core`, `front`, `admin`, `v1`, `v2`, etc.
|
|
141
|
-
|
|
142
|
-
### Detección de Dominios Kotlin Multi-Módulo
|
|
143
|
-
|
|
144
|
-
Para proyectos Kotlin con estructura Gradle multi-módulo (por ejemplo, monorepo CQRS):
|
|
145
|
-
|
|
146
|
-
| Paso | Qué hace | Ejemplo |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| 1 | Escanea `settings.gradle.kts` en busca de `include()` | Encuentra 14 módulos |
|
|
149
|
-
| 2 | Detecta el tipo de módulo desde el nombre | `reservation-command-server` → tipo: `command` |
|
|
150
|
-
| 3 | Extrae el dominio del nombre del módulo | `reservation-command-server` → dominio: `reservation` |
|
|
151
|
-
| 4 | Agrupa el mismo dominio entre módulos | `reservation-command-server` + `common-query-server` → 1 dominio |
|
|
152
|
-
| 5 | Detecta la arquitectura | Tiene módulos `command` + `query` → CQRS |
|
|
153
|
-
|
|
154
|
-
Tipos de módulo soportados: `command`, `query`, `bff`, `integration`, `standalone`, `library`. Las bibliotecas compartidas (`shared-lib`, `integration-lib`) se detectan como dominios especiales.
|
|
155
|
-
|
|
156
|
-
### Detección de Dominios Frontend
|
|
157
|
-
|
|
158
|
-
- **App Router**: `app/{domain}/page.tsx` (Next.js)
|
|
159
|
-
- **Pages Router**: `pages/{domain}/index.tsx`
|
|
160
|
-
- **FSD (Feature-Sliced Design)**: `features/*/`, `widgets/*/`, `entities/*/`
|
|
161
|
-
- **División RSC/Client**: Detecta el patrón `client.tsx`, realiza seguimiento de la separación de componentes Server/Client
|
|
162
|
-
- **Rutas anidadas no estándar**: Detecta pages, components y capas FSD bajo rutas `src/*/` (ej: `src/admin/pages/dashboard/`, `src/admin/components/form/`, `src/admin/features/billing/`)
|
|
163
|
-
- **Detección platform/tier-split (v2.0.0)**: Reconoce layouts `src/{platform}/{subapp}/` — `{platform}` puede ser una palabra clave de dispositivo/objetivo (`desktop`, `pc`, `web`, `mobile`, `mc`, `mo`, `sp`, `tablet`, `tab`, `pwa`, `tv`, `ctv`, `ott`, `watch`, `wear`) o una palabra clave de nivel de acceso (`admin`, `cms`, `backoffice`, `back-office`, `portal`). Emite un dominio por cada par `(platform, subapp)` con el nombre `{platform}-{subapp}` y recuentos por dominio para routes/components/layouts/hooks. Se ejecuta simultáneamente sobre Angular, Next.js, React y Vue (glob multi-extensión `{tsx,jsx,ts,js,vue}`). Requiere ≥2 archivos fuente por subapp para evitar dominios ruidosos de 1 solo archivo.
|
|
164
|
-
- **División por plataforma en monorepo (v2.0.0)**: El escaneo de plataforma también coincide con `{apps,packages}/*/src/{platform}/{subapp}/` (Turborepo/pnpm workspace con `src/`) y `{apps,packages}/{platform}/{subapp}/` (workspaces sin envoltorio `src/`).
|
|
165
|
-
- **Fallback E — archivo de rutas (v2.0.0)**: Cuando los escáneres principales + los fallbacks A–D devuelven 0, hace un glob `**/routes/*.{tsx,jsx,ts,js,vue}` y agrupa por el nombre del directorio padre de `routes`. Captura proyectos de enrutamiento por archivo con React Router (CRA/Vite + `react-router`) que no encajan en los layouts `page.tsx` de Next.js ni de FSD. Se filtran los nombres de padre genéricos (`src`, `app`, `pages`).
|
|
166
|
-
- **Fallback de configuración**: Detecta Next.js/Vite/Nuxt desde archivos de configuración cuando no están en `package.json` (soporte de monorepo)
|
|
167
|
-
- **Fallback de directorio profundo**: Para proyectos React/CRA/Vite/Vue/RN, escanea `**/components/*/`, `**/views/*/`, `**/screens/*/`, `**/containers/*/`, `**/pages/*/`, `**/routes/*/`, `**/modules/*/`, `**/domains/*/` a cualquier profundidad
|
|
168
|
-
- **Listas de ignorados compartidas (v2.0.0)**: Todos los escáneres comparten `BUILD_IGNORE_DIRS` (`node_modules`, `build`, `dist`, `out`, `.next`, `.nuxt`, `.svelte-kit`, `.angular`, `.turbo`, `.cache`, `.parcel-cache`, `coverage`, `storybook-static`, `.vercel`, `.netlify`) y `TEST_FILE_IGNORE` (spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`) para que los resultados de build y las fixtures de test no inflen los recuentos por dominio.
|
|
169
|
-
|
|
170
|
-
### Overrides de escáner (v2.0.0)
|
|
171
|
-
|
|
172
|
-
Coloca un `.claudeos-scan.json` opcional en la raíz de tu proyecto para extender los valores por defecto del escáner sin modificar el toolkit. Todos los campos son **aditivos** — las entradas del usuario extienden los valores por defecto, nunca los reemplazan:
|
|
173
|
-
|
|
174
|
-
```json
|
|
175
|
-
{
|
|
176
|
-
"frontendScan": {
|
|
177
|
-
"platformKeywords": ["kiosk"],
|
|
178
|
-
"skipSubappNames": ["legacy"],
|
|
179
|
-
"minSubappFiles": 3
|
|
180
|
-
}
|
|
181
|
-
}
|
|
46
|
+
Antes: Tú → Claude Code → código "generalmente bueno" → corrección manual cada vez
|
|
47
|
+
Después: Tú → Claude Code → código que coincide con TU proyecto → listo para enviar
|
|
182
48
|
```
|
|
183
49
|
|
|
184
|
-
| Campo | Por defecto | Propósito |
|
|
185
|
-
|---|---|---|
|
|
186
|
-
| `platformKeywords` | lista integrada indicada arriba | Palabras clave `{platform}` adicionales para el escaneo de plataforma (ej: `kiosk`, `vr`, `embedded`) |
|
|
187
|
-
| `skipSubappNames` | solo directorios estructurales | Nombres de subapp adicionales para excluir de la emisión de dominios del escaneo de plataforma |
|
|
188
|
-
| `minSubappFiles` | `2` | Anula el recuento mínimo de archivos requerido para que un subapp se convierta en dominio |
|
|
189
|
-
|
|
190
|
-
Archivo ausente o JSON mal formado → cae silenciosamente a los valores por defecto (no crashea). Uso típico: activar una abreviatura corta (`adm`, `bo`) que la lista integrada excluye por ser demasiado ambigua, o aumentar `minSubappFiles` para monorepos ruidosos.
|
|
191
|
-
|
|
192
50
|
---
|
|
193
51
|
|
|
194
|
-
##
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
52
|
+
## Velo en un proyecto real
|
|
53
|
+
|
|
54
|
+
Ejecutado en [`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) — Java 11 · Spring Boot 2.6 · MyBatis · SQLite · 187 archivos fuente. Salida: **75 archivos generados**, tiempo total **53 minutos**, todos los validators ✅.
|
|
55
|
+
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img src="docs/assets/spring-boot-realworld-demo.gif" alt="ClaudeOS-Core init running on spring-boot-realworld-example-app — stack detection, 4-pass pipeline, validators, completion summary" width="769">
|
|
58
|
+
</p>
|
|
59
|
+
|
|
60
|
+
<details>
|
|
61
|
+
<summary><strong>📺 Salida del terminal (versión texto, para búsqueda y copia)</strong></summary>
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
╔════════════════════════════════════════════════════╗
|
|
65
|
+
║ ClaudeOS-Core — Bootstrap (4-Pass) ║
|
|
66
|
+
╚════════════════════════════════════════════════════╝
|
|
67
|
+
Project root: spring-boot-realworld-example-app
|
|
68
|
+
Language: English (en)
|
|
69
|
+
|
|
70
|
+
[Phase 1] Detecting stack...
|
|
71
|
+
Language: java 11
|
|
72
|
+
Framework: spring-boot 2.6.3
|
|
73
|
+
Database: sqlite
|
|
74
|
+
ORM: mybatis
|
|
75
|
+
PackageMgr: gradle
|
|
76
|
+
|
|
77
|
+
[Phase 2] Scanning structure...
|
|
78
|
+
Backend: 2 domains
|
|
79
|
+
Total: 2 domains
|
|
80
|
+
Package: io.spring.infrastructure
|
|
81
|
+
|
|
82
|
+
[Phase 5] Active domains...
|
|
83
|
+
✅ 00.core ✅ 10.backend ⏭️ 20.frontend
|
|
84
|
+
✅ 30.security-db ✅ 40.infra
|
|
85
|
+
✅ 80.verification ✅ 90.optional
|
|
86
|
+
|
|
87
|
+
[4] Pass 1 — Deep analysis per domain group...
|
|
88
|
+
✅ pass1-1.json created (5m 34s)
|
|
89
|
+
[█████░░░░░░░░░░░░░░░] 25% (1/4)
|
|
90
|
+
|
|
91
|
+
[5] Pass 2 — Merging analysis results...
|
|
92
|
+
✅ pass2-merged.json created (4m 22s)
|
|
93
|
+
[██████████░░░░░░░░░░] 50% (2/4)
|
|
94
|
+
|
|
95
|
+
[6] Pass 3 — Generating all files...
|
|
96
|
+
🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
|
|
97
|
+
✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
|
|
98
|
+
✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
|
|
99
|
+
✅ 3c complete (12m 35s) — 13 skills + 9 guides
|
|
100
|
+
✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
|
|
101
|
+
🎉 Pass 3 split complete: 4/4 stages successful
|
|
102
|
+
[███████████████░░░░░] 75% (3/4)
|
|
103
|
+
|
|
104
|
+
[7] Pass 4 — Memory scaffolding...
|
|
105
|
+
📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
|
|
106
|
+
✅ Pass 4 complete (5m)
|
|
107
|
+
📋 Gap-fill: all 12 expected files already present
|
|
108
|
+
[████████████████████] 100% (4/4)
|
|
109
|
+
|
|
110
|
+
╔═══════════════════════════════════════╗
|
|
111
|
+
║ ClaudeOS-Core — Health Checker ║
|
|
112
|
+
╚═══════════════════════════════════════╝
|
|
113
|
+
✅ plan-validator pass
|
|
114
|
+
✅ sync-checker pass
|
|
115
|
+
✅ content-validator pass
|
|
116
|
+
✅ pass-json-validator pass
|
|
117
|
+
✅ All systems operational
|
|
118
|
+
|
|
119
|
+
[Lint] ✅ CLAUDE.md structure valid (25 checks)
|
|
120
|
+
[Content] ✅ All content validation passed
|
|
121
|
+
Total: 0 advisories, 0 notes
|
|
122
|
+
|
|
123
|
+
╔════════════════════════════════════════════════════╗
|
|
124
|
+
║ ✅ ClaudeOS-Core — Complete ║
|
|
125
|
+
║ Files created: 75 ║
|
|
126
|
+
║ Domains analyzed: 1 group ║
|
|
127
|
+
║ L4 scaffolded: memory + rules ║
|
|
128
|
+
║ Output language: English ║
|
|
129
|
+
║ Total time: 53m 8s ║
|
|
130
|
+
╚════════════════════════════════════════════════════╝
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
</details>
|
|
134
|
+
|
|
135
|
+
<details>
|
|
136
|
+
<summary><strong>📄 Lo que termina en tu <code>CLAUDE.md</code> (extracto real — Section 1 + 2)</strong></summary>
|
|
137
|
+
|
|
138
|
+
```markdown
|
|
139
|
+
# CLAUDE.md — spring-boot-realworld-example-app
|
|
140
|
+
|
|
141
|
+
> Reference implementation of the RealWorld backend specification on
|
|
142
|
+
> Java 11 + Spring Boot 2.6, exposing both REST and GraphQL endpoints
|
|
143
|
+
> over a hexagonal MyBatis persistence layer.
|
|
144
|
+
|
|
145
|
+
## 1. Role Definition
|
|
146
|
+
|
|
147
|
+
As the senior developer for this repository, you are responsible for
|
|
148
|
+
writing, modifying, and reviewing code. Responses must be written in English.
|
|
149
|
+
A Java Spring Boot REST + GraphQL API server organized around a hexagonal
|
|
150
|
+
(ports & adapters) architecture, with a CQRS-lite read/write split inside
|
|
151
|
+
an XML-driven MyBatis persistence layer and JWT-based authentication.
|
|
152
|
+
|
|
153
|
+
## 2. Project Overview
|
|
154
|
+
|
|
155
|
+
| Item | Value |
|
|
156
|
+
|---|---|
|
|
157
|
+
| Language | Java 11 |
|
|
158
|
+
| Framework | Spring Boot 2.6.3 |
|
|
159
|
+
| Build Tool | Gradle (Groovy DSL) |
|
|
160
|
+
| Persistence | MyBatis 3 via `mybatis-spring-boot-starter:2.2.2` (no JPA) |
|
|
161
|
+
| Database | SQLite (`org.xerial:sqlite-jdbc:3.36.0.3`) — `dev.db` (default), `:memory:` (test) |
|
|
162
|
+
| Migration | Flyway — single baseline `V1__create_tables.sql` |
|
|
163
|
+
| API Style | REST (`io.spring.api.*`) + GraphQL via Netflix DGS `:4.9.21` |
|
|
164
|
+
| Authentication | JWT HS512 (`jjwt-api:0.11.2`) + Spring Security `PasswordEncoder` |
|
|
165
|
+
| Server Port | 8080 (default) |
|
|
166
|
+
| Test Stack | JUnit Jupiter 5, Mockito, AssertJ, rest-assured, spring-mock-mvc |
|
|
225
167
|
```
|
|
226
168
|
|
|
227
|
-
|
|
169
|
+
Cada valor de arriba — coordenadas exactas de dependencias, el nombre de archivo `dev.db`, el nombre de la migración `V1__create_tables.sql`, "no JPA" — es extraído por el scanner desde `build.gradle` / `application.properties` / el árbol de fuentes antes de que Claude escriba el archivo. Nada se adivina.
|
|
228
170
|
|
|
229
|
-
|
|
171
|
+
</details>
|
|
230
172
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
║ Select generated document language (required) ║
|
|
234
|
-
╚══════════════════════════════════════════════════╝
|
|
235
|
-
|
|
236
|
-
Los archivos generados (CLAUDE.md, Standards, Rules,
|
|
237
|
-
Skills, Guides) se escribirán en español.
|
|
238
|
-
|
|
239
|
-
1. en — English
|
|
240
|
-
2. ko — 한국어 (Korean)
|
|
241
|
-
3. zh-CN — 简体中文 (Chinese Simplified)
|
|
242
|
-
4. ja — 日本語 (Japanese)
|
|
243
|
-
❯ 5. es — Español (Spanish)
|
|
244
|
-
6. vi — Tiếng Việt (Vietnamese)
|
|
245
|
-
7. hi — हिन्दी (Hindi)
|
|
246
|
-
8. ru — Русский (Russian)
|
|
247
|
-
9. fr — Français (French)
|
|
248
|
-
10. de — Deutsch (German)
|
|
249
|
-
|
|
250
|
-
↑↓ Move 1-0 Jump Enter Select ESC Cancel
|
|
251
|
-
```
|
|
173
|
+
<details>
|
|
174
|
+
<summary><strong>🛡️ Una regla auto-cargada real (<code>.claude/rules/10.backend/01.controller-rules.md</code>)</strong></summary>
|
|
252
175
|
|
|
253
|
-
|
|
176
|
+
````markdown
|
|
177
|
+
---
|
|
178
|
+
paths:
|
|
179
|
+
- "**/*"
|
|
180
|
+
---
|
|
254
181
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
182
|
+
# Controller Rules
|
|
183
|
+
|
|
184
|
+
## REST (`io.spring.api.*`)
|
|
185
|
+
|
|
186
|
+
- Controllers are the SOLE response wrapper for HTTP — no aggregator/facade above them.
|
|
187
|
+
Return `ResponseEntity<?>` or a body Spring serializes via `JacksonCustomizations`.
|
|
188
|
+
- Each controller method calls exactly ONE application service method. Multi-source
|
|
189
|
+
composition lives in the application service.
|
|
190
|
+
- Controllers MUST NOT import `io.spring.infrastructure.*`. No direct `@Mapper` access.
|
|
191
|
+
- Validate command-param arguments with `@Valid`. Custom JSR-303 constraints live under
|
|
192
|
+
`io.spring.application.{aggregate}.*`.
|
|
193
|
+
- Resolve the current user via `@AuthenticationPrincipal User`.
|
|
194
|
+
- Let exceptions propagate to `io.spring.api.exception.CustomizeExceptionHandler`
|
|
195
|
+
(`@ControllerAdvice`). Do NOT `try/catch` business exceptions inside the controller.
|
|
196
|
+
|
|
197
|
+
## GraphQL (`io.spring.graphql.*`)
|
|
198
|
+
|
|
199
|
+
- DGS components (`@DgsComponent`) are the sole GraphQL response wrappers.
|
|
200
|
+
Use `@DgsQuery` / `@DgsData` / `@DgsMutation`.
|
|
201
|
+
- Resolve the current user via `io.spring.graphql.SecurityUtil.getCurrentUser()`.
|
|
202
|
+
|
|
203
|
+
## Examples
|
|
204
|
+
|
|
205
|
+
✅ Correct:
|
|
206
|
+
```java
|
|
207
|
+
@PostMapping
|
|
208
|
+
public ResponseEntity<?> createArticle(@AuthenticationPrincipal User user,
|
|
209
|
+
@Valid @RequestBody NewArticleParam param) {
|
|
210
|
+
Article article = articleCommandService.createArticle(param, user);
|
|
211
|
+
ArticleData data = articleQueryService.findById(article.getId(), user)
|
|
212
|
+
.orElseThrow(ResourceNotFoundException::new);
|
|
213
|
+
return ResponseEntity.ok(Map.of("article", data));
|
|
214
|
+
}
|
|
259
215
|
```
|
|
260
216
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
cd /your/project/root
|
|
273
|
-
|
|
274
|
-
git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
|
|
275
|
-
cd claudeos-core-tools && npm install && cd ..
|
|
217
|
+
❌ Incorrect:
|
|
218
|
+
```java
|
|
219
|
+
@PostMapping
|
|
220
|
+
public ResponseEntity<?> create(@RequestBody NewArticleParam p) {
|
|
221
|
+
try {
|
|
222
|
+
articleCommandService.createArticle(p, currentUser);
|
|
223
|
+
} catch (Exception e) { // NO — let CustomizeExceptionHandler handle it
|
|
224
|
+
return ResponseEntity.status(500).body(e.getMessage()); // NO — leaks raw message
|
|
225
|
+
}
|
|
226
|
+
return ResponseEntity.ok().build();
|
|
227
|
+
}
|
|
276
228
|
```
|
|
229
|
+
````
|
|
277
230
|
|
|
278
|
-
|
|
231
|
+
El glob `paths: ["**/*"]` significa que Claude Code carga automáticamente esta regla cada vez que editas cualquier archivo del proyecto. Cada nombre de clase, ruta de paquete, y exception handler en la regla viene directamente del código fuente escaneado — incluyendo el `CustomizeExceptionHandler` y `JacksonCustomizations` reales del proyecto.
|
|
279
232
|
|
|
280
|
-
|
|
281
|
-
# Rules (v2.0.0: añadido 60.memory)
|
|
282
|
-
mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
|
|
233
|
+
</details>
|
|
283
234
|
|
|
284
|
-
|
|
285
|
-
|
|
235
|
+
<details>
|
|
236
|
+
<summary><strong>🧠 Un seed auto-generado de <code>decision-log.md</code> (extracto real)</strong></summary>
|
|
286
237
|
|
|
287
|
-
|
|
288
|
-
|
|
238
|
+
```markdown
|
|
239
|
+
## 2026-04-26 — Hexagonal ports & adapters with MyBatis-only persistence
|
|
289
240
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
241
|
+
- **Context:** `io.spring.core.*` exposes `*Repository` ports (e.g.,
|
|
242
|
+
`io.spring.core.article.ArticleRepository`) implemented by
|
|
243
|
+
`io.spring.infrastructure.repository.MyBatis*Repository` adapters.
|
|
244
|
+
The domain layer has zero `org.springframework.*` /
|
|
245
|
+
`org.apache.ibatis.*` / `io.spring.infrastructure.*` imports.
|
|
246
|
+
- **Options considered:** JPA/Hibernate, Spring Data, MyBatis-Plus
|
|
247
|
+
`BaseMapper`. None adopted.
|
|
248
|
+
- **Decision:** MyBatis 3 (`mybatis-spring-boot-starter:2.2.2`) with
|
|
249
|
+
hand-written XML statements under `src/main/resources/mapper/*.xml`.
|
|
250
|
+
Hexagonal port/adapter wiring keeps the domain framework-free.
|
|
251
|
+
- **Consequences:** Every SQL lives in XML — `@Select`/`@Insert`/`@Update`/`@Delete`
|
|
252
|
+
annotations are forbidden. New aggregates require both a
|
|
253
|
+
`core.{aggregate}.{Aggregate}Repository` port AND a
|
|
254
|
+
`MyBatis{Aggregate}Repository` adapter; introducing a JPA repository would
|
|
255
|
+
split the persistence model.
|
|
293
256
|
```
|
|
294
257
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
#### Paso 3: Ejecutar plan-installer (análisis del proyecto)
|
|
298
|
-
|
|
299
|
-
Esto escanea tu proyecto, detecta el stack, encuentra dominios, los divide en grupos y genera prompts.
|
|
258
|
+
Pass 4 inicializa `decision-log.md` con las decisiones arquitectónicas extraídas de `pass2-merged.json`, así las sesiones futuras recuerdan *por qué* el código se ve como se ve — no solo *cómo* se ve. Cada opción ("JPA/Hibernate", "MyBatis-Plus") y cada consecuencia están fundamentadas en el bloque real de dependencias de `build.gradle`.
|
|
300
259
|
|
|
301
|
-
|
|
302
|
-
node claudeos-core-tools/plan-installer/index.js
|
|
303
|
-
```
|
|
260
|
+
</details>
|
|
304
261
|
|
|
305
|
-
|
|
306
|
-
- `project-analysis.json` — stack detectado, dominios, info de frontend
|
|
307
|
-
- `domain-groups.json` — grupos de dominios para Pass 1
|
|
308
|
-
- `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — prompts de análisis
|
|
309
|
-
- `pass2-prompt.md` — prompt de merge
|
|
310
|
-
- `pass3-prompt.md` — plantilla de prompt de Pass 3 con el bloque Phase 1 "Read Once, Extract Facts" anteanteado (Rules A–E). El pipeline automatizado divide Pass 3 en múltiples etapas en runtime; esta plantilla alimenta cada etapa.
|
|
311
|
-
- `pass3-context.json` — resumen slim del proyecto (< 5 KB, construido tras Pass 2) que los prompts de Pass 3 prefieren frente al `pass2-merged.json` completo (v2.1.0)
|
|
312
|
-
- `pass4-prompt.md` — prompt de scaffolding de memory L4 (v2.0.0; usa el mismo `staging-override.md` para las escrituras de reglas `60.memory/`)
|
|
313
|
-
|
|
314
|
-
Puedes inspeccionar estos archivos para verificar la precisión de la detección antes de continuar.
|
|
262
|
+
---
|
|
315
263
|
|
|
316
|
-
|
|
264
|
+
## Quick Start
|
|
317
265
|
|
|
318
|
-
|
|
266
|
+
**Requisitos previos:** Node.js 18+, [Claude Code](https://docs.anthropic.com/en/docs/claude-code) instalado y autenticado.
|
|
319
267
|
|
|
320
268
|
```bash
|
|
321
|
-
#
|
|
322
|
-
|
|
323
|
-
const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
|
|
324
|
-
g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
|
|
325
|
-
"
|
|
326
|
-
|
|
327
|
-
# Ejecuta Pass 1 para cada grupo (reemplaza los dominios y el número de grupo)
|
|
328
|
-
# Nota: v1.6.1+ usa String.replace() de Node.js en vez de perl — perl ya
|
|
329
|
-
# no es necesario, y la semántica de funciones de reemplazo previene la inyección
|
|
330
|
-
# regex de los caracteres $/&/$1 que pudieran aparecer en los nombres de dominio.
|
|
331
|
-
#
|
|
332
|
-
# Para el grupo 1:
|
|
333
|
-
DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
|
|
334
|
-
const fs = require('fs');
|
|
335
|
-
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
336
|
-
const out = tpl
|
|
337
|
-
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
338
|
-
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
339
|
-
process.stdout.write(out);
|
|
340
|
-
" | claude -p --dangerously-skip-permissions
|
|
341
|
-
|
|
342
|
-
# Para el grupo 2 (si existe):
|
|
343
|
-
DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
|
|
344
|
-
const fs = require('fs');
|
|
345
|
-
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
346
|
-
const out = tpl
|
|
347
|
-
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
348
|
-
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
349
|
-
process.stdout.write(out);
|
|
350
|
-
" | claude -p --dangerously-skip-permissions
|
|
351
|
-
|
|
352
|
-
# Para grupos frontend, sustituye pass1-backend-prompt.md → pass1-frontend-prompt.md
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
**Verificar:** `ls claudeos-core/generated/pass1-*.json` debería mostrar un JSON por grupo.
|
|
269
|
+
# 1. Ve a la raíz de tu proyecto
|
|
270
|
+
cd my-spring-boot-project
|
|
356
271
|
|
|
357
|
-
|
|
272
|
+
# 2. Ejecuta init (esto analiza tu código y le pide a Claude que escriba las reglas)
|
|
273
|
+
npx claudeos-core init
|
|
358
274
|
|
|
359
|
-
|
|
360
|
-
cat claudeos-core/generated/pass2-prompt.md \
|
|
361
|
-
| claude -p --dangerously-skip-permissions
|
|
275
|
+
# 3. Listo. Abre Claude Code y empieza a programar — tus reglas ya están cargadas.
|
|
362
276
|
```
|
|
363
277
|
|
|
364
|
-
**
|
|
365
|
-
|
|
366
|
-
#### Paso 6: Pass 3 — Generar toda la documentación (dividido en varias etapas)
|
|
367
|
-
|
|
368
|
-
**Nota v2.1.0:** Pass 3 **siempre se ejecuta en modo split** por parte del pipeline automatizado. Cada etapa es una llamada `claude -p` separada con una ventana de contexto nueva, así que el overflow por acumulación de salida es estructuralmente imposible sin importar el tamaño del proyecto. La plantilla `pass3-prompt.md` se ensambla por etapa con una directiva `STAGE:` que le indica a Claude qué subconjunto de archivos debe emitir. En modo manual, el camino más simple sigue siendo alimentar la plantilla completa y dejar que Claude genere todo en una sola llamada — pero esto solo es fiable en proyectos pequeños (≤5 dominios). Para cualquier cosa más grande, usa `npx claudeos-core init` para que el runner de split gestione la orquestación de etapas.
|
|
369
|
-
|
|
370
|
-
**Modo de llamada única (solo proyectos pequeños, ≤5 dominios):**
|
|
278
|
+
**Lo que obtienes** después de que `init` termina:
|
|
371
279
|
|
|
372
|
-
```bash
|
|
373
|
-
cat claudeos-core/generated/pass3-prompt.md \
|
|
374
|
-
| claude -p --dangerously-skip-permissions
|
|
375
280
|
```
|
|
281
|
+
your-project/
|
|
282
|
+
├── .claude/
|
|
283
|
+
│ └── rules/ ← Auto-cargado por Claude Code
|
|
284
|
+
│ ├── 00.core/ (reglas generales — naming, arquitectura)
|
|
285
|
+
│ ├── 10.backend/ (reglas de stack backend, si las hay)
|
|
286
|
+
│ ├── 20.frontend/ (reglas de stack frontend, si las hay)
|
|
287
|
+
│ ├── 30.security-db/ (convenciones de seguridad y DB)
|
|
288
|
+
│ ├── 40.infra/ (env, logging, CI/CD)
|
|
289
|
+
│ ├── 50.sync/ (recordatorios de doc-sync — solo rules)
|
|
290
|
+
│ ├── 60.memory/ (reglas de memoria — Pass 4, solo rules)
|
|
291
|
+
│ ├── 70.domains/{type}/ (reglas por dominio, type = backend|frontend)
|
|
292
|
+
│ └── 80.verification/ (estrategia de pruebas + recordatorios de verificación de build)
|
|
293
|
+
├── claudeos-core/
|
|
294
|
+
│ ├── standard/ ← Documentos de referencia (espejan la estructura de categorías)
|
|
295
|
+
│ │ ├── 00.core/ (resumen del proyecto, arquitectura, naming)
|
|
296
|
+
│ │ ├── 10.backend/ (referencia backend — si hay stack backend)
|
|
297
|
+
│ │ ├── 20.frontend/ (referencia frontend — si hay stack frontend)
|
|
298
|
+
│ │ ├── 30.security-db/ (referencia de seguridad y DB)
|
|
299
|
+
│ │ ├── 40.infra/ (referencia env / logging / CI-CD)
|
|
300
|
+
│ │ ├── 70.domains/{type}/ (referencia por dominio)
|
|
301
|
+
│ │ ├── 80.verification/ (referencia de build / arranque / pruebas — solo standard)
|
|
302
|
+
│ │ └── 90.optional/ (extras específicos del stack — solo standard)
|
|
303
|
+
│ ├── skills/ (patrones reutilizables que Claude puede aplicar)
|
|
304
|
+
│ ├── guide/ (guías how-to para tareas comunes)
|
|
305
|
+
│ ├── database/ (resumen de esquema, guía de migraciones)
|
|
306
|
+
│ ├── mcp-guide/ (notas de integración MCP)
|
|
307
|
+
│ └── memory/ (decision log, failure patterns, compaction)
|
|
308
|
+
└── CLAUDE.md (el índice que Claude lee primero)
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Las categorías que comparten el mismo prefijo numérico entre `rules/` y `standard/` representan la misma área conceptual (p. ej., reglas `10.backend` ↔ standards `10.backend`). Categorías solo de rules: `50.sync` (recordatorios de sincronización de docs) y `60.memory` (memoria de Pass 4). Categoría solo de standard: `90.optional` (extras específicos del stack sin enforcement). Todos los demás prefijos (`00`, `10`, `20`, `30`, `40`, `70`, `80`) aparecen en AMBOS `rules/` y `standard/`. Claude Code ahora conoce tu proyecto.
|
|
376
312
|
|
|
377
|
-
|
|
313
|
+
---
|
|
378
314
|
|
|
379
|
-
|
|
315
|
+
## ¿Para quién es esto?
|
|
380
316
|
|
|
381
|
-
|
|
|
382
|
-
|
|
383
|
-
|
|
|
384
|
-
|
|
|
385
|
-
|
|
|
386
|
-
|
|
|
387
|
-
|
|
|
388
|
-
|
|
|
317
|
+
| Eres... | El dolor que esto elimina |
|
|
318
|
+
|---|---|
|
|
319
|
+
| **Un dev en solitario** empezando un proyecto nuevo con Claude Code | "Enseñarle a Claude mis convenciones cada sesión" — desaparece. `CLAUDE.md` + `.claude/rules/` de 8 categorías generados en una sola pasada. |
|
|
320
|
+
| **Un team lead** manteniendo estándares compartidos entre repos | El `.claude/rules/` se desincroniza cuando la gente renombra paquetes, cambia de ORM, o modifica wrappers de respuesta. ClaudeOS-Core re-sincroniza determinísticamente — misma entrada, salida byte-idéntica, sin ruido en los diffs. |
|
|
321
|
+
| **Ya usas Claude Code** pero estás cansado de corregir el código generado | Wrapper de respuesta incorrecto, layout de paquetes incorrecto, JPA cuando usas MyBatis, `try/catch` esparcido cuando tu proyecto usa middleware centralizado. El scanner extrae tus convenciones reales; cada pasada de Claude se ejecuta contra un allowlist explícito de rutas. |
|
|
322
|
+
| **Haciendo onboarding a un nuevo repo** (proyecto existente, uniéndote a un equipo) | Ejecuta `init` en el repo, obtén un mapa de arquitectura vivo: tabla de stack en CLAUDE.md, reglas por capa con ejemplos ✅/❌, decision log seedeado con el "por qué" detrás de las decisiones principales (JPA vs MyBatis, REST vs GraphQL, etc.). Leer 5 archivos le gana a leer 5,000 archivos fuente. |
|
|
323
|
+
| **Trabajando en español / coreano / japonés / chino / 6 idiomas más** | La mayoría de los generadores de reglas de Claude Code son solo en inglés. ClaudeOS-Core escribe el conjunto completo en **10 idiomas** (`en/ko/ja/zh-CN/es/vi/hi/ru/fr/de`) con **validación estructural byte-idéntica** — el mismo veredicto de `claude-md-validator` independientemente del idioma de salida. |
|
|
324
|
+
| **Trabajando con un monorepo** (Turborepo, pnpm/yarn workspaces, Lerna) | Dominios backend + frontend analizados en una sola ejecución con prompts separados; `apps/*/` y `packages/*/` recorridos automáticamente; reglas por stack emitidas bajo `70.domains/{type}/`. |
|
|
325
|
+
| **Contribuyendo a OSS o experimentando** | La salida es gitignore-friendly — `claudeos-core/` es tu directorio de trabajo local, solo `CLAUDE.md` + `.claude/` necesitan enviarse. Resume-safe si se interrumpe; idempotente al re-ejecutar (tus ediciones manuales en las reglas sobreviven sin `--force`). |
|
|
389
326
|
|
|
390
|
-
|
|
327
|
+
**No es para ti si:** quieres un bundle preset de tipo "talla única" con agentes/skills/rules que funcione el primer día sin paso de escaneo (ver [docs/es/comparison.md](docs/es/comparison.md) para entender qué encaja en cada caso), tu proyecto aún no encaja en uno de los [stacks soportados](#supported-stacks), o solo necesitas un único `CLAUDE.md` (el `claude /init` integrado es suficiente — no hace falta instalar otra herramienta).
|
|
391
328
|
|
|
392
|
-
|
|
329
|
+
---
|
|
393
330
|
|
|
394
|
-
|
|
331
|
+
## ¿Cómo funciona?
|
|
395
332
|
|
|
396
|
-
|
|
333
|
+
ClaudeOS-Core invierte el flujo de trabajo habitual de Claude Code:
|
|
397
334
|
|
|
398
|
-
```bash
|
|
399
|
-
cat claudeos-core/generated/pass4-prompt.md \
|
|
400
|
-
| claude -p --dangerously-skip-permissions
|
|
401
335
|
```
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
> **Gap-fill v2.1.0:** Pass 4 también asegura que `claudeos-core/skills/00.shared/MANIFEST.md` exista. Si Pass 3c lo omitió (posible en proyectos skill-sparse porque las plantillas `pass3.md` de cada stack listan `MANIFEST.md` entre los targets de generación sin marcarlo como REQUIRED), el gap-fill crea un stub mínimo para que `.claude/rules/50.sync/02.skills-sync.md` (ruta v2.2.0 — el número de reglas de sync se redujo de 3 a 2, por lo que lo que era `03` ahora es `02`) siempre tenga un target de referencia válido. Idempotente: omite el paso si el archivo ya tiene contenido real (>20 caracteres).
|
|
406
|
-
|
|
407
|
-
> **Nota:** Si `claude -p` falla o `pass4-prompt.md` está ausente, el pipeline automatizado cae a un scaffold estático vía `lib/memory-scaffold.js` (con traducción por Claude cuando `--lang` no es inglés). El fallback estático solo se ejecuta dentro de `npx claudeos-core init` — el modo manual requiere que Pass 4 tenga éxito.
|
|
408
|
-
|
|
409
|
-
#### Paso 8: Ejecutar las herramientas de verificación
|
|
410
|
-
|
|
411
|
-
```bash
|
|
412
|
-
# Generar metadata (requerido antes de otras comprobaciones)
|
|
413
|
-
node claudeos-core-tools/manifest-generator/index.js
|
|
414
|
-
|
|
415
|
-
# Ejecutar todas las comprobaciones
|
|
416
|
-
node claudeos-core-tools/health-checker/index.js
|
|
417
|
-
|
|
418
|
-
# O ejecutar comprobaciones individuales:
|
|
419
|
-
node claudeos-core-tools/plan-validator/index.js --check # Consistencia Plan ↔ disco
|
|
420
|
-
node claudeos-core-tools/sync-checker/index.js # Archivos no registrados/huérfanos
|
|
421
|
-
node claudeos-core-tools/content-validator/index.js # Comprobaciones de calidad de archivos (incl. sección memory/ [9/9])
|
|
422
|
-
node claudeos-core-tools/pass-json-validator/index.js # Comprobaciones de JSON Pass 1–4 + marcador de finalización
|
|
336
|
+
Habitual: Tú describes el proyecto → Claude adivina tu stack → Claude escribe docs
|
|
337
|
+
Aquí: El código lee tu stack → El código pasa hechos confirmados a Claude → Claude escribe docs a partir de hechos
|
|
423
338
|
```
|
|
424
339
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
```bash
|
|
428
|
-
# Contar archivos generados
|
|
429
|
-
find .claude claudeos-core -type f | grep -v node_modules | grep -v '/generated/' | wc -l
|
|
430
|
-
|
|
431
|
-
# Revisar CLAUDE.md
|
|
432
|
-
head -30 CLAUDE.md
|
|
340
|
+
La pipeline corre en **tres etapas**, con código a ambos lados de la llamada al LLM:
|
|
433
341
|
|
|
434
|
-
|
|
435
|
-
cat claudeos-core/standard/00.core/01.project-overview.md | head -20
|
|
342
|
+
**1. Step A — Scanner (determinístico, sin LLM).** Un scanner Node.js recorre la raíz de tu proyecto, lee `package.json` / `build.gradle` / `pom.xml` / `pyproject.toml`, parsea archivos `.env*` (con redacción de variables sensibles para `PASSWORD/SECRET/TOKEN/JWT_SECRET/...`), clasifica tu patrón de arquitectura (los 5 patrones de Java A/B/C/D/E, Kotlin CQRS / multi-módulo, Next.js App vs. Pages Router, FSD, components-pattern), descubre dominios, y construye un allowlist explícito de cada ruta de archivo fuente que existe. Salida: `project-analysis.json` — la única fuente de verdad para lo que sigue.
|
|
436
343
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
344
|
+
**2. Step B — Pipeline de Claude de 4 pasadas (restringida por los hechos del Step A).**
|
|
345
|
+
- **Pass 1** lee archivos representativos por grupo de dominio y extrae ~50–100 convenciones por dominio — wrappers de respuesta, librerías de logging, manejo de errores, convenciones de naming, patrones de testing. Se ejecuta una vez por grupo de dominio (`máx 4 dominios, 40 archivos por grupo`) para que el contexto nunca se desborde.
|
|
346
|
+
- **Pass 2** fusiona todo el análisis por dominio en una imagen a nivel de proyecto y resuelve los desacuerdos eligiendo la convención dominante.
|
|
347
|
+
- **Pass 3** escribe `CLAUDE.md` + `.claude/rules/` + `claudeos-core/standard/` + skills + guides — dividido en stages (`3a` facts → `3b-core/3b-N` rules+standards → `3c-core/3c-N` skills+guides → `3d-aux` database+mcp-guide) para que el prompt de cada stage quepa en la ventana de contexto del LLM incluso cuando `pass2-merged.json` es grande. Sub-divide 3b/3c en batches de ≤15 dominios para proyectos con ≥16 dominios.
|
|
348
|
+
- **Pass 4** seedea la capa de memoria L4 (`decision-log.md`, `failure-patterns.md`, `compaction.md`, `auto-rule-update.md`) y agrega reglas universales de scaffold. Pass 4 tiene **prohibido modificar `CLAUDE.md`** — la Section 8 de Pass 3 es autoritativa.
|
|
440
349
|
|
|
441
|
-
|
|
350
|
+
**3. Step C — Verification (determinístico, sin LLM).** Cinco validators verifican la salida:
|
|
351
|
+
- `claude-md-validator` — 25 checks estructurales en `CLAUDE.md` (8 secciones, conteos H3/H4, unicidad de archivos de memoria, invariante T1 de heading canónico). Language-invariant: mismo veredicto independientemente de `--lang`.
|
|
352
|
+
- `content-validator` — 10 checks de contenido incluyendo verificación de path-claim (`STALE_PATH` atrapa referencias `src/...` fabricadas) y detección de drift en MANIFEST.
|
|
353
|
+
- `pass-json-validator` — well-formedness JSON de Pass 1/2/3/4 + conteo de secciones consciente del stack.
|
|
354
|
+
- `plan-validator` — consistencia plan ↔ disco (legacy, mayormente no-op desde v2.1.0).
|
|
355
|
+
- `sync-checker` — consistencia de registro disco ↔ `sync-map.json` a través de 7 directorios rastreados.
|
|
442
356
|
|
|
443
|
-
|
|
357
|
+
Tres niveles de severidad (`fail` / `warn` / `advisory`) para que las warnings nunca bloqueen CI por hallucinations del LLM que el usuario puede arreglar manualmente.
|
|
444
358
|
|
|
445
|
-
|
|
446
|
-
# En Claude Code — simplemente pregunta de forma natural:
|
|
447
|
-
"Crea un CRUD para el dominio order"
|
|
448
|
-
"Añade un API de autenticación de usuarios"
|
|
449
|
-
"Refactoriza este código para que coincida con los patrones del proyecto"
|
|
359
|
+
El invariante que ata todo: **Claude solo puede citar rutas que realmente existen en tu código**, porque el Step A le entrega un allowlist finito. Si el LLM aun así intenta inventar algo (raro pero ocurre con ciertos seeds), el Step C lo atrapa antes de que los docs se envíen.
|
|
450
360
|
|
|
451
|
-
|
|
452
|
-
```
|
|
361
|
+
Para detalles por pasada, resume basado en marker, el workaround de staged-rules para el block de path sensible `.claude/` de Claude Code, e internals de detección de stack, ver [docs/es/architecture.md](docs/es/architecture.md).
|
|
453
362
|
|
|
454
363
|
---
|
|
455
364
|
|
|
456
|
-
##
|
|
365
|
+
## Supported Stacks
|
|
457
366
|
|
|
458
|
-
|
|
459
|
-
npx claudeos-core init
|
|
460
|
-
│
|
|
461
|
-
├── [1] npm install ← Dependencias (~10s)
|
|
462
|
-
├── [2] Estructura de directorios ← Crear carpetas (~1s)
|
|
463
|
-
├── [3] plan-installer (Node.js) ← Escaneo del proyecto (~5s)
|
|
464
|
-
│ ├── Auto-detecta stack (multi-stack aware)
|
|
465
|
-
│ ├── Extrae la lista de dominios (tagged: backend/frontend)
|
|
466
|
-
│ ├── Divide en grupos de dominios (por tipo)
|
|
467
|
-
│ ├── Construye pass3-context.json (resumen slim, v2.1.0)
|
|
468
|
-
│ └── Selecciona prompts específicos del stack (por tipo)
|
|
469
|
-
│
|
|
470
|
-
├── [4] Pass 1 × N (claude -p) ← Análisis profundo del código (~2-8min)
|
|
471
|
-
│ ├── ⚙️ Grupos backend → prompt específico de backend
|
|
472
|
-
│ └── 🎨 Grupos frontend → prompt específico de frontend
|
|
473
|
-
│
|
|
474
|
-
├── [5] Pass 2 × 1 (claude -p) ← Merge del análisis (~1min)
|
|
475
|
-
│ └── Consolida TODOS los resultados de Pass 1 en pass2-merged.json
|
|
476
|
-
│
|
|
477
|
-
├── [6] Pass 3 (modo split, v2.1.0) ← Genera todo
|
|
478
|
-
│ │
|
|
479
|
-
│ ├── 3a × 1 (claude -p) ← Extracción de hechos (~5-10min)
|
|
480
|
-
│ │ └── Lee pass2-merged.json una vez → pass3a-facts.md
|
|
481
|
-
│ │
|
|
482
|
-
│ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + standard/rules comunes
|
|
483
|
-
│ ├── 3b-1..N × N (claude -p) ← Standards/reglas de dominio (≤15 dominios/lote)
|
|
484
|
-
│ │
|
|
485
|
-
│ ├── 3c-core × 1 (claude -p) ← Guides + skills compartidos + MANIFEST.md
|
|
486
|
-
│ ├── 3c-1..N × N (claude -p) ← Sub-skills de dominio (≤15 dominios/lote)
|
|
487
|
-
│ │
|
|
488
|
-
│ └── 3d-aux × 1 (claude -p) ← Stubs de database/ + mcp-guide/
|
|
489
|
-
│
|
|
490
|
-
├── [7] Pass 4 × 1 (claude -p) ← Memory scaffolding (~30s-5min)
|
|
491
|
-
│ ├── Seedea memory/ (decision-log, failure-patterns, …)
|
|
492
|
-
│ ├── Genera reglas 60.memory/
|
|
493
|
-
│ ├── Añade la sección "Memory (L4)" al CLAUDE.md
|
|
494
|
-
│ └── Gap-fill: asegura que skills/00.shared/MANIFEST.md exista (v2.1.0)
|
|
495
|
-
│
|
|
496
|
-
└── [8] Verificación ← Auto-ejecuta el health checker
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### ¿Por qué 4 Passes?
|
|
500
|
-
|
|
501
|
-
**Pass 1** es el único pass que lee tu código fuente. Selecciona archivos representativos por dominio y extrae patrones de 55–95 categorías de análisis (según el stack). Para proyectos grandes, Pass 1 se ejecuta varias veces — una por cada grupo de dominios. En proyectos multi-stack (por ejemplo, Java backend + React frontend), los dominios backend y frontend usan **prompts de análisis diferentes** adaptados a cada stack.
|
|
367
|
+
12 stacks, auto-detectados desde los archivos de tu proyecto:
|
|
502
368
|
|
|
503
|
-
**
|
|
369
|
+
**Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
|
|
504
370
|
|
|
505
|
-
**
|
|
371
|
+
**Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
|
|
506
372
|
|
|
507
|
-
|
|
373
|
+
Los proyectos multi-stack (p. ej., Spring Boot backend + Next.js frontend) funcionan sin más.
|
|
508
374
|
|
|
509
|
-
|
|
510
|
-
- **Rule B** — Escritura idempotente de archivos (omitir si el target existe con contenido real), haciendo Pass 3 seguro de re-ejecutar tras una interrupción.
|
|
511
|
-
- **Rule C** — Consistencia entre archivos aplicada a través de la tabla de hechos como única fuente de verdad.
|
|
512
|
-
- **Rule D** — Concisión de salida: una línea (`[WRITE]`/`[SKIP]`) entre escrituras de archivo, sin restatear la tabla de hechos, sin echoar el contenido del archivo.
|
|
513
|
-
- **Rule E** — Comprobación idempotente por lote: un único `Glob` al inicio de PHASE 2 en vez de llamadas `Read` por cada target.
|
|
514
|
-
|
|
515
|
-
En **v2.2.0**, Pass 3 también incrusta en línea un scaffold CLAUDE.md determinista (`pass-prompts/templates/common/claude-md-scaffold.md`) en el prompt. Esto fija los títulos y el orden de las 8 secciones de nivel superior para que el `CLAUDE.md` generado no se desvíe entre proyectos, mientras que el contenido de cada sección sigue adaptándose a cada proyecto. El nuevo parser `.env` del stack-detector (`lib/env-parser.js`) suministra `stack.envInfo` al prompt para que las filas de port/host/API target coincidan con lo que el proyecto realmente declara en lugar de los valores por defecto del framework.
|
|
516
|
-
|
|
517
|
-
**Pass 4** scaffoldea la capa Memory L4: archivos persistentes de conocimiento de equipo (decision-log, failure-patterns, compaction policy, auto-rule-update) más las reglas `60.memory/` que indican a sesiones futuras cuándo y cómo leer/escribir esos archivos. La capa de memory es lo que permite que Claude Code acumule lecciones entre sesiones en lugar de redescubrirlas cada vez. Cuando `--lang` no es inglés, el contenido estático de fallback se traduce vía Claude antes de ser escrito. v2.1.0 añade un gap-fill para `skills/00.shared/MANIFEST.md` por si Pass 3c lo omitió.
|
|
375
|
+
Para reglas de detección y lo que cada scanner extrae, ver [docs/es/stacks.md](docs/es/stacks.md).
|
|
518
376
|
|
|
519
377
|
---
|
|
520
378
|
|
|
521
|
-
##
|
|
379
|
+
## Flujo diario
|
|
522
380
|
|
|
523
|
-
|
|
524
|
-
your-project/
|
|
525
|
-
│
|
|
526
|
-
├── CLAUDE.md ← Punto de entrada de Claude Code (estructura determinista de 8 secciones, v2.2.0)
|
|
527
|
-
│
|
|
528
|
-
├── .claude/
|
|
529
|
-
│ └── rules/ ← Reglas disparadas por glob
|
|
530
|
-
│ ├── 00.core/
|
|
531
|
-
│ ├── 10.backend/
|
|
532
|
-
│ ├── 20.frontend/
|
|
533
|
-
│ ├── 30.security-db/
|
|
534
|
-
│ ├── 40.infra/
|
|
535
|
-
│ ├── 50.sync/ ← Reglas de recordatorio de sync
|
|
536
|
-
│ └── 60.memory/ ← Reglas de scope on-demand de memory L4 (v2.0.0)
|
|
537
|
-
│
|
|
538
|
-
├── claudeos-core/ ← Directorio principal de salida
|
|
539
|
-
│ ├── generated/ ← JSON de análisis + prompts dinámicos + marcadores de Pass (añadir a gitignore)
|
|
540
|
-
│ │ ├── project-analysis.json ← Info del stack (multi-stack aware)
|
|
541
|
-
│ │ ├── domain-groups.json ← Grupos con type: backend/frontend
|
|
542
|
-
│ │ ├── pass1-backend-prompt.md ← Prompt de análisis backend
|
|
543
|
-
│ │ ├── pass1-frontend-prompt.md ← Prompt de análisis frontend (si detectado)
|
|
544
|
-
│ │ ├── pass2-prompt.md ← Prompt de merge
|
|
545
|
-
│ │ ├── pass2-merged.json ← Salida de Pass 2 (consumido solo por Pass 3a)
|
|
546
|
-
│ │ ├── pass3-context.json ← Resumen slim (< 5 KB) para Pass 3 (v2.1.0)
|
|
547
|
-
│ │ ├── pass3-prompt.md ← Plantilla de prompt de Pass 3 (bloque Phase 1 anteanteado)
|
|
548
|
-
│ │ ├── pass3a-facts.md ← Fact sheet escrito por Pass 3a, leído por 3b/3c/3d (v2.1.0)
|
|
549
|
-
│ │ ├── pass4-prompt.md ← Prompt de scaffolding de memory (v2.0.0)
|
|
550
|
-
│ │ ├── pass3-complete.json ← Marcador de finalización de Pass 3 (modo split: incluye groupsCompleted, v2.1.0)
|
|
551
|
-
│ │ ├── pass4-memory.json ← Marcador de finalización de Pass 4 (salta en resume)
|
|
552
|
-
│ │ ├── rule-manifest.json ← Índice de archivos para las herramientas de verificación
|
|
553
|
-
│ │ ├── sync-map.json ← Mapeo Plan ↔ disco (vacío en v2.1.0; se conserva por compat con sync-checker)
|
|
554
|
-
│ │ ├── stale-report.json ← Resultados consolidados de verificación
|
|
555
|
-
│ │ ├── .i18n-cache-<lang>.json ← Caché de traducción (no inglés `--lang`)
|
|
556
|
-
│ │ └── .staged-rules/ ← Dir de staging transitorio para escrituras de `.claude/rules/` (auto-movido + limpiado)
|
|
557
|
-
│ ├── standard/ ← Estándares de codificación (15-19 archivos + por dominio en 60.domains/)
|
|
558
|
-
│ │ ├── 00.core/ ← Visión general, arquitectura, naming
|
|
559
|
-
│ │ ├── 10.backend-api/ ← Patrones de API (específicos del stack)
|
|
560
|
-
│ │ ├── 20.frontend-ui/ ← Patrones frontend (si detectado)
|
|
561
|
-
│ │ ├── 30.security-db/ ← Seguridad, esquema BD, utilidades
|
|
562
|
-
│ │ ├── 40.infra/ ← Config, logging, CI/CD
|
|
563
|
-
│ │ ├── 50.verification/ ← Build verification, testing
|
|
564
|
-
│ │ ├── 60.domains/ ← Standards por dominio (escritos por Pass 3b-N, v2.1.0)
|
|
565
|
-
│ │ └── 90.optional/ ← Convenciones opcionales (extras específicos del stack)
|
|
566
|
-
│ ├── skills/ ← Skills de scaffolding CRUD/page
|
|
567
|
-
│ │ └── 00.shared/MANIFEST.md ← Única fuente de verdad para los skills registrados
|
|
568
|
-
│ ├── guide/ ← Onboarding, FAQ, troubleshooting (9 archivos)
|
|
569
|
-
│ ├── database/ ← Esquema de BD, guía de migración
|
|
570
|
-
│ ├── mcp-guide/ ← Guía de integración de servidor MCP
|
|
571
|
-
│ └── memory/ ← L4: conocimiento de equipo (4 archivos) — commitea estos
|
|
572
|
-
│ ├── decision-log.md ← El "porqué" detrás de las decisiones de diseño
|
|
573
|
-
│ ├── failure-patterns.md ← Errores recurrentes y sus fixes (auto-scored — `npx claudeos-core memory score`)
|
|
574
|
-
│ ├── compaction.md ← Estrategia de compaction de 4 etapas (ejecuta `npx claudeos-core memory compact`)
|
|
575
|
-
│ └── auto-rule-update.md ← Propuestas de mejora de reglas (`npx claudeos-core memory propose-rules`)
|
|
576
|
-
│
|
|
577
|
-
└── claudeos-core-tools/ ← Este toolkit (no modificar)
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
Cada archivo standard incluye ✅ ejemplos correctos, ❌ ejemplos incorrectos y una tabla resumen de reglas — todo derivado de los patrones reales de tu código, no de plantillas genéricas.
|
|
381
|
+
Tres comandos cubren ~95% del uso:
|
|
581
382
|
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
**Sí commitear** (conocimiento de equipo — pensado para compartir):
|
|
587
|
-
- `CLAUDE.md` — punto de entrada de Claude Code
|
|
588
|
-
- `.claude/rules/**` — reglas auto-cargadas
|
|
589
|
-
- `claudeos-core/standard/**`, `skills/**`, `guide/**`, `database/**`, `mcp-guide/**`, `plan/**` — documentación generada
|
|
590
|
-
- `claudeos-core/memory/**` — historial de decisiones, patrones de fallo, propuestas de reglas
|
|
383
|
+
```bash
|
|
384
|
+
# Primera vez en un proyecto
|
|
385
|
+
npx claudeos-core init
|
|
591
386
|
|
|
592
|
-
|
|
387
|
+
# Después de editar manualmente standards o rules
|
|
388
|
+
npx claudeos-core lint
|
|
593
389
|
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
claudeos-core/generated/
|
|
390
|
+
# Health check (ejecuta antes de commits, o en CI)
|
|
391
|
+
npx claudeos-core health
|
|
597
392
|
```
|
|
598
393
|
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
---
|
|
602
|
-
|
|
603
|
-
## Auto-escalado por Tamaño del Proyecto
|
|
604
|
-
|
|
605
|
-
El modo split de Pass 3 escala el número de etapas en función del número de dominios. La sub-división por lotes entra en acción a partir de 16 dominios para mantener cada etapa por debajo de ~50 archivos de salida, que es el rango empíricamente seguro de `claude -p` antes de que empiece el overflow por acumulación de salida.
|
|
606
|
-
|
|
607
|
-
| Tamaño del proyecto | Dominios | Etapas de Pass 3 | Total `claude -p` | Tiempo Est. |
|
|
608
|
-
|---|---|---|---|---|
|
|
609
|
-
| Pequeño | 1–4 | 4 (`3a`, `3b-core`, `3c-core`, `3d-aux`) | 7 (Pass 1 + 2 + 4 etapas de Pass 3 + Pass 4) | ~10–15 min |
|
|
610
|
-
| Medio | 5–15 | 4 | 8–9 | ~25–45 min |
|
|
611
|
-
| Grande | 16–30 | **8** (3b, 3c cada uno dividido en 2 lotes) | 11–12 | **~60–105 min** |
|
|
612
|
-
| X-Large | 31–45 | 10 | 13–14 | ~100–150 min |
|
|
613
|
-
| XX-Large | 46–60 | 12 | 15–16 | ~150–200 min |
|
|
614
|
-
| XXX-Large | 61+ | 14+ | 17+ | 200 min+ |
|
|
615
|
-
|
|
616
|
-
Fórmula de conteo de etapas (cuando hay lotes): `1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`, donde `N = ceil(totalDomains / 15)`.
|
|
617
|
-
|
|
618
|
-
Pass 4 (memory scaffolding) añade ~30 segundos a 5 minutos encima según si se ejecuta la generación dirigida por Claude o el fallback estático. Para proyectos multi-stack (ej: Java + React), los dominios backend y frontend se cuentan juntos. Un proyecto con 6 dominios backend + 4 frontend = 10 en total = tier Medio.
|
|
619
|
-
|
|
620
|
-
---
|
|
621
|
-
|
|
622
|
-
## Herramientas de Verificación
|
|
623
|
-
|
|
624
|
-
ClaudeOS-Core incluye 5 herramientas de verificación integradas que se ejecutan automáticamente después de la generación:
|
|
394
|
+
Dos más para mantenimiento del memory layer:
|
|
625
395
|
|
|
626
396
|
```bash
|
|
627
|
-
#
|
|
628
|
-
npx claudeos-core
|
|
629
|
-
|
|
630
|
-
# Comandos individuales
|
|
631
|
-
npx claudeos-core validate # Comparación Plan ↔ disco
|
|
632
|
-
npx claudeos-core refresh # Sync Disco → Plan
|
|
633
|
-
npx claudeos-core restore # Restore Plan → Disco
|
|
397
|
+
# Compactar el log de failure-patterns (ejecuta periódicamente)
|
|
398
|
+
npx claudeos-core memory compact
|
|
634
399
|
|
|
635
|
-
#
|
|
636
|
-
|
|
637
|
-
node claudeos-core-tools/manifest-generator/index.js
|
|
638
|
-
node claudeos-core-tools/plan-validator/index.js --check
|
|
639
|
-
node claudeos-core-tools/sync-checker/index.js
|
|
400
|
+
# Promover patrones de fallos frecuentes a reglas propuestas
|
|
401
|
+
npx claudeos-core memory propose-rules
|
|
640
402
|
```
|
|
641
403
|
|
|
642
|
-
|
|
643
|
-
|---|---|
|
|
644
|
-
| **manifest-generator** | Construye el JSON de metadata (`rule-manifest.json`, `sync-map.json`, inicializa `stale-report.json`); indexa 7 directorios incluyendo `memory/` (`totalMemory` en summary). v2.1.0: `plan-manifest.json` ya no se genera dado que los master plans fueron eliminados. |
|
|
645
|
-
| **plan-validator** | Valida los bloques `<file>` del master plan contra el disco para proyectos que aún tengan `claudeos-core/plan/` (caso de upgrade legacy). v2.1.0: omite la emisión de `plan-sync-status.json` cuando `plan/` está ausente o vacío — `stale-report.json` sigue registrando un no-op aprobado. |
|
|
646
|
-
| **sync-checker** | Detecta archivos no registrados (en disco pero no en el plan) y entradas huérfanas — cubre 7 directorios (añadido `memory/` en v2.0.0). Sale limpiamente cuando `sync-map.json` no tiene mapeos (estado por defecto de v2.1.0). |
|
|
647
|
-
| **content-validator** | Comprobación de calidad en 9 secciones — archivos vacíos, ejemplos ✅/❌ ausentes, secciones requeridas, más integridad del scaffold de memory L4 (fechas de encabezados de decision-log, campos requeridos de failure-pattern, parsing fence-aware) |
|
|
648
|
-
| **pass-json-validator** | Valida la estructura del JSON de Pass 1–4 más los marcadores de finalización `pass3-complete.json` (forma de modo split, v2.1.0) y `pass4-memory.json` |
|
|
404
|
+
Para todas las opciones de cada comando, ver [docs/es/commands.md](docs/es/commands.md).
|
|
649
405
|
|
|
650
406
|
---
|
|
651
407
|
|
|
652
|
-
##
|
|
653
|
-
|
|
654
|
-
ClaudeOS-Core genera documentación que Claude Code realmente lee — así es cómo:
|
|
655
|
-
|
|
656
|
-
### Qué lee Claude Code automáticamente
|
|
657
|
-
|
|
658
|
-
| Archivo | Cuándo | Garantizado |
|
|
659
|
-
|---|---|---|
|
|
660
|
-
| `CLAUDE.md` | En el inicio de cada conversación | Siempre |
|
|
661
|
-
| `.claude/rules/00.core/*` | Cuando se edita cualquier archivo (`paths: ["**/*"]`) | Siempre |
|
|
662
|
-
| `.claude/rules/10.backend/*` | Cuando se edita cualquier archivo (`paths: ["**/*"]`) | Siempre |
|
|
663
|
-
| `.claude/rules/20.frontend/*` | Cuando se edita cualquier archivo frontend (limitado a rutas de component/page/style) | Condicional |
|
|
664
|
-
| `.claude/rules/30.security-db/*` | Cuando se edita cualquier archivo (`paths: ["**/*"]`) | Siempre |
|
|
665
|
-
| `.claude/rules/40.infra/*` | Solo al editar archivos de config/infra (rutas limitadas) | Condicional |
|
|
666
|
-
| `.claude/rules/50.sync/*` | Solo al editar archivos de claudeos-core (rutas limitadas) | Condicional |
|
|
667
|
-
| `.claude/rules/60.memory/*` | Cuando se edita `claudeos-core/memory/*` (limitado a rutas de memory) — indica **cómo** leer/escribir la capa de memory on-demand | Condicional (v2.0.0) |
|
|
668
|
-
|
|
669
|
-
### Qué lee Claude Code on-demand a través de referencias de reglas
|
|
670
|
-
|
|
671
|
-
Cada archivo de regla enlaza a su standard correspondiente mediante una sección `## Reference`. Claude lee solo el standard relevante para la tarea actual:
|
|
408
|
+
## Qué hace diferente a esto
|
|
672
409
|
|
|
673
|
-
|
|
674
|
-
- `claudeos-core/database/**` — esquema BD (para queries, mappers, migrations)
|
|
675
|
-
- `claudeos-core/memory/**` (v2.0.0) — capa de conocimiento de equipo L4; **no** se auto-carga (sería demasiado ruidoso en cada conversación). En su lugar, las reglas `60.memory/*` indican a Claude *cuándo* leer estos archivos: al inicio de sesión (skim del `decision-log.md` reciente + `failure-patterns.md` de alta importancia), y append-on-demand al tomar decisiones o al encontrar errores recurrentes.
|
|
410
|
+
La mayoría de las herramientas de documentación de Claude Code generan a partir de una descripción (tú le dices a la herramienta, la herramienta le dice a Claude). ClaudeOS-Core genera a partir de tu código fuente real (la herramienta lee, la herramienta le dice a Claude lo que está confirmado, Claude escribe solo lo que está confirmado).
|
|
676
411
|
|
|
677
|
-
|
|
412
|
+
Tres consecuencias concretas:
|
|
678
413
|
|
|
679
|
-
|
|
414
|
+
1. **Detección determinística del stack.** Mismo proyecto + mismo código = misma salida. Nada de "esta vez Claude tiró el dado distinto".
|
|
415
|
+
2. **Sin rutas inventadas.** El prompt de Pass 3 lista explícitamente cada ruta de origen permitida; Claude no puede citar rutas que no existen.
|
|
416
|
+
3. **Multi-stack consciente.** Los dominios backend y frontend usan distintos prompts de análisis en la misma ejecución.
|
|
680
417
|
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
| Carpeta | Por qué se excluye |
|
|
684
|
-
|---|---|
|
|
685
|
-
| `claudeos-core/plan/` | Backups de Master Plan de proyectos legacy (v2.0.x y anteriores). No se genera en v2.1.0. Si está presente, Claude Code no la carga automáticamente — read-on-demand únicamente. |
|
|
686
|
-
| `claudeos-core/generated/` | JSON de metadata de build, prompts, marcadores de Pass, caché de traducción, `.staged-rules/`. No es para codificar. |
|
|
687
|
-
| `claudeos-core/guide/` | Guías de onboarding para humanos. |
|
|
688
|
-
| `claudeos-core/mcp-guide/` | Docs del servidor MCP. No es para codificar. |
|
|
689
|
-
| `claudeos-core/memory/` (auto-load) | **Auto-load deshabilitado** por diseño — inflaría el contexto en cada conversación. En su lugar, se lee on-demand vía las reglas `60.memory/*` (ej: escaneo al inicio de sesión de `failure-patterns.md`). Commitea siempre estos archivos. |
|
|
418
|
+
Para una comparación lado a lado de scope con otras herramientas, ver [docs/es/comparison.md](docs/es/comparison.md). La comparación trata sobre **qué hace cada herramienta**, no **cuál es mejor** — la mayoría son complementarias.
|
|
690
419
|
|
|
691
420
|
---
|
|
692
421
|
|
|
693
|
-
##
|
|
422
|
+
## Verificación (post-generación)
|
|
694
423
|
|
|
695
|
-
|
|
424
|
+
Después de que Claude escribe los docs, el código los verifica. Cinco validators separados:
|
|
696
425
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
426
|
+
| Validator | Qué comprueba | Lo ejecuta |
|
|
427
|
+
|---|---|---|
|
|
428
|
+
| `claude-md-validator` | Invariantes estructurales de CLAUDE.md (8 secciones, language-invariant) | `claudeos-core lint` |
|
|
429
|
+
| `content-validator` | Las rutas declaradas existen realmente; consistencia del manifest | `health` (advisory) |
|
|
430
|
+
| `pass-json-validator` | Las salidas Pass 1 / 2 / 3 / 4 son JSON bien formado | `health` (warn) |
|
|
431
|
+
| `plan-validator` | El plan guardado coincide con lo que hay en disco | `health` (fail-on-error) |
|
|
432
|
+
| `sync-checker` | Los archivos en disco coinciden con los registros de `sync-map.json` (detección de huérfanos/no registrados) | `health` (fail-on-error) |
|
|
703
433
|
|
|
704
|
-
|
|
434
|
+
Un `health-checker` orquesta los cuatro validators de runtime con severidad de tres niveles (fail / warn / advisory) y termina con el código adecuado para CI. `claude-md-validator` se ejecuta por separado vía el comando `lint` ya que el drift estructural es una señal de re-init, no un soft warning. Ejecuta cuando quieras:
|
|
705
435
|
|
|
706
436
|
```bash
|
|
707
|
-
# Después de editar archivos de standards o reglas:
|
|
708
|
-
npx claudeos-core refresh
|
|
709
|
-
|
|
710
|
-
# Verifica que todo es consistente
|
|
711
437
|
npx claudeos-core health
|
|
712
438
|
```
|
|
713
439
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
```bash
|
|
717
|
-
# Recomendación v2.1.0: usa git para restaurar (dado que los master plans ya no se
|
|
718
|
-
# generan). Commitea tus docs generados regularmente para poder revertir archivos
|
|
719
|
-
# concretos sin regenerar:
|
|
720
|
-
git checkout HEAD -- .claude/rules/ claudeos-core/
|
|
721
|
-
|
|
722
|
-
# Legacy (proyectos v2.0.x con claudeos-core/plan/ aún presente):
|
|
723
|
-
npx claudeos-core restore
|
|
724
|
-
```
|
|
725
|
-
|
|
726
|
-
### Mantenimiento de la capa Memory (v2.0.0)
|
|
727
|
-
|
|
728
|
-
La capa Memory L4 (`claudeos-core/memory/`) acumula conocimiento de equipo entre sesiones. Tres subcomandos de CLI la mantienen en buen estado:
|
|
729
|
-
|
|
730
|
-
```bash
|
|
731
|
-
# Compact: aplica la política de compaction de 4 etapas (ejecutar periódicamente — ej: mensualmente)
|
|
732
|
-
npx claudeos-core memory compact
|
|
733
|
-
# Etapa 1: resume entradas antiguas (>30 días, cuerpo → una línea)
|
|
734
|
-
# Etapa 2: combina encabezados duplicados (frecuencia sumada, se mantiene el fix más reciente)
|
|
735
|
-
# Etapa 3: descarta baja-importancia + antiguas (importancia <3 Y lastSeen >60 días)
|
|
736
|
-
# Etapa 4: aplica tope de 400 líneas por archivo (se descarta primero lo más antiguo y de menor importancia)
|
|
737
|
-
|
|
738
|
-
# Score: re-rankea las entradas de failure-patterns.md por importancia
|
|
739
|
-
npx claudeos-core memory score
|
|
740
|
-
# importance = round(frequency × 1.5 + recency × 5), cap 10
|
|
741
|
-
# Ejecutar después de añadir varios nuevos patrones de fallo
|
|
742
|
-
|
|
743
|
-
# Propose-rules: propone adiciones de reglas a partir de fallos recurrentes
|
|
744
|
-
npx claudeos-core memory propose-rules
|
|
745
|
-
# Lee entradas de failure-patterns.md con frequency ≥ 3
|
|
746
|
-
# Calcula confianza (sigmoid sobre evidencia ponderada × multiplicador de anchor)
|
|
747
|
-
# Escribe propuestas en memory/auto-rule-update.md (NO se aplican auto)
|
|
748
|
-
# Confidence ≥ 0.70 merece revisión seria; acepta → edita regla + registra decisión
|
|
749
|
-
|
|
750
|
-
# v2.1.0: `memory --help` ahora enruta a la ayuda del subcomando (antes mostraba top-level)
|
|
751
|
-
npx claudeos-core memory --help
|
|
752
|
-
```
|
|
753
|
-
|
|
754
|
-
> **Fixes v2.1.0:** `memory score` ya no deja líneas `importance` duplicadas tras la primera ejecución (antes la línea auto-scored se añadía arriba mientras la original plana se dejaba debajo). El marcador de resumen de la Etapa 1 de `memory compact` ahora es un elemento de lista markdown propio (`- _Summarized on ..._`) para que se renderice limpiamente y se vuelva a parsear correctamente en las siguientes compactaciones.
|
|
755
|
-
|
|
756
|
-
Cuándo escribir en memory (Claude lo hace on-demand, pero también puedes editar manualmente):
|
|
757
|
-
- **`decision-log.md`** — añade una nueva entrada cada vez que elijas entre patrones en competencia, selecciones una biblioteca, definas una convención de equipo o decidas NO hacer algo. Append-only; nunca edites entradas históricas.
|
|
758
|
-
- **`failure-patterns.md`** — añade en la **segunda ocurrencia** de un error recurrente o de una root cause no obvia. Los errores de primera vez no necesitan una entrada.
|
|
759
|
-
- `compaction.md` y `auto-rule-update.md` — generados/gestionados por los subcomandos de CLI indicados arriba; no los edites a mano.
|
|
760
|
-
|
|
761
|
-
### Integración CI/CD
|
|
762
|
-
|
|
763
|
-
```yaml
|
|
764
|
-
# Ejemplo de GitHub Actions
|
|
765
|
-
- run: npx claudeos-core validate
|
|
766
|
-
# Exit code 1 bloquea el PR
|
|
767
|
-
|
|
768
|
-
# Opcional: housekeeping mensual de memory (workflow cron separado)
|
|
769
|
-
- run: npx claudeos-core memory compact
|
|
770
|
-
- run: npx claudeos-core memory score
|
|
771
|
-
```
|
|
440
|
+
Para los checks de cada validator en detalle, ver [docs/es/verification.md](docs/es/verification.md).
|
|
772
441
|
|
|
773
442
|
---
|
|
774
443
|
|
|
775
|
-
##
|
|
776
|
-
|
|
777
|
-
### vs otras herramientas de Claude Code
|
|
778
|
-
|
|
779
|
-
| | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
|
|
780
|
-
|---|---|---|---|---|---|
|
|
781
|
-
| **Enfoque** | Código analiza primero, luego el LLM genera | Presets de configuración preconstruidos | El LLM diseña equipos de agentes | El LLM genera specs | El LLM escribe CLAUDE.md |
|
|
782
|
-
| **Lee tu código fuente** | ✅ Análisis estático determinístico | ❌ | ❌ | ❌ (lee el LLM) | ❌ (lee el LLM) |
|
|
783
|
-
| **Detección de stack** | El código confirma (ORM, BD, build tool, pkg manager) | N/A (stack-agnostic) | El LLM adivina | El LLM adivina | El LLM adivina |
|
|
784
|
-
| **Detección de dominios** | El código confirma (Java 5 patrones, Kotlin CQRS, Next.js FSD) | N/A | El LLM adivina | N/A | N/A |
|
|
785
|
-
| **Mismo proyecto → Mismo resultado** | ✅ Análisis determinístico | ✅ (archivos estáticos) | ❌ (el LLM varía) | ❌ (el LLM varía) | ❌ (el LLM varía) |
|
|
786
|
-
| **Gestión de proyectos grandes** | División en grupos de dominios (4 dominios / 40 archivos por grupo) | N/A | Sin división | Sin división | Límite de ventana de contexto |
|
|
787
|
-
| **Salida** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans (40-50+ archivos) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 docs de spec | CLAUDE.md (1 archivo) |
|
|
788
|
-
| **Ubicación de salida** | `.claude/rules/` (auto-cargado por Claude Code) | `.claude/` variados | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
|
|
789
|
-
| **Verificación post-generación** | ✅ 5 validadores automáticos | ❌ | ❌ | ❌ | ❌ |
|
|
790
|
-
| **Salida multi-idioma** | ✅ 10 idiomas | ❌ | ❌ | ❌ | ❌ |
|
|
791
|
-
| **Multi-stack** | ✅ Backend + Frontend simultáneo | ❌ Stack-agnostic | ❌ | ❌ | Parcial |
|
|
792
|
-
| **Capa de memory persistente** | ✅ L4 — decision log + failure patterns + propuestas de reglas auto-scored (v2.0.0) | ❌ | ❌ | ❌ | ❌ |
|
|
793
|
-
| **Orquestación de agentes** | ❌ | ✅ 28 agentes | ✅ 6 patrones | ❌ | ❌ |
|
|
794
|
-
|
|
795
|
-
### La diferencia clave en una frase
|
|
796
|
-
|
|
797
|
-
**Otras herramientas dan a Claude "instrucciones generalmente buenas". ClaudeOS-Core da a Claude "instrucciones extraídas de tu código real".**
|
|
444
|
+
## Memory Layer (opcional, para proyectos de larga duración)
|
|
798
445
|
|
|
799
|
-
|
|
800
|
-
deja de usar `success()` cuando tu codebase usa `ok()`,
|
|
801
|
-
y deja de crear directorios `user/controller/` cuando tu proyecto usa `controller/user/`.
|
|
446
|
+
Después de v2.0, ClaudeOS-Core escribe una carpeta `claudeos-core/memory/` con cuatro archivos:
|
|
802
447
|
|
|
803
|
-
|
|
448
|
+
- `decision-log.md` — append-only "por qué elegimos X sobre Y"
|
|
449
|
+
- `failure-patterns.md` — errores recurrentes con puntuaciones de frequency/importance
|
|
450
|
+
- `compaction.md` — cómo se auto-compacta la memoria con el tiempo
|
|
451
|
+
- `auto-rule-update.md` — patrones que deberían convertirse en nuevas reglas
|
|
804
452
|
|
|
805
|
-
|
|
806
|
-
Otras herramientas se centran en **orquestación y workflows de agentes**.
|
|
453
|
+
Puedes ejecutar `npx claudeos-core memory propose-rules` para pedirle a Claude que mire los patrones de fallos recientes y sugiera nuevas reglas para añadir.
|
|
807
454
|
|
|
808
|
-
|
|
455
|
+
Para el modelo de memoria y el ciclo de vida, ver [docs/es/memory-layer.md](docs/es/memory-layer.md).
|
|
809
456
|
|
|
810
457
|
---
|
|
811
458
|
|
|
812
459
|
## FAQ
|
|
813
460
|
|
|
814
|
-
**P: ¿
|
|
815
|
-
No.
|
|
461
|
+
**P: ¿Necesito una API key de Claude?**
|
|
462
|
+
R: No. ClaudeOS-Core usa tu instalación existente de Claude Code — canaliza prompts a `claude -p` en tu máquina. No necesitas cuentas extra.
|
|
816
463
|
|
|
817
|
-
**P: ¿
|
|
818
|
-
|
|
464
|
+
**P: ¿Esto sobrescribirá mi CLAUDE.md o `.claude/rules/` existente?**
|
|
465
|
+
R: Primera ejecución en un proyecto nuevo: los crea. Re-ejecutar sin `--force` preserva tus ediciones — los marcadores de pase de la ejecución anterior se detectan y los pases se omiten. Re-ejecutar con `--force` borra y regenera todo (tus ediciones se pierden — eso es lo que `--force` significa). Ver [docs/es/safety.md](docs/es/safety.md).
|
|
819
466
|
|
|
820
|
-
**P:
|
|
821
|
-
|
|
822
|
-
**P: ¿Debería commitear los archivos generados a Git?**
|
|
823
|
-
Sí, recomendado. Tu equipo puede compartir los mismos standards de Claude Code. Considera añadir `claudeos-core/generated/` a `.gitignore` (el JSON de análisis es regenerable).
|
|
467
|
+
**P: Mi stack no está soportado. ¿Puedo añadir uno?**
|
|
468
|
+
R: Sí. Los stacks nuevos necesitan ~3 plantillas de prompt + un domain scanner. Ver [CONTRIBUTING.md](CONTRIBUTING.md) para la guía de 8 pasos.
|
|
824
469
|
|
|
825
|
-
**P: ¿
|
|
826
|
-
|
|
470
|
+
**P: ¿Cómo genero docs en español (u otro idioma)?**
|
|
471
|
+
R: `npx claudeos-core init --lang es`. 10 idiomas soportados: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
|
|
827
472
|
|
|
828
|
-
**P: ¿Funciona con monorepos
|
|
829
|
-
|
|
473
|
+
**P: ¿Funciona con monorepos?**
|
|
474
|
+
R: Sí — Turborepo (`turbo.json`), pnpm workspaces (`pnpm-workspace.yaml`), Lerna (`lerna.json`) y npm/yarn workspaces (`package.json#workspaces`) son detectados por el stack-detector. Cada app obtiene su propio análisis. Otras estructuras de monorepo (p. ej., NX) no se detectan específicamente, pero los patrones genéricos `apps/*/` y `packages/*/` los siguen detectando los scanners por stack.
|
|
830
475
|
|
|
831
|
-
**P: ¿Qué pasa
|
|
832
|
-
|
|
476
|
+
**P: ¿Qué pasa si Claude Code genera reglas con las que no estoy de acuerdo?**
|
|
477
|
+
R: Edítalas directamente. Luego ejecuta `npx claudeos-core lint` para verificar que CLAUDE.md sigue siendo estructuralmente válido. Tus ediciones se preservan en ejecuciones posteriores de `init` (sin `--force`) — el mecanismo de resume omite los pases cuyos marcadores existen.
|
|
833
478
|
|
|
834
|
-
**P: ¿
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
**P: ¿Qué pasa con proyectos Vue / Nuxt?**
|
|
838
|
-
Vue/Nuxt usa una plantilla dedicada `vue-nuxt` que cubre Composition API, `<script setup>`, defineProps/defineEmits, Pinia stores, `useFetch`/`useAsyncData`, rutas de servidor Nitro y `@nuxt/test-utils`. Los proyectos Next.js/React usan la plantilla `node-nextjs`.
|
|
839
|
-
|
|
840
|
-
**P: ¿Soporta Kotlin?**
|
|
841
|
-
Sí. ClaudeOS-Core auto-detecta Kotlin a partir de `build.gradle.kts` o del plugin kotlin en `build.gradle`. Usa una plantilla dedicada `kotlin-spring` con análisis específico de Kotlin (data classes, sealed classes, coroutines, extension functions, MockK, etc.).
|
|
842
|
-
|
|
843
|
-
**P: ¿Qué pasa con arquitectura CQRS / BFF?**
|
|
844
|
-
Totalmente soportado para proyectos Kotlin multi-módulo. ClaudeOS-Core lee `settings.gradle.kts`, detecta los tipos de módulo (command, query, bff, integration) a partir de los nombres de módulo, y agrupa el mismo dominio entre los módulos Command/Query. Los standards generados incluyen reglas separadas para command controllers vs query controllers, patrones BFF/Feign y convenciones de comunicación entre módulos.
|
|
845
|
-
|
|
846
|
-
**P: ¿Qué pasa con monorepos Gradle multi-módulo?**
|
|
847
|
-
ClaudeOS-Core escanea todos los submódulos (`**/src/main/kotlin/**/*.kt`) independientemente de la profundidad de anidamiento. Los tipos de módulo se infieren de las convenciones de naming (ej: `reservation-command-server` → dominio: `reservation`, tipo: `command`). Las bibliotecas compartidas (`shared-lib`, `integration-lib`) también se detectan.
|
|
848
|
-
|
|
849
|
-
**P: ¿Qué es la capa Memory L4 (v2.0.0)? ¿Debo commitear `claudeos-core/memory/`?**
|
|
850
|
-
Sí — **commitea siempre** `claudeos-core/memory/`. Es conocimiento persistente del equipo: `decision-log.md` registra el *porqué* detrás de las decisiones arquitectónicas (append-only), `failure-patterns.md` registra errores recurrentes con importancia puntuada para que las sesiones futuras los eviten, `compaction.md` define la política de compaction de 4 etapas y `auto-rule-update.md` recopila propuestas de mejora de reglas generadas por la máquina. A diferencia de las reglas (auto-cargadas por path), los archivos de memory son **on-demand** — Claude los lee solo cuando las reglas `60.memory/*` se lo indican (ej: escaneo al inicio de sesión de fallos de alta importancia). Esto mantiene bajo el coste de contexto conservando el conocimiento a largo plazo.
|
|
851
|
-
|
|
852
|
-
**P: ¿Qué pasa si Pass 4 falla?**
|
|
853
|
-
El pipeline automatizado (`npx claudeos-core init`) tiene un fallback estático: si `claude -p` falla o `pass4-prompt.md` está ausente, scaffoldea la capa de memory directamente vía `lib/memory-scaffold.js`. Cuando `--lang` no es inglés, el fallback estático **debe** traducir vía la CLI `claude` — si también falla, la ejecución se aborta con `InitError` (sin fallback silencioso a inglés). Vuelve a ejecutar cuando `claude` esté autenticado, o usa `--lang en` para saltarte la traducción. Los resultados de traducción se cachean en `claudeos-core/generated/.i18n-cache-<lang>.json` para que las ejecuciones posteriores los reutilicen.
|
|
854
|
-
|
|
855
|
-
**P: ¿Qué hacen `memory compact` / `memory score` / `memory propose-rules`?**
|
|
856
|
-
Ver la sección [Mantenimiento de la capa Memory](#mantenimiento-de-la-capa-memory-v200) arriba. Versión corta: `compact` ejecuta la política de 4 etapas (resume antiguas, combina duplicadas, descarta baja-importancia antiguas, aplica tope de 400 líneas); `score` re-rankea `failure-patterns.md` por importancia (frecuencia × recencia); `propose-rules` propone adiciones de reglas a partir de fallos recurrentes en `auto-rule-update.md` (no se aplican auto — revisa y acepta/rechaza manualmente).
|
|
857
|
-
|
|
858
|
-
**P: ¿Por qué `--force` (o el modo resume "fresh") borra `.claude/rules/`?**
|
|
859
|
-
v2.0.0 añadió tres guards de silent-failure en Pass 3 (Guard 3 cubre dos variantes de salida incompleta: H2 para `guide/` y H1 para `standard/skills`). Guard 1 ("movimiento parcial de staged-rules") y Guard 3 ("salida incompleta — archivos guide ausentes/vacíos o sentinel de standard ausente / skills vacío") no dependen de reglas existentes, pero Guard 2 ("cero reglas detectadas") sí — se dispara cuando Claude ignora la directiva `staging-override.md` e intenta escribir directamente en `.claude/` (donde la política de rutas sensibles de Claude Code lo bloquea). Las reglas obsoletas de una ejecución anterior harían que Guard 2 produjera falsos negativos — por eso `--force`/`fresh` borra `.claude/rules/` para asegurar una detección limpia. **Las ediciones manuales de archivos de reglas se perderán** con `--force`/`fresh`; haz un backup antes si es necesario. (Nota v2.1.0: Guard 3 H1 ya no comprueba `plan/` dado que los master plans ya no se generan.)
|
|
860
|
-
|
|
861
|
-
**P: ¿Qué es `claudeos-core/generated/.staged-rules/` y por qué existe?**
|
|
862
|
-
La política de rutas sensibles de Claude Code rechaza las escrituras directas a `.claude/` desde el subproceso `claude -p` (incluso con `--dangerously-skip-permissions`). v2.0.0 evita esto haciendo que los prompts de Pass 3/4 redirijan todas las escrituras de `.claude/rules/` al directorio de staging; el orquestador Node.js (que no está sujeto a esa política) luego mueve el árbol staged a `.claude/rules/` después de cada pass. Esto es transparente para el usuario — el directorio se auto-crea, se auto-limpia y se auto-mueve. Si una ejecución previa crashea a mitad del movimiento, la siguiente ejecución limpia el dir de staging antes de reintentar. En el modo split de v2.1.0, el runner de etapas mueve las reglas staged a `.claude/rules/` tras cada etapa (no solo al final), así que un crash a mitad de Pass 3 deja las reglas de las etapas previamente completadas en su sitio.
|
|
863
|
-
|
|
864
|
-
**P: ¿Puedo ejecutar Pass 3 manualmente en lugar de `npx claudeos-core init`?**
|
|
865
|
-
Sí para proyectos pequeños (≤5 dominios) — las instrucciones manuales de llamada única del [Paso 6](#paso-6-pass-3--generar-toda-la-documentación-dividido-en-varias-etapas) siguen funcionando. Para proyectos más grandes deberías usar `npx claudeos-core init` porque el runner de split es lo que orquesta la ejecución etapa-a-etapa con contextos nuevos, gestiona la sub-división por lotes a ≥16 dominios, escribe la forma correcta del marcador `pass3-complete.json` (`mode: "split"` + `groupsCompleted`) y mueve las reglas staged entre etapas. Reproducir esa orquestación a mano es posible pero tedioso. Si tienes una razón para ejecutar etapas manualmente (ej: debuggear una etapa concreta), puedes templatizar `pass3-prompt.md` con la directiva `STAGE:` apropiada y pasarlo a `claude -p` directamente — pero recuerda mover `.staged-rules/` tras cada etapa y actualizar el marcador tú mismo.
|
|
866
|
-
|
|
867
|
-
**P: Mi proyecto es un upgrade desde v2.0.x y tiene un directorio `claudeos-core/plan/` existente. ¿Qué hago?**
|
|
868
|
-
Nada requerido — las herramientas de v2.1.0 ignoran `plan/` cuando está ausente o vacío, y `plan-validator` sigue gestionando los proyectos legacy con directorios `plan/` poblados por retrocompatibilidad. Puedes borrar sin problemas `claudeos-core/plan/` si no necesitas los backups de master plan (el historial de git es un mejor backup de todos modos). Si conservas `plan/`, ejecutar `npx claudeos-core init` no lo actualizará — el contenido nuevo ya no se agrega en master plans en v2.1.0. Las herramientas de verificación gestionan ambos casos limpiamente.
|
|
869
|
-
|
|
870
|
-
---
|
|
871
|
-
|
|
872
|
-
## Estructura de Plantillas
|
|
873
|
-
|
|
874
|
-
```
|
|
875
|
-
pass-prompts/templates/
|
|
876
|
-
├── common/ # header/footer compartidos + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
|
|
877
|
-
│ ├── header.md # Rol + directiva de formato de salida (todas las passes)
|
|
878
|
-
│ ├── pass3-footer.md # Instrucción post-Pass-3 health-check + 5 bloques CRITICAL de guardrails (v2.2.0)
|
|
879
|
-
│ ├── pass3-phase1.md # Bloque "Read Once, Extract Facts" con Rules A-E (v2.1.0)
|
|
880
|
-
│ ├── pass4.md # Prompt de scaffolding de memoria (v2.0.0)
|
|
881
|
-
│ ├── staging-override.md # Redirige escrituras .claude/rules/** a .staged-rules/** (v2.0.0)
|
|
882
|
-
│ ├── claude-md-scaffold.md # Plantilla CLAUDE.md determinista de 8 secciones (v2.2.0)
|
|
883
|
-
│ └── lang-instructions.json # Directivas de salida por idioma (10 idiomas)
|
|
884
|
-
├── java-spring/ # Java / Spring Boot
|
|
885
|
-
├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-módulo)
|
|
886
|
-
├── node-express/ # Node.js / Express
|
|
887
|
-
├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
|
|
888
|
-
├── node-fastify/ # Node.js / Fastify
|
|
889
|
-
├── node-nextjs/ # Next.js / React (App Router, RSC)
|
|
890
|
-
├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
|
|
891
|
-
├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
|
|
892
|
-
├── angular/ # Angular
|
|
893
|
-
├── python-django/ # Python / Django (DRF)
|
|
894
|
-
├── python-fastapi/ # Python / FastAPI
|
|
895
|
-
└── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
|
|
896
|
-
```
|
|
897
|
-
|
|
898
|
-
`plan-installer` auto-detecta tu stack(s), y luego ensambla prompts específicos del tipo. NestJS, Vue/Nuxt, Vite SPA y Flask usan cada uno plantillas dedicadas con categorías de análisis específicas del framework (ej: `@Module`/`@Injectable`/Guards para NestJS; `<script setup>`/Pinia/useFetch para Vue; client-side routing/`VITE_` env para Vite; Blueprint/`app.factory`/Flask-SQLAlchemy para Flask). Para proyectos multi-stack, se generan `pass1-backend-prompt.md` y `pass1-frontend-prompt.md` por separado, mientras que `pass3-prompt.md` combina los targets de generación de ambos stacks. En v2.1.0, la plantilla de Pass 3 se anteanteponte con `common/pass3-phase1.md` (el bloque "Read Once, Extract Facts" con Rules A–E) antes de ser troceada por etapa en modo split. Pass 4 usa la plantilla compartida `common/pass4.md` (memory scaffolding) independientemente del stack.
|
|
899
|
-
|
|
900
|
-
**En v2.2.0**, el prompt de Pass 3 también incrusta en línea `common/claude-md-scaffold.md` (la plantilla CLAUDE.md determinista de 8 secciones) entre el bloque phase1 y el cuerpo específico del stack — esto fija la estructura de secciones para que los CLAUDE.md generados no se desvíen entre proyectos, mientras el contenido se adapta por proyecto. Las plantillas se escriben **English-first**; la inyección de idioma desde `lang-instructions.json` instruye al LLM a traducir títulos de sección y prosa al idioma de salida objetivo en tiempo de emisión.
|
|
479
|
+
**P: ¿Dónde reporto bugs?**
|
|
480
|
+
R: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). Para problemas de seguridad, ver [SECURITY.md](SECURITY.md).
|
|
901
481
|
|
|
902
482
|
---
|
|
903
483
|
|
|
904
|
-
##
|
|
905
|
-
|
|
906
|
-
ClaudeOS-Core auto-detecta setups de monorepo JS/TS y escanea sub-paquetes buscando dependencias.
|
|
907
|
-
|
|
908
|
-
**Marcadores de monorepo soportados** (auto-detectados):
|
|
909
|
-
- `turbo.json` (Turborepo)
|
|
910
|
-
- `pnpm-workspace.yaml` (pnpm workspaces)
|
|
911
|
-
- `lerna.json` (Lerna)
|
|
912
|
-
- `package.json#workspaces` (npm/yarn workspaces)
|
|
913
|
-
|
|
914
|
-
**Ejecuta desde la raíz del monorepo** — ClaudeOS-Core lee `apps/*/package.json` y `packages/*/package.json` para descubrir dependencias de framework/ORM/BD entre sub-paquetes:
|
|
915
|
-
|
|
916
|
-
```bash
|
|
917
|
-
cd my-monorepo
|
|
918
|
-
npx claudeos-core init
|
|
919
|
-
```
|
|
920
|
-
|
|
921
|
-
**Qué se detecta:**
|
|
922
|
-
- Dependencias de `apps/web/package.json` (ej: `next`, `react`) → stack frontend
|
|
923
|
-
- Dependencias de `apps/api/package.json` (ej: `express`, `prisma`) → stack backend
|
|
924
|
-
- Dependencias de `packages/db/package.json` (ej: `drizzle-orm`) → ORM/BD
|
|
925
|
-
- Paths de workspace personalizados desde `pnpm-workspace.yaml` (ej: `services/*`)
|
|
926
|
-
|
|
927
|
-
**El escaneo de dominios también cubre layouts de monorepo:**
|
|
928
|
-
- `apps/api/src/modules/*/` y `apps/api/src/*/` para dominios backend
|
|
929
|
-
- `apps/web/app/*/`, `apps/web/src/app/*/`, `apps/web/pages/*/` para dominios frontend
|
|
930
|
-
- `packages/*/src/*/` para dominios de paquetes compartidos
|
|
931
|
-
|
|
932
|
-
```
|
|
933
|
-
my-monorepo/ ← Ejecuta aquí: npx claudeos-core init
|
|
934
|
-
├── turbo.json ← Auto-detectado como Turborepo
|
|
935
|
-
├── apps/
|
|
936
|
-
│ ├── web/ ← Next.js detectado desde apps/web/package.json
|
|
937
|
-
│ │ ├── app/dashboard/ ← Dominio frontend detectado
|
|
938
|
-
│ │ └── package.json ← { "dependencies": { "next": "^14" } }
|
|
939
|
-
│ └── api/ ← Express detectado desde apps/api/package.json
|
|
940
|
-
│ ├── src/modules/users/ ← Dominio backend detectado
|
|
941
|
-
│ └── package.json ← { "dependencies": { "express": "^4" } }
|
|
942
|
-
├── packages/
|
|
943
|
-
│ ├── db/ ← Drizzle detectado desde packages/db/package.json
|
|
944
|
-
│ └── ui/
|
|
945
|
-
└── package.json ← { "workspaces": ["apps/*", "packages/*"] }
|
|
946
|
-
```
|
|
947
|
-
|
|
948
|
-
> **Nota:** Para monorepos Kotlin/Java, la detección multi-módulo usa `settings.gradle.kts` (ver [Detección de Dominios Kotlin Multi-Módulo](#detección-de-dominios-kotlin-multi-módulo) arriba) y no requiere marcadores de monorepo JS.
|
|
949
|
-
|
|
950
|
-
## Troubleshooting
|
|
951
|
-
|
|
952
|
-
**"claude: command not found"** — La CLI de Claude Code no está instalada o no está en el PATH. Ver [docs de Claude Code](https://code.claude.com/docs/en/overview).
|
|
953
|
-
|
|
954
|
-
**"npm install failed"** — La versión de Node.js puede ser demasiado baja. Requiere v18+.
|
|
955
|
-
|
|
956
|
-
**"0 domains detected"** — La estructura de tu proyecto puede no ser estándar. Ver los patrones de detección anteriores para tu stack.
|
|
957
|
-
|
|
958
|
-
**"0 domains detected" en proyecto Kotlin** — Asegúrate de que tu proyecto tiene `build.gradle.kts` (o `build.gradle` con plugin kotlin) en la raíz, y los archivos fuente están bajo `**/src/main/kotlin/`. Para proyectos multi-módulo, asegúrate de que `settings.gradle.kts` contiene sentencias `include()`. Los proyectos Kotlin de un solo módulo (sin `settings.gradle`) también están soportados — los dominios se extraen de la estructura de paquete/clase bajo `src/main/kotlin/`.
|
|
959
|
-
|
|
960
|
-
**"Language detected as java instead of kotlin"** — ClaudeOS-Core comprueba primero el `build.gradle(.kts)` raíz, luego los archivos de build de los submódulos. Si el archivo de build raíz usa el plugin `java` sin `kotlin`, pero los submódulos usan Kotlin, la herramienta comprueba hasta 5 archivos de build de submódulos como fallback. Si aun así no se detecta, asegúrate de que al menos un `build.gradle.kts` contiene `kotlin("jvm")` u `org.jetbrains.kotlin`.
|
|
961
|
-
|
|
962
|
-
**"CQRS not detected"** — La detección de arquitectura depende de que los nombres de módulos contengan las palabras clave `command` y `query`. Si tus módulos usan otros naming (ej: `write-server`, `read-server`), la arquitectura CQRS no se auto-detectará. Puedes ajustar manualmente los prompts generados después de que plan-installer se ejecute.
|
|
963
|
-
|
|
964
|
-
**"Pass 3 produced 0 rule files under .claude/rules/" (v2.0.0)** — Se disparó el Guard 2: Claude ignoró la directiva `staging-override.md` e intentó escribir directamente en `.claude/`, donde la política de rutas sensibles de Claude Code bloquea las escrituras. Vuelve a ejecutar con `npx claudeos-core init --force`. Si el error persiste, inspecciona `claudeos-core/generated/pass3-prompt.md` para verificar que el bloque `staging-override.md` está al principio.
|
|
965
|
-
|
|
966
|
-
**"Pass 3 finished but N rule file(s) could not be moved from staging" (v2.0.0)** — Se disparó el Guard 1: el movimiento de staging se topó con un file lock transitorio (normalmente antivirus de Windows o file-watcher). El marcador NO se escribe, así que la siguiente ejecución de `init` reintenta Pass 3 automáticamente. Simplemente vuelve a ejecutar `npx claudeos-core init`.
|
|
967
|
-
|
|
968
|
-
**"Pass 3 produced CLAUDE.md and rules but N/9 guide files are missing or empty" (v2.0.0)** — Se disparó el Guard 3 (H2): Claude truncó la respuesta a mitad de camino tras escribir CLAUDE.md + reglas pero antes de terminar (o empezar) la sección `claudeos-core/guide/` (se esperan 9 archivos). También se dispara ante un archivo con solo BOM o solo whitespace (se escribió el encabezado pero el cuerpo quedó truncado). Sin este guard, el marcador de finalización se escribiría igual, dejando `guide/` permanentemente vacío en ejecuciones posteriores. Aquí el marcador NO se escribe, así que la siguiente ejecución de `init` reintenta Pass 3 a partir de los mismos resultados de Pass 2. Si se repite, vuelve a ejecutar con `npx claudeos-core init --force` para regenerar desde cero.
|
|
969
|
-
|
|
970
|
-
**"Pass 3 finished but the following required output(s) are missing or empty" (v2.0.0, actualizado en v2.1.0)** — Se disparó el Guard 3 (H1): Claude truncó DESPUÉS de `claudeos-core/guide/` pero antes (o durante) `claudeos-core/standard/` o `claudeos-core/skills/`. Requisitos: (a) `standard/00.core/01.project-overview.md` existe y no está vacío (sentinel escrito por el prompt Pass 3 de cada stack), (b) `skills/` tiene ≥1 `.md` no vacío. `database/` y `mcp-guide/` se excluyen intencionadamente (algunos stacks legítimamente producen cero archivos). `plan/` ya no se comprueba a partir de v2.1.0 (los master plans fueron eliminados). Mismo camino de recuperación que Guard 3 (H2): vuelve a ejecutar `init`, o `--force` si persiste.
|
|
971
|
-
|
|
972
|
-
**"Pass 3 split stage crashed partway through (v2.1.0)"** — Cuando una de las etapas de split (ej: `3b-1`, `3c-2`) falla a mitad de ejecución, el marcador a nivel de etapa NO se escribe, pero las etapas completadas SÍ se registran en `pass3-complete.json.groupsCompleted`. La siguiente ejecución de `init` lee este array y reanuda desde la primera etapa no completada, saltándose todo el trabajo previo ya completado. No tienes que hacer nada manualmente — simplemente vuelve a ejecutar `npx claudeos-core init`. Si el resume sigue fallando en la misma etapa, inspecciona `claudeos-core/generated/pass3-prompt.md` en busca de contenido malformado, y luego prueba `--force` para un reinicio completo. La forma de `pass3-complete.json` (`mode: "split"`, `groupsCompleted: [...]`) es estable; un marcador ausente o malformado provoca que Pass 3 completo se vuelva a ejecutar desde `3a`.
|
|
973
|
-
|
|
974
|
-
**"Pass 3 stale marker (shape mismatch) — treating as incomplete" (v2.1.0)** — Se está interpretando un `pass3-complete.json` de una ejecución de llamada única pre-v2.1.0 bajo las nuevas reglas de modo split. La comprobación de forma busca `mode: "split"` y un array `groupsCompleted`; si falta alguno, el marcador se trata como parcial y Pass 3 se vuelve a ejecutar en modo split. Si hiciste upgrade desde v2.0.x, esto es esperado una sola vez — la siguiente ejecución escribirá la forma correcta de marcador. No se requiere acción.
|
|
484
|
+
## Documentación
|
|
975
485
|
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
**El puerto en CLAUDE.md difiere de `.env.example` (v2.2.0)** — El nuevo parser `.env` del stack-detector (`lib/env-parser.js`) lee `.env.example` primero (canónico, commiteado), luego variantes `.env` como fallback. Variables de puerto reconocidas: `PORT`, `VITE_PORT`, `VITE_DESKTOP_PORT`, `NEXT_PUBLIC_PORT`, `NUXT_PORT`, `DJANGO_PORT`, etc. Para Spring Boot, `server.port` de `application.yml` sigue teniendo prioridad sobre `.env` (config framework-native gana). Si tu proyecto usa un nombre de var env inusual, renómbralo a una convención reconocida o abre un issue para extender `PORT_VAR_KEYS`. Los valores por defecto del framework (Vite 5173, Next.js 3000, Django 8000) se usan solo cuando tanto la detección directa como `.env` están silenciosos.
|
|
991
|
-
|
|
992
|
-
**Valores secretos redactados como `***REDACTED***` en docs generados (v2.2.0)** — Comportamiento esperado. El parser `.env` de v2.2.0 redacta automáticamente valores de variables que coinciden con patrones `PASSWORD`/`SECRET`/`TOKEN`/`API_KEY`/`CREDENTIAL`/`PRIVATE_KEY` antes de que lleguen a cualquier generador. Esto es defense-in-depth contra secretos commiteados accidentalmente en `.env.example`. `DATABASE_URL` se mantiene tal cual por back-compat de identificación de DB en stack-detector. Si ves `***REDACTED***` en algún lugar del `CLAUDE.md` generado, es un bug — los valores redactados no deberían llegar a la tabla; por favor reporta un issue. La config runtime no sensible (port, host, API target, NODE_ENV, etc.) pasa sin cambios.
|
|
486
|
+
| Tema | Lee esto |
|
|
487
|
+
|---|---|
|
|
488
|
+
| Cómo funciona la pipeline de 4 pasadas (más profundo que el diagrama) | [docs/es/architecture.md](docs/es/architecture.md) |
|
|
489
|
+
| Diagramas visuales (Mermaid) de la arquitectura | [docs/es/diagrams.md](docs/es/diagrams.md) |
|
|
490
|
+
| Detección de stack — qué busca cada scanner | [docs/es/stacks.md](docs/es/stacks.md) |
|
|
491
|
+
| Memory layer — decision logs y failure patterns | [docs/es/memory-layer.md](docs/es/memory-layer.md) |
|
|
492
|
+
| Los 5 validators en detalle | [docs/es/verification.md](docs/es/verification.md) |
|
|
493
|
+
| Cada comando CLI y opción | [docs/es/commands.md](docs/es/commands.md) |
|
|
494
|
+
| Instalación manual (sin `npx`) | [docs/es/manual-installation.md](docs/es/manual-installation.md) |
|
|
495
|
+
| Overrides del scanner — `.claudeos-scan.json` | [docs/es/advanced-config.md](docs/es/advanced-config.md) |
|
|
496
|
+
| Seguridad: qué se preserva al re-init | [docs/es/safety.md](docs/es/safety.md) |
|
|
497
|
+
| Comparación con herramientas similares (scope, no calidad) | [docs/es/comparison.md](docs/es/comparison.md) |
|
|
498
|
+
| Errores y recuperación | [docs/es/troubleshooting.md](docs/es/troubleshooting.md) |
|
|
993
499
|
|
|
994
500
|
---
|
|
995
501
|
|
|
996
502
|
## Contribuir
|
|
997
503
|
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
- **Nuevas plantillas de stack** — Ruby/Rails, Go (Gin/Fiber/Echo), PHP (Laravel/Symfony), Rust (Axum/Actix), Svelte/SvelteKit, Remix
|
|
1001
|
-
- **Integración IDE** — extensión de VS Code, plugin de IntelliJ
|
|
1002
|
-
- **Plantillas de CI/CD** — GitLab CI, CircleCI, ejemplos de Jenkins (GitHub Actions ya incluido — ver `.github/workflows/test.yml`)
|
|
1003
|
-
- **Test coverage** — Ampliar la suite de tests (actualmente 602 tests en 30 archivos de test cubriendo scanners, stack detection, domain grouping, plan parsing, prompt generation, CLI selectors, monorepo detection, Vite SPA detection, verification tools, memory scaffold L4, validación de resume de Pass 2, Pass 3 Guards 1/2/3 (H1 sentinel + H2 BOM-aware empty-file + estricto stale-marker unlink), sub-división por lotes de Pass 3 en modo split, resume de Pass 3 con marcador parcial (v2.1.0), validación del contenido del marcador de Pass 4 + rigor del stale-marker unlink + gap-fill de scaffoldSkillsManifest (v2.1.0), guard env-skip de traducción + early fail-fast + workflow CI, movimiento de staged-rules, fallback lang-aware de traducción, suite de regresión por eliminación de master plan (v2.1.0), regresión de formato de memory score/compact (v2.1.0), y estructura de la plantilla AI Work Rules, y extracción de port/host/API-target del parser `.env` + redacción de variables sensibles (v2.2.0))
|
|
504
|
+
Las contribuciones son bienvenidas — añadir soporte de stacks, mejorar prompts, arreglar bugs. Ver [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
1004
505
|
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
---
|
|
506
|
+
Para el Código de Conducta y la política de seguridad, ver [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) y [SECURITY.md](SECURITY.md).
|
|
1008
507
|
|
|
1009
|
-
##
|
|
508
|
+
## Licencia
|
|
1010
509
|
|
|
1011
|
-
|
|
510
|
+
[ISC](LICENSE) — gratis para cualquier uso, incluyendo comercial.
|
|
1012
511
|
|
|
1013
|
-
|
|
512
|
+
---
|
|
1014
513
|
|
|
1015
|
-
|
|
514
|
+
<sub>Construido con cuidado por [@claudeos-core](https://github.com/claudeos-core). Si esto te ahorró tiempo, una ⭐ en GitHub ayuda a mantenerlo visible.</sub>
|