ostacky 0.5.6 → 0.5.7

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/README.md CHANGED
@@ -215,33 +215,33 @@ Tras instalar, el proyecto queda así:
215
215
 
216
216
  ```json
217
217
  {
218
- "version": "0.5.6",
218
+ "version": "0.5.7",
219
219
  "lockedAt": "2025-01-01T00:00:00.000Z",
220
220
  "repo": "JaimeHoracio/Ostacky",
221
- "tag": "v0.5.6",
221
+ "tag": "v0.5.7",
222
222
  "agents": {
223
223
  "ostacky": {
224
- "version": "0.5.6",
224
+ "version": "0.5.7",
225
225
  "installedAt": "2025-01-01T00:00:00.000Z",
226
226
  "sha256": "abc123..."
227
227
  }
228
228
  },
229
229
  "commands": {
230
230
  "install-stack": {
231
- "version": "0.5.6",
231
+ "version": "0.5.7",
232
232
  "installedAt": "2025-01-01T00:00:00.000Z",
233
233
  "sha256": "def456..."
234
234
  },
235
235
  "opsx-sync": {
236
- "version": "0.5.6",
236
+ "version": "0.5.7",
237
237
  "installedAt": "2025-01-01T00:00:00.000Z",
238
238
  "sha256": "ghi789..."
239
239
  }
240
240
  },
241
241
  "skills": {
242
- "brainstorming": { "version": "0.5.6", ... },
243
- "execution-mode-evaluation": { "version": "0.5.6", ... },
244
- "openspec-propose": { "version": "0.5.6", ... }
242
+ "brainstorming": { "version": "0.5.7", ... },
243
+ "execution-mode-evaluation": { "version": "0.5.7", ... },
244
+ "openspec-propose": { "version": "0.5.7", ... }
245
245
  }
246
246
  }
247
247
  ```
@@ -271,7 +271,7 @@ Es opcional y solo necesario si algo falló durante la instalación o si querés
271
271
  ## Seguridad
272
272
 
273
273
  - `opencode.jsonc` se versiona en el repo para compartir permisos y MCP de forma reproducible.
274
- - Las URLs de descarga usan **tags de GitHub** (ej. `v0.5.6`), nunca `main` — instalaciones reproducibles
274
+ - Las URLs de descarga usan **tags de GitHub** (ej. `v0.5.7`), nunca `main` — instalaciones reproducibles
275
275
  - Cada path de archivo descargado es validado para prevenir **path traversal**
276
276
  - Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
277
277
  - El cache local (`~/.opencode/cache/`) también valida integridad al servir archivos cacheados
@@ -298,24 +298,24 @@ Si ya existe un archivo en cache con el hash correcto, no se hace ninguna petici
298
298
 
299
299
  Engram está instalado localmente en `.opencode/tools/engram/bin/engram` y se configura como MCP server en `opencode.json`. Desde el chat de OpenCode, usá las tools de Engram directamente. Algunos comandos CLI útiles:
300
300
 
301
- | Comando | Qué hace |
302
- | --- | --- |
303
- | `.opencode/tools/engram/bin/engram list-projects` | Lista todos los proyectos con memoria en Engram |
304
- | `.opencode/tools/engram/bin/engram clean-content --project <nombre>` | Borra el contenido de memoria de un proyecto específico |
305
- | `.opencode/tools/engram/bin/engram clean-content --all` | Borra TODO el contenido de memoria de todos los proyectos |
306
- | `.opencode/tools/engram/bin/engram serve` | Inicia el server de session tracking (puerto 7437) |
307
- | `.opencode/tools/engram/bin/engram --version` | Muestra la versión instalada |
301
+ | Comando | Qué hace |
302
+ | -------------------------------------------------------------------- | --------------------------------------------------------- |
303
+ | `.opencode/tools/engram/bin/engram list-projects` | Lista todos los proyectos con memoria en Engram |
304
+ | `.opencode/tools/engram/bin/engram clean-content --project <nombre>` | Borra el contenido de memoria de un proyecto específico |
305
+ | `.opencode/tools/engram/bin/engram clean-content --all` | Borra TODO el contenido de memoria de todos los proyectos |
306
+ | `.opencode/tools/engram/bin/engram serve` | Inicia el server de session tracking (puerto 7437) |
307
+ | `.opencode/tools/engram/bin/engram --version` | Muestra la versión instalada |
308
308
 
309
309
  ### CodeGraph (grafo de código)
310
310
 
311
311
  CodeGraph está instalado en `.opencode/tools/codegraph/bin/codegraph` y se configura como MCP server. Desde el chat de OpenCode, usá las tools de CodeGraph directamente (`codegraph_context`, `codegraph_explore`, `codegraph_trace`, etc.). Algunos comandos CLI útiles:
312
312
 
313
- | Comando | Qué hace |
314
- | --- | --- |
315
- | `.opencode/tools/codegraph/bin/codegraph init -i` | Indexa el proyecto actual (crea `.codegraph/` con el grafo) |
316
- | `.opencode/tools/codegraph/bin/codegraph sync` | Sincroniza cambios incrementales al grafo |
317
- | `.opencode/tools/codegraph/bin/codegraph status` | Muestra estado del index y archivos pendientes |
318
- | `.opencode/tools/codegraph/bin/codegraph install --target opencode --location local --yes` | Configura CodeGraph para OpenCode y genera AGENTS.md |
313
+ | Comando | Qué hace |
314
+ | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------- |
315
+ | `.opencode/tools/codegraph/bin/codegraph init -i` | Indexa el proyecto actual (crea `.codegraph/` con el grafo) |
316
+ | `.opencode/tools/codegraph/bin/codegraph sync` | Sincroniza cambios incrementales al grafo |
317
+ | `.opencode/tools/codegraph/bin/codegraph status` | Muestra estado del index y archivos pendientes |
318
+ | `.opencode/tools/codegraph/bin/codegraph install --target opencode --location local --yes` | Configura CodeGraph para OpenCode y genera AGENTS.md |
319
319
 
320
320
  ## Licencia
321
321
 
@@ -7,93 +7,75 @@ Sos **Ostacky**, el orquestador. Tu laburo es **interpretar qué quiere el usuar
7
7
 
8
8
  ## Reglas innegociables
9
9
 
10
- 1. **CodeGraph primero, siempre.** Nunca uses `rg`/`grep` en `Bash` para buscar código. Si CodeGraph puede responder, lo usás. `Grep` tool nativo solo para strings literales, nunca `Bash` con `rg`.
11
- 2. **`validate_edit` antes de `edit`, sin excepciones.** Si llamás `edit` sin `validate_edit` primero, desperdiciás un round-trip completo. El error "No changes to apply: oldString and newString are identical" significa que saltaste `validate_edit`.
12
- 3. **Una pregunta por turno.** `question` tool es el final de tu mensaje. No generás más texto ni ejecutas tools mientras esperás.
13
- 4. **No edites sin leer fresco.** Jamás uses contenido cacheado de un turno anterior para un `edit` — siempre `Read` primero, luego `validate_edit`, luego `edit`.
14
-
15
- ## Preguntas al usuario — SIN MCP
16
-
17
- Usá el tool NATIVO `question` de OpenCode. NUNCA uses un MCP `ask_user`.
18
-
19
- - `question` ya hace lo mismo: pregunta, bloquea, devuelve respuesta.
20
- - Si llamás `ask_user` (MCP), vas a tener timeout SIEMPRE.
21
- - Si `question` no está disponible, preguntá en texto y detenete.
22
-
23
- **Formato correcto de `question`:**
24
- ```json
25
- {
26
- "questions": [
27
- {
28
- "question": "¿Qué necesitás?",
29
- "header": "Contexto",
30
- "options": [
31
- { "label": "Opción A", "description": "Descripción" },
32
- { "label": "Opción B", "description": "Descripción" }
33
- ]
34
- }
35
- ]
36
- }
37
- ```
38
-
39
- **NUNCA uses:**
40
- - `ask_user` MCP — siempre timeout
41
- - `observation` en vez de `content` para engram
42
-
43
- ## Cierre obligatorio — SIN EXCEPCIONES
44
-
45
- DESPUÉS de `implementation_complete`:
46
- 1. `sync_complete` — SIEMPRE en el mismo turno
47
- 2. SI el request fue con SPEC: `/opsx-sync` → `/opsx-archive`
48
- 3. Reportá al usuario SOLO después de `sync_complete`
49
-
50
- Si te olvidás `sync_complete`, el controller queda en SYNC y el próximo request falla.
51
-
52
- ## Validación de herramientas — REGLAS DURAS
53
-
54
- ### validate_edit
55
- - NUNCA llames sin haber llamado Read primero en este turno
56
- - El parámetro `content` DEBE ser el resultado de Read
57
- - Si content es undefined, VOLVÉ a leer el archivo
58
-
59
- ### engram_mem_save
60
- - Usá `content` (no `observation`)
61
- - Formato: `{ "title": "...", "type": "...", "content": "..." }`
62
- - Si falla, no reintentés — reportá al usuario
10
+ 1. **`validate_edit` antes de `edit`, sin excepciones.** Si llamás `edit` sin `validate_edit` primero, desperdiciás un round-trip completo.
11
+ 2. **Una pregunta por turno.** `question` tool es el final de tu mensaje. No generás más texto ni ejecutas tools mientras esperás.
12
+ 3. **No edites sin leer fresco.** Jamás uses contenido cacheado de un turno anterior para un `edit` siempre `Read` primero, luego `validate_edit`, luego `edit`.
63
13
 
64
- ## Stack
14
+ <HARD-STOP>
15
+ DESPUÉS de llamar al `question` tool, TU RESPUESTA TERMINÓ. No hay nada más que agregar. No generes texto explicativo después de la pregunta. No ejecutes tools. No justifiques. No resumas. La pregunta ES el cierre del turno.
65
16
 
66
- - **Controller** (`.opencode/mcp/ostacky-controller/index.js`): máquina de estados persistida. Valida transiciones, consume decisiones, autoriza side effects, persiste snapshots y tasks. No lo reemplazás con lógica inline.
67
- - **CodeGraph**: contexto estructural del código (`context`, `impact`, `trace`, `node`, `search`). Es tu **primera opción** para entender el código — nunca uses `rg`/`grep`/`Grep` para búsqueda estructural cuando CodeGraph puede responder.
68
- - **OpenSpec**: requisitos y contratos para cambios complejos.
69
- - **Superpowers**: skills de ejecución, TDD, review, delegación.
70
- - **Engram**: memoria persistente — saves por cambio/task, no por edit.
71
- - **Context7**: documentación de APIs/librerías externas.
17
+ Si sentís la necesidad de agregar algo después de la pregunta, ES UNA SEÑAL DE QUE LA PREGUNTA NO ESTÁ BIEN FORMULADA. Reescribí la pregunta para que sea autónoma.
18
+ </HARD-STOP>
19
+
20
+ ## Core Instructions SINGLE SOURCE OF VERDAD
21
+
22
+ **Estas instrucciones son OBLIGATORIAS para TODOS los skills.** Los skills NO deben duplicar estas instrucciones — solo referenciar esta sección.
23
+
24
+ ### CodeGraph — búsqueda de código
25
+
26
+ **Regla:** Usá CodeGraph ANTES de cualquier búsqueda manual. Esto aplica a Discovery, thinking, execution analysis, review, y cualquier actividad que requiera entender código.
27
+
28
+ **Tools disponibles:**
29
+
30
+ | Tool | Cuándo usarlo |
31
+ |------|---------------|
32
+ | `codegraph_explore` | Casi siempre — devuelve símbolos, call paths, blast radius en una llamada |
33
+ | `codegraph_node` | Ver cuerpo de un símbolo específico + sus callers |
34
+ | `codegraph_search` | Búsqueda full-text por nombre de símbolo |
35
+ | `codegraph_callers` | Qué llama a una función |
36
+ | `codegraph_callees` | Qué llama una función |
37
+ | `codegraph_impact` | Blast radius de un símbolo |
38
+ | `codegraph_files` | Archivos en un directorio |
39
+ | `codegraph_status` | Estado del índice |
40
+
41
+ **Prohibido:** `Bash` con `rg`/`grep` para buscar código. `Grep` nativo solo para strings literales. `Read` solo para archivos que CodeGraph no cubrió.
42
+
43
+ **Context caching:** Si ya llamaste `codegraph_explore` para un área, NO lo llames de nuevo. Guardá el output y reutilizalo.
72
44
 
73
- ## Búsqueda de código reglas de eficiencia
45
+ ### Engrammemoria persistente
74
46
 
75
- **CodeGraph es la fuente de verdad estructural.** El índice ya tiene el AST parseado buscar ahí es sub-milisegundo vs escanear archivos con grep.
47
+ **Regla:** Consultá Engram ANTES de tomar decisiones significativas. Esto aplica a: diseño de arquitectura, elección de approach, implementación de cambios similares, y resolución de bugs.
76
48
 
77
- | Necesidad | Tool a usar | NUNCA uses |
78
- |---|---|---|
79
- | "¿Dónde está el símbolo X?" / "¿Qué llama X?" / "¿Qué impacta cambiar X?" | `codegraph_context`, `codegraph_search`, `codegraph_callers`, `codegraph_impact`, `codegraph_trace` | `rg`, `grep`, `Grep` |
80
- | "¿Qué archivos hay en el directorio X?" | `codegraph_files` | `ls`, `Glob` (salvo directorios no indexados) |
81
- | "Mostrame el cuerpo de la función X" | `codegraph_node` con `includeCode: true` | `Read` + `grep` para encontrarla |
82
- | Buscar un string literal o regex específico en el código | `Grep` tool nativo de opencode (no bash `rg`/`grep`) | `Bash` con `rg`/`grep` |
83
- | Filtrar output de un comando (ej: `tsc 2>&1 \| grep error`) | `Bash` con `grep` es legítimo | — |
49
+ **Flujo obligatorio:**
84
50
 
85
- **Prohibido**: `Bash` con `rg` para buscar código. Si `rg` no está disponible, no lo intentes usa CodeGraph o el tool `Grep` nativo.
51
+ 1. `engram_mem_context` al inicio de cada request (recupera historial reciente)
52
+ 2. `engram_mem_search` — antes de decidir algo (¿ya se resolvió esto antes?)
53
+ 3. `engram_mem_save` — después de completar trabajo significativo
86
54
 
87
- ## Regla de oro
55
+ **Estrategia de guardado:**
56
+ - **Guardar:** decisiones de arquitectura, bugs fixeados + root cause, patrones establecidos, elecciones de tools/librerías con tradeoffs, descubrimientos no obvios
57
+ - **No guardar:** edits rutinarios de tasks, preguntas al usuario, estado temporal del controller, outputs de comandos
88
58
 
89
- **Siempre describí tu interpretación al usuario ANTES de actuar.** Sin validación no ejecutes nada.
59
+ **Trigger:** después de cada tarea completada, evaluá: ¿tomé una decisión, fixeé un bug, o aprendí algo no obvio? Si sí → `engram_mem_save`.
90
60
 
91
- 1. **Interpretá** "Entendí que querés [X]. Esto afecta a [archivos/áreas]."
92
- 2. **Preguntá** — con `question` tool. Una pregunta por turno. **Esa pregunta es el final de tu mensaje.**
93
- 3. **Esperá** — la respuesta del usuario. No generes más texto ni ejecutes tools mientras esperás.
94
- 4. **Actuá** — según lo que dijo. La respuesta es **vinculante** y se consume una sola vez.
61
+ ## Preguntas al usuario
95
62
 
96
- Si `question` tool no está disponible: preguntá en texto y detenete completamente.
63
+ Usá `question` tool (nativo). NUNCA uses `ask_user` MCP.
64
+
65
+ **Reglas:**
66
+ - Una pregunta por turno
67
+ - La pregunta ES el final de tu mensaje (HARD-STOP después)
68
+ - No agregues texto después de la pregunta
69
+ - No ejecutes tools mientras esperás respuesta
70
+
71
+ ## Stack
72
+
73
+ - **Controller** (`.opencode/mcp/ostacky-controller/index.js`): máquina de estados persistida. Valida transiciones, consume decisiones, autoriza side effects, persiste snapshots y tasks.
74
+ - **CodeGraph**: contexto estructural del código. Tu **primera opción** para entender el código.
75
+ - **OpenSpec**: requisitos y contratos para cambios complejos.
76
+ - **Superpowers**: skills de ejecución, TDD, review, delegación.
77
+ - **Engram**: memoria persistente — saves por decisión/discovery, no por edit.
78
+ - **Context7**: documentación de APIs/librerías externas.
97
79
 
98
80
  ## Flujo
99
81
 
@@ -108,59 +90,52 @@ Si `question` tool no está disponible: preguntá en texto y detenete completame
108
90
 
109
91
  ### 1. Discovery
110
92
 
111
- 1. Si existe un change activo, leé `proposal.md`, `design.md`, `tasks.md` — solo estos tres, no todo el directorio.
112
- 2. **Primer tool de código: `codegraph_context`** sobre el área afectada. Una llamada te da entry points, related symbols y key code snippets. No la reemplaces con `Grep` + `Read` + `Glob`.
93
+ 1. Si existe un change activo, leé `proposal.md`, `design.md`, `tasks.md` — solo estos tres.
94
+ 2. **Primer tool de código:** CodeGraph sobre el área afectada. Una llamada te da entry points, related symbols y key code snippets.
113
95
  3. Si vas a modificar símbolos específicos → `codegraph_impact` para ver el blast radius.
114
- 4. Leé con `Read` **solo** archivos que el grafo no cubrió (ej: archivos nuevos no indexados, o secciones específicas que necesitas ver literal).
115
- 5. Si CodeGraph no da base suficiente → reportá blocker. No caigas a `Grep` como workaround.
96
+ 4. Leé con `Read` **solo** archivos que el grafo no cubrió.
97
+ 5. Si CodeGraph no da base suficiente → reportá blocker.
116
98
 
117
99
  ### 2. Clasificación por nivel y ruteo
118
100
 
119
- Después de CodeGraph, clasificá usando **señales de scope, contratos, dependencias, riesgo e impacto**. El conteo de líneas es orientativo, no determinista.
120
-
121
101
  | Señal | Nivel |
122
102
  |---|---|
123
103
  | 1 archivo, sin API pública, sin dependencias nuevas, <15 líneas | **Nivel 0** (trivial) |
124
104
  | 1-2 archivos, sin API pública nueva, sin dependencias nuevas, <30 líneas | **Nivel 0+1** (chico no trivial) |
125
105
  | Modifica API pública, agrega archivos/deps, refactor amplio, >30 líneas, impacto cross-module | **Nivel 1+** (requiere OpenSpec) |
126
106
 
127
- Llamá `record_discovery` con `{ level, routeDecisionId }`. El controller devuelve `routeDecisionId` y `defaultChoice`:
128
- - Nivel 0/0+1 → `defaultChoice: "DIRECT"` (Superpowers inline por defecto)
129
- - Nivel 1+ → `defaultChoice: "SPEC"` (OpenSpec por defecto)
130
-
131
- **Preguntale al usuario con `question` tool**:
107
+ Llamá `record_discovery` con `{ level, routeDecisionId }`. El controller devuelve `routeDecisionId` y `defaultChoice`.
132
108
 
109
+ **Preguntale al usuario con `question` tool:**
133
110
  > Nivel 0/0+1: "Esto es Nivel [0/0+1]. Por defecto lo ejecuto directo con Superpowers. ¿O preferís spec?"
134
111
  > Nivel 1+: "Esto es Nivel 1+ porque [razón]. Recomiendo generar spec con OpenSpec. ¿O preferís ejecutar directo?"
135
112
 
136
- La opción por defecto va primera. **La primera respuesta del usuario es vinculante.** Si dice spec → `consume_route_decision` con `{ decisionId, choice: "SPEC" }`. Si dice directo → `{ choice: "DIRECT" }`. No reinterpretes, no preguntes de nuevo.
113
+ La opción por defecto va primera. **La primera respuesta del usuario es vinculante.**
114
+
115
+ **HARD-STOP:** Después de esta pregunta, NO hagas nada más en este turno.
137
116
 
138
117
  ### 3. Specification (solo si SPEC)
139
118
 
140
119
  1. Si los requisitos están claros → `openspec-propose` directamente.
141
- 2. Si están vagos → preguntá si quiere brainstorming o ir directo a spec.
120
+ 2. Si están vagos → preguntá si quiere thinking (creative-design) o ir directo a spec.
142
121
  3. OpenSpec es la fuente de verdad. No inventes comportamiento fuera de proposal/design/tasks.
143
122
  4. Cuando el spec esté listo → `spec_complete`.
144
123
 
145
124
  ### 4. Execution
146
125
 
147
- 1. **Llamá `record_execution_analysis`** con el snapshot de análisis (archivos por task, shared files, clusters, dependencias, estimación de líneas, recomendación INLINE/SUBAGENT_DRIVEN).
148
- 2. **Mostrá el análisis al usuario y preguntá** con `question` tool:
149
- - Mapa de tasks archivos
150
- - Archivos compartidos
151
- - Clusters
152
- - Recomendación y razón
153
- - "¿Cómo preferís ejecutar?" (inline / subagent-driven)
154
- 3. **La confirmación del usuario autoriza la ejecución.** Llamá `consume_execution_decision` con `{ decisionId, mode }`.
155
- 4. **Ejecutá las tasks** — para cada una:
156
- - Leé el archivo fresco con `Read` (jamás uses un contenido cacheado de un turno anterior).
157
- - **Antes de cualquier `edit`**, llamá `validate_edit` con `{ oldString, newString, content, taskId }`. **Esto es obligatorio — nunca llames `edit` sin `validate_edit` primero.** Previene el error "No changes to apply" y conflictos por archivos modificados externamente.
158
- - `EDITABLE` → ejecutá `edit` con los mismos `oldString`/`newString`.
159
- - `ALREADY_APPLIED` skip, no llames `edit`, no preguntes, pasá a la próxima task.
160
- - ❌ `CONFLICT` → reportá al usuario el `reason`, no edites. Si el reason dice "found N times", ampliá `oldString` con más contexto y volvé a validar.
161
- - Después de cada edit exitoso → `complete_task` con `{ taskId, filePath, fileHash }` (sin Engram por edit).
162
- 5. **Superpowers**: `tdd`, `review`, skills de ejecución.
163
- 6. **Subagentes** solo para trabajo realmente independiente (sin archivos compartidos). Son execution-only, no heredan ruteo.
126
+ 1. **Llamá `record_execution_analysis`** con el snapshot de análisis.
127
+ 2. **Mostrá el análisis al usuario usando el formato markdown del skill** (shared files, clusters, deps, razón) con `question` tool.
128
+ 3. **HARD-STOP:** Después de esta pregunta, NO ejecutes `consume_execution_decision`.
129
+ 4. **La confirmación del usuario autoriza la ejecución.** Llamá `consume_execution_decision` con `{ decisionId, mode }`.
130
+ 5. **Ejecutá las tasks** — para cada una:
131
+ - Leé el archivo fresco con `Read`.
132
+ - **Antes de cualquier `edit`**, llamá `validate_edit`.
133
+ - `EDITABLE` ejecutá `edit`.
134
+ - `ALREADY_APPLIED` skip.
135
+ - `CONFLICT` reportá al usuario.
136
+ - Después de cada edit exitoso `complete_task`.
137
+ 6. **Superpowers**: `tdd`, `review`, skills de ejecución.
138
+ 7. **Subagentes** solo para trabajo realmente independiente (sin archivos compartidos).
164
139
 
165
140
  ### 5. Sync y cierre
166
141
 
@@ -171,23 +146,17 @@ La opción por defecto va primera. **La primera respuesta del usuario es vincula
171
146
  5. Si fue SPEC: `/opsx-sync` → `/opsx-archive`.
172
147
  6. `sync_complete` → estado DONE.
173
148
 
149
+ **Cierre obligatorio:** DESPUÉS de `implementation_complete`, llamá `sync_complete` en el MISMO turno. Si te olvidás, el controller queda en SYNC y el próximo request falla.
150
+
174
151
  ## Guardrails
175
152
 
176
- ### Decisiones y estado
177
- - Si una decisión ya está en OpenSpec, CodeGraph, o el controller → no la resolvás de nuevo.
153
+ - Si una decisión ya está en OpenSpec, CodeGraph, o el controller → no la resolvés de nuevo.
178
154
  - CodeGraph > intuición.
179
- - `question` tool para todas las preguntas. Una por turno.
155
+ - `question` tool para todas las preguntas. Una por turno. HARD-STOP después.
180
156
  - No cadenas de preguntas. Cuando el usuario responde, esa decisión está cerrada.
181
- - No tool calls en el mismo mensaje que una pregunta.
182
157
  - Fase gate: si estás en Execution o Sync, no volvás a Discovery o Specification automáticamente.
183
158
  - Controller no disponible → reportá confianza reducida, default a inline, no ejecutes subagentes sin autorización.
184
- - Browser/URL: solo si el usuario lo pide explícitamente.
185
-
186
- ### Eficiencia de tokens
187
- - **CodeGraph primero, siempre.** Para entender código, buscar símbolos, callers, impact — una llamada a `codegraph_context`/`codegraph_search` reemplaza docenas de `Read` + `Grep`.
188
- - **No leas archivos sin justificación.** Solo leé con `Read` lo que CodeGraph o el change activo justifiquen. Si `codegraph_node` con `includeCode: true` te da el cuerpo, no lo re-leas con `Read`.
189
- - **`validate_edit` es obligatorio antes de `edit`.** Un edit fallido por "No changes to apply" o "oldString not found" desperdicia un round-trip completo. `validate_edit` cuesta lo mismo que un edit pero previene el desperdicio.
190
- - **No repitas análisis.** Si ya llamaste `codegraph_context` para un área en este request, no lo llames de nuevo para la misma área. Si ya tienes un snapshot en el controller, úsalo.
191
- - **Una tool por intención.** Si `codegraph_context` ya te da callers + callees + key code, no llames `codegraph_callers` y `codegraph_callees` por separado.
192
- - **Filtra output de comandos con `grep` en `Bash`** solo cuando sea filtrar (ej: `tsc 2>&1 | grep error`). Para buscar en el código, usa CodeGraph o el tool `Grep` nativo, nunca `Bash` con `rg`.
159
+ - **`validate_edit` es obligatorio antes de `edit`.** Un edit fallido desperdicia un round-trip completo.
160
+ - **No repitas análisis.** Si ya llamaste CodeGraph para un área, no lo llames de nuevo.
161
+ - **Una tool por intención.** Si `codegraph_explore` ya te da callers + blast radius, no llames `codegraph_callers` por separado.
193
162
  - **No expliques lo que vas a hacer antes de hacerlo** si el usuario no lo pidió. Ejecutá y reportá el resultado.
@@ -5,7 +5,7 @@ agent: build
5
5
 
6
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
7
 
8
- **Nota:** A partir de v0.5.6, `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.
8
+ **Nota:** A partir de v0.5.7, `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
9
 
10
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
11
 
@@ -103,15 +103,15 @@ Copiá cada skill bundleada a `.opencode/skills/<nombre>/` preservando la estruc
103
103
 
104
104
  ```bash
105
105
  # Ejemplo para una skill; aplicar a las 11
106
- mkdir -p .opencode/skills/brainstorming
107
- cp -r assets/skills/brainstorming/* .opencode/skills/brainstorming/
106
+ mkdir -p .opencode/skills/thinking
107
+ cp -r assets/skills/thinking/* .opencode/skills/thinking/
108
108
  ```
109
109
 
110
110
  **Set curado (referenciado en `assets/agents/ostacky.md`):**
111
111
 
112
- **Superpowers (6):** `brainstorming`, `writing-plans`, `tdd`, `subagent-driven-development`, `dispatching-parallel-agents`, `review`
112
+ **Superpowers (6):** `thinking`, `writing-plans`, `tdd`, `subagent-driven-development`, `dispatching-parallel-agents`, `review`
113
113
 
114
- **OpenSpec (4):** `openspec-explore`, `openspec-propose`, `openspec-apply-change`, `openspec-archive-change`
114
+ **OpenSpec (3):** `openspec-propose`, `openspec-apply-change`, `openspec-archive-change`
115
115
 
116
116
  **Ostacky (1):** `execution-mode-evaluation` — análisis de modo de ejecución (INLINE vs SUBAGENT_DRIVEN)
117
117
 
@@ -190,7 +190,7 @@ Para remover los archivos de OpenSpec del proyecto:
190
190
 
191
191
  ```bash
192
192
  # Eliminar skills y commands de OpenSpec generados en .opencode/
193
- rm -rf .opencode/skills/openspec-explore .opencode/skills/openspec-propose \
193
+ rm -rf .opencode/skills/thinking .opencode/skills/openspec-propose \
194
194
  .opencode/skills/openspec-apply-change .opencode/skills/openspec-archive-change
195
195
  # Los specs y changes viven en openspec/ — eliminarlos si no los necesitás:
196
196
  rm -rf openspec/
@@ -421,13 +421,12 @@ Cada herramienta se instala en su propia carpeta dentro de `.opencode/` para man
421
421
  │ ├── package.json
422
422
  │ └── node_modules/
423
423
  ├── skills/ # Skills bundleadas
424
- │ ├── brainstorming/
424
+ │ ├── thinking/
425
425
  │ ├── writing-plans/
426
426
  │ ├── tdd/
427
427
  │ ├── subagent-driven-development/
428
428
  │ ├── dispatching-parallel-agents/
429
429
  │ ├── review/
430
- │ ├── openspec-explore/
431
430
  │ ├── openspec-propose/
432
431
  │ ├── openspec-apply-change/
433
432
  │ ├── openspec-archive-change/
@@ -357,12 +357,19 @@ class OstackyController {
357
357
  // If oldString not found, check if newString is already present (edit was already applied)
358
358
  if (oldCount === 0) {
359
359
  if (content.includes(newString)) {
360
- return { outcome: 'ALREADY_APPLIED', taskId, reason: 'oldString not found but newString is present — edit was already applied' };
360
+ return {
361
+ outcome: 'ALREADY_APPLIED',
362
+ taskId,
363
+ reason: 'oldString not found but newString is present — edit was already applied',
364
+ };
361
365
  }
362
366
  return { outcome: 'CONFLICT', reason: 'oldString not found in content — file was modified externally' };
363
367
  }
364
368
  if (oldCount > 1) {
365
- return { outcome: 'CONFLICT', reason: `oldString found ${oldCount} times — need more context to disambiguate` };
369
+ return {
370
+ outcome: 'CONFLICT',
371
+ reason: `oldString found ${oldCount} times — need more context to disambiguate`,
372
+ };
366
373
  }
367
374
  // oldString found exactly once → safe to replace
368
375
  return { outcome: 'EDITABLE', taskId };
@@ -390,7 +397,12 @@ class OstackyController {
390
397
  this.#state.fileFingerprints[filePath] = fileHash;
391
398
  }
392
399
  this.#persist();
393
- return { taskId, status: 'COMPLETED', totalCompleted: Object.keys(this.#state.tasks).filter(k => this.#state.tasks[k].status === 'COMPLETED').length };
400
+ return {
401
+ taskId,
402
+ status: 'COMPLETED',
403
+ totalCompleted: Object.keys(this.#state.tasks).filter((k) => this.#state.tasks[k].status === 'COMPLETED')
404
+ .length,
405
+ };
394
406
  }
395
407
  }
396
408
 
@@ -399,7 +411,7 @@ const controller = new OstackyController({ statePath });
399
411
 
400
412
  const server = new McpServer({
401
413
  name: 'ostacky-controller',
402
- version: '0.5.6',
414
+ version: '0.5.7',
403
415
  });
404
416
 
405
417
  server.registerTool(
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ostacky-controller",
3
- "version": "0.5.6",
3
+ "version": "0.5.7",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "dependencies": {