specrails-core 1.7.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,365 @@
1
+ # Análisis de Viabilidad: Compatibilidad de SpecRails con OpenAI Codex
2
+
3
+ **Fecha**: 2026-03-21
4
+ **Autor**: CTO (f68f30eb) — via SPEA-503
5
+ **Estado**: Final — Listo para revisión del board
6
+
7
+ ---
8
+
9
+ ## Resumen Ejecutivo
10
+
11
+ **Veredicto: SÍ, es viable — y más sencillo de lo que parece.**
12
+
13
+ Claude Code y Codex han convergido arquitectónicamente de forma significativa durante 2025–2026. Comparten el mismo formato de Skills (OpenAI adoptó la spec de Anthropic en diciembre 2025), ambos soportan MCP como mecanismo de extensión, ambos usan ficheros Markdown jerárquicos como instrucciones de agente (`AGENTS.md` vs `CLAUDE.md`), y ambos soportan subagentes y ejecución paralela.
14
+
15
+ El camino de menor resistencia para dar soporte a Codex **no requiere reescribir specrails-core** — requiere refactorizar los comandos `/sr:*` de slash commands Claude Code-only a Skills (formato ya compatible con ambas plataformas), y añadir una capa de abstracción mínima en el instalador.
16
+
17
+ | Dimensión | Valoración |
18
+ |-----------|-----------|
19
+ | **Viabilidad técnica** | Alta |
20
+ | **Esfuerzo estimado (Approach A — Full Dual-CLI)** | 350–450 horas |
21
+ | **Esfuerzo estimado (Approach B — Skills-First, recomendado)** | 150–200 horas |
22
+ | **Riesgo técnico** | Medio-bajo |
23
+ | **Impacto estratégico** | Alto |
24
+
25
+ ---
26
+
27
+ ## 1. Qué es OpenAI Codex (2026)
28
+
29
+ Codex es el agente de ingeniería de software cloud-native de OpenAI, lanzado en mayo 2025. **No es el modelo de autocompletado de 2021** — es un agente autónomo equivalente a Claude Code.
30
+
31
+ ### Superficies disponibles
32
+
33
+ | Superficie | Descripción |
34
+ |-----------|-------------|
35
+ | **Codex Cloud** (`chatgpt.com/codex`) | Agente web async, integrado con GitHub |
36
+ | **Codex CLI** (`@openai/codex`) | Terminal agent local, open source (Rust, Apache-2.0) |
37
+ | **Codex SDK** (`@openai/codex-sdk`) | TypeScript SDK para integración programática |
38
+ | **MCP Server** (`codex mcp-server`) | Expone Codex como servidor MCP |
39
+ | **GitHub Action** | CI/CD integración native |
40
+
41
+ ### Invocación
42
+
43
+ ```bash
44
+ # Instalación
45
+ npm i -g @openai/codex
46
+
47
+ # Interactivo (TUI)
48
+ codex
49
+
50
+ # No-interactivo / scripted
51
+ codex exec "fix all TypeScript errors in src/"
52
+
53
+ # Como MCP server
54
+ codex mcp-server
55
+ ```
56
+
57
+ ### Modelo subyacente
58
+
59
+ Basado en `codex-1` (variante de `o3` fine-tuned para ingeniería de software). API disponible como `codex-mini-latest` a $1.50/1M input tokens.
60
+
61
+ ---
62
+
63
+ ## 2. Convergencia Arquitectónica: Claude Code vs Codex
64
+
65
+ Esta es la finding más importante de la investigación.
66
+
67
+ | Dimensión | Codex | Claude Code | Compatibilidad |
68
+ |-----------|-------|------------|----------------|
69
+ | **Instrucciones de agente** | `AGENTS.md` (Markdown) | `CLAUDE.md` (Markdown) | ✅ Formato idéntico, distinto nombre |
70
+ | **Skills** | `SKILL.md` (mismo formato) | `SKILL.md` | ✅ **100% compatible — formato compartido** |
71
+ | **MCP** | First-class (cliente + servidor) | First-class | ✅ Interoperable |
72
+ | **Subagentes** | `spawn_agent`, `wait_agent`, etc. | `Agent` tool | ✅ Mismo concepto, distinta API |
73
+ | **Scope jerárquico** | Walk root → CWD | Walk root → CWD | ✅ Idéntico comportamiento |
74
+ | **Ejecución paralela** | Nativo (cloud worktrees + subagentes) | Subagentes + `isolation: worktree` | ✅ Ambos soportan |
75
+ | **Permisos** | `config.toml` + Starlark rules | `settings.json` JSON | ⚠️ Formatos distintos, conceptos análogos |
76
+ | **Definición de agentes** | TOML en `.codex/agents/` | Markdown en `.claude/agents/` | ⚠️ Formatos distintos |
77
+ | **Slash commands** | Sistema (30+ built-in, no user-definable) | User-definable + built-in | ❌ Modelo distinto |
78
+ | **Namespace de dirs** | `.codex/` | `.claude/` | ⚠️ Conflicto directo |
79
+ | **Config format** | TOML | JSON | ⚠️ Formatos distintos |
80
+ | **Memory** | Experimental (SQLite + MEMORY.md) | File-based | ⚠️ Distinto nivel de madurez |
81
+
82
+ ### El hallazgo clave: Skills son el puente
83
+
84
+ OpenAI adoptó en diciembre 2025 el **mismo formato `SKILL.md`** que publicó Anthropic. Esto significa que:
85
+
86
+ > **Todos los Skills de specrails (`/sr:implement`, `/opsx:ff`, etc.) son compatible con Codex sin cambios de formato.**
87
+
88
+ La implicación práctica: si specrails migra sus comandos de workflow de "slash commands Claude Code-only" a "Skills" (lo que en gran medida ya está ocurriendo), esos Skills funcionan en ambas plataformas.
89
+
90
+ ---
91
+
92
+ ## 3. Análisis de Puntos de Acoplamiento
93
+
94
+ ### 3.1 Acoplamiento Alto (Cambios necesarios)
95
+
96
+ #### A. Directorio `.claude/` — Namespace conflict
97
+
98
+ **Estado actual**: Todo specrails-core produce outputs en `.claude/` (agents, commands, rules, settings, memory). Codex usa `.codex/`.
99
+
100
+ **Solución**: Abstracción de paths en el instalador. Detectar qué CLI está instalado y generar en el directorio correcto. O soportar ambos simultáneamente (algunos proyectos usan ambas CLIs).
101
+
102
+ **Esfuerzo**: Medio — ~2-3 días. Afecta install.sh y todos los templates que hardcodean `.claude/`.
103
+
104
+ #### B. Comandos Slash vs Skills
105
+
106
+ **Estado actual**: Los comandos `/sr:*` son slash commands Claude Code-only, definidos como markdown en `.claude/commands/sr/`. Codex no permite slash commands user-definables.
107
+
108
+ **Solución (crítica)**: Los Skills ya son el mecanismo correcto. specrails ya tiene muchos `/sr:*` implementados como Skills (el `.claude/skills/` directory). La migración es convertir los comandos restantes a formato Skill.
109
+
110
+ ```markdown
111
+ # Antes: .claude/commands/sr/implement.md (Claude Code-only)
112
+ # Después: .claude/skills/sr-implement/SKILL.md (compatible con ambos)
113
+ ```
114
+
115
+ **Esfuerzo**: Medio-alto — ~5-8 días. Es trabajo de plantillas, no lógica nueva.
116
+
117
+ #### C. Detección de CLI en install.sh
118
+
119
+ **Estado actual**: El instalador hace `command -v claude` y falla si no está.
120
+
121
+ **Solución**: Detectar ambas CLIs y configurar el instalador según qué esté disponible:
122
+
123
+ ```bash
124
+ if command -v claude &> /dev/null; then
125
+ CLI_PROVIDER="claude"
126
+ elif command -v codex &> /dev/null; then
127
+ CLI_PROVIDER="codex"
128
+ else
129
+ fail "Ninguna CLI encontrada. Instala Claude Code o Codex."
130
+ exit 1
131
+ fi
132
+ ```
133
+
134
+ **Esfuerzo**: Bajo — ~1 día.
135
+
136
+ ### 3.2 Acoplamiento Medio (Abstracción necesaria)
137
+
138
+ #### D. Configuración de permisos
139
+
140
+ **Estado actual**: `settings.json` con JSON (Claude Code-specific).
141
+
142
+ **Codex equivalente**: `config.toml` + Starlark rules en `.codex/rules/`.
143
+
144
+ **Solución**: El instalador genera el fichero correcto según `$CLI_PROVIDER`.
145
+
146
+ **Esfuerzo**: Bajo-medio — ~2 días.
147
+
148
+ #### E. Definición de agentes
149
+
150
+ **Estado actual**: Agents como Markdown con YAML frontmatter en `.claude/agents/sr-*.md`.
151
+
152
+ **Codex equivalente**: TOML en `.codex/agents/` con campos explícitos.
153
+
154
+ **Codex agent TOML equivalente**:
155
+ ```toml
156
+ # .codex/agents/sr-architect.toml
157
+ name = "sr-architect"
158
+ description = "Software architect agent for designing implementation plans."
159
+ model = "codex-mini-latest"
160
+ ```
161
+
162
+ **Solución**: Generar ambos formatos o detectar CLI y generar el correcto.
163
+
164
+ **Esfuerzo**: Medio — ~3-4 días.
165
+
166
+ #### F. Variables de entorno Claude Code-specific
167
+
168
+ **Estado actual**: El comando `/sr:implement` detecta `CLAUDE_CODE_ENTRYPOINT` y `CLAUDE_CODE_REMOTE`.
169
+
170
+ **Solución**: Abstracción — detectar environment vars de ambas CLIs o usar las propias del runner.
171
+
172
+ **Esfuerzo**: Bajo — ~1 día.
173
+
174
+ ### 3.3 Acoplamiento Bajo (Funciona sin cambios)
175
+
176
+ | Componente | Por qué funciona | Notas |
177
+ |------------|-----------------|-------|
178
+ | **AGENTS.md / CLAUDE.md** | Formato Markdown idéntico | Solo hay que renombrar o soportar ambos |
179
+ | **Skills** | Formato 100% compartido | **Zero cambios necesarios** |
180
+ | **Backlog integration** | Usa `gh` CLI estándar | Sin dependencia de Claude Code |
181
+ | **OpenSpec CLI** | CLI-agnostic | Sin cambios |
182
+ | **Git operations** | Standard git | Sin cambios |
183
+ | **MCP server** | Ambas CLIs soportan MCP | Interoperable |
184
+ | **Personas (VPC)** | Markdown puro | Sin cambios |
185
+
186
+ ---
187
+
188
+ ## 4. Implicaciones para specrails-hub
189
+
190
+ specrails-hub se comunica con specrails-core vía `integration-contract.json`. El contrato define `cli.initArgs` y `cli.updateArgs` que hub usa para invocar la CLI.
191
+
192
+ **Cambios necesarios en hub**:
193
+
194
+ 1. **Detección de CLI**: Hub debe detectar qué CLI está disponible en el entorno del usuario:
195
+ ```typescript
196
+ // En lugar de: execa('claude', ['..'])
197
+ const cli = await detectCLI(); // returns 'claude' | 'codex' | null
198
+ await execa(cli, args);
199
+ ```
200
+
201
+ 2. **Integration contract versionado**: Añadir `provider` field al contrato:
202
+ ```json
203
+ {
204
+ "schemaVersion": "2.0",
205
+ "provider": "claude | codex | auto",
206
+ "cli": {
207
+ "claude": { "initArgs": ["init", "--yes"] },
208
+ "codex": { "initArgs": ["exec", "specrails-core init --yes"] }
209
+ }
210
+ }
211
+ ```
212
+
213
+ 3. **UI**: Mostrar qué CLI está activa en el dashboard de Hub.
214
+
215
+ **Esfuerzo en Hub**: Medio — ~3-5 días.
216
+
217
+ ---
218
+
219
+ ## 5. Enfoques de Implementación
220
+
221
+ ### Approach A: Full Dual-CLI Support
222
+
223
+ **Descripción**: specrails-core genera configuraciones para ambas CLIs. El instalador detecta cuál está activa y genera los ficheros correctos. Soporte completo de todos los features en ambas plataformas.
224
+
225
+ **Esfuerzo estimado**:
226
+ | Área | Esfuerzo |
227
+ |------|----------|
228
+ | install.sh provider detection | 1 día |
229
+ | Directory abstraction (`.claude/` vs `.codex/`) | 3 días |
230
+ | Permisos / config (settings.json vs config.toml) | 2 días |
231
+ | Agent definitions (Markdown vs TOML) | 4 días |
232
+ | Skills migration (commands → Skills) | 8 días |
233
+ | Hub integration (contract + detection) | 5 días |
234
+ | Testing y QA | 10 días |
235
+ | **Total** | **~33 días (~5-6 semanas)** |
236
+
237
+ **Pros**: Feature parity completa. Usuarios eligen libremente.
238
+ **Contras**: Doble superficie de mantenimiento. Codex memory system menos maduro.
239
+
240
+ ### Approach B: Skills-First (Recomendado)
241
+
242
+ **Descripción**: Refactorizar los comandos `/sr:*` como Skills (ya compatibles con ambas plataformas). El core de workflow no depende de la CLI — funciona igual en Claude Code y Codex. La integración de agentes se hace vía Skills y MCP.
243
+
244
+ **Por qué es el approach correcto**:
245
+ - Skills son el mínimo común denominador entre CLIs
246
+ - specrails ya está parcialmente en Skills format
247
+ - La dirección de la industria converge hacia Skills + MCP como estándares
248
+ - El MCP server planificado (SPEA-499 et al.) amplifica este approach
249
+
250
+ **Esfuerzo estimado**:
251
+ | Área | Esfuerzo |
252
+ |------|----------|
253
+ | install.sh detection | 1 día |
254
+ | Skills migration completa | 8 días |
255
+ | Directory detection/abstraction | 3 días |
256
+ | Hub detection layer | 3 días |
257
+ | Testing | 5 días |
258
+ | **Total** | **~20 días (~3-4 semanas)** |
259
+
260
+ **Pros**: 40% menos esfuerzo. Mejora la arquitectura globalmente. Prepara el terreno para más CLIs en el futuro. Alineado con MCP roadmap.
261
+ **Contras**: No todos los features de agentes complejos (worktree isolation) disponibles en Codex inmediatamente.
262
+
263
+ ---
264
+
265
+ ## 6. Riesgos y Mitigaciones
266
+
267
+ | Riesgo | Probabilidad | Impacto | Mitigación |
268
+ |--------|-------------|---------|-----------|
269
+ | Codex CLI menos maduro que Claude Code | Alta | Medio | Lanzar Codex como beta/experimental inicialmente |
270
+ | Windows support experimental en Codex | Alta | Bajo | Documentar limitación |
271
+ | Codex memory system poco maduro | Alta | Bajo | Usar patterns file-based (MEMORY.md) en ambas |
272
+ | API de subagentes distinta | Media | Alto | Abstraer en Skills para no depender de tool-calling nativo |
273
+ | Double mantenimiento de templates | Media | Medio | Approach B minimiza esto |
274
+ | Fragmentación de usuarios | Baja | Medio | UX clara en /setup para elegir provider |
275
+
276
+ ---
277
+
278
+ ## 7. Análisis Estratégico
279
+
280
+ ### Por qué hacer esto
281
+
282
+ 1. **Mercado más amplio**: Hay usuarios comprometidos con el ecosistema OpenAI que no usarán Claude Code. Dar soporte a Codex multiplica el TAM potencial.
283
+
284
+ 2. **Posición de independencia**: specrails se posiciona como "el framework product-driven agnóstico de LLM CLI", no como "el framework de Claude Code". Esto es más defensible.
285
+
286
+ 3. **Skills como standard**: Con ambas plataformas usando el mismo formato de Skills, specrails se beneficia de ser el que más y mejores Skills tiene. Es una ventaja competitiva.
287
+
288
+ 4. **MCP amplifica**: El MCP server planificado (SPEA-499 et al.) hace que specrails sea accesible desde cualquier cliente MCP — Cursor, Windsurf, VS Code, Codex, Claude. El Approach B (Skills-First) está directamente alineado con esta visión.
289
+
290
+ ### El riesgo de NO hacerlo
291
+
292
+ Hay señales claras de que Codex está ganando tracción rápidamente (open source CLI, integración nativa GitHub, disponible en todos los planes ChatGPT). Si specrails no da soporte a Codex en 6-12 meses, queda encadenado al crecimiento de Claude Code exclusivamente.
293
+
294
+ ---
295
+
296
+ ## 8. Recomendación
297
+
298
+ **Proceder con Approach B (Skills-First) como Phase 1, con roadmap hacia Approach A.**
299
+
300
+ ### Fase 1 — Skills-First (Q2 2026, ~3-4 semanas)
301
+ - Migrar comandos `/sr:*` a Skills format
302
+ - Añadir detección de CLI en install.sh
303
+ - Soporte de `.codex/` directory como alternativa a `.claude/`
304
+ - Hub detection layer
305
+ - **Resultado**: specrails funciona en Codex con los Skills principales
306
+
307
+ ### Fase 2 — Agent Definitions (Q3 2026, ~2-3 semanas)
308
+ - Generación de agent TOML para Codex
309
+ - Configuración de permisos (`config.toml` + Starlark)
310
+ - Testing de integración completo
311
+
312
+ ### Fase 3 — Feature Parity (Q4 2026, ongoing)
313
+ - Worktree isolation en Codex (si Codex CLI madura esto)
314
+ - Memory system adaptado
315
+ - Documentación completa para usuarios de Codex
316
+
317
+ ---
318
+
319
+ ## 9. Próximos Pasos Concretos
320
+
321
+ Si el board aprueba proceder:
322
+
323
+ 1. **Crear epic SPEA-Codex-Support** en specrails-core project
324
+ 2. **Asignar al Tech Lead (specrails-core)** el diseño técnico detallado de la abstracción de provider
325
+ 3. **Crear subtareas**:
326
+ - Skills migration completa (`/sr:*` → Skills format)
327
+ - install.sh provider detection
328
+ - Hub detection layer
329
+ - Integration testing con Codex CLI
330
+ 4. **Actualizar integration-contract.json** para soportar multi-provider
331
+
332
+ ---
333
+
334
+ ## Apéndice A: Comparativa de Comandos Equivalentes
335
+
336
+ | specrails (actual) | Claude Code invocation | Codex invocation |
337
+ |-------------------|----------------------|-----------------|
338
+ | `/sr:implement` | Slash command | Skill (mismo `SKILL.md`) |
339
+ | `/sr:product-backlog` | Slash command | Skill |
340
+ | `/opsx:ff` | Slash command | Skill |
341
+ | `/setup` | Slash command | `codex exec "run setup"` |
342
+ | Agent `sr-architect` | `.claude/agents/sr-architect.md` | `.codex/agents/sr-architect.toml` |
343
+ | Permissions | `.claude/settings.json` | `.codex/config.toml` |
344
+
345
+ ## Apéndice B: Formato AGENTS.md vs CLAUDE.md
346
+
347
+ Los ficheros son **funcionalmente idénticos**. La única diferencia es el nombre del fichero:
348
+
349
+ - Claude Code carga: `CLAUDE.md` (o `.claude/CLAUDE.md`)
350
+ - Codex carga: `AGENTS.md` (o `AGENTS.override.md`)
351
+
352
+ **Solución trivial**: specrails puede generar ambos ficheros apuntando al mismo contenido, o el instalador genera el nombre correcto según el provider detectado.
353
+
354
+ ## Apéndice C: Recursos de Referencia
355
+
356
+ - [Introducing Codex — OpenAI](https://openai.com/index/introducing-codex/)
357
+ - [AGENTS.md Custom Instructions — Codex Docs](https://developers.openai.com/codex/guides/agents-md)
358
+ - [Codex CLI Reference](https://developers.openai.com/codex/cli/reference)
359
+ - [Skills — Codex Docs](https://developers.openai.com/codex/skills)
360
+ - [Subagents — Codex Docs](https://developers.openai.com/codex/subagents)
361
+ - [Configuration Reference — Codex](https://developers.openai.com/codex/config-reference)
362
+ - [openai/codex on GitHub](https://github.com/openai/codex)
363
+ - [OpenAI are quietly adopting skills — Simon Willison](https://simonwillison.net/2025/Dec/12/openai-skills/)
364
+ - Análisis de acoplamiento interno: revisión de 23 puntos de acoplamiento en specrails-core (SPEA-503)
365
+ - Análisis MCP feasibility: `docs/research/mcp-feasibility-analysis.md`