@eximia-ventures/claude-code-toolkit 3.2.1 → 5.0.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.
@@ -0,0 +1,398 @@
1
+ # /aios-story — Operações de Story AIOS
2
+
3
+ Você é um assistente especializado em gerenciar o ciclo de vida de stories no AIOS Framework.
4
+
5
+ ## Instruções
6
+
7
+ Quando o usuário executar `/aios-story`, apresente o menu principal:
8
+
9
+ ### Menu Principal
10
+
11
+ ```
12
+ 📋 AIOS Story Manager
13
+
14
+ Escolha uma operação:
15
+
16
+ 1. Criar nova story
17
+ 2. Validar story
18
+ 3. Desenvolver story
19
+ 4. QA Gate
20
+ 5. Ver status de uma story
21
+ 6. Próxima ação (auto-detectar)
22
+
23
+ 0. Sair
24
+
25
+ Digite o número da opção:
26
+ ```
27
+
28
+ Aguarde a resposta do usuário antes de prosseguir.
29
+
30
+ ---
31
+
32
+ ## Opção 1: Criar Nova Story (@sm)
33
+
34
+ ### Wizard de Criação
35
+
36
+ 1. **Pergunte o contexto:**
37
+ ```
38
+ 📝 Criar Nova Story
39
+
40
+ Preciso de algumas informações:
41
+
42
+ 1. Qual é o Epic ID ou caminho do PRD?
43
+ (ex: epic-001, docs/prd/meu-prd.md)
44
+ ```
45
+
46
+ 2. **Busque stories existentes:**
47
+ - Procure em `docs/stories/` por stories já criadas para este epic
48
+ - Liste as existentes:
49
+ ```
50
+ Stories existentes para este epic:
51
+ 1. 1.1.story.md — Setup inicial (Done)
52
+ 2. 1.2.story.md — Auth module (InProgress)
53
+ 3. 1.3.story.md — API endpoints (Ready)
54
+
55
+ A próxima story será: 1.4.story.md
56
+ ```
57
+
58
+ 3. **Confirme antes de criar:**
59
+ ```
60
+ Confirmar criação?
61
+ Epic: {epic-id}
62
+ Story: {next-number}
63
+ Base: PRD/Epic acima
64
+
65
+ (s/n)
66
+ ```
67
+
68
+ 4. **Execute:**
69
+ - Ative o agent @sm
70
+ - Leia e siga a task `.aios-core/development/tasks/create-next-story.md`
71
+ - Execute conforme definido na task
72
+
73
+ 5. **Relatório:**
74
+ ```
75
+ ✅ Story criada com sucesso!
76
+
77
+ Arquivo: docs/stories/{epicNum}.{storyNum}.story.md
78
+ Status: Draft
79
+ Próximo passo: Validar com /aios-story → opção 2
80
+
81
+ Deseja voltar ao menu principal? (s/n)
82
+ ```
83
+
84
+ ---
85
+
86
+ ## Opção 2: Validar Story (@po)
87
+
88
+ ### Wizard de Validação
89
+
90
+ 1. **Liste stories em Draft:**
91
+ ```
92
+ 📋 Stories disponíveis para validação (status: Draft):
93
+
94
+ 1. 1.4.story.md — {título}
95
+ 2. 2.1.story.md — {título}
96
+
97
+ Selecione o número da story (ou 0 para voltar):
98
+ ```
99
+
100
+ 2. **Se nenhuma story Draft encontrada:**
101
+ ```
102
+ ℹ️ Nenhuma story com status Draft encontrada.
103
+
104
+ Dica: Use a opção 1 para criar uma nova story primeiro.
105
+
106
+ Voltando ao menu principal...
107
+ ```
108
+
109
+ 3. **Execute a validação:**
110
+ - Ative o agent @po
111
+ - Leia e siga a task `.aios-core/development/tasks/validate-next-story.md`
112
+ - Aplique o checklist de 10 pontos:
113
+
114
+ ```
115
+ 🔍 Validação — Checklist 10 Pontos
116
+
117
+ 1. ☐ Título claro e objetivo
118
+ 2. ☐ Descrição completa (problema/necessidade)
119
+ 3. ☐ Critérios de aceite testáveis (Given/When/Then)
120
+ 4. ☐ Escopo bem definido (IN e OUT)
121
+ 5. ☐ Dependências mapeadas
122
+ 6. ☐ Estimativa de complexidade
123
+ 7. ☐ Valor de negócio claro
124
+ 8. ☐ Riscos documentados
125
+ 9. ☐ Critérios de Done definidos
126
+ 10. ☐ Alinhamento com PRD/Epic
127
+
128
+ Avaliando...
129
+ ```
130
+
131
+ 4. **Resultado:**
132
+ ```
133
+ 📊 Resultado da Validação
134
+
135
+ Story: {story-file}
136
+ Score: {N}/10
137
+ Veredicto: {GO ✅ | NO-GO ❌}
138
+
139
+ Detalhes:
140
+ ✅ 1. Título claro e objetivo
141
+ ✅ 2. Descrição completa
142
+ ❌ 3. AC não testáveis — faltam Given/When/Then
143
+ ...
144
+
145
+ {Se GO}: Status atualizado: Draft → Ready
146
+ {Se NO-GO}: Correções necessárias:
147
+ - Item 3: Reescrever AC no formato Given/When/Then
148
+ - Item 8: Adicionar seção de riscos
149
+
150
+ Deseja voltar ao menu principal? (s/n)
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Opção 3: Desenvolver Story (@dev)
156
+
157
+ ### Wizard de Desenvolvimento
158
+
159
+ 1. **Liste stories Ready:**
160
+ ```
161
+ 🚀 Stories disponíveis para desenvolvimento (status: Ready):
162
+
163
+ 1. 1.3.story.md — {título}
164
+ 2. 1.4.story.md — {título}
165
+
166
+ Selecione o número da story (ou 0 para voltar):
167
+ ```
168
+
169
+ 2. **Selecione o modo de execução:**
170
+ ```
171
+ ⚙️ Modo de Execução
172
+
173
+ 1. Interactive (default) — Confirmações em pontos-chave (5-10 prompts)
174
+ 2. YOLO — Autônomo, decisões logadas (0-1 prompts)
175
+ 3. Pre-Flight — Perguntas upfront, execução zero-ambiguidade (10-15 prompts)
176
+
177
+ Selecione o modo:
178
+ ```
179
+
180
+ 3. **Confirme:**
181
+ ```
182
+ Confirmar desenvolvimento?
183
+ Story: {story-file}
184
+ Modo: {modo selecionado}
185
+ Agent: @dev
186
+
187
+ (s/n)
188
+ ```
189
+
190
+ 4. **Execute:**
191
+ - Ative o agent @dev
192
+ - Leia e siga a task `.aios-core/development/tasks/dev-develop-story.md`
193
+ - Atualize status: Ready → InProgress
194
+ - Execute no modo selecionado
195
+ - Aplique CodeRabbit self-healing se configurado (max 2 iterações)
196
+
197
+ 5. **Relatório:**
198
+ ```
199
+ ✅ Desenvolvimento concluído!
200
+
201
+ Story: {story-file}
202
+ Status: InProgress
203
+ Modo: {modo}
204
+ Arquivos modificados: {N}
205
+ CodeRabbit: {N} issues auto-corrigidas
206
+
207
+ Próximo passo: QA Gate com /aios-story → opção 4
208
+
209
+ Deseja voltar ao menu principal? (s/n)
210
+ ```
211
+
212
+ ---
213
+
214
+ ## Opção 4: QA Gate (@qa)
215
+
216
+ ### Wizard de QA
217
+
218
+ 1. **Liste stories InProgress:**
219
+ ```
220
+ 🔍 Stories disponíveis para QA (status: InProgress):
221
+
222
+ 1. 1.3.story.md — {título}
223
+
224
+ Selecione o número da story (ou 0 para voltar):
225
+ ```
226
+
227
+ 2. **Execute o QA Gate:**
228
+ - Ative o agent @qa
229
+ - Leia e siga a task `.aios-core/development/tasks/qa-gate.md`
230
+ - Execute os 7 checks:
231
+
232
+ ```
233
+ 🏥 QA Gate — 7 Quality Checks
234
+
235
+ 1. ☐ Code review (padrões, legibilidade, manutenibilidade)
236
+ 2. ☐ Unit tests (cobertura adequada, todos passando)
237
+ 3. ☐ Acceptance criteria (todos atendidos)
238
+ 4. ☐ No regressions (funcionalidade existente preservada)
239
+ 5. ☐ Performance (dentro dos limites aceitáveis)
240
+ 6. ☐ Security (OWASP básico verificado)
241
+ 7. ☐ Documentation (atualizada se necessário)
242
+
243
+ Executando verificações...
244
+ ```
245
+
246
+ 3. **Resultado:**
247
+ ```
248
+ 📊 Resultado do QA Gate
249
+
250
+ Story: {story-file}
251
+ Veredicto: {PASS ✅ | CONCERNS ⚠️ | FAIL ❌ | WAIVED 🟡}
252
+
253
+ Checks:
254
+ ✅ 1. Code review — OK
255
+ ✅ 2. Unit tests — 95% cobertura, todos passando
256
+ ✅ 3. Acceptance criteria — 5/5 atendidos
257
+ ✅ 4. No regressions — OK
258
+ ⚠️ 5. Performance — query lenta detectada (não bloqueante)
259
+ ✅ 6. Security — OWASP OK
260
+ ✅ 7. Documentation — README atualizado
261
+
262
+ {Se PASS}: Status atualizado: InProgress → InReview → Done
263
+ {Se CONCERNS}: Aprovado com observações documentadas
264
+ {Se FAIL}: Retornar para @dev com feedback específico
265
+ {Se WAIVED}: Aprovado com waiver documentado
266
+
267
+ Issues encontradas: {N}
268
+ - [MEDIUM] Query N+1 em listUsers (documentado como tech debt)
269
+
270
+ Deseja voltar ao menu principal? (s/n)
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Opção 5: Ver Status de uma Story
276
+
277
+ ### Wizard de Status
278
+
279
+ 1. **Pergunte o caminho:**
280
+ ```
281
+ 📄 Ver Status da Story
282
+
283
+ Informe o caminho da story:
284
+ (ex: docs/stories/1.3.story.md)
285
+
286
+ Ou digite "listar" para ver todas as stories disponíveis.
287
+ ```
288
+
289
+ 2. **Se "listar":**
290
+ - Busque todos os arquivos `*.story.md` em `docs/stories/`
291
+ - Mostre lista numerada para seleção
292
+
293
+ 3. **Leia e exiba o status:**
294
+ ```
295
+ 📊 Status da Story
296
+
297
+ Arquivo: {path}
298
+ Título: {título}
299
+ Status: {status} {emoji}
300
+ Epic: {epic-ref}
301
+
302
+ Acceptance Criteria:
303
+ ✅ AC1 — {descrição}
304
+ ☐ AC2 — {descrição}
305
+ ☐ AC3 — {descrição}
306
+
307
+ Fase Atual: {fase no ciclo}
308
+ Próximo Passo: {ação sugerida}
309
+
310
+ Histórico:
311
+ - Draft (criado em {data})
312
+ - Ready (validado em {data})
313
+ - InProgress (desde {data})
314
+
315
+ Deseja voltar ao menu principal? (s/n)
316
+ ```
317
+
318
+ ---
319
+
320
+ ## Opção 6: Próxima Ação (Auto-Detectar)
321
+
322
+ ### Wizard de Auto-Detecção
323
+
324
+ 1. **Busque a story ativa mais recente:**
325
+ - Procure stories com status InProgress, Ready, ou Draft (nessa ordem de prioridade)
326
+ - Se múltiplas, pegue a mais recente
327
+
328
+ 2. **Analise e sugira:**
329
+ ```
330
+ 🎯 Próxima Ação Sugerida
331
+
332
+ Story detectada: {story-file}
333
+ Status atual: {status}
334
+
335
+ Sugestão: {ação baseada no status}
336
+ - Draft → "Validar esta story (opção 2)"
337
+ - Ready → "Iniciar desenvolvimento (opção 3)"
338
+ - InProgress → "Executar QA Gate (opção 4)"
339
+ - InReview → "Aguardando push pelo @devops"
340
+ - Done → "Criar próxima story (opção 1)"
341
+
342
+ Deseja executar a ação sugerida? (s/n)
343
+ ```
344
+
345
+ 3. **Se sim:** Execute a opção correspondente
346
+ 4. **Se não:** Volte ao menu principal
347
+
348
+ ---
349
+
350
+ ## Regras Gerais
351
+
352
+ ### Navegação
353
+ - Após cada operação, sempre pergunte se quer voltar ao menu principal
354
+ - "0" em qualquer menu volta ao menu anterior
355
+ - Nunca execute ações destrutivas sem confirmação
356
+
357
+ ### Tasks AIOS
358
+ Todas as operações devem referenciar e seguir as tasks oficiais em `.aios-core/development/tasks/`:
359
+ - `create-next-story.md` — criação de story
360
+ - `validate-next-story.md` — validação com checklist 10 pontos
361
+ - `dev-develop-story.md` — desenvolvimento com modos
362
+ - `qa-gate.md` — QA gate com 7 checks
363
+ - `story-checkpoint.md` — checkpoint entre operações
364
+ - `next.md` — detecção de próxima ação
365
+
366
+ ### Agents
367
+ Cada operação ativa o agent correto:
368
+ - Criar → @sm (Scrum Master)
369
+ - Validar → @po (Product Owner)
370
+ - Desenvolver → @dev (Developer)
371
+ - QA Gate → @qa (QA Engineer)
372
+
373
+ ### Story Lifecycle
374
+ Respeite a progressão de status:
375
+ ```
376
+ Draft → Ready → InProgress → InReview → Done
377
+ ```
378
+
379
+ Nunca pule fases. Se uma story está em Draft, ela precisa ser validada antes de ser desenvolvida.
380
+
381
+ ### Feedback Visual
382
+ - Use emojis consistentes para status: ✅ Done, 🚀 InProgress, 📋 Ready, 📝 Draft, ❌ Fail
383
+ - Mostre progresso durante operações longas
384
+ - Sempre exiba relatório ao final de cada operação
385
+
386
+ ### Sugestões Contextuais
387
+
388
+ Ao final de cada operação, além de perguntar se quer voltar ao menu, sugira skills relacionadas:
389
+
390
+ | Após operação | Sugerir |
391
+ |---------------|---------|
392
+ | Criar story (opção 1) | "Dica: Use `/aios-story` opção 2 para validar a story criada" |
393
+ | Validar story GO (opção 2) | "Dica: Use `/aios-story` opção 3 para iniciar o desenvolvimento" |
394
+ | Validar story NO-GO (opção 2) | "Dica: Corrija os itens e execute `/aios-story` opção 2 novamente" |
395
+ | Desenvolver story (opção 3) | "Dica: Use `/aios-qa` opção 1 para um quick scan, ou `/aios-story` opção 4 para QA Gate formal" |
396
+ | QA Gate PASS (opção 4) | "Dica: Use `/aios-publish` opção 3 para pre-push quality gate" |
397
+ | QA Gate FAIL (opção 4) | "Dica: Use `/aios-qa` opção 3 (QA Loop) para iterar fix → re-review" |
398
+ | Perdido | "Dica: Use `/aios-help` para ver todos os comandos disponíveis" |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eximia-ventures/claude-code-toolkit",
3
- "version": "3.2.1",
3
+ "version": "5.0.0",
4
4
  "description": "Setup completo para Claude Code: statusline, session handoff, AIOS integration",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -123,14 +123,17 @@ async function runDoctor() {
123
123
  check('AIOS Core instalado no projeto', true);
124
124
  ok++;
125
125
 
126
- // Check aios-integrate skill
127
- const skillPath = path.join(process.cwd(), '.claude', 'commands', 'aios-integrate.md');
128
- if (await fs.pathExists(skillPath)) {
129
- check('Skill /aios-integrate instalada', true);
130
- ok++;
131
- } else {
132
- check('Skill /aios-integrate não encontrada', false);
133
- issues++;
126
+ // Check all AIOS skills
127
+ const { SKILLS } = require('../modules/aios');
128
+ for (const skill of SKILLS) {
129
+ const skillPath = path.join(process.cwd(), '.claude', 'commands', skill.src);
130
+ if (await fs.pathExists(skillPath)) {
131
+ check(`Skill ${skill.name} instalada`, true);
132
+ ok++;
133
+ } else {
134
+ check(`Skill ${skill.name} não encontrada`, false);
135
+ issues++;
136
+ }
134
137
  }
135
138
  } else {
136
139
  logger.dim(' - AIOS Core não instalado (opcional)');
@@ -98,7 +98,7 @@ async function updateModule(name, manifest) {
98
98
  case 'aios': {
99
99
  const opts = {
100
100
  installAiosCore: manifest.aiosCore || false,
101
- installAiosSkill: true
101
+ installAiosSkills: manifest.aiosSkills || require('../modules/aios').SKILLS.map(s => s.name)
102
102
  };
103
103
  const result = await modules.aios.module.install(opts);
104
104
  return 'updated';
package/src/installer.js CHANGED
@@ -95,31 +95,35 @@ async function runInstaller() {
95
95
  ]);
96
96
 
97
97
  if (useAios) {
98
- const { aiosChoices } = await inquirer.prompt([
98
+ const { SKILLS } = require('./modules/aios');
99
+
100
+ const { installCore } = await inquirer.prompt([
101
+ {
102
+ type: 'confirm',
103
+ name: 'installCore',
104
+ message: 'Instalar/Atualizar AIOS Core?',
105
+ default: false
106
+ }
107
+ ]);
108
+
109
+ const { selectedSkills } = await inquirer.prompt([
99
110
  {
100
111
  type: 'checkbox',
101
- name: 'aiosChoices',
102
- message: 'Selecione as opções AIOS:',
103
- choices: [
104
- {
105
- name: 'Instalar/Atualizar AIOS Core',
106
- value: 'core',
107
- checked: false
108
- },
109
- {
110
- name: 'Instalar Skill /aios-integrate (integrar e gerenciar artefatos)',
111
- value: 'skill',
112
- checked: false
113
- }
114
- ]
112
+ name: 'selectedSkills',
113
+ message: 'Selecione as Skills AIOS:',
114
+ choices: SKILLS.map(s => ({
115
+ name: `${s.name.padEnd(18)} — ${s.desc}`,
116
+ value: s.name,
117
+ checked: false
118
+ }))
115
119
  }
116
120
  ]);
117
121
 
118
- if (aiosChoices.length > 0) {
122
+ if (installCore || selectedSkills.length > 0) {
119
123
  selectedModules.push('aios');
120
124
  aiosOptions = {
121
- installAiosCore: aiosChoices.includes('core'),
122
- installAiosSkill: aiosChoices.includes('skill')
125
+ installAiosCore: installCore,
126
+ installAiosSkills: selectedSkills
123
127
  };
124
128
  }
125
129
  }
@@ -174,6 +178,9 @@ async function runInstaller() {
174
178
  if (aiosOptions.installAiosCore && result.core?.installed) {
175
179
  manifest.aiosCore = true;
176
180
  }
181
+ if (aiosOptions.installAiosSkills) {
182
+ manifest.aiosSkills = aiosOptions.installAiosSkills;
183
+ }
177
184
  }
178
185
 
179
186
  // Save manifest
@@ -188,8 +195,8 @@ async function runInstaller() {
188
195
  if (selectedModules.includes('statusline')) {
189
196
  logger.info('Reinicie o Claude Code para ver a statusline.');
190
197
  }
191
- if (selectedModules.includes('aios') && aiosOptions.installAiosSkill) {
192
- logger.info('Use /aios-integrate para integrar e gerenciar artefatos AIOS.');
198
+ if (selectedModules.includes('aios') && aiosOptions.installAiosSkills?.length > 0) {
199
+ logger.info(`Skills AIOS instaladas: ${aiosOptions.installAiosSkills.join(', ')}`);
193
200
  }
194
201
  logger.blank();
195
202
  }
@@ -6,7 +6,15 @@ const fs = require('fs-extra');
6
6
  const { installFile } = require('../utils/file-installer');
7
7
  const logger = require('../utils/logger');
8
8
 
9
- const SKILL_SRC = path.join(__dirname, '..', '..', 'assets', 'skill', 'aios-integrate.md');
9
+ const SKILLS = [
10
+ { src: 'aios-integrate.md', name: '/aios-integrate', desc: 'Gerenciar artefatos (agents/squads)' },
11
+ { src: 'aios-story.md', name: '/aios-story', desc: 'Operações de story (criar, validar, desenvolver, QA)' },
12
+ { src: 'aios-epic.md', name: '/aios-epic', desc: 'Gestão de epics (criar, executar, status)' },
13
+ { src: 'aios-qa.md', name: '/aios-qa', desc: 'QA toolkit (scan, gate, loop, testes, security)' },
14
+ { src: 'aios-publish.md', name: '/aios-publish', desc: 'Release management (version, changelog, publish)' },
15
+ { src: 'aios-bootstrap.md', name: '/aios-bootstrap', desc: 'Setup de projeto (greenfield, brownfield, team, GitHub)' },
16
+ { src: 'aios-help.md', name: '/aios-help', desc: 'Guia de comandos AIOS (reference, busca, workflows)' },
17
+ ];
10
18
 
11
19
  async function installCore({ targetDir } = {}) {
12
20
  const cwd = targetDir || process.cwd();
@@ -27,25 +35,36 @@ async function installCore({ targetDir } = {}) {
27
35
  }
28
36
  }
29
37
 
30
- async function installSkill({ targetDir } = {}) {
38
+ async function installSkills({ targetDir, skills } = {}) {
31
39
  const cwd = targetDir || process.cwd();
32
40
  const commandsDir = path.join(cwd, '.claude', 'commands');
33
- const dest = path.join(commandsDir, 'aios-integrate.md');
34
-
35
41
  await fs.ensureDir(commandsDir);
36
42
 
37
- const result = await installFile(SKILL_SRC, dest);
43
+ const skillsToInstall = skills
44
+ ? SKILLS.filter(s => skills.includes(s.name))
45
+ : SKILLS;
46
+
47
+ const results = [];
48
+
49
+ for (const skill of skillsToInstall) {
50
+ const src = path.join(__dirname, '..', '..', 'assets', 'skill', skill.src);
51
+ const dest = path.join(commandsDir, skill.src);
52
+
53
+ const result = await installFile(src, dest);
54
+
55
+ if (result.action === 'installed') {
56
+ logger.success(`Skill ${skill.name} instalada`);
57
+ } else {
58
+ logger.success(`Skill ${skill.name} já atualizada`);
59
+ }
38
60
 
39
- if (result.action === 'installed') {
40
- logger.success('Skill /aios-integrate instalada');
41
- } else {
42
- logger.success('Skill /aios-integrate já atualizada');
61
+ results.push({ skill: skill.name, path: dest, action: result.action });
43
62
  }
44
63
 
45
- return { installed: true, path: dest };
64
+ return { installed: true, results };
46
65
  }
47
66
 
48
- async function install({ installAiosCore = true, installAiosSkill = true, targetDir } = {}) {
67
+ async function install({ installAiosCore = true, installAiosSkills, targetDir } = {}) {
49
68
  logger.section('AIOS Framework');
50
69
 
51
70
  const results = {};
@@ -54,8 +73,8 @@ async function install({ installAiosCore = true, installAiosSkill = true, target
54
73
  results.core = await installCore({ targetDir });
55
74
  }
56
75
 
57
- if (installAiosSkill) {
58
- results.skill = await installSkill({ targetDir });
76
+ if (installAiosSkills && installAiosSkills.length > 0) {
77
+ results.skills = await installSkills({ targetDir, skills: installAiosSkills });
59
78
  }
60
79
 
61
80
  return results;
@@ -65,10 +84,12 @@ async function uninstall({ targetDir } = {}) {
65
84
  const cwd = targetDir || process.cwd();
66
85
  const removed = [];
67
86
 
68
- const skillPath = path.join(cwd, '.claude', 'commands', 'aios-integrate.md');
69
- if (await fs.pathExists(skillPath)) {
70
- await fs.remove(skillPath);
71
- removed.push(skillPath);
87
+ for (const skill of SKILLS) {
88
+ const skillPath = path.join(cwd, '.claude', 'commands', skill.src);
89
+ if (await fs.pathExists(skillPath)) {
90
+ await fs.remove(skillPath);
91
+ removed.push(skillPath);
92
+ }
72
93
  }
73
94
 
74
95
  return removed;
@@ -76,9 +97,7 @@ async function uninstall({ targetDir } = {}) {
76
97
 
77
98
  function getManifestEntries({ targetDir } = {}) {
78
99
  const cwd = targetDir || process.cwd();
79
- return [
80
- path.join(cwd, '.claude', 'commands', 'aios-integrate.md')
81
- ];
100
+ return SKILLS.map(s => path.join(cwd, '.claude', 'commands', s.src));
82
101
  }
83
102
 
84
- module.exports = { install, uninstall, getManifestEntries };
103
+ module.exports = { install, uninstall, getManifestEntries, SKILLS };