@ancleto/spec 0.6.2 → 0.6.4
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 +184 -91
- package/agents/spec-writer.md +2 -2
- package/commands/{opsx-apply.md → cleto-apply.md} +4 -4
- package/commands/{opsx-archive.md → cleto-archive.md} +3 -3
- package/commands/{opsx-bulk-archive.md → cleto-bulk-archive.md} +1 -1
- package/commands/{opsx-continue.md → cleto-continue.md} +3 -3
- package/commands/{opsx-explore.md → cleto-explore.md} +1 -1
- package/commands/{opsx-ff.md → cleto-ff.md} +2 -2
- package/commands/{opsx-new.md → cleto-new.md} +4 -4
- package/commands/{opsx-onboard.md → cleto-onboard.md} +22 -22
- package/commands/{opsx-propose.md → cleto-propose.md} +3 -3
- package/commands/{opsx-recall.md → cleto-recall.md} +6 -6
- package/commands/{opsx-sync.md → cleto-sync.md} +1 -1
- package/commands/{opsx-verify.md → cleto-verify.md} +1 -1
- package/package.json +1 -1
- package/skills/{openspec-apply → ancleto-apply}/SKILL.md +2 -2
- package/skills/{openspec-archive → ancleto-archive}/SKILL.md +1 -1
- package/skills/{openspec-bulk-archive → ancleto-bulk-archive}/SKILL.md +1 -1
- package/skills/{openspec-continue → ancleto-continue}/SKILL.md +4 -4
- package/skills/{openspec-explore → ancleto-explore}/SKILL.md +1 -1
- package/skills/{openspec-ff → ancleto-ff}/SKILL.md +2 -2
- package/skills/{openspec-new → ancleto-new}/SKILL.md +2 -2
- package/skills/{openspec-onboard → ancleto-onboard}/SKILL.md +11 -11
- package/skills/{openspec-propose → ancleto-propose}/SKILL.md +4 -4
- package/skills/{openspec-recall → ancleto-recall}/SKILL.md +3 -3
- package/skills/{openspec-sync-specs → ancleto-sync-specs}/SKILL.md +1 -1
- package/skills/ancleto-upgrade/SKILL.md +2 -2
- package/skills/{openspec-verify → ancleto-verify}/SKILL.md +1 -1
- package/skills/{openspec-workflow → ancleto-workflow}/SKILL.md +17 -17
- package/skills/triage-clarifier/SKILL.md +1 -1
- package/src/cli/index.js +22 -12
package/README.md
CHANGED
|
@@ -1,120 +1,213 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# ☕ ANCLETO (aspec)
|
|
4
|
+
**Orquestador SDD (Spec-Driven Development) y Toolkit Personal Asistido por IA**
|
|
5
|
+
|
|
6
|
+
[](#requisitos)
|
|
7
|
+
[](#uso-rápido)
|
|
8
|
+
[](#requisitos)
|
|
9
|
+
|
|
10
|
+
*Descubrimiento técnico, memoria persistente y control estricto de tokens para tu IDE.*
|
|
11
|
+
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 📖 Tabla de Contenidos
|
|
17
|
+
|
|
18
|
+
- [¿Qué es Ancleto?](#-qué-es-ancleto)
|
|
19
|
+
- [¿Por qué fue creado?](#-por-qué-fue-creado)
|
|
20
|
+
- [Características Principales](#-características-principales)
|
|
21
|
+
- [Requisitos](#-requisitos)
|
|
22
|
+
- [Instalación](#-instalación)
|
|
23
|
+
- [Configuración y Tiers de Costo](#-configuración-y-tiers-de-costo)
|
|
24
|
+
- [Uso Rápido](#-uso-rápido)
|
|
25
|
+
- [Referencia de Comandos CLI](#-referencia-de-comandos-cli)
|
|
26
|
+
- [Motor de Memoria Persistente](#-motor-de-memoria-persistente)
|
|
27
|
+
- [Comandos del Ciclo SDD en tu IDE](#-comandos-del-ciclo-sdd-en-tu-ide)
|
|
28
|
+
- [Azure DevOps (Opcional)](#-azure-devops-opcional)
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 🚀 ¿Qué es Ancleto?
|
|
33
|
+
|
|
34
|
+
**Ancleto** (cuyo alias de CLI es `aspec`) es un orquestador ligero diseñado para potenciar el desarrollo de software asistido por Inteligencia Artificial bajo el paradigma **SDD (Spec-Driven Development)**.
|
|
35
|
+
|
|
36
|
+
Funciona como un conjunto de herramientas y agentes que viven en tu entorno de desarrollo local (como OpenCode, Cursor, VS Code, Roo, etc.), permitiéndote automatizar la escritura de especificaciones, el descubrimiento topológico del código y la retención de memoria de las decisiones técnicas.
|
|
37
|
+
|
|
38
|
+
Todo esto está envuelto en una CLI moderna, interactiva y construida bajo una filosofía estricta de **cero dependencias (Zero-Deps)**.
|
|
39
|
+
|
|
40
|
+
## 💡 ¿Por qué fue creado?
|
|
41
|
+
|
|
42
|
+
Al trabajar en repositorios complejos con asistentes de IA, surgen tres problemas críticos:
|
|
43
|
+
|
|
44
|
+
1. **La "Memoria de Pez" de los LLMs:** Los agentes olvidan las convenciones del proyecto o las decisiones arquitectónicas pasadas en cuanto se limpia la ventana de contexto.
|
|
45
|
+
2. **El Costo Oculto (Token Budgeting):** Empaquetar todo un monorepo para darle contexto a la IA consume presupuestos de tokens masivos y encarece el uso de las APIs.
|
|
46
|
+
3. **Falta de Estandarización:** Cada agente de IA actúa por su cuenta, sin seguir un ciclo de vida definido de especificación -> revisión -> implementación -> verificación.
|
|
47
|
+
|
|
48
|
+
**Ancleto** nace para resolver esto. Centraliza las reglas de negocio en un motor de memoria local (`node:sqlite`), empaqueta inteligentemente el contexto según el nivel de tu suscripción (Tiers) y orquesta 10 subagentes nativos para que el código que escriba la IA cumpla estrictamente con tus estándares, minimizando la fricción y los costos.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## ✨ Características Principales
|
|
53
|
+
|
|
54
|
+
- 🤖 **Catálogo Multi-Agente (10 Agents):** Orquestador, Coder, Tester, Spec-Writer, Reviewer, Documenter, Technical-Discovery, Technical-Seed-Writer, Memory-Keeper y Context-Resolver.
|
|
55
|
+
- 🧠 **Motor de Memoria Persistente (FTS5):** Base local SQLite (`.ancleto/memory.db`) que provee al LLM herramientas para registrar y recuperar reglas arquitectónicas y decisiones pasadas proactivamente.
|
|
56
|
+
- 🗺️ **Discovery Engine:** Un escáner topológico rápido que genera mapas del repositorio (`.discovery-map.json`) y empaqueta el contexto vía Repomix con presupuestos de tokens dinámicos.
|
|
57
|
+
- 💸 **Gestión de Tiers de Costo:** Control absoluto sobre qué modelos y cuánto contexto se envía (`normal`, `minimo`, `gratis`), protegiendo tus cuotas de API.
|
|
58
|
+
- ⚡ **Agentic OpenSpec Engine:** Totalmente independiente, sin binarios externos. Las 11 skills del ciclo de vida (`new`, `propose`, `apply`, `verify`, `archive`, `bulk-archive`, `continue`, `explore`, `ff`, `onboard`, `workflow`) se instalan e inyectan nativamente en tu IDE favorito, más skills auxiliares (`ancleto-commit`, `ancleto-pr`, `triage-clarifier`, entre otras).
|
|
59
|
+
- 🎨 **Wizard Interactivo:** Inicialización por TTY con banner animado y menús navegables con flechas, sin requerir librerías pesadas (Zero-Deps).
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 🛠 Requisitos
|
|
64
|
+
|
|
65
|
+
Dado que Ancleto mantiene una política de cero dependencias externas, aprovecha las capacidades nativas más recientes de Node:
|
|
66
|
+
|
|
67
|
+
- **Node.js >= 24.0.0** (requerido estrictamente para el módulo nativo `node:sqlite`).
|
|
68
|
+
- **Repomix** (utilizado dinámicamente vía `npx` si no está instalado globalmente, para el empaquetado de contexto).
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 📦 Instalación
|
|
73
|
+
|
|
74
|
+
Puedes instalar la herramienta a nivel global o por proyecto.
|
|
29
75
|
|
|
30
76
|
```bash
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
77
|
+
# Instalación global (disponible en todos tus proyectos)
|
|
78
|
+
npm install -g @ancleto/spec
|
|
79
|
+
|
|
80
|
+
# O alternativamente a través de la CLI de ancleto:
|
|
81
|
+
ancleto install
|
|
82
|
+
|
|
83
|
+
# Instalación circunscrita a un proyecto específico (inyecta templates y .opencode/)
|
|
84
|
+
ancleto install --project /ruta/repo
|
|
85
|
+
|
|
86
|
+
# Instalación sin modificar la configuración MCP de tu IDE
|
|
87
|
+
ancleto install --no-mcp
|
|
88
|
+
|
|
89
|
+
# Actualizar a la última versión manteniendo tus personalizaciones
|
|
90
|
+
ancleto update
|
|
35
91
|
```
|
|
36
92
|
|
|
37
|
-
El instalador configura por defecto los MCP locales **engram**
|
|
38
|
-
**caveman** (compresion de contexto) en `~/.config/opencode/opencode.json`, fusionandose
|
|
39
|
-
con la config existente (no pisa nada). Si un binario no se encuentra en el sistema, ese
|
|
40
|
-
MCP se omite con un warning.
|
|
93
|
+
*(El instalador configura por defecto los MCP locales **engram** y **caveman**. Si un binario no se encuentra en tu sistema, se omitirá con un warning sin romper el flujo).*
|
|
41
94
|
|
|
42
|
-
|
|
95
|
+
---
|
|
43
96
|
|
|
44
|
-
|
|
45
|
-
|
|
97
|
+
## ⚙️ Configuración y Tiers de Costo
|
|
98
|
+
|
|
99
|
+
Al ejecutar la CLI por primera vez, un **Wizard interactivo (ASCII animado)** te guiará para configurar el Agente (IDE) y tu nivel de gasto. También puedes pasarlos por flags:
|
|
46
100
|
|
|
47
101
|
```bash
|
|
48
|
-
ancleto
|
|
49
|
-
ancleto install --tier minimo # todo al modelo pagado mas economico viable
|
|
50
|
-
ancleto install --tier gratis # solo modelos gratuitos (ej. opencode/big-pickle)
|
|
102
|
+
ancleto init --agent opencode --tier normal
|
|
51
103
|
```
|
|
52
104
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
105
|
+
**Tiers Disponibles:**
|
|
106
|
+
|
|
107
|
+
* `normal`: Modelos balanceados sin restricciones agresivas de contexto (default).
|
|
108
|
+
* `minimo`: Enfoque en el modelo pago más económico viable, con alta compresión de contexto y exclusión de tests/docs en el discovery.
|
|
109
|
+
* `gratis`: Bloqueado a modelos gratuitos (ej. `opencode/big-pickle`), empaquetado ultra-agresivo y un límite estricto (budget) de tokens enviado al LLM.
|
|
110
|
+
|
|
111
|
+
La configuración se preserva en `.ancletorc` (raíz del proyecto) y `.ancleto-tier` (junto a la configuración instalada).
|
|
112
|
+
|
|
113
|
+
---
|
|
56
114
|
|
|
57
|
-
##
|
|
115
|
+
## 💻 Uso Rápido
|
|
58
116
|
|
|
59
|
-
|
|
60
|
-
- `openspec` CLI (`npm i -g @openspec/cli`) para el ciclo de changes
|
|
61
|
-
- Repomix (usado por `ancleto discovery`, se resuelve via `npx` si no esta instalado)
|
|
117
|
+
El ciclo diario con Ancleto consiste en preparar el terreno técnico para tu Agente y luego usar los comandos del ciclo SDD dentro de tu IDE.
|
|
62
118
|
|
|
63
|
-
|
|
119
|
+
### 1. Inicialización en un Repositorio
|
|
64
120
|
|
|
65
121
|
```bash
|
|
66
|
-
|
|
67
|
-
ancleto init
|
|
68
|
-
ancleto discovery --check # estado del technical seed (READY/STALE/PARTIAL/MISSING)
|
|
69
|
-
ancleto discovery # empaca el repo con Repomix y guarda estado
|
|
70
|
-
# en opencode: /opsx-new, /opsx-propose, /opsx-ff para iniciar un change
|
|
122
|
+
cd tu-proyecto
|
|
123
|
+
ancleto init # Crea .ancletorc, plantillas AGENTS.md y PRODUCT.md
|
|
71
124
|
```
|
|
72
125
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
Azure viene **desactivado por defecto**. Para activarlo en un proyecto:
|
|
126
|
+
### 2. Descubrimiento Técnico de Contexto
|
|
76
127
|
|
|
77
128
|
```bash
|
|
78
|
-
ancleto
|
|
129
|
+
ancleto discovery --check # Verifica si el 'technical seed' requiere actualización (READY/STALE)
|
|
130
|
+
ancleto discovery # Genera .discovery-map.json y empaqueta el repo
|
|
79
131
|
```
|
|
80
132
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
133
|
+
### 3. Integración Diaria
|
|
134
|
+
|
|
135
|
+
Utiliza los comandos barra (`/`) expuestos en el chat de tu IDE (ej. Cursor, OpenCode):
|
|
136
|
+
|
|
137
|
+
* `/cleto-new` y `/cleto-propose`: Para planificar un nuevo feature.
|
|
138
|
+
* `/cleto-verify` y `/cleto-apply`: Para validar reglas, chequear tests y aplicar el código.
|
|
139
|
+
* `/cleto-archive`: Para consolidar el historial y registrar aprendizajes en la memoria de Ancleto.
|
|
140
|
+
|
|
141
|
+
---
|
|
84
142
|
|
|
85
|
-
##
|
|
143
|
+
## 📟 Referencia de Comandos CLI
|
|
86
144
|
|
|
87
|
-
|
|
145
|
+
Todos los comandos de mantenimiento que puedes necesitar en el día a día:
|
|
88
146
|
|
|
89
147
|
```bash
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
#
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
148
|
+
ancleto init [--agent <nombre>] [--tier <nivel>] [--with-azure]
|
|
149
|
+
# Configura el proyecto (interactivo en TTY)
|
|
150
|
+
|
|
151
|
+
ancleto install [--project <dir>] [--tier <nivel>] [--agent <nombre>] [--no-mcp]
|
|
152
|
+
# Instala agents, skills y templates
|
|
153
|
+
|
|
154
|
+
ancleto update # Re-instala la última versión sobre lo existente
|
|
155
|
+
|
|
156
|
+
ancleto upgrade # Re-aplica templates y skills respetando tus personalizaciones
|
|
157
|
+
|
|
158
|
+
ancleto check # Verifica la integridad de la instalación (0 faltantes, 0 huérfanos)
|
|
159
|
+
|
|
160
|
+
ancleto doctor # Diagnostica el entorno (Node, node:sqlite, opencode.json)
|
|
161
|
+
|
|
162
|
+
ancleto memory context [--scope <project|feature|task>] [--out <archivo>]
|
|
163
|
+
# Muestra el bloque de memoria activa del proyecto
|
|
164
|
+
|
|
165
|
+
ancleto memory doctor [--rebuild]
|
|
166
|
+
# Diagnostica la base de memoria (y reconstruye el índice con --rebuild)
|
|
167
|
+
|
|
168
|
+
ancleto discovery [--compress] [--include <glob>] [--ignore <glob>] [--token-budget <n>]
|
|
169
|
+
# Empaqueta el repo con Repomix según tu tier
|
|
108
170
|
```
|
|
109
171
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 🧠 Motor de Memoria Persistente
|
|
175
|
+
|
|
176
|
+
Ancleto **no** usa bases de datos vectoriales pesadas. Implementa una solución elegante en **SQLite nativo** con búsqueda full-text (FTS5) y BM25.
|
|
177
|
+
|
|
178
|
+
El LLM tiene a su disposición 3 herramientas (tools):
|
|
179
|
+
|
|
180
|
+
* `searchMemory`: Recupera contexto de decisiones previas.
|
|
181
|
+
* `recordRule`: Guarda una regla arquitectónica estricta de manera jerárquica (Proyecto > Feature > Tarea).
|
|
182
|
+
* `recordDecision`: Inmortaliza el "por qué" de un cambio en el código.
|
|
183
|
+
|
|
184
|
+
El orquestador inyecta proactivamente los bloques `<ProjectMemoryRules>` y `<ProjectTopology>` (contexto desde el día cero, incluso sin reglas previas) en el System Prompt de tu Agente para que **nunca repita los mismos errores**.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 🔄 Comandos del Ciclo SDD en tu IDE
|
|
113
189
|
|
|
114
|
-
|
|
190
|
+
Una vez instalado, tu IDE expone el ciclo de vida completo como comandos barra (`/`):
|
|
191
|
+
|
|
192
|
+
| Comando | Para qué sirve |
|
|
193
|
+
|---|---|
|
|
194
|
+
| `/cleto-new` | Iniciar la especificación de un feature |
|
|
195
|
+
| `/cleto-propose` | Proponer el diseño técnico |
|
|
196
|
+
| `/cleto-ff` | Avanzar rápido con contexto recuperado |
|
|
197
|
+
| `/cleto-apply` | Aplicar el código del change |
|
|
198
|
+
| `/cleto-verify` | Verificar reglas, tests y memoria antes de cerrar |
|
|
199
|
+
| `/cleto-sync` | Sincronizar specs con el estado del repo |
|
|
200
|
+
| `/cleto-archive` | Archivar el change y registrar aprendizajes |
|
|
201
|
+
| `/cleto-continue`, `/cleto-explore`, `/cleto-onboard` | Retomar, explorar y orientarse en el proyecto |
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 🔗 Azure DevOps (Opcional)
|
|
206
|
+
|
|
207
|
+
Por defecto, los comandos asumen el uso de **GitHub** (`ancleto-pr`). Si tu equipo utiliza Azure DevOps:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
ancleto init --with-azure
|
|
211
|
+
```
|
|
115
212
|
|
|
116
|
-
|
|
117
|
-
- [x] Agents/skills/commands adaptados (sin referencias corporativas)
|
|
118
|
-
- [x] Motor de descubrimiento (`ancleto discovery`, Repomix + `--check` por hash)
|
|
119
|
-
- [x] Skills base: `triage-clarifier`, `openspec-recall`, `openspec-sync-specs`
|
|
120
|
-
- [x] Motor de memoria core (v0.2.0): `.ancleto/memory.db`, 3 tools, supersesión atómica
|
|
213
|
+
Esto escribe `azure.enabled: true` en tu `.ancletorc`. Solo deberás completar la sección de Azure en el archivo `PRODUCT.md` e instalar su extensión (`az extension add --name azure-devops`).
|
package/agents/spec-writer.md
CHANGED
|
@@ -28,7 +28,7 @@ Generate an OpenSpec change in:
|
|
|
28
28
|
|
|
29
29
|
- `openspec/changes/{change-name}/`
|
|
30
30
|
|
|
31
|
-
using the `
|
|
31
|
+
using the `ancleto-workflow` skill and the conventions of:
|
|
32
32
|
|
|
33
33
|
- `AGENTS.md`
|
|
34
34
|
|
|
@@ -36,7 +36,7 @@ using the `openspec-workflow` skill and the conventions of:
|
|
|
36
36
|
|
|
37
37
|
1. Use the repository context received in the delegation, including its cited source paths and seed state; exploratory sweeping is prohibited. You MAY open a specific path that the received context cites when a detail needs confirmation.
|
|
38
38
|
2. Read relevant source-of-truth specs in `openspec/specs/` when they exist
|
|
39
|
-
3. Load and follow the `
|
|
39
|
+
3. Load and follow the `ancleto-workflow` skill
|
|
40
40
|
4. Create a clear `change-name`
|
|
41
41
|
5. Generate the minimum correct set of artifacts for the requested change:
|
|
42
42
|
- `proposal.md`
|
|
@@ -4,7 +4,7 @@ description: Implement tasks from an OpenSpec change (Experimental)
|
|
|
4
4
|
|
|
5
5
|
Implement tasks from an OpenSpec change.
|
|
6
6
|
|
|
7
|
-
**Input**: Optionally specify a change name (e.g., `/
|
|
7
|
+
**Input**: Optionally specify a change name (e.g., `/cleto-apply add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
8
8
|
|
|
9
9
|
**Steps**
|
|
10
10
|
|
|
@@ -16,7 +16,7 @@ Implement tasks from an OpenSpec change.
|
|
|
16
16
|
- Auto-select if only one active change exists
|
|
17
17
|
- If ambiguous, run `openspec list --json` to get available changes and use the **AskUserQuestion tool** to let the user select
|
|
18
18
|
|
|
19
|
-
Always announce: "Using change: <name>" and how to override (e.g., `/
|
|
19
|
+
Always announce: "Using change: <name>" and how to override (e.g., `/cleto-apply <other>`).
|
|
20
20
|
|
|
21
21
|
2. **Check status to understand the schema**
|
|
22
22
|
|
|
@@ -44,7 +44,7 @@ Implement tasks from an OpenSpec change.
|
|
|
44
44
|
|
|
45
45
|
**Handle states:**
|
|
46
46
|
|
|
47
|
-
- If `state: "blocked"` (missing artifacts): show message, suggest using `/
|
|
47
|
+
- If `state: "blocked"` (missing artifacts): show message, suggest using `/cleto-continue`
|
|
48
48
|
- If `state: "all_done"`: congratulate, suggest archive
|
|
49
49
|
- Otherwise: proceed to implementation
|
|
50
50
|
|
|
@@ -119,7 +119,7 @@ Working on task 4/7: <task description>
|
|
|
119
119
|
- [x] Task 2
|
|
120
120
|
...
|
|
121
121
|
|
|
122
|
-
All tasks complete! You can archive this change with `/
|
|
122
|
+
All tasks complete! You can archive this change with `/cleto-archive`.
|
|
123
123
|
```
|
|
124
124
|
|
|
125
125
|
**Output On Pause (Issue Encountered)**
|
|
@@ -4,7 +4,7 @@ description: Archive a completed change in the experimental workflow
|
|
|
4
4
|
|
|
5
5
|
Archive a completed change in the experimental workflow.
|
|
6
6
|
|
|
7
|
-
**Input**: Optionally specify a change name after `/
|
|
7
|
+
**Input**: Optionally specify a change name after `/cleto-archive` (e.g., `/cleto-archive add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
8
8
|
|
|
9
9
|
**Steps**
|
|
10
10
|
|
|
@@ -61,7 +61,7 @@ Archive a completed change in the experimental workflow.
|
|
|
61
61
|
- If changes needed: "Sync now (recommended)", "Archive without syncing"
|
|
62
62
|
- If already synced: "Archive now", "Sync anyway", "Cancel"
|
|
63
63
|
|
|
64
|
-
If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke
|
|
64
|
+
If user chooses sync, use Task tool (subagent_type: "general-purpose", prompt: "Use Skill tool to invoke ancleto-sync-specs for change '<name>'. Delta spec analysis: <include the analyzed delta spec summary>"). Proceed to archive regardless of choice.
|
|
65
65
|
|
|
66
66
|
5. **Perform the archive**
|
|
67
67
|
|
|
@@ -167,5 +167,5 @@ Target archive directory already exists.
|
|
|
167
167
|
- Don't block archive on warnings - just inform and confirm
|
|
168
168
|
- Preserve .openspec.yaml when moving to archive (it moves with the directory)
|
|
169
169
|
- Show clear summary of what happened
|
|
170
|
-
- If sync is requested, use the Skill tool to invoke `
|
|
170
|
+
- If sync is requested, use the Skill tool to invoke `ancleto-sync-specs` (agent-driven)
|
|
171
171
|
- If delta specs exist, always run the sync assessment and show the combined summary before prompting
|
|
@@ -124,7 +124,7 @@ This skill allows you to batch-archive changes, handling spec conflicts intellig
|
|
|
124
124
|
|
|
125
125
|
a. **Sync specs** if delta specs exist:
|
|
126
126
|
|
|
127
|
-
- Use the
|
|
127
|
+
- Use the ancleto-sync-specs approach (agent-driven intelligent merge)
|
|
128
128
|
- For conflicts, apply in resolved order
|
|
129
129
|
- Track if sync was done
|
|
130
130
|
|
|
@@ -4,7 +4,7 @@ description: Continue working on a change - create the next artifact (Experiment
|
|
|
4
4
|
|
|
5
5
|
Continue working on a change by creating the next artifact.
|
|
6
6
|
|
|
7
|
-
**Input**: Optionally specify a change name after `/
|
|
7
|
+
**Input**: Optionally specify a change name after `/cleto-continue` (e.g., `/cleto-continue add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
8
8
|
|
|
9
9
|
**Steps**
|
|
10
10
|
|
|
@@ -53,7 +53,7 @@ Continue working on a change by creating the next artifact.
|
|
|
53
53
|
|
|
54
54
|
- Congratulate the user
|
|
55
55
|
- Show final status including the schema used
|
|
56
|
-
- Suggest: "All artifacts created! You can now implement this change with `/
|
|
56
|
+
- Suggest: "All artifacts created! You can now implement this change with `/cleto-apply` or archive it with `/cleto-archive`."
|
|
57
57
|
- STOP
|
|
58
58
|
|
|
59
59
|
***
|
|
@@ -102,7 +102,7 @@ After each invocation, show:
|
|
|
102
102
|
- Schema workflow being used
|
|
103
103
|
- Current progress (N/M complete)
|
|
104
104
|
- What artifacts are now unlocked
|
|
105
|
-
- Prompt: "Run `/
|
|
105
|
+
- Prompt: "Run `/cleto-continue` to create the next artifact"
|
|
106
106
|
|
|
107
107
|
**Artifact Creation Guidelines**
|
|
108
108
|
|
|
@@ -8,7 +8,7 @@ Enter explore mode. Think deeply. Visualize freely. Follow the conversation wher
|
|
|
8
8
|
|
|
9
9
|
**This is a stance, not a workflow.** There are no fixed steps, no required sequence, no mandatory outputs. You're a thinking partner helping the user explore.
|
|
10
10
|
|
|
11
|
-
**Input**: The argument after `/
|
|
11
|
+
**Input**: The argument after `/cleto-explore` is whatever the user wants to think about. Could be:
|
|
12
12
|
|
|
13
13
|
- A vague idea: "real-time collaboration"
|
|
14
14
|
- A specific problem: "the auth system is getting unwieldy"
|
|
@@ -4,7 +4,7 @@ description: Create a change and generate all artifacts needed for implementatio
|
|
|
4
4
|
|
|
5
5
|
Fast-forward through artifact creation - generate everything needed to start implementation.
|
|
6
6
|
|
|
7
|
-
**Input**: The argument after `/
|
|
7
|
+
**Input**: The argument after `/cleto-ff` is the change name (kebab-case), OR a description of what the user wants to build.
|
|
8
8
|
|
|
9
9
|
**Steps**
|
|
10
10
|
|
|
@@ -108,7 +108,7 @@ After completing all artifacts, summarize:
|
|
|
108
108
|
- Change name and location
|
|
109
109
|
- List of artifacts created with brief descriptions
|
|
110
110
|
- What's ready: "All artifacts created! Ready for implementation."
|
|
111
|
-
- Prompt: "Run `/
|
|
111
|
+
- Prompt: "Run `/cleto-apply` to start implementing."
|
|
112
112
|
|
|
113
113
|
**Artifact Creation Guidelines**
|
|
114
114
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Start a new change using the experimental artifact workflow
|
|
2
|
+
description: Start a new change using the experimental artifact workflow
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Start a new change using the experimental artifact-driven approach.
|
|
6
6
|
|
|
7
|
-
**Input**: The argument after `/
|
|
7
|
+
**Input**: The argument after `/cleto-new` is the change name (kebab-case), OR a description of what the user wants to build.
|
|
8
8
|
|
|
9
9
|
**Steps**
|
|
10
10
|
|
|
@@ -106,12 +106,12 @@ After completing the steps, summarize:
|
|
|
106
106
|
- Schema/workflow being used and its artifact sequence
|
|
107
107
|
- Current status (0/N artifacts complete)
|
|
108
108
|
- The template for the first artifact
|
|
109
|
-
- Prompt: "Ready to create the first artifact? Run `/
|
|
109
|
+
- Prompt: "Ready to create the first artifact? Run `/cleto-continue` or just describe what this change is about and I'll draft it."
|
|
110
110
|
|
|
111
111
|
**Guardrails**
|
|
112
112
|
|
|
113
113
|
- Do NOT create any artifacts yet - just show the instructions
|
|
114
114
|
- Do NOT advance beyond showing the first artifact template
|
|
115
115
|
- If the name is invalid (not kebab-case), ask for a valid name
|
|
116
|
-
- If a change with that name already exists, suggest using `/
|
|
116
|
+
- If a change with that name already exists, suggest using `/cleto-continue` instead
|
|
117
117
|
- Pass --schema if using a non-default workflow
|
|
@@ -19,7 +19,7 @@ openspec --version 2>&1 || echo "CLI_NOT_INSTALLED"
|
|
|
19
19
|
|
|
20
20
|
**If CLI not installed:**
|
|
21
21
|
|
|
22
|
-
> OpenSpec CLI is not installed. Install it first, then come back to `/
|
|
22
|
+
> OpenSpec CLI is not installed. Install it first, then come back to `/cleto-onboard`.
|
|
23
23
|
|
|
24
24
|
Stop here if not installed.
|
|
25
25
|
|
|
@@ -149,7 +149,7 @@ Spend 1-2 minutes investigating the relevant code:
|
|
|
149
149
|
│ [Optional: ASCII diagram if helpful] │
|
|
150
150
|
└─────────────────────────────────────────┘
|
|
151
151
|
|
|
152
|
-
Explore mode (`/
|
|
152
|
+
Explore mode (`/cleto-explore`) is for this kind of thinking—investigating before implementing. You can use it anytime you need to think through a problem.
|
|
153
153
|
|
|
154
154
|
Now let's create a change to hold our work.
|
|
155
155
|
```
|
|
@@ -483,25 +483,25 @@ This same rhythm works for any size change—a small fix or a major feature.
|
|
|
483
483
|
|
|
484
484
|
| Command | What it does |
|
|
485
485
|
|---------|--------------|
|
|
486
|
-
| `/
|
|
487
|
-
| `/
|
|
488
|
-
| `/
|
|
489
|
-
| `/
|
|
486
|
+
| `/cleto-propose` | Create a change and generate all artifacts |
|
|
487
|
+
| `/cleto-explore` | Think through problems before/during work |
|
|
488
|
+
| `/cleto-apply` | Implement tasks from a change |
|
|
489
|
+
| `/cleto-archive` | Archive a completed change |
|
|
490
490
|
|
|
491
491
|
**Additional commands:**
|
|
492
492
|
|
|
493
493
|
| Command | What it does |
|
|
494
494
|
|---------|--------------|
|
|
495
|
-
| `/
|
|
496
|
-
| `/
|
|
497
|
-
| `/
|
|
498
|
-
| `/
|
|
495
|
+
| `/cleto-new` | Start a new change, step through artifacts one at a time |
|
|
496
|
+
| `/cleto-continue` | Continue working on an existing change |
|
|
497
|
+
| `/cleto-ff` | Fast-forward: create all artifacts at once |
|
|
498
|
+
| `/cleto-verify` | Verify implementation matches artifacts |
|
|
499
499
|
|
|
500
500
|
---
|
|
501
501
|
|
|
502
502
|
## What's Next?
|
|
503
503
|
|
|
504
|
-
Try `/
|
|
504
|
+
Try `/cleto-propose` on something you actually want to build. You've got the rhythm now!
|
|
505
505
|
```
|
|
506
506
|
|
|
507
507
|
---
|
|
@@ -516,8 +516,8 @@ If the user says they need to stop, want to pause, or seem disengaged:
|
|
|
516
516
|
No problem! Your change is saved at `openspec/changes/<name>/`.
|
|
517
517
|
|
|
518
518
|
To pick up where we left off later:
|
|
519
|
-
- `/
|
|
520
|
-
- `/
|
|
519
|
+
- `/cleto-continue <name>` - Resume artifact creation
|
|
520
|
+
- `/cleto-apply <name>` - Jump to implementation (if tasks exist)
|
|
521
521
|
|
|
522
522
|
The work won't be lost. Come back whenever you're ready.
|
|
523
523
|
```
|
|
@@ -535,21 +535,21 @@ If the user says they just want to see the commands or skip the tutorial:
|
|
|
535
535
|
|
|
536
536
|
| Command | What it does |
|
|
537
537
|
|---------|--------------|
|
|
538
|
-
| `/
|
|
539
|
-
| `/
|
|
540
|
-
| `/
|
|
541
|
-
| `/
|
|
538
|
+
| `/cleto-propose <name>` | Create a change and generate all artifacts |
|
|
539
|
+
| `/cleto-explore` | Think through problems (no code changes) |
|
|
540
|
+
| `/cleto-apply <name>` | Implement tasks |
|
|
541
|
+
| `/cleto-archive <name>` | Archive when done |
|
|
542
542
|
|
|
543
543
|
**Additional commands:**
|
|
544
544
|
|
|
545
545
|
| Command | What it does |
|
|
546
546
|
|---------|--------------|
|
|
547
|
-
| `/
|
|
548
|
-
| `/
|
|
549
|
-
| `/
|
|
550
|
-
| `/
|
|
547
|
+
| `/cleto-new <name>` | Start a new change, step by step |
|
|
548
|
+
| `/cleto-continue <name>` | Continue an existing change |
|
|
549
|
+
| `/cleto-ff <name>` | Fast-forward: all artifacts at once |
|
|
550
|
+
| `/cleto-verify <name>` | Verify implementation |
|
|
551
551
|
|
|
552
|
-
Try `/
|
|
552
|
+
Try `/cleto-propose` to start your first change.
|
|
553
553
|
```
|
|
554
554
|
|
|
555
555
|
Exit gracefully.
|
|
@@ -10,11 +10,11 @@ I'll create a change with artifacts:
|
|
|
10
10
|
- design.md (how)
|
|
11
11
|
- tasks.md (implementation steps)
|
|
12
12
|
|
|
13
|
-
When ready to implement, run /
|
|
13
|
+
When ready to implement, run /cleto-apply
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
17
|
-
**Input**: The argument after `/
|
|
17
|
+
**Input**: The argument after `/cleto-propose` is the change name (kebab-case), OR a description of what the user wants to build.
|
|
18
18
|
|
|
19
19
|
**Steps**
|
|
20
20
|
|
|
@@ -118,7 +118,7 @@ After completing all artifacts, summarize:
|
|
|
118
118
|
- Change name and location
|
|
119
119
|
- List of artifacts created with brief descriptions
|
|
120
120
|
- What's ready: "All artifacts created! Ready for implementation."
|
|
121
|
-
- Prompt: "Run `/
|
|
121
|
+
- Prompt: "Run `/cleto-apply` to start implementing."
|
|
122
122
|
|
|
123
123
|
**Artifact Creation Guidelines**
|
|
124
124
|
|
|
@@ -4,13 +4,13 @@ description: Recuperar memoria episódica del proyecto (.ancleto/memory.db) sobr
|
|
|
4
4
|
|
|
5
5
|
Recuperar de la memoria compartida del repositorio lo que se aprendió en changes anteriores sobre un tema.
|
|
6
6
|
|
|
7
|
-
Este comando es la invocación **a mano** de la memoria. La invocación automática vive dentro de `/
|
|
7
|
+
Este comando es la invocación **a mano** de la memoria. La invocación automática vive dentro de `/cleto-new`, `/cleto-propose` y `/cleto-ff`, que ejecutan el mismo paso al iniciar un change. El contrato completo está en la skill `ancleto-recall`.
|
|
8
8
|
|
|
9
|
-
**Input**: el argumento después de `/
|
|
9
|
+
**Input**: el argumento después de `/cleto-recall` es el tema a consultar. Por ejemplo:
|
|
10
10
|
|
|
11
|
-
- `/
|
|
12
|
-
- `/
|
|
13
|
-
- `/
|
|
11
|
+
- `/cleto-recall autenticación JWT en LiteLLM`
|
|
12
|
+
- `/cleto-recall por qué elegimos pgvector`
|
|
13
|
+
- `/cleto-recall` (sin argumento — ver paso 1)
|
|
14
14
|
|
|
15
15
|
**Steps**
|
|
16
16
|
|
|
@@ -53,5 +53,5 @@ Este comando es la invocación **a mano** de la memoria. La invocación automát
|
|
|
53
53
|
|
|
54
54
|
**Referencia**
|
|
55
55
|
|
|
56
|
-
- Contrato completo: skill `
|
|
56
|
+
- Contrato completo: skill `ancleto-recall`
|
|
57
57
|
- Contrato de lectura y modelo de scope: `AGENTS.md` (Memoria Persistente)
|
|
@@ -6,7 +6,7 @@ Sync delta specs from a change to main specs.
|
|
|
6
6
|
|
|
7
7
|
This is an **agent-driven** operation - you will read delta specs and directly edit main specs to apply the changes. This allows intelligent merging (e.g., adding a scenario without copying the entire requirement).
|
|
8
8
|
|
|
9
|
-
**Input**: Optionally specify a change name after `/
|
|
9
|
+
**Input**: Optionally specify a change name after `/cleto-sync` (e.g., `/cleto-sync add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
10
10
|
|
|
11
11
|
**Steps**
|
|
12
12
|
|
|
@@ -4,7 +4,7 @@ description: Verify implementation matches change artifacts before archiving
|
|
|
4
4
|
|
|
5
5
|
Verify that an implementation matches the change artifacts (specs, tasks, design).
|
|
6
6
|
|
|
7
|
-
**Input**: Optionally specify a change name after `/
|
|
7
|
+
**Input**: Optionally specify a change name after `/cleto-verify` (e.g., `/cleto-verify add-auth`). If omitted, check if it can be inferred from conversation context. If vague or ambiguous you MUST prompt for available changes.
|
|
8
8
|
|
|
9
9
|
**Steps**
|
|
10
10
|
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-apply
|
|
3
3
|
description: Implement tasks from a change step by step, tracking progress in tasks.md. Use when artifacts are ready and implementation should start. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -78,7 +78,7 @@ For each pending task (`- [ ]`):
|
|
|
78
78
|
**Change:** <change-name>
|
|
79
79
|
**Progress:** N/N tasks complete ✓
|
|
80
80
|
|
|
81
|
-
All tasks complete! You can archive this change with `
|
|
81
|
+
All tasks complete! You can archive this change with `ancleto-archive`.
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
**On pause:**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-archive
|
|
3
3
|
description: Archive a completed change, syncing delta specs first when needed. Use when implementation and verification are done. Captures lessons into persistent memory. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-bulk-archive
|
|
3
3
|
description: Archive multiple completed changes in one batch, resolving spec conflicts by checking the codebase. Use when several changes are done and should be archived together. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-continue
|
|
3
3
|
description: Continue working on an existing change by creating its next missing artifact. Use to resume artifact creation one step at a time. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -29,7 +29,7 @@ Read `openspec/changes/<name>/` and check for artifact files in this fixed depen
|
|
|
29
29
|
|
|
30
30
|
The first item in this order that is absent (or, for `specs/`, contains no `spec.md`) is the next artifact to create.
|
|
31
31
|
|
|
32
|
-
- **If all four are present**: congratulate the user, show the status, and suggest "All artifacts created! You can now implement this change with `
|
|
32
|
+
- **If all four are present**: congratulate the user, show the status, and suggest "All artifacts created! You can now implement this change with `ancleto-apply` or archive it with `ancleto-archive`." STOP.
|
|
33
33
|
- **If the change directory does not exist**: report it and stop.
|
|
34
34
|
|
|
35
35
|
### 2. Load context files
|
|
@@ -38,7 +38,7 @@ Read every artifact that IS present — they constrain what you write next. If a
|
|
|
38
38
|
|
|
39
39
|
### 3. Create exactly ONE artifact
|
|
40
40
|
|
|
41
|
-
Draft the missing artifact using the same templates as `
|
|
41
|
+
Draft the missing artifact using the same templates as `ancleto-propose`:
|
|
42
42
|
|
|
43
43
|
- **proposal.md** (first artifact): problem statement, proposed change, scope, risks. If Work Item context is available, use its title/description as the problem statement, acceptance criteria as the requirements basis, and include a `## Related Work Item` section: `**#{id}** — {title} ({type}) · Project: {project}`.
|
|
44
44
|
- **specs/\<capability\>/spec.md**: one spec file per capability the change touches, with `## ADDED Requirements` / `#### Scenario:` blocks in WHEN/THEN form.
|
|
@@ -54,7 +54,7 @@ Report:
|
|
|
54
54
|
- Which artifact was created.
|
|
55
55
|
- Current progress (N/4 complete).
|
|
56
56
|
- What is unlocked next.
|
|
57
|
-
- Prompt: "Run `
|
|
57
|
+
- Prompt: "Run `ancleto-continue` to create the next artifact."
|
|
58
58
|
|
|
59
59
|
Create ONE artifact per invocation, then STOP.
|
|
60
60
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-explore
|
|
3
3
|
description: Enter explore mode — think through ideas, investigate problems, and clarify requirements without implementing. Consults prior team memory first. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-ff
|
|
3
3
|
description: Fast-forward artifact creation — create a change and generate everything needed for implementation in one go. Use when the path is clear and no step-by-step guidance is wanted. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -57,7 +57,7 @@ Summarize:
|
|
|
57
57
|
- Change name and location
|
|
58
58
|
- List of artifacts created with brief descriptions
|
|
59
59
|
- What's ready: "All artifacts created! Ready for implementation."
|
|
60
|
-
- Prompt: "Run `
|
|
60
|
+
- Prompt: "Run `ancleto-apply` to start implementing."
|
|
61
61
|
|
|
62
62
|
## Artifact Creation Guidelines
|
|
63
63
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-new
|
|
3
3
|
description: Start a new spec-driven change without external binaries. Use when the user wants to begin structured work on a feature, fix, or modification. Creates the change directory, recalls prior memory, and shows the first artifact template.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -84,7 +84,7 @@ After completing the steps, summarize:
|
|
|
84
84
|
- Change name and location
|
|
85
85
|
- Artifact sequence and current status (0/4 artifacts complete)
|
|
86
86
|
- The template for the first artifact
|
|
87
|
-
- Prompt: "Ready to create the first artifact? Run `
|
|
87
|
+
- Prompt: "Ready to create the first artifact? Run `ancleto-propose` or just describe what this change is about and I'll draft it."
|
|
88
88
|
|
|
89
89
|
## Guardrails
|
|
90
90
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-onboard
|
|
3
3
|
description: Guided onboarding — walk through a complete spec-driven cycle (idea to archive) on a real small task, with narration. Use for a first-time user of the workflow. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -119,16 +119,16 @@ Congratulate, recap the cycle (Explore → New → Proposal → Specs → Design
|
|
|
119
119
|
|
|
120
120
|
| Command | What it does |
|
|
121
121
|
|---------|--------------|
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `
|
|
125
|
-
| `
|
|
126
|
-
| `
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
129
|
-
| `
|
|
130
|
-
|
|
131
|
-
**Graceful exits:** if the user wants to stop mid-way, point at the saved change directory and the resume skills (`
|
|
122
|
+
| `ancleto-propose` | Create a change and generate all artifacts |
|
|
123
|
+
| `ancleto-explore` | Think through problems before/during work |
|
|
124
|
+
| `ancleto-apply` | Implement tasks from a change |
|
|
125
|
+
| `ancleto-archive` | Archive a completed change |
|
|
126
|
+
| `ancleto-new` | Start a new change, step by step |
|
|
127
|
+
| `ancleto-continue` | Continue an existing change |
|
|
128
|
+
| `ancleto-ff` | Fast-forward: all artifacts at once |
|
|
129
|
+
| `ancleto-verify` | Verify implementation |
|
|
130
|
+
|
|
131
|
+
**Graceful exits:** if the user wants to stop mid-way, point at the saved change directory and the resume skills (`ancleto-continue`, `ancleto-apply`). If they only want the reference, show the table and exit.
|
|
132
132
|
|
|
133
133
|
## Guardrails
|
|
134
134
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description: Draft all artifacts for a change in one step (proposal, design, tasks, delta specs). Use after
|
|
2
|
+
name: ancleto-propose
|
|
3
|
+
description: Draft all artifacts for a change in one step (proposal, design, tasks, delta specs). Use after ancleto-new, or directly with a change name or description. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
6
6
|
metadata:
|
|
@@ -18,7 +18,7 @@ Create a change and generate all its artifacts in one step, writing files direct
|
|
|
18
18
|
|
|
19
19
|
### 1. Resolve context and derive the change name
|
|
20
20
|
|
|
21
|
-
Same as `
|
|
21
|
+
Same as `ancleto-new` step 1: use in-session Work Item context if available (record id/title/project for traceability, skip entirely when Azure DevOps is not configured), otherwise ask what the user wants to build and derive a kebab-case name.
|
|
22
22
|
|
|
23
23
|
**IMPORTANT**: Do NOT proceed without a change name. If a change with that name already exists, ask whether to continue it or create a new one.
|
|
24
24
|
|
|
@@ -122,7 +122,7 @@ After completing all artifacts, summarize:
|
|
|
122
122
|
- Change name and location
|
|
123
123
|
- List of artifacts created with brief descriptions
|
|
124
124
|
- What's ready: "All artifacts created! Ready for implementation."
|
|
125
|
-
- Prompt: "Run `
|
|
125
|
+
- Prompt: "Run `ancleto-apply` to start implementing."
|
|
126
126
|
|
|
127
127
|
## Artifact Creation Guidelines
|
|
128
128
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-recall
|
|
3
3
|
description: Recupera memoria episódica del proyecto (.ancleto/memory.db) para precargar contexto de changes anteriores. Se invoca al iniciar un change, antes de generar artifacts. Opcional y no bloqueante.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Requires the memory engine configured in the repo. Optional — degrades silently when unavailable.
|
|
@@ -10,14 +10,14 @@ metadata:
|
|
|
10
10
|
|
|
11
11
|
Retrieve shared episodic memory for this repository and inject it as starting context for a change.
|
|
12
12
|
|
|
13
|
-
This skill is the **single source of truth** for the recall contract. The change-creation flows (`
|
|
13
|
+
This skill is the **single source of truth** for the recall contract. The change-creation flows (`cleto-new`, `cleto-propose`, `cleto-ff`) carry this step inline; those inline blocks must stay in sync with this file.
|
|
14
14
|
|
|
15
15
|
**Two invocation paths, one contract:**
|
|
16
16
|
|
|
17
17
|
| Path | Trigger | On failure or empty result |
|
|
18
18
|
| --- | --- | --- |
|
|
19
19
|
| **Automatic** | Inside the change-creation flows, before generating artifacts | Silent — omit the section, never block |
|
|
20
|
-
| **Manual** | The `/
|
|
20
|
+
| **Manual** | The `/cleto-recall` command, invoked by the user | **Report it** — the user asked explicitly |
|
|
21
21
|
|
|
22
22
|
Steps 1 to 3 are identical for both. Only the failure behaviour differs, and it differs for a reason: silence is correct when nobody asked, and wrong when somebody did.
|
|
23
23
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-sync-specs
|
|
3
3
|
description: Sync delta specs from a change to main specs. Use when the user wants to update main specs with changes from a delta spec, without archiving the change.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: Requires openspec CLI.
|
|
@@ -431,7 +431,7 @@ build: sí/no | lint: sí/no | test: sí/no | test:ci: sí/no | typecheck: sí/n
|
|
|
431
431
|
- tasks.md ✅ ({N} tareas en 6 fases)
|
|
432
432
|
- design.md ✅
|
|
433
433
|
|
|
434
|
-
Para implementar: /
|
|
434
|
+
Para implementar: /cleto-apply {CHANGE_NAME}
|
|
435
435
|
```
|
|
436
436
|
|
|
437
437
|
---
|
|
@@ -439,7 +439,7 @@ Para implementar: /opsx-apply {CHANGE_NAME}
|
|
|
439
439
|
## Guardrails
|
|
440
440
|
|
|
441
441
|
Este skill solo genera artefactos OpenSpec — no modifica ningún archivo del repo.
|
|
442
|
-
Todo cambio real lo ejecuta el desarrollador con `/
|
|
442
|
+
Todo cambio real lo ejecuta el desarrollador con `/cleto-apply`, que tiene su propio
|
|
443
443
|
ciclo de revisión. Modificar el repo desde este skill saltearía ese control.
|
|
444
444
|
|
|
445
445
|
- No tocar archivos fuera de `openspec/changes/{CHANGE_NAME}/`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-verify
|
|
3
3
|
description: Verify an implementation against its change artifacts (completeness, correctness, coherence). Use before archiving a change. Captures architectural findings into persistent memory. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: ancleto-workflow
|
|
3
3
|
description: Router for the spec-driven lifecycle — know which stage you're in and which skill runs next. Use when unsure where a request fits, or to explain the full cycle. No external binaries required.
|
|
4
4
|
license: MIT
|
|
5
5
|
compatibility: No external binaries required. Works with any agent runtime.
|
|
@@ -28,28 +28,28 @@ explore → new/propose/ff → continue* → apply → verify → archive
|
|
|
28
28
|
|
|
29
29
|
| User wants to… | Run |
|
|
30
30
|
|---|---|
|
|
31
|
-
| Think through an idea or problem, no commitment yet | `
|
|
32
|
-
| Start structured work on something new | `
|
|
33
|
-
| Skip straight to a full draft when the path is clear | `
|
|
34
|
-
| Resume a change with missing artifacts | `
|
|
35
|
-
| Implement tasks from ready artifacts | `
|
|
36
|
-
| Check implementation against artifacts before closing | `
|
|
37
|
-
| Close one finished change (syncing its specs) | `
|
|
38
|
-
| Close several finished changes at once | `
|
|
39
|
-
| Learn the whole cycle hands-on | `
|
|
31
|
+
| Think through an idea or problem, no commitment yet | `ancleto-explore` |
|
|
32
|
+
| Start structured work on something new | `ancleto-new` (step by step) or `ancleto-propose` (all artifacts at once) |
|
|
33
|
+
| Skip straight to a full draft when the path is clear | `ancleto-ff` |
|
|
34
|
+
| Resume a change with missing artifacts | `ancleto-continue` (repeat until complete) |
|
|
35
|
+
| Implement tasks from ready artifacts | `ancleto-apply` |
|
|
36
|
+
| Check implementation against artifacts before closing | `ancleto-verify` |
|
|
37
|
+
| Close one finished change (syncing its specs) | `ancleto-archive` |
|
|
38
|
+
| Close several finished changes at once | `ancleto-bulk-archive` |
|
|
39
|
+
| Learn the whole cycle hands-on | `ancleto-onboard` |
|
|
40
40
|
| Recall what the team learned about a topic | `searchMemory` directly (or the recall contract) |
|
|
41
41
|
|
|
42
42
|
**By change state** (read `openspec/changes/<name>/`):
|
|
43
43
|
|
|
44
44
|
| State | Run |
|
|
45
45
|
|---|---|
|
|
46
|
-
| Directory missing → nothing to continue | `
|
|
47
|
-
| `proposal.md` missing | `
|
|
48
|
-
| `specs/` or `design.md` missing | `
|
|
49
|
-
| `tasks.md` missing | `
|
|
50
|
-
| All artifacts present, tasks unchecked | `
|
|
51
|
-
| All tasks checked | `
|
|
52
|
-
| Several changes complete | `
|
|
46
|
+
| Directory missing → nothing to continue | `ancleto-new` (or propose/ff) |
|
|
47
|
+
| `proposal.md` missing | `ancleto-continue` |
|
|
48
|
+
| `specs/` or `design.md` missing | `ancleto-continue` |
|
|
49
|
+
| `tasks.md` missing | `ancleto-continue` |
|
|
50
|
+
| All artifacts present, tasks unchecked | `ancleto-apply` |
|
|
51
|
+
| All tasks checked | `ancleto-verify`, then `ancleto-archive` |
|
|
52
|
+
| Several changes complete | `ancleto-bulk-archive` |
|
|
53
53
|
|
|
54
54
|
## Handoff Contract
|
|
55
55
|
|
|
@@ -96,6 +96,6 @@ If option 4 happened and the answer still does not remove the main ambiguity, cl
|
|
|
96
96
|
## What not to do
|
|
97
97
|
|
|
98
98
|
- do not create specs, design, tasks, or proposals
|
|
99
|
-
- do not trigger
|
|
99
|
+
- do not trigger cleto or any workflow handoff
|
|
100
100
|
- do not ask more than one clarification question
|
|
101
101
|
- do not replace the orchestrator's final responsibility for classification
|
package/src/cli/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { existsSync } from 'node:fs'
|
|
2
3
|
import { cp, mkdir, access, writeFile, readFile, readdir } from 'node:fs/promises'
|
|
3
4
|
import { spawnSync } from 'node:child_process'
|
|
4
5
|
import { createHash } from 'node:crypto'
|
|
@@ -86,17 +87,21 @@ function globalConfigDir() {
|
|
|
86
87
|
: join(homedir(), '.config', 'opencode')
|
|
87
88
|
}
|
|
88
89
|
|
|
90
|
+
function binName(base) {
|
|
91
|
+
return process.platform === 'win32' ? `${base}.exe` : base
|
|
92
|
+
}
|
|
93
|
+
|
|
89
94
|
function resolveBin(name, fallbacks = []) {
|
|
90
95
|
const probe = process.platform === 'win32' ? 'where' : 'which'
|
|
91
96
|
const r = spawnSync(probe, [name], { encoding: 'utf8' })
|
|
92
97
|
if (r.status === 0 && r.stdout) {
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
for (const line of r.stdout.split(/\r?\n/)) {
|
|
99
|
+
const candidate = line.trim()
|
|
100
|
+
if (candidate && !/^informacion:/i.test(candidate)) return candidate
|
|
101
|
+
}
|
|
97
102
|
}
|
|
98
103
|
for (const fb of fallbacks) {
|
|
99
|
-
if (fb) return fb
|
|
104
|
+
if (fb && existsSync(fb)) return fb
|
|
100
105
|
}
|
|
101
106
|
return null
|
|
102
107
|
}
|
|
@@ -104,16 +109,21 @@ function resolveBin(name, fallbacks = []) {
|
|
|
104
109
|
function buildDefaultMcp() {
|
|
105
110
|
const mcp = {}
|
|
106
111
|
|
|
107
|
-
const
|
|
112
|
+
const engramFallbacks = [
|
|
113
|
+
join(homedir(), 'go', 'bin', binName('engram')),
|
|
114
|
+
join(homedir(), '.local', 'bin', binName('engram'))
|
|
115
|
+
]
|
|
116
|
+
const engramBin = resolveBin('engram', engramFallbacks)
|
|
108
117
|
if (engramBin) {
|
|
109
118
|
mcp.engram = { type: 'local', enabled: true, command: [engramBin, 'mcp', '--tools=agent'] }
|
|
110
119
|
} else {
|
|
111
120
|
console.warn('ancleto: no se encontro engram (memoria) en PATH; se omitio su MCP')
|
|
112
121
|
}
|
|
113
122
|
|
|
114
|
-
const
|
|
115
|
-
join(homedir(), '.caveman', 'bin', 'caveman-mcp
|
|
116
|
-
]
|
|
123
|
+
const cavemanFallbacks = [
|
|
124
|
+
join(homedir(), '.caveman', 'bin', binName('caveman-mcp'))
|
|
125
|
+
]
|
|
126
|
+
const cavemanBin = resolveBin('caveman-mcp', cavemanFallbacks)
|
|
117
127
|
if (cavemanBin) {
|
|
118
128
|
mcp.caveman = { type: 'local', enabled: true, command: [cavemanBin] }
|
|
119
129
|
} else {
|
|
@@ -280,13 +290,13 @@ const AGENT_SKILLS_DIR = {
|
|
|
280
290
|
roo: '.roo/skills'
|
|
281
291
|
}
|
|
282
292
|
|
|
283
|
-
const
|
|
293
|
+
const ANCLETO_SKILLS = ['ancleto-new', 'ancleto-propose', 'ancleto-apply', 'ancleto-verify', 'ancleto-archive', 'ancleto-bulk-archive', 'ancleto-continue', 'ancleto-explore', 'ancleto-ff', 'ancleto-onboard', 'ancleto-workflow']
|
|
284
294
|
|
|
285
295
|
async function installAgentSkills(projectDir, agent) {
|
|
286
296
|
const dir = AGENT_SKILLS_DIR[agent] || AGENT_SKILLS_DIR.opencode
|
|
287
297
|
const dest = join(projectDir, dir)
|
|
288
298
|
await mkdir(dest, { recursive: true })
|
|
289
|
-
for (const name of
|
|
299
|
+
for (const name of ANCLETO_SKILLS) {
|
|
290
300
|
const src = join(ROOT, 'skills', name)
|
|
291
301
|
if (!(await exists(src))) {
|
|
292
302
|
console.warn(`ancleto: skill no encontrada en el paquete: ${name}`)
|
|
@@ -450,7 +460,7 @@ async function upgradeCmd(args) {
|
|
|
450
460
|
})
|
|
451
461
|
console.log(`ancleto: upgrade completo (v${manifest.version}, agente: ${agent})`)
|
|
452
462
|
console.log(' ✔ templates re-aplicados (bloques LOCKED actualizados, EXTENSIBLE intacto)')
|
|
453
|
-
console.log(` ✔ skills actualizadas en ${agentSkillsDir} (${
|
|
463
|
+
console.log(` ✔ skills actualizadas en ${agentSkillsDir} (${ANCLETO_SKILLS.length} skills)`)
|
|
454
464
|
console.log(' ✔ manifiesto .ancletorc actualizado')
|
|
455
465
|
}
|
|
456
466
|
|