ostacky 0.6.1 → 0.6.2

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.
@@ -1,536 +1,510 @@
1
- ---
2
- description: Instala CodeGraph, skills curadas, OpenSpec, Engram y Context7 localmente para OpenCode únicamente
3
- agent: build
4
- ---
5
-
6
- Instala el stack tecnológico de desarrollo para OpenCode. **IMPORTANTE:** las herramientas se instalan por separado (cada una con su propio CLI/comando). `npx ostacky install` solo instala el agente y commands de Ostacky en `.opencode/`. Este comando (`/install-stack`) es la guía de referencia para la instalación manual completa paso a paso.
7
-
8
- **Nota:** A partir de v0.6.1, `npx ostacky install` ya instala automáticamente el stack completo (CodeGraph, OpenSpec, Engram, Context7, MCPs bundleados) además del agente y skills. Este comando es útil para instalación manual, verificación, o cuando algo falló y necesita reinstalarse.
9
-
10
- **RESTRICCIÓN ABSOLUTA:** instalar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear o modificar archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
11
-
12
- **Origen del set curado:** el set de 15 skills referenciado en `assets/agents/ostacky.md` está bundleado en `assets/skills/` dentro del paquete npm. Context7 agrega su propio skill vía `npx ctx7 setup --opencode`. La definición del set y su trazabilidad viven en `manifest.json` y `.opencode/ostacky-lock.json`.
13
-
14
- ---
15
-
16
- ## Paso 1 — CodeGraph
17
-
18
- CodeGraph se instala **localmente** en `.opencode/tools/codegraph/` — no se instala nada globalmente. El binario se descarga desde GitHub Releases para tu plataforma (linux/darwin x64/arm64, win32).
19
-
20
- `npx ostacky install` (o `npx ostacky install-stack`) hace esto automáticamente. Para instalación manual:
21
-
22
- Verificá si ya está descargado localmente:
23
-
24
- ```bash
25
- .opencode/tools/codegraph/bin/codegraph --version
26
- ```
27
-
28
- Si no está, descargalo manualmente desde [GitHub Releases](https://github.com/colbymchenry/codegraph/releases) y extraelo a `.opencode/tools/codegraph/` (el tar.gz tiene estructura `codegraph-{os}-{arch}/bin/codegraph`, `lib/`, `node`).
29
-
30
- Inicializa e indexa el proyecto actual:
31
-
32
- ```bash
33
- .opencode/tools/codegraph/bin/codegraph init -i
34
- ```
35
-
36
- Verifica que el MCP server esté configurado en `opencode.json` apuntando al binario local:
37
-
38
- ```json
39
- {
40
- "mcp": {
41
- "codegraph": {
42
- "type": "local",
43
- "command": [".opencode/tools/codegraph/bin/codegraph", "serve", "--mcp"],
44
- "enabled": true
45
- }
46
- }
47
- }
48
- ```
49
-
50
- ### Desinstalar CodeGraph
51
-
52
- Para remover CodeGraph del proyecto:
53
-
54
- ```bash
55
- # Remover el índice local
56
- rm -rf .codegraph/
57
- # Remover el binario local
58
- rm -rf .opencode/tools/codegraph/
59
- # Remover la entrada MCP de opencode.json (editar el archivo)
60
- ```
61
-
62
- ---
63
-
64
- ## Paso 1.5 — Ostacky Controller MCP (opcional)
65
-
66
- El Ostacky Controller es una máquina de estados persistida que Ostacky usa para validar transiciones, consumir decisiones, autorizar side effects y persistir snapshots.
67
-
68
- El controller MCP se configura como server local en `opencode.json`. Si el controller no está disponible, Ostacky cae a inline con confianza reducida pero preserva las compuertas de confirmación en lenguaje natural.
69
-
70
- ```json
71
- {
72
- "mcp": {
73
- "ostacky-controller": {
74
- "type": "local",
75
- "command": ["node", ".opencode/mcp/ostacky-controller/index.js"],
76
- "enabled": true
77
- }
78
- }
79
- }
80
- ```
81
-
82
- **Notas:**
83
-
84
- - El controller no es obligatorio para operar Ostacky — es un refuerzo de disciplina.
85
- - Sin controller, Ostacky usa las mismas reglas en lenguaje natural pero sin validación de transiciones ni persistencia de estado. El agente detecta automáticamente si el controller está disponible y opera en modo degraded si no.
86
- - El controller nunca autoriza subagentes sin confirmación explícita del usuario.
87
- - Los MCP servers se copian como archivos autocontenidos (bundleados en `dist/mcp/` durante el build). No requieren `npm install` ni `bun install` — cada `index.js` es un único archivo autocontenido sin dependencias externas.
88
- - El installer maneja `opencode.jsonc` (con comentarios) correctamentestrippea comentarios antes de parsear y escribe JSON válido de vuelta.
89
- - Si CodeGraph crea un `AGENTS.md` en la raíz del proyecto, el installer lo mueve a `.opencode/tools/codegraph/AGENTS.md` automáticamente.
90
-
91
- ---
92
-
93
- ## Paso 2 Skills curadas (bundleadas)
94
-
95
- Las **15 skills curadas** están bundleadas dentro del paquete Ostacky en `assets/skills/`. No se descargan ni clonan; ya vienen en el paquete npm. Context7 agrega su propia skill aparte (Paso 6).
96
-
97
- Copiá cada skill bundleada a `.opencode/skills/<nombre>/` preservando la estructura interna (incluyendo `SKILL.md` y cualquier subdirectorio como `scripts/` o `references/`):
98
-
99
- ```bash
100
- # Ejemplo para una skill; aplicar a las 15
101
- mkdir -p .opencode/skills/brainstorming
102
- cp -r assets/skills/brainstorming/* .opencode/skills/brainstorming/
103
- ```
104
-
105
- **Set curado (15 skills, referenciado en `assets/agents/ostacky.md`):**
106
-
107
- `brainstorming`, `writing-plans`, `tdd`, `review`, `execution-mode-evaluation`, `subagent-driven-development`, `dispatching-parallel-agents`, `openspec-propose`, `openspec-apply-change`, `openspec-archive-change`, `receiving-code-review`, `using-git-worktrees`, `using-superpowers`, `writing-skills`, `graceful-degradation`
108
-
109
- **NO se requiere** el plugin `superpowers@git+...` en `opencode.json`. Las skills viven en `.opencode/skills/` y OpenCode las descubre automáticamente desde ahí.
110
-
111
- ---
112
-
113
- ## Paso 3 Parche de `opencode.json`
114
-
115
- Leé `opencode.json` (o `opencode.jsonc`) en la raíz del proyecto.
116
-
117
- **Eliminá** cualquier entrada `"plugin": ["superpowers@git+https://github.com/obra/superpowers.git"]` (y equivalentes). Las skills ya están provistas por el bundle local, no por el plugin.
118
-
119
- **Preservá** sin tocar el bloque `mcp.codegraph` configurado en el Paso 1.
120
-
121
- **Resultado final esperado** de `opencode.json` (o `opencode.jsonc`):
122
-
123
- ```json
124
- {
125
- "$schema": "https://opencode.ai/config.json",
126
- "mcp": {
127
- "codegraph": {
128
- "type": "local",
129
- "command": [".opencode/tools/codegraph/bin/codegraph", "serve", "--mcp"],
130
- "enabled": true
131
- },
132
- "engram": {
133
- "type": "local",
134
- "command": [".opencode/tools/engram/bin/engram", "mcp"],
135
- "enabled": true
136
- },
137
- "context7": {
138
- "type": "remote",
139
- "url": "https://mcp.context7.com/mcp",
140
- "enabled": true
141
- },
142
- "ostacky-controller": {
143
- "type": "local",
144
- "command": ["node", ".opencode/mcp/ostacky-controller/index.js"],
145
- "enabled": true
146
- }
147
- }
148
- }
149
- ```
150
-
151
- (El campo `plugin` queda ausente, no como array vacío.)
152
-
153
- ---
154
-
155
- ## Paso 4 OpenSpec (MCP Server local)
156
-
157
- OpenSpec se instala como MCP server local en `.opencode/mcp/openspec/`. El server provee tools para proposal, apply, archive y sync de cambios.
158
-
159
- ### Verificar instalación
160
-
161
- ```bash
162
- .opencode/mcp/openspec/index.js --version 2>/dev/null || echo "no-instalado"
163
- ```
164
-
165
- ### Configurar en opencode.json
166
-
167
- ```json
168
- {
169
- "mcp": {
170
- "openspec": {
171
- "type": "local",
172
- "command": ["node", ".opencode/mcp/openspec/index.js"],
173
- "enabled": true
174
- }
175
- }
176
- }
177
- ```
178
-
179
- **Notas:**
180
-
181
- - OpenSpec MCP server es autocontenido no requiere `npm install` ni `bun install`.
182
- - El server provee las tools: `openspec_propose`, `openspec_list`, `openspec_archive`, `openspec_get_change`.
183
- - Los changes se almacenan en `openspec/changes/` y se archivan en `openspec/archive/`.
184
-
185
- ### Desinstalar OpenSpec
186
-
187
- ```bash
188
- # Remover el MCP server
189
- rm -rf .opencode/mcp/openspec/
190
-
191
- # Remover la entrada MCP de opencode.json (editar el archivo)
192
-
193
- # Remover cambios archivados (opcional)
194
- rm -rf openspec/
195
- ```
196
-
197
- ---
198
-
199
- ## Paso 5 Engram
200
-
201
- [Engram](https://github.com/Gentleman-Programming/engram) es el sistema de memoria persistente para agentes de IA. Se instala como un único binario Go con SQLite + FTS5, sin Node.js, Python ni Docker.
202
-
203
- **Instalación local:** Engram se descarga **localmente** a `.opencode/tools/engram/bin/engram` desde GitHub Releases — no se instala nada globalmente. `npx ostacky install` hace esto automáticamente.
204
-
205
- **RESTRICCIÓN:** configurar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
206
-
207
- ### Verificar instalación local
208
-
209
- Chequeá si el binario local de Engram ya está disponible:
210
-
211
- ```bash
212
- .opencode/tools/engram/bin/engram --version 2>/dev/null || echo "no-instalado"
213
- ```
214
-
215
- #### Si ya está descargado localmente
216
-
217
- Si el comando devuelve una versión, Engram ya está disponible. Verificá si es la más reciente comparando con la [última release en GitHub](https://github.com/Gentleman-Programming/engram/releases).
218
-
219
- Si está desactualizado, descargá la nueva versión desde [releases](https://github.com/Gentleman-Programming/engram/releases) y reemplazá el binario en `.opencode/tools/engram/bin/engram`.
220
-
221
- Luego de actualizar, saltá directo a [Configurar para OpenCode](#configurar-para-opencode) — no necesitás reinstalar.
222
-
223
- #### Si no está instalado
224
-
225
- Descargá el binario desde [GitHub Releases](https://github.com/Gentleman-Programming/engram/releases) para tu plataforma:
226
-
227
- - **Linux x64:** `engram_{version}_linux_amd64.tar.gz`
228
- - **Linux arm64:** `engram_{version}_linux_arm64.tar.gz`
229
- - **macOS x64:** `engram_{version}_darwin_amd64.tar.gz`
230
- - **macOS arm64:** `engram_{version}_darwin_arm64.tar.gz`
231
- - **Windows x64:** `engram_{version}_windows_amd64.zip`
232
- - **Windows arm64:** `engram_{version}_windows_arm64.zip`
233
-
234
- Extraelo a `.opencode/tools/engram/bin/`:
235
-
236
- ```bash
237
- mkdir -p .opencode/tools/engram/bin
238
- # Descargar y extraer el binario ahí
239
- chmod +x .opencode/tools/engram/bin/engram # Unix only
240
- ```
241
-
242
- ### Configurar para OpenCode
243
-
244
- Una vez que Engram está descargado localmente, el plugin se copia automáticamente de `assets/plugins/` a `.opencode/plugins/` durante la instalación. No necesitás correr ningún comando adicional.
245
-
246
- Este comando:
247
-
248
- - Copia el plugin de Engram para OpenCode a `.opencode/plugins/`
249
- - **NO** agrega la entrada MCP al `opencode.json` del proyecto — eso lo hace `npx ostacky install` automáticamente
250
- - **NO** toca `.claude/`, `.cursor/`, `.gemini/` ni ninguna otra plataforma
251
-
252
- Verificá que `opencode.json` contenga la entrada MCP de Engram apuntando al binario local (agregada por el installer de Ostacky):
253
-
254
- ```json
255
- {
256
- "mcp": {
257
- "engram": {
258
- "type": "local",
259
- "command": [".opencode/tools/engram/bin/engram", "mcp"],
260
- "enabled": true
261
- }
262
- }
263
- }
264
- ```
265
-
266
- Si la entrada no está presente (por ejemplo si instalaste Engram manualmente sin Ostacky), agregala a mano al `opencode.json` o `opencode.jsonc`.
267
-
268
- ### Session tracking
269
-
270
- El plugin de Engram para OpenCode usa `engram serve` para session tracking y recuperación ante compaction. El plugin intenta auto-iniciar el servidor, pero si tu entorno bloquea procesos en background, iniciálo manualmente:
271
-
272
- ```bash
273
- engram serve
274
- ```
275
-
276
- Corre en el puerto 7437 por defecto. Los datos se almacenan en `~/.engram/engram.db` (SQLite local). **Nota:** esta ruta está hardcoded en el binario de Engram y no es configurable por Ostacky.
277
-
278
- ### Desinstalar Engram del proyecto
279
-
280
- Para remover la configuración de Engram del proyecto (sin borrar los datos):
281
-
282
- ```bash
283
- # Remover la entrada mcp.engram de opencode.json (editar el archivo)
284
- # Remover el plugin de Engram de OpenCode:
285
- rm -f .opencode/plugins/engram.ts
286
- # Remover el binario local
287
- rm -rf .opencode/tools/engram/
288
- ```
289
-
290
- Para borrar todos los datos de Engram (**OPCIONAL** — esto borra la memoria persistente de TODOS los proyectos que usen Engram):
291
-
292
- ```bash
293
- # ⚠️ Solo si querés borrar toda la memoria de Engram
294
- rm -rf ~/.engram/
295
- ```
296
-
297
- ---
298
-
299
- ## Paso 6 — Context7
300
-
301
- [Context7](https://context7.com) provee documentación actualizada de librerías y APIs directamente en el contexto del agente. Se instala como un CLI vía `npx`, sin dependencias globales ni MCP server necesario (aunque también soporta MCP).
302
-
303
- **RESTRICCIÓN:** configurar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
304
-
305
- ### Verificar instalación actual
306
-
307
- Chequeá si Context7 ya está configurado para OpenCode:
308
-
309
- ```bash
310
- ls -la .opencode/skills/context7/ 2>/dev/null || echo "no-instalado"
311
- ```
312
-
313
- También podés verificar si el MCP server de Context7 está en `opencode.json`:
314
-
315
- ```bash
316
- grep -c "context7" opencode.json 2>/dev/null || echo "no-configurado"
317
- ```
318
-
319
- ### Instalar
320
-
321
- **Opción recomendada — setup automático (CLI + skills):**
322
-
323
- ```bash
324
- npx ctx7 setup --opencode
325
- ```
326
-
327
- Este comando:
328
-
329
- - Autentica vía OAuth y genera una API key
330
- - Instala un skill en `.opencode/skills/context7/` que el agente Ostacky usa automáticamente
331
- - Pregunta si preferís modo CLI + Skills o MCP
332
- - **NO** toca `.claude/`, `.cursor/`, `.gemini/` ni ninguna otra plataforma
333
-
334
- **Alternativa — solo MCP (si preferís el server remoto):**
335
-
336
- Agregá manualmente la entrada MCP en `opencode.json`:
337
-
338
- ```json
339
- {
340
- "mcp": {
341
- "context7": {
342
- "type": "remote",
343
- "url": "https://mcp.context7.com/mcp"
344
- }
345
- }
346
- }
347
- ```
348
-
349
- Si tenés una API key de Context7 (recomendado para mejores rate limits):
350
-
351
- ```json
352
- {
353
- "mcp": {
354
- "context7": {
355
- "type": "remote",
356
- "url": "https://mcp.context7.com/mcp",
357
- "headers": {
358
- "CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
359
- }
360
- }
361
- }
362
- }
363
- ```
364
-
365
- ### Desinstalar
366
-
367
- Para remover la configuración generada por `npx ctx7 setup`:
368
-
369
- ```bash
370
- npx ctx7 remove
371
- ```
372
-
373
- Esto elimina el skill y la configuración de Context7. Si instalaste el CLI globalmente con `npm install -g ctx7`, también necesitás:
374
-
375
- ```bash
376
- npm uninstall -g ctx7
377
- ```
378
-
379
- Para remover la entrada MCP manual, editá `opencode.json` y eliminá el bloque `mcp.context7`.
380
-
381
- ### Cómo lo usa Ostacky
382
-
383
- El skill de Context7 instalado le indica al agente Ostacky que use Context7 automáticamente cuando necesite documentación de librerías, APIs o frameworks. También se puede invocar explícitamente:
384
-
385
- ```
386
- usá context7 para mostrarme la API de autenticación de Supabase
387
- use context7 to find Next.js 15 app router examples
388
- ```
389
-
390
- ---
391
-
392
- ## Estructura de herramientas
393
-
394
- Cada herramienta se instala en su propia carpeta dentro de `.opencode/` para mantener una instalación limpia y aislada. El installer crea automáticamente `.opencode/tools/<nombre>/` para cada herramienta externa:
395
-
396
- ```
397
- .opencode/
398
- ├── agents/ # Agentes OpenCode
399
- └── ostacky.md
400
- ├── commands/ # Comandos OpenCode
401
- │ ├── install-stack.md # Bundleado por Ostacky
402
- │ ├── opsx-sync.md # Bundleado por Ostacky
403
- │ ├── opsx-apply.md # Generado por OpenSpec
404
- │ ├── opsx-archive.md # Generado por OpenSpec
405
- │ ├── opsx-explore.md # Generado por OpenSpec
406
- └── opsx-propose.md # Generado por OpenSpec
407
- ├── mcp/ # MCP servers bundleados (autocontenidos, sin dependencias externas)
408
- ├── ostacky-controller/
409
- ├── index.js
410
- ├── package.json
411
- └── node_modules/
412
- └── openspec/ # NUEVO: MCP server local
413
- │ ├── index.js
414
- │ ├── package.json
415
- │ └── node_modules/
416
- ├── skills/ # Skills bundleadas (15)
417
- │ ├── brainstorming/
418
- │ ├── writing-plans/
419
- │ ├── tdd/
420
- │ ├── review/
421
- │ ├── execution-mode-evaluation/
422
- │ ├── subagent-driven-development/
423
- │ ├── dispatching-parallel-agents/
424
- │ ├── openspec-propose/
425
- │ ├── openspec-apply-change/
426
- │ ├── openspec-archive-change/
427
- │ ├── receiving-code-review/
428
- │ ├── using-git-worktrees/
429
- │ ├── using-superpowers/
430
- │ ├── writing-skills/
431
- │ └── graceful-degradation/
432
- ├── tools/ # Config y archivos de herramientas externas
433
- │ ├── codegraph/ # Config de CodeGraph (AGENTS.md si codegraph lo crea)
434
- │ ├── engram/ # Config project-local de Engram
435
- │ └── context7/ # Config de Context7
436
- └── plugins/ # Plugins de OpenCode
437
- ```
438
-
439
- **Notas sobre la estructura:**
440
-
441
- - `.codegraph/` (índice de CodeGraph) vive en la raíz del proyecto — CodeGraph lo espera ahí.
442
- - El binario de CodeGraph es **local al proyecto** en `.opencode/tools/codegraph/bin/codegraph` (con su runtime Node vendored en `.opencode/tools/codegraph/node`). No se instala globalmente.
443
- - El binario de Engram es **local al proyecto** en `.opencode/tools/engram/bin/engram`. No se instala globalmente.
444
- - Context7 se registra como MCP remoto en `opencode.jsonc`. Su skill opcional se instala via `npx ctx7 setup --opencode` en `.opencode/skills/context7/`.
445
- - Los MCP servers bundleados son autocontenidos (un solo `index.js` sin dependencias externas).
446
-
447
- ## Verificación final
448
-
449
- Confirmá que:
450
-
451
- 1. `.opencode/skills/` contiene las 15 skills curadas y opcionalmente `context7/` si se instaló con `npx ctx7 setup --opencode`
452
- 2. `.opencode/commands/` contiene los commands bundleados por Ostacky (`install-stack`, `opsx-sync`) y los 4 commands generados por OpenSpec (`opsx-apply`, `opsx-archive`, `opsx-explore`, `opsx-propose`) si OpenSpec fue inicializado
453
- 3. `opencode.json` (o `.jsonc`) tiene los bloques MCP: `codegraph`, `engram`, `context7`, `ostacky-controller`, `openspec` — sin campo `plugin`
454
- 4. `.codegraph/` existe en la raíz del proyecto (índice local de CodeGraph)
455
- 5. `.opencode/tools/codegraph/bin/codegraph --version` funciona (binario local)
456
- 6. `.opencode/tools/engram/bin/engram --version` funciona (binario local)
457
- 7. Context7 configurado: `mcp.context7` presente en `opencode.jsonc` y/o `.opencode/skills/context7/SKILL.md` existe
458
- 8. `.opencode/mcp/openspec/index.js` existe (MCP server local)
459
- 9. Los MCP bundleados tienen sus dependencias instaladas en `.opencode/mcp/*/node_modules/`
460
- 10. `.opencode/tools/` contiene subdirectorios para `codegraph/`, `engram/` y `context7/`
461
- 11. **NO existen** archivos generados en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/` ni ningún directorio de otra plataforma
462
- 12. **NO existe** `AGENTS.md` en la raíz del proyecto (si CodeGraph lo creó, el installer lo mueve a `.opencode/tools/codegraph/`)
463
-
464
- Reportá el estado de cada componente con ✓ o ✗.
465
-
466
- ## Troubleshooting
467
-
468
- ### MCP Server no responde
469
-
470
- Si el controller o openspec MCP server no responde después de la instalación:
471
-
472
- 1. **Verificar que el archivo existe:**
473
-
474
- ```bash
475
- ls -la .opencode/mcp/ostacky-controller/index.js
476
- ls -la .opencode/mcp/openspec/index.js
477
- ```
478
-
479
- 2. **Verificar que Node.js está disponible:**
480
-
481
- ```bash
482
- node --version
483
- ```
484
-
485
- 3. **Testear el MCP server directamente:**
486
-
487
- ```bash
488
- echo '{"jsonrpc":"2.0","id":1,"method":"ping","params":{}}' | node .opencode/mcp/ostacky-controller/index.js
489
- ```
490
-
491
- 4. **Si falla, reinstalar:**
492
- ```bash
493
- npx ostacky install-stack
494
- ```
495
-
496
- ### CodeGraph no indexa
497
-
498
- 1. **Verificar que el binario funciona:**
499
-
500
- ```bash
501
- .opencode/tools/codegraph/bin/codegraph --version
502
- ```
503
-
504
- 2. **Re-inicializar el índice:**
505
-
506
- ```bash
507
- .opencode/tools/codegraph/bin/codegraph init -i
508
- ```
509
-
510
- 3. **Si el binario no existe, reinstalar:**
511
- ```bash
512
- npx ostacky install-stack
513
- ```
514
-
515
- ### Engram no inicia
516
-
517
- 1. **Verificar que el binario funciona:**
518
-
519
- ```bash
520
- .opencode/tools/engram/bin/engram --version
521
- ```
522
-
523
- 2. **Verificar que el plugin está instalado:**
524
-
525
- ```bash
526
- ls -la .opencode/plugins/engram.ts
527
- ```
528
-
529
- 3. **Re-instalar el plugin:**
530
- ```bash
531
- cp assets/plugins/engram.ts .opencode/plugins/engram.ts
532
- ```
533
-
534
- ### Degradación graceful
535
-
536
- Si múltiples tools fallan, Ostacky opera en modo degraded. Ver `assets/skills/graceful-degradation/SKILL.md` para los flujos alternativos disponibles.
1
+ ---
2
+ description: Instala CodeGraph, skills curadas, OpenSpec, Engram y Context7 localmente para OpenCode únicamente
3
+ agent: build
4
+ ---
5
+
6
+ Instala el stack tecnológico de desarrollo para OpenCode. **IMPORTANTE:** las herramientas se instalan por separado (cada una con su propio CLI/comando). `npx ostacky install` solo instala el agente y commands de Ostacky en `.opencode/`. Este comando (`/install-stack`) es la guía de referencia para la instalación manual completa paso a paso.
7
+
8
+ **Nota:** A partir de v0.6.2, `npx ostacky install` ya instala automáticamente el stack completo (CodeGraph, OpenSpec, Engram, Context7, MCPs bundleados) además del agente y skills. Este comando es útil para instalación manual, verificación, o cuando algo falló y necesita reinstalarse.
9
+
10
+ **RESTRICCIÓN ABSOLUTA:** instalar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear o modificar archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
11
+
12
+ **Origen del set curado:** el set de 15 skills referenciado en `assets/agents/ostacky.md` está bundleado en `assets/skills/` dentro del paquete npm. Context7 agrega su propio skill vía `npx ctx7 setup --opencode`. La definición del set y su trazabilidad viven en `manifest.json` y `.opencode/ostacky-lock.json`.
13
+
14
+ ---
15
+
16
+ ## Paso 1 — CodeGraph
17
+
18
+ CodeGraph se instala **localmente** en `.opencode/tools/codegraph/` — no se instala nada globalmente. El binario se descarga desde GitHub Releases para tu plataforma (linux/darwin x64/arm64, win32).
19
+
20
+ `npx ostacky install` (o `npx ostacky install-stack`) hace esto automáticamente. Para instalación manual:
21
+
22
+ Verificá si ya está descargado localmente:
23
+
24
+ ```bash
25
+ # Unix
26
+ .opencode/tools/codegraph/bin/codegraph --version
27
+ # Windows: ejecutar codegraph.cmd o codegraph.exe dentro de .opencode/tools/codegraph/bin/
28
+ ```
29
+
30
+ Si no está, descargalo manualmente desde [GitHub Releases](https://github.com/colbymchenry/codegraph/releases) y extraelo a `.opencode/tools/codegraph/` (el tar.gz tiene estructura `codegraph-{os}-{arch}/bin/codegraph`, `lib/`, `node`).
31
+
32
+ Inicializa e indexa el proyecto actual:
33
+
34
+ ```bash
35
+ # Unix
36
+ .opencode/tools/codegraph/bin/codegraph init -i
37
+ # Windows: ejecutar el launcher instalado con `init -i`
38
+ ```
39
+
40
+ Verifica que el MCP server esté configurado en `opencode.json` apuntando al binario local:
41
+
42
+ ```json
43
+ {
44
+ "mcp": {
45
+ "codegraph": {
46
+ "type": "local",
47
+ "command": [".opencode/tools/codegraph/bin/codegraph", "serve", "--mcp"],
48
+ "enabled": true
49
+ }
50
+ }
51
+ }
52
+ ```
53
+
54
+ ### Desinstalar CodeGraph
55
+
56
+ Para remover CodeGraph del proyecto:
57
+
58
+ ```bash
59
+ # Remover el índice local
60
+ rm -rf .codegraph/
61
+ # Remover el binario local
62
+ rm -rf .opencode/tools/codegraph/
63
+ # Remover la entrada MCP de opencode.json (editar el archivo)
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Paso 1.5 Ostacky Controller MCP (opcional)
69
+
70
+ El Ostacky Controller es una máquina de estados persistida que Ostacky usa para validar transiciones, consumir decisiones, autorizar side effects y persistir snapshots.
71
+
72
+ El controller MCP se configura como server local en `opencode.json`. Si el controller no está disponible, Ostacky cae a inline con confianza reducida pero preserva las compuertas de confirmación en lenguaje natural.
73
+
74
+ ```json
75
+ {
76
+ "mcp": {
77
+ "ostacky-controller": {
78
+ "type": "local",
79
+ "command": ["node", ".opencode/mcp/ostacky-controller/index.js"],
80
+ "enabled": true
81
+ }
82
+ }
83
+ }
84
+ ```
85
+
86
+ **Notas:**
87
+
88
+ - El controller no es obligatorio para operar Ostacky es un refuerzo de disciplina.
89
+ - Sin controller, Ostacky usa las mismas reglas en lenguaje natural pero sin validación de transiciones ni persistencia de estado. El agente detecta automáticamente si el controller está disponible y opera en modo degraded si no.
90
+ - El controller nunca autoriza subagentes sin confirmación explícita del usuario.
91
+ - Los MCP servers se copian como archivos autocontenidos (bundleados en `dist/mcp/` durante el build). No requieren `npm install` ni `bun install` — cada `index.js` es un único archivo autocontenido sin dependencias externas.
92
+ - El installer maneja `opencode.jsonc` (con comentarios) correctamente — strippea comentarios antes de parsear y escribe JSON válido de vuelta.
93
+ - El installer registra el MCP directamente y **no mueve ni elimina** un `AGENTS.md` existente en la raíz del proyecto.
94
+
95
+ ---
96
+
97
+ ## Paso 2 Skills curadas (bundleadas)
98
+
99
+ Las **15 skills curadas** están bundleadas dentro del paquete Ostacky en `assets/skills/`. No se descargan ni clonan; ya vienen en el paquete npm. Context7 agrega su propia skill aparte (Paso 6).
100
+
101
+ Copiá cada skill bundleada a `.opencode/skills/<nombre>/` preservando la estructura interna (incluyendo `SKILL.md` y cualquier subdirectorio como `scripts/` o `references/`):
102
+
103
+ ```bash
104
+ # Ejemplo para una skill; aplicar a las 15
105
+ mkdir -p .opencode/skills/brainstorming
106
+ cp -r assets/skills/brainstorming/* .opencode/skills/brainstorming/
107
+ ```
108
+
109
+ **Set curado (15 skills, referenciado en `assets/agents/ostacky.md`):**
110
+
111
+ `brainstorming`, `writing-plans`, `tdd`, `review`, `execution-mode-evaluation`, `subagent-driven-development`, `dispatching-parallel-agents`, `openspec-propose`, `openspec-apply-change`, `openspec-archive-change`, `receiving-code-review`, `using-git-worktrees`, `using-superpowers`, `writing-skills`, `graceful-degradation`
112
+
113
+ **NO se requiere** el plugin `superpowers@git+...` en `opencode.json`. Las skills viven en `.opencode/skills/` y OpenCode las descubre automáticamente desde ahí.
114
+
115
+ ---
116
+
117
+ ## Paso 3 Parche de `opencode.json`
118
+
119
+ Leé `opencode.json` (o `opencode.jsonc`) en la raíz del proyecto.
120
+
121
+ **Eliminá** cualquier entrada `"plugin": ["superpowers@git+https://github.com/obra/superpowers.git"]` (y equivalentes). Las skills ya están provistas por el bundle local, no por el plugin.
122
+
123
+ **Preservá** sin tocar el bloque `mcp.codegraph` configurado en el Paso 1.
124
+
125
+ **Resultado final esperado** de `opencode.json` (o `opencode.jsonc`):
126
+
127
+ ```json
128
+ {
129
+ "$schema": "https://opencode.ai/config.json",
130
+ "mcp": {
131
+ "codegraph": {
132
+ "type": "local",
133
+ "command": [".opencode/tools/codegraph/bin/codegraph", "serve", "--mcp"],
134
+ "enabled": true
135
+ },
136
+ "engram": {
137
+ "type": "local",
138
+ "command": [".opencode/tools/engram/bin/engram", "mcp"],
139
+ "enabled": true
140
+ },
141
+ "context7": {
142
+ "type": "remote",
143
+ "url": "https://mcp.context7.com/mcp",
144
+ "enabled": true
145
+ },
146
+ "ostacky-controller": {
147
+ "type": "local",
148
+ "command": ["node", ".opencode/mcp/ostacky-controller/index.js"],
149
+ "enabled": true
150
+ }
151
+ }
152
+ }
153
+ ```
154
+
155
+ (El campo `plugin` queda ausente, no como array vacío.)
156
+
157
+ ---
158
+
159
+ ## Paso 4 — OpenSpec CLI
160
+
161
+ OpenSpec se inicializa con su CLI oficial para OpenCode. Genera commands en `.opencode/commands/` y skills en `.opencode/skills/`; **no instala ni registra un MCP server local**.
162
+
163
+ ```bash
164
+ npx --yes openspec init --tools opencode --force
165
+ ```
166
+
167
+ Los changes se almacenan en `openspec/changes/` y se archivan en `openspec/archive/`.
168
+
169
+ ### Desinstalar OpenSpec
170
+
171
+ ```bash
172
+ # Remover commands/skills generados por OpenSpec según corresponda
173
+ # Remover changes archivados (opcional)
174
+ rm -rf openspec/
175
+ ```
176
+
177
+ ---
178
+
179
+ ## Paso 5 — Engram
180
+
181
+ [Engram](https://github.com/Gentleman-Programming/engram) es el sistema de memoria persistente para agentes de IA. Se instala como un único binario Go con SQLite + FTS5, sin Node.js, Python ni Docker.
182
+
183
+ **Instalación local:** Engram se descarga **localmente** a `.opencode/tools/engram/bin/engram` desde GitHub Releases — no se instala nada globalmente. `npx ostacky install` hace esto automáticamente.
184
+
185
+ **RESTRICCIÓN:** configurar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
186
+
187
+ ### Verificar instalación local
188
+
189
+ Chequeá si el binario local de Engram ya está disponible:
190
+
191
+ ```bash
192
+ .opencode/tools/engram/bin/engram --version 2>/dev/null || echo "no-instalado"
193
+ ```
194
+
195
+ #### Si ya está descargado localmente
196
+
197
+ Si el comando devuelve una versión, Engram ya está disponible. Verificá si es la más reciente comparando con la [última release en GitHub](https://github.com/Gentleman-Programming/engram/releases).
198
+
199
+ Si está desactualizado, descargá la nueva versión desde [releases](https://github.com/Gentleman-Programming/engram/releases) y reemplazá el binario en `.opencode/tools/engram/bin/engram`.
200
+
201
+ Luego de actualizar, saltá directo a [Configurar para OpenCode](#configurar-para-opencode) no necesitás reinstalar.
202
+
203
+ #### Si no está instalado
204
+
205
+ Descargá el binario desde [GitHub Releases](https://github.com/Gentleman-Programming/engram/releases) para tu plataforma:
206
+
207
+ - **Linux x64:** `engram_{version}_linux_amd64.tar.gz`
208
+ - **Linux arm64:** `engram_{version}_linux_arm64.tar.gz`
209
+ - **macOS x64:** `engram_{version}_darwin_amd64.tar.gz`
210
+ - **macOS arm64:** `engram_{version}_darwin_arm64.tar.gz`
211
+ - **Windows x64:** `engram_{version}_windows_amd64.zip`
212
+ - **Windows arm64:** `engram_{version}_windows_arm64.zip`
213
+
214
+ Extraelo a `.opencode/tools/engram/bin/`:
215
+
216
+ ```bash
217
+ mkdir -p .opencode/tools/engram/bin
218
+ # Descargar y extraer el binario ahí
219
+ chmod +x .opencode/tools/engram/bin/engram # Unix only
220
+ ```
221
+
222
+ ### Configurar para OpenCode
223
+
224
+ Una vez que Engram está descargado localmente, el plugin se copia automáticamente de `assets/plugins/` a `.opencode/plugins/` durante la instalación. No necesitás correr ningún comando adicional.
225
+
226
+ Este comando:
227
+
228
+ - Copia el plugin de Engram para OpenCode a `.opencode/plugins/`
229
+ - **NO** agrega la entrada MCP al `opencode.json` del proyecto — eso lo hace `npx ostacky install` automáticamente
230
+ - **NO** toca `.claude/`, `.cursor/`, `.gemini/` ni ninguna otra plataforma
231
+
232
+ Verificá que `opencode.json` contenga la entrada MCP de Engram apuntando al binario local (agregada por el installer de Ostacky):
233
+
234
+ ```json
235
+ {
236
+ "mcp": {
237
+ "engram": {
238
+ "type": "local",
239
+ "command": [".opencode/tools/engram/bin/engram", "mcp"],
240
+ "enabled": true
241
+ }
242
+ }
243
+ }
244
+ ```
245
+
246
+ Si la entrada no está presente (por ejemplo si instalaste Engram manualmente sin Ostacky), agregala a mano al `opencode.json` o `opencode.jsonc`.
247
+
248
+ ### Session tracking
249
+
250
+ El plugin de Engram para OpenCode usa `engram serve` para session tracking y recuperación ante compaction. El plugin intenta auto-iniciar el servidor, pero si tu entorno bloquea procesos en background, iniciálo manualmente:
251
+
252
+ ```bash
253
+ engram serve
254
+ ```
255
+
256
+ Corre en el puerto 7437 por defecto. Los datos se almacenan en `~/.engram/engram.db` (SQLite local). **Nota:** esta ruta está hardcoded en el binario de Engram y no es configurable por Ostacky.
257
+
258
+ ### Desinstalar Engram del proyecto
259
+
260
+ Para remover la configuración de Engram del proyecto (sin borrar los datos):
261
+
262
+ ```bash
263
+ # Remover la entrada mcp.engram de opencode.json (editar el archivo)
264
+ # Remover el plugin de Engram de OpenCode:
265
+ rm -f .opencode/plugins/engram.ts
266
+ # Remover el binario local
267
+ rm -rf .opencode/tools/engram/
268
+ ```
269
+
270
+ Para borrar todos los datos de Engram (**OPCIONAL** esto borra la memoria persistente de TODOS los proyectos que usen Engram):
271
+
272
+ ```bash
273
+ # ⚠️ Solo si querés borrar toda la memoria de Engram
274
+ rm -rf ~/.engram/
275
+ ```
276
+
277
+ ---
278
+
279
+ ## Paso 6 — Context7
280
+
281
+ [Context7](https://context7.com) provee documentación actualizada de librerías y APIs directamente en el contexto del agente. Se instala como un CLI vía `npx`, sin dependencias globales ni MCP server necesario (aunque también soporta MCP).
282
+
283
+ **RESTRICCIÓN:** configurar ÚNICAMENTE para OpenCode. Está terminantemente prohibido crear archivos en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/`, `.antigravity/`, `.windsurf/` o cualquier otro directorio de plataformas externas.
284
+
285
+ ### Verificar instalación actual
286
+
287
+ Chequeá si Context7 ya está configurado para OpenCode:
288
+
289
+ ```bash
290
+ ls -la .opencode/skills/context7/ 2>/dev/null || echo "no-instalado"
291
+ ```
292
+
293
+ También podés verificar si el MCP server de Context7 está en `opencode.json`:
294
+
295
+ ```bash
296
+ grep -c "context7" opencode.json 2>/dev/null || echo "no-configurado"
297
+ ```
298
+
299
+ ### Instalar
300
+
301
+ **Opción recomendada setup automático (CLI + skills):**
302
+
303
+ ```bash
304
+ npx ctx7 setup --opencode
305
+ ```
306
+
307
+ Este comando:
308
+
309
+ - Autentica vía OAuth y genera una API key
310
+ - Instala un skill en `.opencode/skills/context7/` que el agente Ostacky usa automáticamente
311
+ - Pregunta si preferís modo CLI + Skills o MCP
312
+ - **NO** toca `.claude/`, `.cursor/`, `.gemini/` ni ninguna otra plataforma
313
+
314
+ **Alternativa — solo MCP (si preferís el server remoto):**
315
+
316
+ Agregá manualmente la entrada MCP en `opencode.json`:
317
+
318
+ ```json
319
+ {
320
+ "mcp": {
321
+ "context7": {
322
+ "type": "remote",
323
+ "url": "https://mcp.context7.com/mcp"
324
+ }
325
+ }
326
+ }
327
+ ```
328
+
329
+ Si tenés una API key de Context7 (recomendado para mejores rate limits):
330
+
331
+ ```json
332
+ {
333
+ "mcp": {
334
+ "context7": {
335
+ "type": "remote",
336
+ "url": "https://mcp.context7.com/mcp",
337
+ "headers": {
338
+ "CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
339
+ }
340
+ }
341
+ }
342
+ }
343
+ ```
344
+
345
+ ### Desinstalar
346
+
347
+ Para remover la configuración generada por `npx ctx7 setup`:
348
+
349
+ ```bash
350
+ npx ctx7 remove
351
+ ```
352
+
353
+ Esto elimina el skill y la configuración de Context7. Si instalaste el CLI globalmente con `npm install -g ctx7`, también necesitás:
354
+
355
+ ```bash
356
+ npm uninstall -g ctx7
357
+ ```
358
+
359
+ Para remover la entrada MCP manual, editá `opencode.json` y eliminá el bloque `mcp.context7`.
360
+
361
+ ### Cómo lo usa Ostacky
362
+
363
+ El skill de Context7 instalado le indica al agente Ostacky que use Context7 automáticamente cuando necesite documentación de librerías, APIs o frameworks. También se puede invocar explícitamente:
364
+
365
+ ```
366
+ usá context7 para mostrarme la API de autenticación de Supabase
367
+ use context7 to find Next.js 15 app router examples
368
+ ```
369
+
370
+ ---
371
+
372
+ ## Estructura de herramientas
373
+
374
+ Cada herramienta se instala en su propia carpeta dentro de `.opencode/` para mantener una instalación limpia y aislada. El installer crea automáticamente `.opencode/tools/<nombre>/` para cada herramienta externa:
375
+
376
+ ```
377
+ .opencode/
378
+ ├── agents/ # Agentes OpenCode
379
+ │ └── ostacky.md
380
+ ├── commands/ # Comandos OpenCode
381
+ │ ├── install-stack.md # Bundleado por Ostacky
382
+ │ ├── opsx-sync.md # Bundleado por Ostacky
383
+ │ ├── opsx-apply.md # Generado por OpenSpec
384
+ │ ├── opsx-archive.md # Generado por OpenSpec
385
+ │ ├── opsx-explore.md # Generado por OpenSpec
386
+ │ └── opsx-propose.md # Generado por OpenSpec
387
+ ├── mcp/ # MCP servers bundleados
388
+ │ ├── ostacky-controller/
389
+ │ │ ├── index.js
390
+ │ │ ├── package.json
391
+ │ │ └── node_modules/ # Solo fallback de desarrollo
392
+ ├── skills/ # Skills bundleadas (15)
393
+ │ ├── brainstorming/
394
+ │ ├── writing-plans/
395
+ │ ├── tdd/
396
+ │ ├── review/
397
+ │ ├── execution-mode-evaluation/
398
+ ├── subagent-driven-development/
399
+ ├── dispatching-parallel-agents/
400
+ ├── openspec-propose/
401
+ │ ├── openspec-apply-change/
402
+ │ ├── openspec-archive-change/
403
+ │ ├── receiving-code-review/
404
+ │ ├── using-git-worktrees/
405
+ │ ├── using-superpowers/
406
+ ├── writing-skills/
407
+ │ └── graceful-degradation/
408
+ ├── tools/ # Config y archivos de herramientas externas
409
+ │ ├── codegraph/ # Config de CodeGraph (AGENTS.md si codegraph lo crea)
410
+ │ ├── engram/ # Config project-local de Engram
411
+ │ └── context7/ # Config de Context7
412
+ └── plugins/ # Plugins de OpenCode
413
+ ```
414
+
415
+ **Notas sobre la estructura:**
416
+
417
+ - `.codegraph/` (índice de CodeGraph) vive en la raíz del proyecto — CodeGraph lo espera ahí.
418
+ - El binario de CodeGraph es **local al proyecto** en `.opencode/tools/codegraph/bin/`; en Windows puede ser `codegraph.cmd`. No se instala globalmente.
419
+ - El binario de Engram es **local al proyecto** en `.opencode/tools/engram/bin/engram` (o `engram.exe` en Windows). No se instala globalmente.
420
+ - Context7 se registra como MCP remoto en `opencode.jsonc`. Su skill opcional se instala via `npx ctx7 setup --opencode` en `.opencode/skills/context7/`.
421
+ - El controller publicado se bundlea como un único `index.js`; durante desarrollo el installer instala sus dependencias en staging y valida el servidor antes de activarlo.
422
+
423
+ ## Verificación final
424
+
425
+ Confirmá que:
426
+
427
+ 1. `.opencode/skills/` contiene las 15 skills curadas y opcionalmente `context7/` si se instaló con `npx ctx7 setup --opencode`
428
+ 2. `.opencode/commands/` contiene los commands bundleados por Ostacky (`install-stack`, `opsx-sync`) y los 4 commands generados por OpenSpec (`opsx-apply`, `opsx-archive`, `opsx-explore`, `opsx-propose`) si OpenSpec fue inicializado
429
+ 3. `opencode.json` (o `.jsonc`) tiene los bloques MCP: `codegraph`, `engram`, `context7`, `ostacky-controller` — sin campo `plugin`
430
+ 4. `.codegraph/` existe en la raíz del proyecto (índice local de CodeGraph)
431
+ 5. El launcher local de CodeGraph funciona (`codegraph.cmd --version` en Windows o `codegraph --version` en Unix)
432
+ 6. El binario local de Engram funciona (`engram.exe --version` en Windows o `engram --version` en Unix)
433
+ 7. Context7 configurado: `mcp.context7` presente en `opencode.jsonc` y/o `.opencode/skills/context7/SKILL.md` existe
434
+ 8. OpenSpec generó sus commands/skills para OpenCode mediante `openspec init --tools opencode`
435
+ 9. `.opencode/tools/` contiene subdirectorios para `codegraph/`, `engram/` y `context7/`
436
+ 10. **NO existen** archivos generados en `.claude/`, `.kiro/`, `.cursor/`, `.gemini/`, `.codex/` ni ningún directorio de otra plataforma
437
+ 11. Un `AGENTS.md` preexistente en la raíz del proyecto se preserva sin cambios
438
+
439
+ Reportá el estado de cada componente con ✓ o ✗.
440
+
441
+ ## Troubleshooting
442
+
443
+ ### MCP Server no responde
444
+
445
+ Si el controller MCP no responde después de la instalación:
446
+
447
+ 1. **Verificar que el archivo existe:**
448
+
449
+ ```bash
450
+ ls -la .opencode/mcp/ostacky-controller/index.js
451
+ ```
452
+
453
+ 2. **Verificar que Node.js está disponible:**
454
+
455
+ ```bash
456
+ node --version
457
+ ```
458
+
459
+ 3. **Testear el MCP server directamente:**
460
+
461
+ ```bash
462
+ echo '{"jsonrpc":"2.0","id":1,"method":"ping","params":{}}' | node .opencode/mcp/ostacky-controller/index.js
463
+ ```
464
+
465
+ 4. **Si falla, reinstalar:**
466
+ ```bash
467
+ npx ostacky install-stack
468
+ ```
469
+
470
+ ### CodeGraph no indexa
471
+
472
+ 1. **Verificar que el binario funciona:**
473
+
474
+ ```bash
475
+ .opencode/tools/codegraph/bin/codegraph --version
476
+ ```
477
+
478
+ 2. **Re-inicializar el índice:**
479
+
480
+ ```bash
481
+ .opencode/tools/codegraph/bin/codegraph init -i
482
+ ```
483
+
484
+ 3. **Si el binario no existe, reinstalar:**
485
+ ```bash
486
+ npx ostacky install-stack
487
+ ```
488
+
489
+ ### Engram no inicia
490
+
491
+ 1. **Verificar que el binario funciona:**
492
+
493
+ ```bash
494
+ .opencode/tools/engram/bin/engram --version
495
+ ```
496
+
497
+ 2. **Verificar que el plugin está instalado:**
498
+
499
+ ```bash
500
+ ls -la .opencode/plugins/engram.ts
501
+ ```
502
+
503
+ 3. **Re-instalar el plugin:**
504
+ ```bash
505
+ cp assets/plugins/engram.ts .opencode/plugins/engram.ts
506
+ ```
507
+
508
+ ### Degradación graceful
509
+
510
+ Si múltiples tools fallan, Ostacky opera en modo degraded. Ver `assets/skills/graceful-degradation/SKILL.md` para los flujos alternativos disponibles.