synapos 2.6.1 → 2.7.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.
- package/.github/copilot-instructions.md +12 -10
- package/.synapos/copilot.md +65 -136
- package/.synapos/core/commands/bump.md +23 -43
- package/.synapos/core/commands/session.md +152 -0
- package/.synapos/core/commands/set-model.md +112 -19
- package/.synapos/core/commands/setup/discover.md +16 -125
- package/.synapos/core/commands/setup/start.md +5 -56
- package/.synapos/core/gate-system.md +53 -321
- package/.synapos/core/orchestrator.md +192 -350
- package/.synapos/core/pipeline-runner.md +117 -163
- package/.synapos/core/skills-engine.md +3 -2
- package/README.md +85 -207
- package/bin/synapos.js +7 -3
- package/package.json +1 -1
- package/.synapos/GUIDE.md +0 -660
|
@@ -1,16 +1,33 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: synapos-orchestrator
|
|
3
|
-
version:
|
|
4
|
-
description: Meta-orquestrador do Synapos
|
|
3
|
+
version: 2.0.0
|
|
4
|
+
description: Meta-orquestrador do Synapos — workflow system para projetos com IA
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# SYNAPOS ORCHESTRATOR
|
|
7
|
+
# SYNAPOS ORCHESTRATOR v2.0.0
|
|
8
8
|
|
|
9
|
-
>
|
|
9
|
+
> Workflow system para estruturar como você trabalha com IA em projetos reais.
|
|
10
10
|
> Integração: Claude Code.
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
+
## COMANDOS DISPONÍVEIS
|
|
15
|
+
|
|
16
|
+
| Comando | O que faz |
|
|
17
|
+
|---------|-----------|
|
|
18
|
+
| `/init` | Ponto de entrada principal — ativa roles, cria sessions, executa pipelines |
|
|
19
|
+
| `/session` | Navega sessions, visualiza context.md e memories.md, consolida quando necessário |
|
|
20
|
+
| `/session {slug}` | Abre diretamente a session de uma feature |
|
|
21
|
+
| `/session consolidate` | Consolida memories.md e review-notes.md da session ativa |
|
|
22
|
+
| `/setup:build-tech` | Gera documentação técnica do projeto (aumenta contexto disponível) |
|
|
23
|
+
| `/setup:build-business` | Gera documentação de negócio do projeto |
|
|
24
|
+
| `/bump` | Versiona os arquivos do framework |
|
|
25
|
+
|
|
26
|
+
> Ao detectar `/session` ou `/session {slug}` na mensagem do usuário, redirecione imediatamente para `.synapos/core/commands/session.md`.
|
|
27
|
+
> Não execute o protocolo de ativação do /init nesse caso.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
14
31
|
## REGRA GLOBAL — MENUS INTERATIVOS
|
|
15
32
|
|
|
16
33
|
**Sempre que precisar apresentar opções ao usuário, use o formato de seleção interativa abaixo.**
|
|
@@ -67,78 +84,25 @@ Se não: nenhuma ação necessária.
|
|
|
67
84
|
|
|
68
85
|
### PROTOCOLO DE ONBOARDING (primeira vez)
|
|
69
86
|
|
|
70
|
-
**
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
AskUserQuestion({
|
|
74
|
-
question: "Olá! Sou o Synapos — framework de orquestração de agents.\n\nAntes de começar, qual é o nome da empresa ou projeto?",
|
|
75
|
-
options: [
|
|
76
|
-
{ label: "Vou informar", description: "Informar nome" }
|
|
77
|
-
]
|
|
78
|
-
})
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
AskUserQuestion({
|
|
83
|
-
question: "Qual é o setor ou tipo de projeto?",
|
|
84
|
-
options: [
|
|
85
|
-
{ label: "SaaS / Software", description: "Produto de software como serviço" },
|
|
86
|
-
{ label: "E-commerce", description: "Loja virtual / marketplace" },
|
|
87
|
-
{ label: "Aplicativo Mobile", description: "App para celulares" },
|
|
88
|
-
{ label: "API / Backend", description: "Apenas backend/API" },
|
|
89
|
-
{ label: "Ferramenta Interna", description: "Software para uso interno" },
|
|
90
|
-
{ label: "Open Source", description: "Projeto open source" },
|
|
91
|
-
{ label: "Outro", description: "Vou especificar" }
|
|
92
|
-
]
|
|
93
|
-
})
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
AskUserQuestion({
|
|
98
|
-
question: "Qual linguagem de saída preferida?",
|
|
99
|
-
options: [
|
|
100
|
-
{ label: "Português (PT-BR)", description: "Documentação em português" },
|
|
101
|
-
{ label: "English (EN-US)", description: "Documentação em inglês" },
|
|
102
|
-
{ label: "Outro", description: "Vou especificar" }
|
|
103
|
-
]
|
|
104
|
-
})
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
AskUserQuestion({
|
|
109
|
-
question: "Qual task tracker você usa?",
|
|
110
|
-
options: [
|
|
111
|
-
{ label: "GitHub Issues", description: "Issues do GitHub" },
|
|
112
|
-
{ label: "Linear", description: "Linear" },
|
|
113
|
-
{ label: "Jira", description: "Jira" },
|
|
114
|
-
{ label: "Não uso", description: "Sem task tracker" }
|
|
115
|
-
]
|
|
116
|
-
})
|
|
117
|
-
```
|
|
87
|
+
**1 AskUserQuestion. Nada mais.**
|
|
118
88
|
|
|
119
89
|
```
|
|
120
90
|
AskUserQuestion({
|
|
121
|
-
question: "Qual
|
|
91
|
+
question: "Olá! Sou o Synapos.\n\nDuas perguntas rápidas para começar:\n 1. Qual é o nome do projeto?\n 2. O que você quer fazer agora?\n\nResponda as duas juntas. Ex: \"Meu SaaS — corrigir bug no login\"",
|
|
122
92
|
options: [
|
|
123
|
-
{ label: "
|
|
124
|
-
{ label: "GPT-4o", description: "OpenAI GPT-4o" },
|
|
125
|
-
{ label: "Gemini Pro", description: "Google Gemini Pro" },
|
|
126
|
-
{ label: "Kimi", description: "Kimi AI" },
|
|
127
|
-
{ label: "MiniMax", description: "MiniMax" },
|
|
128
|
-
{ label: "Outro", description: "Vou especificar" }
|
|
93
|
+
{ label: "Responder", description: "Digite: nome do projeto — o que quer fazer" }
|
|
129
94
|
]
|
|
130
95
|
})
|
|
131
96
|
```
|
|
132
97
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|---|---|
|
|
137
|
-
| Claude Opus/Sonnet, GPT-4o, Gemini 1.5 Pro+ | `high` |
|
|
138
|
-
| GPT-4o-mini, Gemini Flash, Claude Haiku | `standard` |
|
|
139
|
-
| Kimi, MiniMax, Llama 3.x, modelos locais | `lite` |
|
|
98
|
+
Com a resposta, extraia:
|
|
99
|
+
- **Nome do projeto** → salva em company.md
|
|
100
|
+
- **O que fazer** → use como contexto para o PASSO 2 (modo) e PASSO 5 (role)
|
|
140
101
|
|
|
141
|
-
|
|
102
|
+
Defaults silenciosos (nunca pergunte sobre eles no onboarding):
|
|
103
|
+
- Task tracker: `none`
|
|
104
|
+
- model_capability: `high`
|
|
105
|
+
- Linguagem: idioma detectado na resposta do usuário, padrão `pt-BR`
|
|
142
106
|
|
|
143
107
|
Crie os arquivos e continue para PASSO 2:
|
|
144
108
|
|
|
@@ -149,9 +113,9 @@ atualizado: {YYYY-MM-DD}
|
|
|
149
113
|
---
|
|
150
114
|
# Perfil
|
|
151
115
|
|
|
152
|
-
**Nome:** {
|
|
153
|
-
**Setor:**
|
|
154
|
-
**Linguagem de saída:** {
|
|
116
|
+
**Nome:** {nome inferido}
|
|
117
|
+
**Setor:** não informado
|
|
118
|
+
**Linguagem de saída:** {pt-BR | en-US}
|
|
155
119
|
```
|
|
156
120
|
|
|
157
121
|
**`docs/_memory/preferences.md`:**
|
|
@@ -161,145 +125,60 @@ atualizado: {YYYY-MM-DD}
|
|
|
161
125
|
---
|
|
162
126
|
# Preferências
|
|
163
127
|
|
|
164
|
-
**IDE Principal:**
|
|
128
|
+
**IDE Principal:** Claude Code
|
|
165
129
|
**Formato de data:** YYYY-MM-DD
|
|
166
|
-
**Task Tracker:**
|
|
167
|
-
**model_capability:**
|
|
168
|
-
**model_name:**
|
|
130
|
+
**Task Tracker:** none
|
|
131
|
+
**model_capability:** high
|
|
132
|
+
**model_name:** não informado
|
|
169
133
|
```
|
|
170
134
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
## PASSO 2 — MODE DECISION SYSTEM
|
|
174
|
-
|
|
175
|
-
O orquestrador determina automaticamente o modo de execução cruzando dois fatores: **score de documentação** e **complexidade da tarefa**. Nunca bloqueia — sempre encontra um caminho de execução.
|
|
135
|
+
> Task tracker, setor e modelo podem ser atualizados depois pelo usuário diretamente nos arquivos.
|
|
176
136
|
|
|
177
137
|
---
|
|
178
138
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
Verifique a existência de cada item e some os pontos:
|
|
182
|
-
|
|
183
|
-
| Item | Pontos |
|
|
184
|
-
|------|--------|
|
|
185
|
-
| `docs/_memory/company.md` existe | +30 |
|
|
186
|
-
| `docs/tech/` existe com ≥ 1 arquivo `.md` | +20 |
|
|
187
|
-
| `docs/business/` existe com ≥ 1 arquivo `.md` | +20 |
|
|
188
|
-
| `docs/tech-context/` existe com ≥ 1 arquivo `.md` | +15 |
|
|
189
|
-
| Total de arquivos `.md` em `docs/` ≥ 5 | +15 |
|
|
139
|
+
## PASSO 2 — ESCOLHA DE MODO
|
|
190
140
|
|
|
191
|
-
**
|
|
141
|
+
**Tente inferir o modo automaticamente.** Só pergunte se não for possível inferir.
|
|
192
142
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
---
|
|
143
|
+
**Inferência automática (sem perguntar):**
|
|
196
144
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
145
|
+
| Sinal na mensagem do usuário | Modo inferido |
|
|
146
|
+
|------------------------------|---------------|
|
|
147
|
+
| "fix", "bug", "typo", "quick", "ajuste", "cor", "texto" | `quick` |
|
|
148
|
+
| "feature", "arquitetura", "refactor", "sistema", "integração" | `complete` |
|
|
149
|
+
| Nenhum sinal claro | perguntar |
|
|
200
150
|
|
|
151
|
+
**Se não for possível inferir:**
|
|
201
152
|
```
|
|
202
153
|
AskUserQuestion({
|
|
203
|
-
question: "
|
|
154
|
+
question: "Como você quer executar?",
|
|
204
155
|
options: [
|
|
205
|
-
{ label: "
|
|
156
|
+
{ label: "⚡ Rápido", description: "Executa direto, sem ler documentação do projeto" },
|
|
157
|
+
{ label: "🔵 Completo", description: "Lê docs/, injeta ADRs e contexto completo" }
|
|
206
158
|
]
|
|
207
159
|
})
|
|
208
160
|
```
|
|
209
161
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
| Complexidade | Palavras-chave e sinais |
|
|
213
|
-
|---|---|
|
|
214
|
-
| **LOW** | fix, typo, ajuste, quick, bug simples, texto, estilo, cor, label, tradução |
|
|
215
|
-
| **MEDIUM** | feature, endpoint, component, tela, módulo, integração, API, CRUD |
|
|
216
|
-
| **HIGH** | arquitetura, refactor, sistema, infra, migração, redesign, segurança, performance |
|
|
217
|
-
|
|
218
|
-
Se não for possível classificar → assuma `MEDIUM`.
|
|
219
|
-
|
|
220
|
-
Armazene como `[COMPLEXITY]` (LOW / MEDIUM / HIGH).
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
### 2.3 — Determinar Execution Mode
|
|
225
|
-
|
|
226
|
-
Aplique as regras na ordem exata:
|
|
227
|
-
|
|
228
|
-
| Condição | Execution Mode |
|
|
229
|
-
|---|---|
|
|
230
|
-
| `company.md` não existe e `[DOC_SCORE]` = 0 | **BOOTSTRAP** |
|
|
231
|
-
| `[COMPLEXITY]` = LOW | **BOOTSTRAP** |
|
|
232
|
-
| `[COMPLEXITY]` = MEDIUM e `[DOC_SCORE]` < 40 | **BOOTSTRAP** |
|
|
233
|
-
| `[COMPLEXITY]` = MEDIUM e `[DOC_SCORE]` ≥ 40 | **STANDARD** |
|
|
234
|
-
| `[COMPLEXITY]` = HIGH e `[DOC_SCORE]` < 70 | **STANDARD** |
|
|
235
|
-
| `[COMPLEXITY]` = HIGH e `[DOC_SCORE]` ≥ 70 | **STRICT** |
|
|
236
|
-
|
|
237
|
-
Armazene como `[EXECUTION_MODE]` (BOOTSTRAP / STANDARD / STRICT).
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
### 2.4 — Reagir ao Modo
|
|
242
|
-
|
|
243
|
-
**Se `[EXECUTION_MODE]` = BOOTSTRAP:**
|
|
244
|
-
|
|
245
|
-
Informe sem bloquear:
|
|
246
|
-
```
|
|
247
|
-
⚡ Bootstrap Mode
|
|
248
|
-
Score de documentação: {DOC_SCORE}/100
|
|
249
|
-
Complexidade detectada: {COMPLEXITY}
|
|
250
|
-
|
|
251
|
-
Executando com contexto mínimo.
|
|
252
|
-
Pipelines disponíveis: quick-fix, bug-fix
|
|
162
|
+
Armazene como `[EXECUTION_MODE]` (`quick` / `complete`).
|
|
253
163
|
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
164
|
+
| Modo | O que injeta | Gates ativos |
|
|
165
|
+
|------|-------------|--------------|
|
|
166
|
+
| `quick` | company.md + session files | GATE-0, GATE-3, GATE-5 |
|
|
167
|
+
| `complete` | Tudo — docs/, ADRs, session files | GATE-0, GATE-3, GATE-5 |
|
|
258
168
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
**Se `[EXECUTION_MODE]` = STANDARD:**
|
|
262
|
-
|
|
263
|
-
Informe e continue:
|
|
169
|
+
Log ao definir modo:
|
|
264
170
|
```
|
|
265
|
-
|
|
266
|
-
Score de documentação: {DOC_SCORE}/100
|
|
267
|
-
Complexidade detectada: {COMPLEXITY}
|
|
268
|
-
|
|
269
|
-
Contexto parcial disponível. Gates ativos: GATE-0, GATE-ADR, GATE-DECISION.
|
|
171
|
+
⚡ Modo Rápido — executando sem documentação de projeto.
|
|
270
172
|
```
|
|
271
|
-
|
|
272
|
-
Continue para PASSO 3.
|
|
273
|
-
|
|
274
|
-
**Se `[EXECUTION_MODE]` = STRICT:**
|
|
275
|
-
|
|
276
|
-
Informe e continue:
|
|
173
|
+
ou
|
|
277
174
|
```
|
|
278
|
-
|
|
279
|
-
Score de documentação: {DOC_SCORE}/100
|
|
280
|
-
Complexidade detectada: {COMPLEXITY}
|
|
281
|
-
|
|
282
|
-
Contexto completo disponível. Todos os gates ativos. Máxima qualidade.
|
|
175
|
+
🔵 Modo Completo — contexto completo disponível.
|
|
283
176
|
```
|
|
284
177
|
|
|
285
178
|
Continue para PASSO 3.
|
|
286
179
|
|
|
287
180
|
---
|
|
288
181
|
|
|
289
|
-
### 2.5 — Sugestão de upgrade (STANDARD e STRICT)
|
|
290
|
-
|
|
291
|
-
Se `[DOC_SCORE]` < 100, exiba ao final qual documentação faltante aumentaria o score:
|
|
292
|
-
|
|
293
|
-
```
|
|
294
|
-
💡 Documentação disponível pode melhorar o modo:
|
|
295
|
-
{item ausente} → +{pontos} pontos
|
|
296
|
-
Score atual: {DOC_SCORE}/100 → precisaria de {threshold} para {próximo modo}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
Exiba apenas como informação — nunca bloqueie.
|
|
300
|
-
|
|
301
|
-
---
|
|
302
|
-
|
|
303
182
|
## PASSO 3 — ESCANEAR SQUADS ATIVOS
|
|
304
183
|
|
|
305
184
|
Verifique se existem subdiretórios em `.synapos/squads/` (ignorar `.gitkeep`).
|
|
@@ -321,70 +200,89 @@ Armazene como `[HAS_TEMPLATES]` (true / false).
|
|
|
321
200
|
|
|
322
201
|
```
|
|
323
202
|
AskUserQuestion({
|
|
324
|
-
question: "⚠️ Nenhum squad template instalado.\n\nSem templates não é possível criar squads.\n\
|
|
203
|
+
question: "⚠️ Nenhum squad template instalado.\n\nSem templates não é possível criar squads.\n\nTemplates disponíveis: backend, frontend, fullstack, mobile, devops, ia-dados, produto",
|
|
325
204
|
options: [
|
|
205
|
+
{ label: "📦 Instalar templates", description: "Instalar todos os templates padrão" },
|
|
206
|
+
{ label: "🔍 Ver como instalar", description: "Mostrar comandos npx synapos add" },
|
|
326
207
|
{ label: "Encerrar", description: "Fechar o orquestrador" }
|
|
327
208
|
]
|
|
328
209
|
})
|
|
329
210
|
```
|
|
330
211
|
|
|
331
|
-
|
|
212
|
+
- Se "Instalar templates": redirecione para instalação (passos definidos no README)
|
|
213
|
+
- Se "Ver como instalar": mostre `npx synapos add <template-name>`
|
|
214
|
+
- Se "Encerrar": pare aqui
|
|
215
|
+
|
|
216
|
+
**Pare a execução após a ação do usuário.**
|
|
332
217
|
|
|
333
218
|
---
|
|
334
219
|
|
|
335
220
|
## PASSO 4 — MENU PRINCIPAL
|
|
336
221
|
|
|
337
|
-
**Se existem squads**, monte o menu com AskUserQuestion.
|
|
222
|
+
**Se existem roles ativos (squads)**, monte o menu com AskUserQuestion.
|
|
338
223
|
|
|
339
|
-
Regra para a opção "
|
|
340
|
-
- **Inclua** `{ label: "✨
|
|
341
|
-
- **Se** `[HAS_TEMPLATES]` = false, **não inclua** essa opção e adicione
|
|
224
|
+
Regra para a opção "Novo role":
|
|
225
|
+
- **Inclua** `{ label: "✨ Novo role", description: "Ativar um novo role para esta tarefa" }` **apenas se** `[HAS_TEMPLATES]` = true.
|
|
226
|
+
- **Se** `[HAS_TEMPLATES]` = false, **não inclua** essa opção e adicione aviso no `question`: `"\n\n⚠️ Criação de roles indisponível — nenhum template instalado. Execute: npx synapos add <template>"`.
|
|
342
227
|
|
|
343
228
|
```
|
|
344
229
|
AskUserQuestion({
|
|
345
|
-
question: "Olá, {nome do usuário}! Qual
|
|
230
|
+
question: "Olá, {nome do usuário}! Qual role você quer ativar?{aviso se sem templates}",
|
|
346
231
|
options: [
|
|
347
232
|
{ label: "🟢 {slug}", description: "{domain} · {description} (ativo)" },
|
|
348
233
|
{ label: "🟡 {slug}", description: "{domain} · {description} (pausado)" },
|
|
349
|
-
// ✨
|
|
234
|
+
// ✨ Novo role — incluir SOMENTE se [HAS_TEMPLATES] = true
|
|
350
235
|
]
|
|
351
236
|
})
|
|
352
237
|
```
|
|
353
238
|
|
|
354
239
|
**Status visual:**
|
|
355
|
-
- 🟢 active —
|
|
240
|
+
- 🟢 active — role em andamento
|
|
356
241
|
- 🟡 paused — pausado, pode retomar
|
|
357
242
|
- ✅ completed — entregue
|
|
358
243
|
|
|
359
|
-
**Se não existem
|
|
244
|
+
**Se não existem roles e `[HAS_TEMPLATES]` = true** → vá direto para PASSO 5.
|
|
360
245
|
|
|
361
|
-
**Se não existem
|
|
246
|
+
**Se não existem roles e `[HAS_TEMPLATES]` = false** → já foi tratado no PASSO 3.5. Este passo nunca será alcançado nesse estado.
|
|
362
247
|
|
|
363
248
|
---
|
|
364
249
|
|
|
365
|
-
## PASSO 5 — SELEÇÃO DE
|
|
250
|
+
## PASSO 5 — SELEÇÃO DE ROLE
|
|
366
251
|
|
|
367
252
|
> **Pré-condição:** `[HAS_TEMPLATES]` = true (garantido pelo PASSO 3.5).
|
|
368
253
|
|
|
369
|
-
|
|
254
|
+
**Tente inferir o role automaticamente** a partir do contexto já capturado (mensagem inicial ou onboarding).
|
|
370
255
|
|
|
371
|
-
|
|
256
|
+
| Sinal na mensagem | Role inferido |
|
|
257
|
+
|-------------------|---------------|
|
|
258
|
+
| "backend", "API", "endpoint", "banco" | `backend` |
|
|
259
|
+
| "frontend", "tela", "componente", "UI" | `frontend` |
|
|
260
|
+
| "mobile", "app", "iOS", "Android" | `mobile` |
|
|
261
|
+
| "infra", "deploy", "CI/CD", "Docker" | `devops` |
|
|
262
|
+
| "produto", "spec", "PRD", "discovery" | `produto` |
|
|
263
|
+
| "dados", "modelo", "ML", "pipeline de dados" | `ia-dados` |
|
|
264
|
+
| Nenhum sinal claro | perguntar |
|
|
265
|
+
|
|
266
|
+
**Se não for possível inferir**, liste os templates e pergunte:
|
|
372
267
|
|
|
373
268
|
```
|
|
374
269
|
AskUserQuestion({
|
|
375
|
-
question: "
|
|
270
|
+
question: "Escolha como quer atuar:",
|
|
376
271
|
options: [
|
|
377
272
|
{ label: "{icon} {displayName}", description: "{description}" },
|
|
378
|
-
|
|
379
|
-
{ label: "✨ Customizado", description: "Monte seu próprio
|
|
273
|
+
// ... um por template instalado
|
|
274
|
+
{ label: "✨ Customizado", description: "Monte seu próprio role" }
|
|
380
275
|
]
|
|
381
276
|
})
|
|
382
277
|
```
|
|
383
278
|
|
|
279
|
+
> Itere sobre `.synapos/squad-templates/` em ordem alfabética. "✨ Customizado" é sempre o último.
|
|
280
|
+
> O usuário pode responder com número ou nome. Ambos são aceitos.
|
|
281
|
+
|
|
384
282
|
**Roteamento obrigatório — execute apenas UM dos caminhos abaixo:**
|
|
385
283
|
|
|
386
|
-
-
|
|
387
|
-
-
|
|
284
|
+
- Template existente selecionado (por número ou nome) → **vá para PASSO 6**.
|
|
285
|
+
- "✨ Customizado" → **vá para ROLE CUSTOMIZADO**.
|
|
388
286
|
|
|
389
287
|
---
|
|
390
288
|
|
|
@@ -392,100 +290,43 @@ AskUserQuestion({
|
|
|
392
290
|
|
|
393
291
|
Leia o template do domínio escolhido: `.synapos/squad-templates/{domínio}/template.yaml`
|
|
394
292
|
|
|
395
|
-
> **
|
|
396
|
-
>
|
|
397
|
-
> | | BOOTSTRAP | STANDARD | STRICT |
|
|
398
|
-
> |---|---|---|---|
|
|
399
|
-
> | **Pipelines disponíveis** | quick-fix, bug-fix | todos | todos |
|
|
400
|
-
> | **Agents opcionais** | não apresenta | apresenta | apresenta |
|
|
401
|
-
> | **Modo de performance** | fixado em `solo` | apresenta opções | apresenta opções |
|
|
402
|
-
> | **squad.yaml `execution_mode`** | `bootstrap` | `standard` | `strict` |
|
|
293
|
+
> **Comportamento por `[EXECUTION_MODE]`:**
|
|
403
294
|
>
|
|
404
|
-
>
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
**
|
|
409
|
-
|
|
410
|
-
```
|
|
411
|
-
AskUserQuestion({
|
|
412
|
-
question: "Squad: {displayName}\n\nAgents base (sempre incluídos):\n ✅ {icon} {displayName} — {role}\n ✅ {icon} {displayName} — {role}\n\nQuais agents opcionais você quer adicionar?",
|
|
413
|
-
multiSelect: true,
|
|
414
|
-
options: [
|
|
415
|
-
{ label: "{icon} {displayName}", description: "{role}" },
|
|
416
|
-
{ label: "{icon} {displayName}", description: "{role}" },
|
|
417
|
-
{ label: "{icon} {displayName}", description: "{role}" },
|
|
418
|
-
{ label: "Nenhum adicional", description: "Usar apenas agents base" }
|
|
419
|
-
]
|
|
420
|
-
})
|
|
421
|
-
```
|
|
295
|
+
> | | Rápido (`quick`) | Completo (`complete`) |
|
|
296
|
+
> |---|---|---|
|
|
297
|
+
> | **Agents opcionais** | não apresenta | apresenta |
|
|
298
|
+
> | **Modo de performance** | fixado em `solo` | apresenta opções |
|
|
299
|
+
> | **squad.yaml `execution_mode`** | `quick` | `complete` |
|
|
422
300
|
|
|
423
|
-
|
|
301
|
+
### 6.1 — Configuração
|
|
424
302
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
303
|
+
**Modo Rápido: use defaults automáticas, sem perguntar**
|
|
304
|
+
- Agents: apenas base do template
|
|
305
|
+
- Modo: `solo`
|
|
306
|
+
- Nome: auto-gerado `{domínio}-{NNN}`
|
|
307
|
+
- Contexto: da mensagem/argumento do usuário
|
|
428
308
|
|
|
309
|
+
Log:
|
|
429
310
|
```
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
options: [
|
|
433
|
-
{
|
|
434
|
-
label: "⚡ Alta Performance",
|
|
435
|
-
description: "Squad completo, documentação máxima, revisões aprofundadas — para features críticas"
|
|
436
|
-
},
|
|
437
|
-
{
|
|
438
|
-
label: "💰 Econômico",
|
|
439
|
-
description: "Docs core, execução rápida, menos checkpoints — para tasks bem definidas"
|
|
440
|
-
},
|
|
441
|
-
{
|
|
442
|
-
label: "🧑💻 Solo",
|
|
443
|
-
description: "Para dev solo: sem checkpoints de aprovação, execução direta — para quick fixes"
|
|
444
|
-
}
|
|
445
|
-
]
|
|
446
|
-
})
|
|
311
|
+
⚡ Modo Rápido: squad criado com defaults
|
|
312
|
+
Agents: base | Modo: solo | Pipeline: {default}
|
|
447
313
|
```
|
|
448
314
|
|
|
449
|
-
|
|
450
|
-
> - Agents base → sempre incluídos
|
|
451
|
-
> - Agents opcionais selecionados → sempre incluídos
|
|
452
|
-
>
|
|
453
|
-
> O modo afeta apenas:
|
|
454
|
-
> - Quantidade de etapas de documentação/revisão
|
|
455
|
-
> - Exigência de aprovação em checkpoints intermediários
|
|
456
|
-
> - Nível de detalhamento dos outputs
|
|
457
|
-
|
|
458
|
-
> **Modo Solo:** Registre `mode: solo` no `squad.yaml`. O pipeline runner ignora checkpoints de aprovação intermediários (mantendo gates de integridade).
|
|
459
|
-
|
|
460
|
-
### 6.3 — Nome / slug do squad (SELEÇÃO OU INPUT)
|
|
461
|
-
|
|
462
|
-
**Use AskUserQuestion com opção de input:**
|
|
315
|
+
**Modo Completo: pergunte (máximo 1 AskUserQuestion):**
|
|
463
316
|
|
|
464
317
|
```
|
|
465
318
|
AskUserQuestion({
|
|
466
|
-
question: "
|
|
319
|
+
question: "Squad: {displayName}\n\nQuer usar defaults ou customizar?",
|
|
467
320
|
options: [
|
|
468
|
-
{ label: "
|
|
469
|
-
{ label: "
|
|
321
|
+
{ label: "✅ Defaults", description: "Agents base + solo + auto-nome" },
|
|
322
|
+
{ label: "🔧 Customizar", description: "Escolher agents, modo, nome" }
|
|
470
323
|
]
|
|
471
324
|
})
|
|
472
325
|
```
|
|
473
326
|
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
### 6.4 — Contexto do squad (INPUT LIVRE)
|
|
478
|
-
|
|
479
|
-
**Use AskUserQuestion com input:**
|
|
480
|
-
|
|
481
|
-
```
|
|
482
|
-
AskUserQuestion({
|
|
483
|
-
question: "Descreva o objetivo deste squad (1-2 frases):",
|
|
484
|
-
options: [
|
|
485
|
-
{ label: "Vou describir", description: "Ex: Implementar endpoints de autenticação" }
|
|
486
|
-
]
|
|
487
|
-
})
|
|
488
|
-
```
|
|
327
|
+
> Para cada seleção, faça uma pergunta específica (máximo 1 por item selecionado).
|
|
328
|
+
> Agents base são SEMPRE incluídos — nunca pergunte para remover.
|
|
329
|
+
> Auto-nome: `{domínio}-{NNN}` → backend-001, frontend-002
|
|
489
330
|
|
|
490
331
|
---
|
|
491
332
|
|
|
@@ -520,15 +361,17 @@ docs/.squads/sessions/{feature-slug}/ ← session da feature (criada pelo pipel
|
|
|
520
361
|
```yaml
|
|
521
362
|
name: {squad-slug}
|
|
522
363
|
domain: {domínio}
|
|
523
|
-
displayName: "{displayName do template}"
|
|
364
|
+
displayName: "{displayName do template}" # nome do role exibido ao usuário
|
|
524
365
|
description: "{contexto do squad nesta feature}"
|
|
525
366
|
status: active
|
|
526
367
|
mode: {alta | economico | solo}
|
|
527
|
-
execution_mode: {
|
|
528
|
-
doc_score: {0-100} # score de documentação no momento da criação
|
|
368
|
+
execution_mode: {quick | complete} # determinado no PASSO 2
|
|
529
369
|
created_at: {YYYY-MM-DD}
|
|
530
370
|
feature: "" # preenchido no PASSO 7.5
|
|
531
371
|
session: "" # preenchido no PASSO 7.5
|
|
372
|
+
roles: # papéis simulados neste squad (exibido na UI como "atuando como:")
|
|
373
|
+
- {papel 1} # ex: arquiteto, desenvolvedor, revisor
|
|
374
|
+
- {papel 2}
|
|
532
375
|
agents:
|
|
533
376
|
- {id do agent 1}
|
|
534
377
|
- {id do agent 2}
|
|
@@ -563,92 +406,67 @@ Verifique se `docs/_memory/project-learnings.md` existe. Se não existir, crie:
|
|
|
563
406
|
|
|
564
407
|
> **Executar apenas após o squad ter sido criado (arquivos do PASSO 7 já gravados).**
|
|
565
408
|
|
|
566
|
-
**
|
|
409
|
+
**Auto-detectar:** Liste as pastas em `docs/.squads/sessions/`.
|
|
567
410
|
|
|
568
|
-
|
|
569
|
-
AskUserQuestion
|
|
570
|
-
|
|
571
|
-
options: [
|
|
572
|
-
{ label: "📂 Session existente", description: "Selecionar feature já criada" },
|
|
573
|
-
{ label: "✨ Nova feature", description: "Criar nova feature session" }
|
|
574
|
-
]
|
|
575
|
-
})
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
**Se "Session existente":**
|
|
579
|
-
Liste as pastas em `docs/.squads/sessions/` com AskUserQuestion:
|
|
411
|
+
- **Se 0 sessions existirem:** vá direto para criar nova (sem AskUserQuestion)
|
|
412
|
+
- **Se 1 session existir:** use ela automaticamente (sem AskUserQuestion)
|
|
413
|
+
- **Se 2+ existirem:** pergunte qual usar
|
|
580
414
|
|
|
581
415
|
```
|
|
582
416
|
AskUserQuestion({
|
|
583
|
-
question: "
|
|
417
|
+
question: "Role {squad-slug} ativado! 🎉\n\nFeature session:",
|
|
584
418
|
options: [
|
|
585
|
-
{ label: "{
|
|
586
|
-
{ label: "{feature-
|
|
419
|
+
{ label: "✨ Nova: {auto-slug}", description: "Criar nova feature" },
|
|
420
|
+
{ label: "📂 {feature-1}", description: "Usar session existente" },
|
|
421
|
+
{ label: "📂 {feature-2}", description: "Usar session existente" }
|
|
587
422
|
]
|
|
588
423
|
})
|
|
589
424
|
```
|
|
590
425
|
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
```
|
|
594
|
-
AskUserQuestion({
|
|
595
|
-
question: "Qual é o nome/slug da nova feature?",
|
|
596
|
-
options: [
|
|
597
|
-
{ label: "Vou informar", description: "Ex: auth-module, feat/pagamentos" }
|
|
598
|
-
]
|
|
599
|
-
})
|
|
600
|
-
```
|
|
426
|
+
Se "Nova": o slug é inferido do contexto do squad (ex: "bug-login" se o squad é sobre corrigir login).
|
|
601
427
|
|
|
602
428
|
`{feature-slug}` = lowercase, espaços → hífens, sem caracteres especiais.
|
|
603
429
|
|
|
604
|
-
Após obter o `{feature-slug}`, atualize
|
|
605
|
-
|
|
606
|
-
```yaml
|
|
607
|
-
feature: {feature-slug}
|
|
608
|
-
session: docs/.squads/sessions/{feature-slug}/
|
|
609
|
-
```
|
|
430
|
+
Após obter o `{feature-slug}`, atualize `feature` e `session` no `squad.yaml`.
|
|
610
431
|
|
|
611
432
|
---
|
|
612
433
|
|
|
613
434
|
## PASSO 8 — ATIVAR SQUAD
|
|
614
435
|
|
|
615
|
-
### 8.1 — Resumo e Confirmação
|
|
616
|
-
|
|
617
|
-
**Use AskUserQuestion antes de iniciar:**
|
|
436
|
+
### 8.1 — Resumo e Confirmação (1 AskUserQuestion)
|
|
618
437
|
|
|
619
438
|
```
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
options: [
|
|
623
|
-
{ label: "▶️ Iniciar Squad", description: "Executar o pipeline agora" },
|
|
624
|
-
{ label: "Revisar Squad", description: "Verificar configurações antes de iniciar" },
|
|
625
|
-
{ label: "Cancelar", description: "Voltar sem iniciar" }
|
|
626
|
-
]
|
|
627
|
-
})
|
|
628
|
-
```
|
|
439
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
440
|
+
Squad {slug} criado! 🚀
|
|
629
441
|
|
|
630
|
-
|
|
442
|
+
Agents: {lista}
|
|
443
|
+
Modo: {modo}
|
|
444
|
+
Pipeline: {pipeline}
|
|
445
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
631
446
|
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
447
|
+
**Modo Rápido:** iniciar direto sem AskUserQuestion
|
|
448
|
+
```
|
|
449
|
+
⚡ Iniciando squad {slug}...
|
|
450
|
+
```
|
|
636
451
|
|
|
637
|
-
|
|
452
|
+
**Modo Completo:** pedir confirmação
|
|
638
453
|
```
|
|
639
454
|
AskUserQuestion({
|
|
640
|
-
question: "
|
|
455
|
+
question: "Squad pronto. Iniciar execução?",
|
|
641
456
|
options: [
|
|
642
|
-
{ label: "
|
|
643
|
-
{ label: "
|
|
457
|
+
{ label: "▶️ Iniciar", description: "Executar o pipeline" },
|
|
458
|
+
{ label: "Revisar squad.yaml", description: "Ver antes de rodar" }
|
|
644
459
|
]
|
|
645
460
|
})
|
|
646
461
|
```
|
|
647
462
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
463
|
+
### 8.2 — Verificação automática de Skills
|
|
464
|
+
|
|
465
|
+
Silenciosamente antes de iniciar:
|
|
466
|
+
1. Leia os steps do pipeline
|
|
467
|
+
2. Verifique skills necessárias
|
|
468
|
+
3. Se skill ausente: log `⚠️ Skill {x} não encontrada — continuando sem ela`
|
|
469
|
+
4. Não bloqueia — apenas alerta
|
|
652
470
|
|
|
653
471
|
### 8.3 — Iniciar Pipeline
|
|
654
472
|
|
|
@@ -738,12 +556,12 @@ AskUserQuestion({
|
|
|
738
556
|
|
|
739
557
|
```
|
|
740
558
|
AskUserQuestion({
|
|
741
|
-
question: "
|
|
559
|
+
question: "Role {squad-slug} carregado.\nFeature: {feature-slug}\n\nRoles que já trabalharam: {lista}\n\nO que você quer fazer?",
|
|
742
560
|
options: [
|
|
743
561
|
{ label: "🔄 Nova execução", description: "Executar novamente (manter contexto)" },
|
|
744
562
|
{ label: "🧠 Ver memória", description: "Abrir memories.md da feature" },
|
|
745
563
|
{ label: "📂 Ver arquivos", description: "Ver arquivos da session" },
|
|
746
|
-
{ label: "⏸️ Pausar", description: "Pausar/arquivar
|
|
564
|
+
{ label: "⏸️ Pausar", description: "Pausar/arquivar role" }
|
|
747
565
|
]
|
|
748
566
|
})
|
|
749
567
|
```
|
|
@@ -754,29 +572,51 @@ Aguarde a seleção do usuário.
|
|
|
754
572
|
|
|
755
573
|
---
|
|
756
574
|
|
|
757
|
-
##
|
|
575
|
+
## ROLE CUSTOMIZADO
|
|
758
576
|
|
|
759
577
|
Quando o usuário escolhe "✨ Customizado" no PASSO 5.
|
|
760
578
|
|
|
761
|
-
> O domínio já foi identificado como "customizado" — não pergunte novamente.
|
|
579
|
+
> O domínio já foi identificado como "customizado" — não pergunte novamente.
|
|
762
580
|
|
|
763
|
-
|
|
581
|
+
### Orientações:
|
|
582
|
+
- Roles base são sempre incluídos — não precisam ser selecionados
|
|
583
|
+
- Recomendado para features: 2-3 roles (base + 1-2 adicionais)
|
|
584
|
+
- Evite selecionar todos — overhead sem benefício
|
|
764
585
|
|
|
765
|
-
|
|
586
|
+
### Passo 1 — Selecionar roles adicionais
|
|
766
587
|
|
|
767
588
|
```
|
|
768
589
|
AskUserQuestion({
|
|
769
|
-
question: "
|
|
590
|
+
question: "Role Customizado\n\nQue perspectivas você quer ativar (além da base)?",
|
|
591
|
+
options: [
|
|
592
|
+
{ label: "🧑💻 Fullstack", description: "Para features integradas front + back" },
|
|
593
|
+
{ label: "🎨 Designer/UX", description: "Para features com UI" },
|
|
594
|
+
{ label: "🔧 DevOps", description: "Para features com infra" },
|
|
595
|
+
{ label: "✅ Só base", description: "Apenas o role base" }
|
|
596
|
+
],
|
|
597
|
+
multiSelect: true
|
|
598
|
+
})
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
### Passo 2 — Selecionar pipeline
|
|
602
|
+
|
|
603
|
+
```
|
|
604
|
+
AskUserQuestion({
|
|
605
|
+
question: "Qual pipeline para este role?",
|
|
770
606
|
options: [
|
|
771
607
|
{ label: "Feature Development", description: "Discovery → Arquitetura → Implementação → Review" },
|
|
772
608
|
{ label: "Bug Fix", description: "Diagnóstico → Fix → Testes → Review" },
|
|
773
|
-
{ label: "Quick Fix", description: "Mudança rápida sem aprovações" }
|
|
774
|
-
{ label: "Customizado", description: "Descrever um novo fluxo" }
|
|
609
|
+
{ label: "Quick Fix", description: "Mudança rápida sem aprovações" }
|
|
775
610
|
]
|
|
776
611
|
})
|
|
777
612
|
```
|
|
778
613
|
|
|
779
|
-
|
|
614
|
+
### Passo 3 — Criar squad.yaml
|
|
615
|
+
|
|
616
|
+
- Domain: `custom`
|
|
617
|
+
- DisplayName: `Role Customizado`
|
|
618
|
+
- Roles: os selecionados no Passo 1
|
|
619
|
+
- Mode: `solo` (padrão para custom)
|
|
780
620
|
|
|
781
621
|
---
|
|
782
622
|
|
|
@@ -786,9 +626,11 @@ AskUserQuestion({
|
|
|
786
626
|
|-------|-----------|
|
|
787
627
|
| **SEMPRE use AskUserQuestion** | Qualquer interação com usuário deve usar janela interativa |
|
|
788
628
|
| **Nunca pule o PASSO 1** | Contexto de empresa/usuário é obrigatório |
|
|
629
|
+
| **Infira antes de perguntar** | Modo e role podem ser inferidos do contexto — só pergunte se necessário |
|
|
630
|
+
| **UI usa "role", interno usa "squad"** | Na UI: "role", "ativar role". Em arquivos: squad.yaml, squads/ |
|
|
789
631
|
| **Agents BASE são fixos** | Nunca remova sem confirmação explícita |
|
|
790
632
|
| **Memória persiste** | Sempre carregue memories.md em toda sessão |
|
|
791
|
-
| **
|
|
633
|
+
| **Múltiplos roles são permitidos** | Cada squad tem contexto isolado |
|
|
792
634
|
| **Salve estado** | Atualize squad.yaml após mudanças de status |
|
|
793
635
|
| **Fail loud** | Se faltar arquivo de template, informe e pare |
|
|
794
636
|
| **Linguagem** | Siga a preferência em `docs/_memory/preferences.md` |
|