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,189 +1,189 @@
1
- ---
2
- name: execution-mode-evaluation
3
- description: Decide entre ejecución inline o subagent-driven según el análisis de CodeGraph. Úsalo cuando tengas tasks de implementación y necesites determinar el modo de ejecución óptimo.
4
- license: MIT
5
- compatibility: Requires CodeGraph MCP server and OpenSpec tasks.md
6
- metadata:
7
- author: Ostacky
8
- version: "2.0"
9
- ---
10
-
11
- **IMPORTANT:** Engram is an **MCP server**, not a skill. Tools `mem_save`, `mem_search`, `mem_context` are MCP tools. Do NOT use `skill("engram")` — it doesn't exist.
12
-
13
- # Skill: execution-mode-evaluation
14
-
15
- Determinar el modo de ejecución óptimo entre **inline** y **subagent-driven** usando datos concretos de CodeGraph. La decisión sigue reglas estrictas en orden de precedencia.
16
-
17
- ## Input necesario
18
-
19
- | Dato | Fuente | Obligatorio |
20
- |------|--------|-------------|
21
- | Tasks del change | `tasks.md` del cambio activo | ✅ |
22
- | Archivos que modifica cada task | `codegraph_explore` o lectura directa | ✅ |
23
- | Blast radius por símbolo | `codegraph_impact` | Para alta precisión |
24
- | Contratos entre tasks | `design.md` | Para evaluar dependencias |
25
-
26
- ## Procedimiento
27
-
28
- ### Paso 0: Verificar datos existentes en contexto
29
-
30
- Si ya tenés output de `codegraph_explore` para el área del cambio **Y** ese output distingue archivos por task → **saltá al Paso 0.5**. Si no, ejecutá el Paso 1.
31
-
32
- ### Paso 0.1: Consultar Engram por decisiones previas
33
-
34
- `mem_search` con keywords del cambio (nombre del módulo, área afectada). Si existe una decisión de modo de ejecución anterior para un cambio similar, considerarla como referencia — no como vinculante. Las condiciones pueden haber cambiado.
35
-
36
- ### Paso 0.5: Early exit para cambios pequeños
37
-
38
- Si el change tiene **≤2 tasks** Y **no comparten archivos entre sí** → devolver directamente:
39
-
40
- ```json
41
- {
42
- "recommendation": "INLINE",
43
- "reasons": ["Cambio pequeño (≤2 tasks independientes sin archivos compartidos)."],
44
- "codegraphUsed": [], "taskCount": <N>, "sharedFiles": {},
45
- "fileClusters": [<cada task como cluster>], "clusterCount": <taskCount>,
46
- "sequentialDeps": [], "estLines": <est>, "hasExplicitContract": false,
47
- "filesPerTask": {}, "globalRuleTriggered": "early-exit"
48
- }
49
- ```
50
-
51
- ### Paso 1: Obtener datos de CodeGraph
52
-
53
- ```
54
- codegraph_explore con query: "<área del cambio>"
55
- ```
56
-
57
- Si el output es muy general → `codegraph_impact` sobre símbolos centrales para blast radius preciso.
58
- Si CodeGraph no está inicializado → devolver `{ "recommendation": "INLINE", "confidence": 0.3, "reasons": ["CodeGraph no disponible"], "codegraphUsed": [] }`.
59
-
60
- ### Paso 2: Construir mapa de dependencias
61
-
62
- ```
63
- taskCount: total tasks de implementación
64
- sharedFiles: { archivo → [tasks que lo modifican] }
65
- sequentialDeps: [ [taskA, taskB], ... ] // B necesita que A esté hecho
66
- fileClusters: componentes conectados por sharedFiles (cierre transitivo)
67
- filesPerTask: { task → [archivos que modifica] }
68
- estLines: estimación conservadora (~2-3 config, ~5-10 simple, ~15-30 complejo, ~10-20 tests)
69
- ```
70
-
71
- **Detección de sequentialDeps:** buscar en tasks.md frases como "extender", "usar lo creado en", "depende de", "modificar el [módulo] de la task anterior".
72
-
73
- ### Paso 3a: Reglas de modo global (en orden, primera que se cumpla decide)
74
-
75
- | # | Condición | Modo | Razón |
76
- |---|-----------|------|-------|
77
- | **1** | `clusterCount == 1` Y cluster tiene tamaño > 1 | INLINE | Todos comparten archivos en un único cluster — imposible paralelizar |
78
- | **2a** | `clusterCount >= 2` Y hay deps entre clusters Y `hasExplicitContract == false` | INLINE | Deps secuenciales entre clusters sin contrato explícito |
79
- | **2b** | `clusterCount >= 2` Y (NO hay deps entre clusters O contrato explícito) | SUBAGENT-DRIVEN | Cada cluster → 1 subagente. Tasks intra-cluster van secuenciales |
80
- | **3a** | `clusterCount == taskCount` Y `taskCount < 3` | INLINE | Muy pocas tasks para amortizar overhead de subagentes |
81
- | **3b** | `clusterCount == taskCount` Y `estLines < 30` | INLINE | Cambio pequeño — inline más eficiente en tokens |
82
- | **3c** | `clusterCount == taskCount` (ninguna anterior) | SUBAGENT-DRIVEN | Tasks independientes — subagentes aíslan contexto |
83
-
84
- **Excepción:** instrucciones explícitas del usuario ("hacé todo inline" / "usá subagentes") tienen prioridad total.
85
-
86
- **Regla 2b — dispatch por clusters:** el subagente recibe el CLUSTER COMPLETO (no tasks individuales), las resuelve secuencialmente (comparten archivos). Diferentes clusters corren en paralelo.
87
-
88
- ### Paso 3b: Evaluación por fases (solo si modo global es INLINE)
89
-
90
- Si global es SUBAGENT-DRIVEN → saltar (ya está granularizado por cluster).
91
-
92
- Para cada fase de `tasks.md`, evaluar intra-fase:
93
-
94
- | Condición | Modo fase |
95
- |-----------|-----------|
96
- | sharedFiles intra-fase > 0 | INLINE |
97
- | sharedFiles con fases inline > 0 | INLINE |
98
- | sequentialDeps intra-fase > 0 Y sin contrato | INLINE |
99
- | taskCount fase < 4 | INLINE |
100
- | estLines fase < 30 | INLINE |
101
- | Ninguna anterior | SUBAGENT-DRIVEN |
102
-
103
- **Orden de ejecución:** fases inline primero (establecen base), luego fases subagent-driven (consumen base).
104
-
105
- ### Paso 4: Output
106
-
107
- **Snapshot para el controller (JSON):**
108
-
109
- ```json
110
- {
111
- "recommendation": "INLINE" | "SUBAGENT_DRIVEN",
112
- "reasons": ["razón principal", "razón secundaria"],
113
- "codegraphUsed": ["codegraph_explore"],
114
- "taskCount": <N>,
115
- "sharedFiles": { "src/archivo.ts": ["task1", "task2"] },
116
- "fileClusters": [["task1", "task2"], ["task3"]],
117
- "clusterCount": <N>,
118
- "sequentialDeps": [],
119
- "estLines": <N>,
120
- "hasExplicitContract": false,
121
- "filesPerTask": { "task1": ["src/archivo.ts"] },
122
- "globalRuleTriggered": "1" | "2a" | "2b" | "3a" | "3b" | "3c" | "early-exit",
123
- "phaseRecommendations": []
124
- }
125
- ```
126
-
127
- **Output para el usuario (mostrar en lenguaje natural):**
128
-
129
- ```markdown
130
- ## Análisis de modo de ejecución
131
-
132
- **Recomendación:** INLINE / SUBAGENT_DRIVEN
133
-
134
- ### Archivos compartidos entre tasks
135
- | Archivo | Tasks que lo modifican |
136
- |---------|------------------------|
137
- | `src/auth.ts` | task1, task2 |
138
- | `src/utils.ts` | task3 |
139
-
140
- ### Clusters detectados
141
- | Cluster | Tasks | Archivos |
142
- |---------|-------|----------|
143
- | A | task1, task2 | src/auth.ts |
144
- | B | task3 | src/utils.ts |
145
-
146
- ### Dependencias secuenciales
147
- - task2 depende de task1 (usa lo creado en)
148
-
149
- ### Razón principal
150
- [Regla 2a]: Deps secuenciales entre clusters sin contrato explícito → INLINE
151
-
152
- ### Estimación
153
- ~45 líneas en 2 archivos
154
- ```
155
-
156
- **Campos del snapshot (contrato con controller):**
157
-
158
- | Campo | Descripción |
159
- |-------|-------------|
160
- | `recommendation` | `INLINE` o `SUBAGENT_DRIVEN` |
161
- | `reasons` | Array — primera es la principal |
162
- | `codegraphUsed` | Tools de CodeGraph ejecutados |
163
- | `filesPerTask` | taskId → [archivos que modifica] |
164
- | `sharedFiles` | archivo → [tasks que lo tocan] |
165
- | `fileClusters` | Componentes conectados por sharedFiles |
166
- | `clusterCount` | `== 1` todo conectado, `== taskCount` todo independiente |
167
- | `sequentialDeps` | Dependencias secuenciales entre tasks |
168
- | `estLines` | Estimación conservadora |
169
- | `hasExplicitContract` | `true` si design.md explicita contratos |
170
-
171
- **⚠️ Este skill provee ANÁLISIS, no autorización.** El coordinador muestra el snapshot al usuario y pide confirmación en lenguaje natural, luego espera la respuesta.
172
-
173
- ## Ejemplo compacto
174
-
175
- 5 tasks, 3 clusters independientes (A: task1+task2 en `workflow.ts`, B: task3+task4 en `structured.ts`, C: task5 en archivo nuevo), sin deps entre clusters:
176
-
177
- → Rule 2b: SUBAGENT-DRIVEN. SA-1 ejecuta cluster A secuencial, SA-2 ejecuta cluster B secuencial, SA-3 ejecuta cluster C. Los 3 corren en paralelo. ✅
178
-
179
- ## Checklist
180
-
181
- - [ ] Ejecuté `codegraph_explore` (o verifiqué datos existentes)?
182
- - [ ] Construí mapa de dependencias con `fileClusters`?
183
- - [ ] Identifiqué clusters (componentes conectados)?
184
- - [ ] Verifiqué deps ENTRE clusters (no solo intra)?
185
- - [ ] Apliqué reglas en orden (1→2a/2b→3a/3b/3c)?
186
- - [ ] Anoté `globalRuleTriggered`?
187
- - [ ] Si global es inline, ejecuté Paso 3b por fase?
188
- - [ ] Si global es subagent por clusters (Rule 2b), documenté dispatch?
189
- - [ ] Output es JSON válido con todos los campos del contrato?
1
+ ---
2
+ name: execution-mode-evaluation
3
+ description: Decide entre ejecución inline o subagent-driven según el análisis de CodeGraph. Úsalo cuando tengas tasks de implementación y necesites determinar el modo de ejecución óptimo.
4
+ license: MIT
5
+ compatibility: Requires CodeGraph MCP server and OpenSpec tasks.md
6
+ metadata:
7
+ author: Ostacky
8
+ version: "2.0"
9
+ ---
10
+
11
+ **IMPORTANT:** Engram is an **MCP server**, not a skill. Tools `mem_save`, `mem_search`, `mem_context` are MCP tools. Do NOT use `skill("engram")` — it doesn't exist.
12
+
13
+ # Skill: execution-mode-evaluation
14
+
15
+ Determinar el modo de ejecución óptimo entre **inline** y **subagent-driven** usando datos concretos de CodeGraph. La decisión sigue reglas estrictas en orden de precedencia.
16
+
17
+ ## Input necesario
18
+
19
+ | Dato | Fuente | Obligatorio |
20
+ |------|--------|-------------|
21
+ | Tasks del change | `tasks.md` del cambio activo | ✅ |
22
+ | Archivos que modifica cada task | `codegraph_explore` o lectura directa | ✅ |
23
+ | Blast radius por símbolo | `codegraph_impact` | Para alta precisión |
24
+ | Contratos entre tasks | `design.md` | Para evaluar dependencias |
25
+
26
+ ## Procedimiento
27
+
28
+ ### Paso 0: Verificar datos existentes en contexto
29
+
30
+ Si ya tenés output de `codegraph_explore` para el área del cambio **Y** ese output distingue archivos por task → **saltá al Paso 0.5**. Si no, ejecutá el Paso 1.
31
+
32
+ ### Paso 0.1: Consultar Engram por decisiones previas
33
+
34
+ `mem_search` con keywords del cambio (nombre del módulo, área afectada). Si existe una decisión de modo de ejecución anterior para un cambio similar, considerarla como referencia — no como vinculante. Las condiciones pueden haber cambiado.
35
+
36
+ ### Paso 0.5: Early exit para cambios pequeños
37
+
38
+ Si el change tiene **≤2 tasks** Y **no comparten archivos entre sí** → devolver directamente:
39
+
40
+ ```json
41
+ {
42
+ "recommendation": "INLINE",
43
+ "reasons": ["Cambio pequeño (≤2 tasks independientes sin archivos compartidos)."],
44
+ "codegraphUsed": [], "taskCount": <N>, "sharedFiles": {},
45
+ "fileClusters": [<cada task como cluster>], "clusterCount": <taskCount>,
46
+ "sequentialDeps": [], "estLines": <est>, "hasExplicitContract": false,
47
+ "filesPerTask": {}, "globalRuleTriggered": "early-exit"
48
+ }
49
+ ```
50
+
51
+ ### Paso 1: Obtener datos de CodeGraph
52
+
53
+ ```
54
+ codegraph_explore con query: "<área del cambio>"
55
+ ```
56
+
57
+ Si el output es muy general → `codegraph_impact` sobre símbolos centrales para blast radius preciso.
58
+ Si CodeGraph no está inicializado → devolver `{ "recommendation": "INLINE", "confidence": 0.3, "reasons": ["CodeGraph no disponible"], "codegraphUsed": [] }`.
59
+
60
+ ### Paso 2: Construir mapa de dependencias
61
+
62
+ ```
63
+ taskCount: total tasks de implementación
64
+ sharedFiles: { archivo → [tasks que lo modifican] }
65
+ sequentialDeps: [ [taskA, taskB], ... ] // B necesita que A esté hecho
66
+ fileClusters: componentes conectados por sharedFiles (cierre transitivo)
67
+ filesPerTask: { task → [archivos que modifica] }
68
+ estLines: estimación conservadora (~2-3 config, ~5-10 simple, ~15-30 complejo, ~10-20 tests)
69
+ ```
70
+
71
+ **Detección de sequentialDeps:** buscar en tasks.md frases como "extender", "usar lo creado en", "depende de", "modificar el [módulo] de la task anterior".
72
+
73
+ ### Paso 3a: Reglas de modo global (en orden, primera que se cumpla decide)
74
+
75
+ | # | Condición | Modo | Razón |
76
+ |---|-----------|------|-------|
77
+ | **1** | `clusterCount == 1` Y cluster tiene tamaño > 1 | INLINE | Todos comparten archivos en un único cluster — imposible paralelizar |
78
+ | **2a** | `clusterCount >= 2` Y hay deps entre clusters Y `hasExplicitContract == false` | INLINE | Deps secuenciales entre clusters sin contrato explícito |
79
+ | **2b** | `clusterCount >= 2` Y (NO hay deps entre clusters O contrato explícito) | SUBAGENT-DRIVEN | Cada cluster → 1 subagente. Tasks intra-cluster van secuenciales |
80
+ | **3a** | `clusterCount == taskCount` Y `taskCount < 3` | INLINE | Muy pocas tasks para amortizar overhead de subagentes |
81
+ | **3b** | `clusterCount == taskCount` Y `estLines < 30` | INLINE | Cambio pequeño — inline más eficiente en tokens |
82
+ | **3c** | `clusterCount == taskCount` (ninguna anterior) | SUBAGENT-DRIVEN | Tasks independientes — subagentes aíslan contexto |
83
+
84
+ **Excepción:** instrucciones explícitas del usuario ("hacé todo inline" / "usá subagentes") tienen prioridad total.
85
+
86
+ **Regla 2b — dispatch por clusters:** el subagente recibe el CLUSTER COMPLETO (no tasks individuales), las resuelve secuencialmente (comparten archivos). Diferentes clusters corren en paralelo.
87
+
88
+ ### Paso 3b: Evaluación por fases (solo si modo global es INLINE)
89
+
90
+ Si global es SUBAGENT-DRIVEN → saltar (ya está granularizado por cluster).
91
+
92
+ Para cada fase de `tasks.md`, evaluar intra-fase:
93
+
94
+ | Condición | Modo fase |
95
+ |-----------|-----------|
96
+ | sharedFiles intra-fase > 0 | INLINE |
97
+ | sharedFiles con fases inline > 0 | INLINE |
98
+ | sequentialDeps intra-fase > 0 Y sin contrato | INLINE |
99
+ | taskCount fase < 4 | INLINE |
100
+ | estLines fase < 30 | INLINE |
101
+ | Ninguna anterior | SUBAGENT-DRIVEN |
102
+
103
+ **Orden de ejecución:** fases inline primero (establecen base), luego fases subagent-driven (consumen base).
104
+
105
+ ### Paso 4: Output
106
+
107
+ **Snapshot para el controller (JSON):**
108
+
109
+ ```json
110
+ {
111
+ "recommendation": "INLINE" | "SUBAGENT_DRIVEN",
112
+ "reasons": ["razón principal", "razón secundaria"],
113
+ "codegraphUsed": ["codegraph_explore"],
114
+ "taskCount": <N>,
115
+ "sharedFiles": { "src/archivo.ts": ["task1", "task2"] },
116
+ "fileClusters": [["task1", "task2"], ["task3"]],
117
+ "clusterCount": <N>,
118
+ "sequentialDeps": [],
119
+ "estLines": <N>,
120
+ "hasExplicitContract": false,
121
+ "filesPerTask": { "task1": ["src/archivo.ts"] },
122
+ "globalRuleTriggered": "1" | "2a" | "2b" | "3a" | "3b" | "3c" | "early-exit",
123
+ "phaseRecommendations": []
124
+ }
125
+ ```
126
+
127
+ **Output para el usuario (mostrar en lenguaje natural):**
128
+
129
+ ```markdown
130
+ ## Análisis de modo de ejecución
131
+
132
+ **Recomendación:** INLINE / SUBAGENT_DRIVEN
133
+
134
+ ### Archivos compartidos entre tasks
135
+ | Archivo | Tasks que lo modifican |
136
+ |---------|------------------------|
137
+ | `src/auth.ts` | task1, task2 |
138
+ | `src/utils.ts` | task3 |
139
+
140
+ ### Clusters detectados
141
+ | Cluster | Tasks | Archivos |
142
+ |---------|-------|----------|
143
+ | A | task1, task2 | src/auth.ts |
144
+ | B | task3 | src/utils.ts |
145
+
146
+ ### Dependencias secuenciales
147
+ - task2 depende de task1 (usa lo creado en)
148
+
149
+ ### Razón principal
150
+ [Regla 2a]: Deps secuenciales entre clusters sin contrato explícito → INLINE
151
+
152
+ ### Estimación
153
+ ~45 líneas en 2 archivos
154
+ ```
155
+
156
+ **Campos del snapshot (contrato con controller):**
157
+
158
+ | Campo | Descripción |
159
+ |-------|-------------|
160
+ | `recommendation` | `INLINE` o `SUBAGENT_DRIVEN` |
161
+ | `reasons` | Array — primera es la principal |
162
+ | `codegraphUsed` | Tools de CodeGraph ejecutados |
163
+ | `filesPerTask` | taskId → [archivos que modifica] |
164
+ | `sharedFiles` | archivo → [tasks que lo tocan] |
165
+ | `fileClusters` | Componentes conectados por sharedFiles |
166
+ | `clusterCount` | `== 1` todo conectado, `== taskCount` todo independiente |
167
+ | `sequentialDeps` | Dependencias secuenciales entre tasks |
168
+ | `estLines` | Estimación conservadora |
169
+ | `hasExplicitContract` | `true` si design.md explicita contratos |
170
+
171
+ **⚠️ Este skill provee ANÁLISIS, no autorización.** El coordinador muestra el snapshot al usuario y pide confirmación en lenguaje natural, luego espera la respuesta.
172
+
173
+ ## Ejemplo compacto
174
+
175
+ 5 tasks, 3 clusters independientes (A: task1+task2 en `workflow.ts`, B: task3+task4 en `structured.ts`, C: task5 en archivo nuevo), sin deps entre clusters:
176
+
177
+ → Rule 2b: SUBAGENT-DRIVEN. SA-1 ejecuta cluster A secuencial, SA-2 ejecuta cluster B secuencial, SA-3 ejecuta cluster C. Los 3 corren en paralelo. ✅
178
+
179
+ ## Checklist
180
+
181
+ - [ ] Ejecuté `codegraph_explore` (o verifiqué datos existentes)?
182
+ - [ ] Construí mapa de dependencias con `fileClusters`?
183
+ - [ ] Identifiqué clusters (componentes conectados)?
184
+ - [ ] Verifiqué deps ENTRE clusters (no solo intra)?
185
+ - [ ] Apliqué reglas en orden (1→2a/2b→3a/3b/3c)?
186
+ - [ ] Anoté `globalRuleTriggered`?
187
+ - [ ] Si global es inline, ejecuté Paso 3b por fase?
188
+ - [ ] Si global es subagent por clusters (Rule 2b), documenté dispatch?
189
+ - [ ] Output es JSON válido con todos los campos del contrato?