synapos 2.6.0 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +12 -10
- package/.synapos/.manifest.json +2 -2
- package/.synapos/VERSION +1 -1
- 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 +191 -378
- 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 +1 -1
- 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
|
-
```
|
|
87
|
+
**1 AskUserQuestion. Nada mais.**
|
|
106
88
|
|
|
107
89
|
```
|
|
108
90
|
AskUserQuestion({
|
|
109
|
-
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\"",
|
|
110
92
|
options: [
|
|
111
|
-
{ label: "
|
|
112
|
-
{ label: "Linear", description: "Linear" },
|
|
113
|
-
{ label: "Jira", description: "Jira" },
|
|
114
|
-
{ label: "Não uso", description: "Sem task tracker" }
|
|
93
|
+
{ label: "Responder", description: "Digite: nome do projeto — o que quer fazer" }
|
|
115
94
|
]
|
|
116
95
|
})
|
|
117
96
|
```
|
|
118
97
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
options: [
|
|
123
|
-
{ label: "Claude Opus/Sonnet", description: "Anthropic Claude premium" },
|
|
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" }
|
|
129
|
-
]
|
|
130
|
-
})
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Após as respostas, mapeie o modelo para `model_capability`:
|
|
134
|
-
|
|
135
|
-
| Modelo | model_capability |
|
|
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:
|
|
139
|
+
## PASSO 2 — ESCOLHA DE MODO
|
|
182
140
|
|
|
183
|
-
|
|
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 |
|
|
141
|
+
**Tente inferir o modo automaticamente.** Só pergunte se não for possível inferir.
|
|
190
142
|
|
|
191
|
-
**
|
|
143
|
+
**Inferência automática (sem perguntar):**
|
|
192
144
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
Pergunte ao usuário o que ele quer fazer. Se já houver contexto da mensagem inicial, use-o diretamente.
|
|
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
|
|
253
|
-
|
|
254
|
-
Para desbloquear mais pipelines:
|
|
255
|
-
→ /setup:build-tech (+35 pontos)
|
|
256
|
-
→ /setup:build-business (+40 pontos)
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
Continue para PASSO 3.
|
|
162
|
+
Armazene como `[EXECUTION_MODE]` (`quick` / `complete`).
|
|
260
163
|
|
|
261
|
-
|
|
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 |
|
|
262
168
|
|
|
263
|
-
|
|
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,166 +200,133 @@ 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).
|
|
255
|
+
|
|
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 |
|
|
370
265
|
|
|
371
|
-
|
|
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
|
+
|
|
282
|
+
**Roteamento obrigatório — execute apenas UM dos caminhos abaixo:**
|
|
283
|
+
|
|
284
|
+
- Template existente selecionado (por número ou nome) → **vá para PASSO 6**.
|
|
285
|
+
- "✨ Customizado" → **vá para ROLE CUSTOMIZADO**.
|
|
286
|
+
|
|
384
287
|
---
|
|
385
288
|
|
|
386
289
|
## PASSO 6 — CONFIGURAR SQUAD
|
|
387
290
|
|
|
388
291
|
Leia o template do domínio escolhido: `.synapos/squad-templates/{domínio}/template.yaml`
|
|
389
292
|
|
|
390
|
-
> **
|
|
391
|
-
>
|
|
392
|
-
> | | BOOTSTRAP | STANDARD | STRICT |
|
|
393
|
-
> |---|---|---|---|
|
|
394
|
-
> | **Pipelines disponíveis** | quick-fix, bug-fix | todos | todos |
|
|
395
|
-
> | **Agents opcionais** | não apresenta | apresenta | apresenta |
|
|
396
|
-
> | **Modo de performance** | fixado em `solo` | apresenta opções | apresenta opções |
|
|
397
|
-
> | **squad.yaml `execution_mode`** | `bootstrap` | `standard` | `strict` |
|
|
293
|
+
> **Comportamento por `[EXECUTION_MODE]`:**
|
|
398
294
|
>
|
|
399
|
-
>
|
|
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` |
|
|
400
300
|
|
|
401
|
-
### 6.1 —
|
|
301
|
+
### 6.1 — Configuração
|
|
402
302
|
|
|
403
|
-
**
|
|
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
|
|
404
308
|
|
|
309
|
+
Log:
|
|
405
310
|
```
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
multiSelect: true,
|
|
409
|
-
options: [
|
|
410
|
-
{ label: "{icon} {displayName}", description: "{role}" },
|
|
411
|
-
{ label: "{icon} {displayName}", description: "{role}" },
|
|
412
|
-
{ label: "{icon} {displayName}", description: "{role}" },
|
|
413
|
-
{ label: "Nenhum adicional", description: "Usar apenas agents base" }
|
|
414
|
-
]
|
|
415
|
-
})
|
|
416
|
-
```
|
|
417
|
-
|
|
418
|
-
Aguarde a seleção. Agents base são sempre incluídos.
|
|
419
|
-
|
|
420
|
-
### 6.2 — Modo de performance (SELEÇÃO INTERATIVA)
|
|
421
|
-
|
|
422
|
-
**Use AskUserQuestion:**
|
|
423
|
-
|
|
424
|
-
```
|
|
425
|
-
AskUserQuestion({
|
|
426
|
-
question: "Qual modo de operação você prefere?",
|
|
427
|
-
options: [
|
|
428
|
-
{
|
|
429
|
-
label: "⚡ Alta Performance",
|
|
430
|
-
description: "Squad completo, documentação máxima, revisões aprofundadas — para features críticas"
|
|
431
|
-
},
|
|
432
|
-
{
|
|
433
|
-
label: "💰 Econômico",
|
|
434
|
-
description: "Docs core, execução rápida, menos checkpoints — para tasks bem definidas"
|
|
435
|
-
},
|
|
436
|
-
{
|
|
437
|
-
label: "🧑💻 Solo",
|
|
438
|
-
description: "Para dev solo: sem checkpoints de aprovação, execução direta — para quick fixes"
|
|
439
|
-
}
|
|
440
|
-
]
|
|
441
|
-
})
|
|
311
|
+
⚡ Modo Rápido: squad criado com defaults
|
|
312
|
+
Agents: base | Modo: solo | Pipeline: {default}
|
|
442
313
|
```
|
|
443
314
|
|
|
444
|
-
|
|
445
|
-
> - Agents base → sempre incluídos
|
|
446
|
-
> - Agents opcionais selecionados → sempre incluídos
|
|
447
|
-
>
|
|
448
|
-
> O modo afeta apenas:
|
|
449
|
-
> - Quantidade de etapas de documentação/revisão
|
|
450
|
-
> - Exigência de aprovação em checkpoints intermediários
|
|
451
|
-
> - Nível de detalhamento dos outputs
|
|
452
|
-
|
|
453
|
-
> **Modo Solo:** Registre `mode: solo` no `squad.yaml`. O pipeline runner ignora checkpoints de aprovação intermediários (mantendo gates de integridade).
|
|
454
|
-
|
|
455
|
-
### 6.3 — Nome / slug do squad (SELEÇÃO OU INPUT)
|
|
456
|
-
|
|
457
|
-
**Use AskUserQuestion com opção de input:**
|
|
315
|
+
**Modo Completo: pergunte (máximo 1 AskUserQuestion):**
|
|
458
316
|
|
|
459
317
|
```
|
|
460
318
|
AskUserQuestion({
|
|
461
|
-
question: "
|
|
319
|
+
question: "Squad: {displayName}\n\nQuer usar defaults ou customizar?",
|
|
462
320
|
options: [
|
|
463
|
-
{ label: "
|
|
464
|
-
{ label: "
|
|
321
|
+
{ label: "✅ Defaults", description: "Agents base + solo + auto-nome" },
|
|
322
|
+
{ label: "🔧 Customizar", description: "Escolher agents, modo, nome" }
|
|
465
323
|
]
|
|
466
324
|
})
|
|
467
325
|
```
|
|
468
326
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
### 6.4 — Contexto do squad (INPUT LIVRE)
|
|
473
|
-
|
|
474
|
-
**Use AskUserQuestion com input:**
|
|
475
|
-
|
|
476
|
-
```
|
|
477
|
-
AskUserQuestion({
|
|
478
|
-
question: "Descreva o objetivo deste squad (1-2 frases):",
|
|
479
|
-
options: [
|
|
480
|
-
{ label: "Vou describir", description: "Ex: Implementar endpoints de autenticação" }
|
|
481
|
-
]
|
|
482
|
-
})
|
|
483
|
-
```
|
|
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
|
|
484
330
|
|
|
485
331
|
---
|
|
486
332
|
|
|
@@ -515,15 +361,17 @@ docs/.squads/sessions/{feature-slug}/ ← session da feature (criada pelo pipel
|
|
|
515
361
|
```yaml
|
|
516
362
|
name: {squad-slug}
|
|
517
363
|
domain: {domínio}
|
|
518
|
-
displayName: "{displayName do template}"
|
|
364
|
+
displayName: "{displayName do template}" # nome do role exibido ao usuário
|
|
519
365
|
description: "{contexto do squad nesta feature}"
|
|
520
366
|
status: active
|
|
521
367
|
mode: {alta | economico | solo}
|
|
522
|
-
execution_mode: {
|
|
523
|
-
doc_score: {0-100} # score de documentação no momento da criação
|
|
368
|
+
execution_mode: {quick | complete} # determinado no PASSO 2
|
|
524
369
|
created_at: {YYYY-MM-DD}
|
|
525
370
|
feature: "" # preenchido no PASSO 7.5
|
|
526
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}
|
|
527
375
|
agents:
|
|
528
376
|
- {id do agent 1}
|
|
529
377
|
- {id do agent 2}
|
|
@@ -558,92 +406,67 @@ Verifique se `docs/_memory/project-learnings.md` existe. Se não existir, crie:
|
|
|
558
406
|
|
|
559
407
|
> **Executar apenas após o squad ter sido criado (arquivos do PASSO 7 já gravados).**
|
|
560
408
|
|
|
561
|
-
**
|
|
562
|
-
|
|
563
|
-
```
|
|
564
|
-
AskUserQuestion({
|
|
565
|
-
question: "Squad {squad-slug} criado! 🎉\n\nAgora, em qual feature este squad vai trabalhar?",
|
|
566
|
-
options: [
|
|
567
|
-
{ label: "📂 Session existente", description: "Selecionar feature já criada" },
|
|
568
|
-
{ label: "✨ Nova feature", description: "Criar nova feature session" }
|
|
569
|
-
]
|
|
570
|
-
})
|
|
571
|
-
```
|
|
409
|
+
**Auto-detectar:** Liste as pastas em `docs/.squads/sessions/`.
|
|
572
410
|
|
|
573
|
-
**Se
|
|
574
|
-
|
|
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
|
|
575
414
|
|
|
576
415
|
```
|
|
577
416
|
AskUserQuestion({
|
|
578
|
-
question: "
|
|
417
|
+
question: "Role {squad-slug} ativado! 🎉\n\nFeature session:",
|
|
579
418
|
options: [
|
|
580
|
-
{ label: "{
|
|
581
|
-
{ 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" }
|
|
582
422
|
]
|
|
583
423
|
})
|
|
584
424
|
```
|
|
585
425
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
```
|
|
589
|
-
AskUserQuestion({
|
|
590
|
-
question: "Qual é o nome/slug da nova feature?",
|
|
591
|
-
options: [
|
|
592
|
-
{ label: "Vou informar", description: "Ex: auth-module, feat/pagamentos" }
|
|
593
|
-
]
|
|
594
|
-
})
|
|
595
|
-
```
|
|
426
|
+
Se "Nova": o slug é inferido do contexto do squad (ex: "bug-login" se o squad é sobre corrigir login).
|
|
596
427
|
|
|
597
428
|
`{feature-slug}` = lowercase, espaços → hífens, sem caracteres especiais.
|
|
598
429
|
|
|
599
|
-
Após obter o `{feature-slug}`, atualize
|
|
600
|
-
|
|
601
|
-
```yaml
|
|
602
|
-
feature: {feature-slug}
|
|
603
|
-
session: docs/.squads/sessions/{feature-slug}/
|
|
604
|
-
```
|
|
430
|
+
Após obter o `{feature-slug}`, atualize `feature` e `session` no `squad.yaml`.
|
|
605
431
|
|
|
606
432
|
---
|
|
607
433
|
|
|
608
434
|
## PASSO 8 — ATIVAR SQUAD
|
|
609
435
|
|
|
610
|
-
### 8.1 — Resumo e Confirmação
|
|
436
|
+
### 8.1 — Resumo e Confirmação (1 AskUserQuestion)
|
|
611
437
|
|
|
612
|
-
**Use AskUserQuestion antes de iniciar:**
|
|
613
|
-
|
|
614
|
-
```
|
|
615
|
-
AskUserQuestion({
|
|
616
|
-
question: "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nSquad {slug} criado e pronto! 🚀\n\nAgents:\n {icon} {displayName} — {role}\n {icon} {displayName} — {role}\n\nModo: {Alta Performance | Econômico}\nPipeline: {nome do pipeline padrão}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
|
|
617
|
-
options: [
|
|
618
|
-
{ label: "▶️ Iniciar Squad", description: "Executar o pipeline agora" },
|
|
619
|
-
{ label: "Revisar Squad", description: "Verificar configurações antes de iniciar" },
|
|
620
|
-
{ label: "Cancelar", description: "Voltar sem iniciar" }
|
|
621
|
-
]
|
|
622
|
-
})
|
|
623
438
|
```
|
|
439
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
440
|
+
Squad {slug} criado! 🚀
|
|
624
441
|
|
|
625
|
-
|
|
442
|
+
Agents: {lista}
|
|
443
|
+
Modo: {modo}
|
|
444
|
+
Pipeline: {pipeline}
|
|
445
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
626
446
|
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
447
|
+
**Modo Rápido:** iniciar direto sem AskUserQuestion
|
|
448
|
+
```
|
|
449
|
+
⚡ Iniciando squad {slug}...
|
|
450
|
+
```
|
|
631
451
|
|
|
632
|
-
|
|
452
|
+
**Modo Completo:** pedir confirmação
|
|
633
453
|
```
|
|
634
454
|
AskUserQuestion({
|
|
635
|
-
question: "
|
|
455
|
+
question: "Squad pronto. Iniciar execução?",
|
|
636
456
|
options: [
|
|
637
|
-
{ label: "
|
|
638
|
-
{ label: "
|
|
457
|
+
{ label: "▶️ Iniciar", description: "Executar o pipeline" },
|
|
458
|
+
{ label: "Revisar squad.yaml", description: "Ver antes de rodar" }
|
|
639
459
|
]
|
|
640
460
|
})
|
|
641
461
|
```
|
|
642
462
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
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
|
|
647
470
|
|
|
648
471
|
### 8.3 — Iniciar Pipeline
|
|
649
472
|
|
|
@@ -733,79 +556,67 @@ AskUserQuestion({
|
|
|
733
556
|
|
|
734
557
|
```
|
|
735
558
|
AskUserQuestion({
|
|
736
|
-
question: "
|
|
559
|
+
question: "Role {squad-slug} carregado.\nFeature: {feature-slug}\n\nRoles que já trabalharam: {lista}\n\nO que você quer fazer?",
|
|
737
560
|
options: [
|
|
738
561
|
{ label: "🔄 Nova execução", description: "Executar novamente (manter contexto)" },
|
|
739
562
|
{ label: "🧠 Ver memória", description: "Abrir memories.md da feature" },
|
|
740
563
|
{ label: "📂 Ver arquivos", description: "Ver arquivos da session" },
|
|
741
|
-
{ label: "⏸️ Pausar", description: "Pausar/arquivar
|
|
564
|
+
{ label: "⏸️ Pausar", description: "Pausar/arquivar role" }
|
|
742
565
|
]
|
|
743
566
|
})
|
|
744
567
|
```
|
|
745
568
|
|
|
746
569
|
Aguarde a seleção do usuário.
|
|
747
570
|
|
|
748
|
-
**Se `status` é `"completed"`, `"discarded"` ou não existe entrada para este squad** → menu padrão:
|
|
749
|
-
|
|
750
|
-
```
|
|
751
|
-
Squad {squad-slug} carregado.
|
|
752
|
-
Feature: {feature-slug}
|
|
753
|
-
Session: docs/.squads/sessions/{feature-slug}/
|
|
754
|
-
|
|
755
|
-
Squads que já trabalharam nesta feature:
|
|
756
|
-
{lista de state.squads com status e completed_at}
|
|
757
|
-
|
|
758
|
-
O que você quer fazer?
|
|
759
|
-
|
|
760
|
-
- 🔄 Nova execução deste squad (manter contexto da session)
|
|
761
|
-
- 🧠 Ver memória da feature
|
|
762
|
-
- 📂 Ver arquivos da session
|
|
763
|
-
- ⏸️ Pausar / arquivar squad
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
Aguarde a seleção do usuário.
|
|
767
|
-
|
|
768
571
|
5. Siga a escolha do usuário e execute via `.synapos/core/pipeline-runner.md`.
|
|
769
572
|
|
|
770
573
|
---
|
|
771
574
|
|
|
772
|
-
##
|
|
575
|
+
## ROLE CUSTOMIZADO
|
|
576
|
+
|
|
577
|
+
Quando o usuário escolhe "✨ Customizado" no PASSO 5.
|
|
773
578
|
|
|
774
|
-
|
|
579
|
+
> O domínio já foi identificado como "customizado" — não pergunte novamente.
|
|
775
580
|
|
|
776
|
-
|
|
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
|
|
585
|
+
|
|
586
|
+
### Passo 1 — Selecionar roles adicionais
|
|
777
587
|
|
|
778
588
|
```
|
|
779
589
|
AskUserQuestion({
|
|
780
|
-
question: "
|
|
590
|
+
question: "Role Customizado\n\nQue perspectivas você quer ativar (além da base)?",
|
|
781
591
|
options: [
|
|
782
|
-
{ label: "
|
|
783
|
-
{ label: "
|
|
784
|
-
{ label: "
|
|
785
|
-
{ label: "
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
]
|
|
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
|
|
789
598
|
})
|
|
790
599
|
```
|
|
791
600
|
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
3. **Seleção de pipeline:**
|
|
601
|
+
### Passo 2 — Selecionar pipeline
|
|
795
602
|
|
|
796
603
|
```
|
|
797
604
|
AskUserQuestion({
|
|
798
|
-
question: "Qual pipeline
|
|
605
|
+
question: "Qual pipeline para este role?",
|
|
799
606
|
options: [
|
|
800
607
|
{ label: "Feature Development", description: "Discovery → Arquitetura → Implementação → Review" },
|
|
801
608
|
{ label: "Bug Fix", description: "Diagnóstico → Fix → Testes → Review" },
|
|
802
|
-
{ label: "Quick Fix", description: "Mudança rápida sem aprovações" }
|
|
803
|
-
{ label: "Customizado", description: "Descrever um novo fluxo" }
|
|
609
|
+
{ label: "Quick Fix", description: "Mudança rápida sem aprovações" }
|
|
804
610
|
]
|
|
805
611
|
})
|
|
806
612
|
```
|
|
807
613
|
|
|
808
|
-
|
|
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)
|
|
809
620
|
|
|
810
621
|
---
|
|
811
622
|
|
|
@@ -815,9 +626,11 @@ AskUserQuestion({
|
|
|
815
626
|
|-------|-----------|
|
|
816
627
|
| **SEMPRE use AskUserQuestion** | Qualquer interação com usuário deve usar janela interativa |
|
|
817
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/ |
|
|
818
631
|
| **Agents BASE são fixos** | Nunca remova sem confirmação explícita |
|
|
819
632
|
| **Memória persiste** | Sempre carregue memories.md em toda sessão |
|
|
820
|
-
| **
|
|
633
|
+
| **Múltiplos roles são permitidos** | Cada squad tem contexto isolado |
|
|
821
634
|
| **Salve estado** | Atualize squad.yaml após mudanças de status |
|
|
822
635
|
| **Fail loud** | Se faltar arquivo de template, informe e pare |
|
|
823
636
|
| **Linguagem** | Siga a preferência em `docs/_memory/preferences.md` |
|