ostacky 0.7.3 → 0.8.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.
- package/README.md +29 -24
- package/assets/agents/ostacky.md +82 -525
- package/assets/commands/install-stack.md +2 -2
- package/assets/docs/engram-protocol.md +79 -0
- package/assets/docs/ostacky-reference.md +79 -0
- package/assets/mcp/ostacky-controller/index.js +698 -228
- package/assets/mcp/ostacky-controller/package.json +1 -1
- package/assets/mcp/ostacky-controller/security.js +87 -0
- package/assets/plugins/engram.ts +47 -79
- package/assets/plugins/ostacky-guard.ts +11 -124
- package/assets/plugins/ostacky-plugin.ts +646 -0
- package/assets/skills/brainstorming/SKILL.md +198 -197
- package/assets/skills/execution-mode-evaluation/SKILL.md +9 -9
- package/assets/skills/graceful-degradation/SKILL.md +251 -248
- package/dist/cli.js +432 -135
- package/manifest.json +31 -31
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
# Ostacky
|
|
2
2
|
|
|
3
|
-
Ostacky es un **agent harness** para [OpenCode](https://opencode.ai). No es solo un agente más: es el orquestador que instalás en tu proyecto para que **
|
|
3
|
+
Ostacky es un **agent harness** para [OpenCode](https://opencode.ai). No es solo un agente más: es el orquestador que instalás en tu proyecto para que **4 herramientas** trabajen en sinergia sin pisarse y sin quemar tokens de mas.
|
|
4
4
|
|
|
5
|
-
| Herramienta | Rol | Define
|
|
6
|
-
| --------------------------------------------------------- | ------------------- |
|
|
7
|
-
| [CodeGraph](https://github.com/colbymchenry/codegraph) | Grafo de código | DÓNDE está el código y a quién impacta
|
|
8
|
-
| [OpenSpec](https://github.com/Fission-AI/OpenSpec/) | Especificaciones | QUÉ hay que construir y POR QUÉ
|
|
9
|
-
| [Superpowers](https://github.com/obra/superpowers) | Ejecución | CÓMO se implementa, prueba y revisa
|
|
10
|
-
| [Engram](https://github.com/Gentleman-Programming/engram) | Memoria persistente | QUÉ aprendimos en sesiones anteriores
|
|
11
|
-
| [Context7](https://context7.com) | Documentación viva | Documentación actualizada de librerías y APIs |
|
|
5
|
+
| Herramienta | Rol | Define |
|
|
6
|
+
| --------------------------------------------------------- | ------------------- | -------------------------------------- |
|
|
7
|
+
| [CodeGraph](https://github.com/colbymchenry/codegraph) | Grafo de código | DÓNDE está el código y a quién impacta |
|
|
8
|
+
| [OpenSpec](https://github.com/Fission-AI/OpenSpec/) | Especificaciones | QUÉ hay que construir y POR QUÉ |
|
|
9
|
+
| [Superpowers](https://github.com/obra/superpowers) | Ejecución | CÓMO se implementa, prueba y revisa |
|
|
10
|
+
| [Engram](https://github.com/Gentleman-Programming/engram) | Memoria persistente | QUÉ aprendimos en sesiones anteriores |
|
|
12
11
|
|
|
13
12
|
Ostacky las rutea según el **nivel de impacto del cambio** (Nivel 0, Nivel 0+1, Nivel 1+), priorizando siempre eficiencia de tokens y preguntándote antes de actuar. Para cambios grandes usa OpenSpec (spec-driven development); para cambios chicos ejecuta directo con Superpowers skills.
|
|
14
13
|
|
|
@@ -22,7 +21,7 @@ Después de instalar Ostacky (con `npx ostacky install`), necesitás iniciar Ope
|
|
|
22
21
|
opencode
|
|
23
22
|
```
|
|
24
23
|
|
|
25
|
-
Abre la interfaz de terminal interactiva.
|
|
24
|
+
Abre la interfaz de terminal interactiva. **Para elegir el agente Ostacky: usá `Tab` para navegar entre agentes** en el panel lateral, o escribí `/agent Ostacky` en el chat.
|
|
26
25
|
|
|
27
26
|
### Web UI — para usar desde el navegador
|
|
28
27
|
|
|
@@ -30,7 +29,7 @@ Abre la interfaz de terminal interactiva. Seleccioná el agente `@Ostacky` desde
|
|
|
30
29
|
opencode web --port 4096
|
|
31
30
|
```
|
|
32
31
|
|
|
33
|
-
Abre OpenCode en el navegador en `http://localhost:4096`. Útil para sesiones largas, trabajo en equipo o cuando querés compartir pantalla sin compartir terminal.
|
|
32
|
+
Abre OpenCode en el navegador en `http://localhost:4096`. **Para elegir el agente Ostacky: abrí el combo/selector de agentes** en la barra superior y seleccioná "Ostacky". Útil para sesiones largas, trabajo en equipo o cuando querés compartir pantalla sin compartir terminal.
|
|
34
33
|
|
|
35
34
|
Opciones útiles:
|
|
36
35
|
|
|
@@ -51,7 +50,7 @@ Opciones útiles:
|
|
|
51
50
|
|
|
52
51
|
## Stack
|
|
53
52
|
|
|
54
|
-
Ostacky integra **
|
|
53
|
+
Ostacky integra **4 herramientas** especializadas para que trabajen en conjunto sin pisarse:
|
|
55
54
|
|
|
56
55
|
### Cómo trabajan en sinergia
|
|
57
56
|
|
|
@@ -59,7 +58,6 @@ Ostacky integra **5 herramientas** especializadas para que trabajen en conjunto
|
|
|
59
58
|
2. **OpenSpec** documenta requisitos, contratos y escenarios de aceptación (proposal → design → spec → tasks).
|
|
60
59
|
3. **Superpowers** ejecuta con TDD, testing automatizado y review (brainstorming → plans → tdd → review).
|
|
61
60
|
4. **Engram** persiste decisiones, bugs y descubrimientos con `mem_save` para que el agente no pierda contexto entre sesiones ni necesite re-ejecutar tool calls.
|
|
62
|
-
5. **Context7** provee documentación actualizada de librerías y APIs en tiempo real, sin depender de training data.
|
|
63
61
|
|
|
64
62
|
Ostacky decide **cuándo y cómo** usar cada herramienta según el **nivel de impacto** del cambio:
|
|
65
63
|
|
|
@@ -221,33 +219,33 @@ Tras instalar, el proyecto queda así:
|
|
|
221
219
|
|
|
222
220
|
```json
|
|
223
221
|
{
|
|
224
|
-
"version": "0.
|
|
222
|
+
"version": "0.8.0",
|
|
225
223
|
"lockedAt": "2025-01-01T00:00:00.000Z",
|
|
226
224
|
"repo": "JaimeHoracio/Ostacky",
|
|
227
|
-
"tag": "v0.
|
|
225
|
+
"tag": "v0.8.0",
|
|
228
226
|
"agents": {
|
|
229
227
|
"ostacky": {
|
|
230
|
-
"version": "0.
|
|
228
|
+
"version": "0.8.0",
|
|
231
229
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
232
230
|
"sha256": "abc123..."
|
|
233
231
|
}
|
|
234
232
|
},
|
|
235
233
|
"commands": {
|
|
236
234
|
"install-stack": {
|
|
237
|
-
"version": "0.
|
|
235
|
+
"version": "0.8.0",
|
|
238
236
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
239
237
|
"sha256": "def456..."
|
|
240
238
|
},
|
|
241
239
|
"opsx-sync": {
|
|
242
|
-
"version": "0.
|
|
240
|
+
"version": "0.8.0",
|
|
243
241
|
"installedAt": "2025-01-01T00:00:00.000Z",
|
|
244
242
|
"sha256": "ghi789..."
|
|
245
243
|
}
|
|
246
244
|
},
|
|
247
245
|
"skills": {
|
|
248
|
-
"brainstorming": { "version": "0.
|
|
249
|
-
"execution-mode-evaluation": { "version": "0.
|
|
250
|
-
"openspec-propose": { "version": "0.
|
|
246
|
+
"brainstorming": { "version": "0.8.0", ... },
|
|
247
|
+
"execution-mode-evaluation": { "version": "0.8.0", ... },
|
|
248
|
+
"openspec-propose": { "version": "0.8.0", ... }
|
|
251
249
|
}
|
|
252
250
|
}
|
|
253
251
|
```
|
|
@@ -259,10 +257,10 @@ Se recomienda agregar `ostacky-lock.json` al control de versiones para que el eq
|
|
|
259
257
|
Al terminar la instalación, el flujo normal es:
|
|
260
258
|
|
|
261
259
|
1. **Iniciar OpenCode** (si no está corriendo):
|
|
262
|
-
- **TUI:** `opencode` en tu terminal
|
|
263
|
-
- **Web:** `opencode web --port 4096` y abrí `http://localhost:4096`
|
|
260
|
+
- **TUI:** `opencode` en tu terminal → **usá `Tab` para navegar al agente Ostacky** en el panel lateral
|
|
261
|
+
- **Web:** `opencode web --port 4096` y abrí `http://localhost:4096` → **abrí el combo/selector de agentes** en la barra superior y elegí "Ostacky"
|
|
264
262
|
2. OpenCode detecta automáticamente los archivos nuevos en `.opencode/` al iniciar, no necesita recarga manual.
|
|
265
|
-
3. Para usar el agente **escribí `@Ostacky`** en el chat de OpenCode (TUI o web) y enviá tu mensaje. También podés seleccionarlo desde el selector de agentes
|
|
263
|
+
3. Para usar el agente **escribí `@Ostacky`** en el chat de OpenCode (TUI o web) y enviá tu mensaje. También podés seleccionarlo desde el selector de agentes (ver arriba cómo).
|
|
266
264
|
|
|
267
265
|
### Regenerar el stack manualmente
|
|
268
266
|
|
|
@@ -277,7 +275,7 @@ Es opcional y solo necesario si algo falló durante la instalación o si querés
|
|
|
277
275
|
## Seguridad
|
|
278
276
|
|
|
279
277
|
- `opencode.jsonc` se versiona en el repo para compartir permisos y MCP de forma reproducible.
|
|
280
|
-
- Las URLs de descarga usan **tags de GitHub** (ej. `v0.
|
|
278
|
+
- Las URLs de descarga usan **tags de GitHub** (ej. `v0.8.0`), nunca `main` — instalaciones reproducibles
|
|
281
279
|
- Cada path de archivo descargado es validado para prevenir **path traversal**
|
|
282
280
|
- Los archivos incluyen **checksum SHA-256** opcional; si el manifest lo define, el contenido se verifica antes de escribir
|
|
283
281
|
- El cache local (`.opencode/cache/`) también valida integridad al servir archivos cacheados
|
|
@@ -288,6 +286,13 @@ Es opcional y solo necesario si algo falló durante la instalación o si querés
|
|
|
288
286
|
- La sesión sigue ejecutándose después del bloqueo porque `experimental.continue_loop_on_deny` está activado.
|
|
289
287
|
- Para worktrees, el repo prefiere `.worktrees/` o `worktrees/` (ambos project-local).
|
|
290
288
|
|
|
289
|
+
#### Patrones sensibles configurables (hardening-v2)
|
|
290
|
+
|
|
291
|
+
- Variable `OSTACKY_SENSITIVE_PATTERNS` overridea los patrones por defecto (`**/.env*`, `**/.secrets/**`, `**/*.pem`, `**/*.key`, `**/.aws/**`, `**/.ssh/**`, `**/credentials.json`, `**/.npmrc`).
|
|
292
|
+
- Ejemplo: `OSTACKY_SENSITIVE_PATTERNS="**/.env*,**/.secrets/**" bunx ostacky doctor` — `doctor` imprime el patrón efectivo.
|
|
293
|
+
- Allowlist: `.env.example`, `.env.template`, `.env.sample` nunca se bloquean.
|
|
294
|
+
- Fuente única: `src/security.ts` (`SENSITIVE_DEFAULT`, `isSensitive`, `BASH_SENSITIVE_RE`) — guard y controller usan la misma lógica (ver `doctor` para verificar).
|
|
295
|
+
|
|
291
296
|
#### Aislamiento de worktrees (harness-prod-hardening)
|
|
292
297
|
|
|
293
298
|
Cada worktree de git tiene su **propio** `ostacky-state.json` aislado (resuelto via `findProjectRoot()` con `git rev-parse --show-toplevel`). Dos worktrees no comparten `statePath`, locks ni backups — 3 agentes en 3 worktrees no corrompen el estado del otro. Ver `assets/skills/using-git-worktrees/SKILL.md` §Ostacky Worktree Isolation y `src/fs.ts:findProjectRoot`.
|