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.
@@ -1,16 +1,33 @@
1
1
  ---
2
2
  name: synapos-orchestrator
3
- version: 1.6.1
4
- description: Meta-orquestrador do Synapos Framework ponto de entrada universal multi-IDE
3
+ version: 2.0.0
4
+ description: Meta-orquestrador do Synapos — workflow system para projetos com IA
5
5
  ---
6
6
 
7
- # SYNAPOS ORCHESTRATOR v1.0.0
7
+ # SYNAPOS ORCHESTRATOR v2.0.0
8
8
 
9
- > Framework de gerenciamento de agents para automação e desenvolvimento.
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
- **Use AskUserQuestion para cada pergunta.**
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 modelo de IA você está usando?",
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: "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" }
93
+ { label: "Responder", description: "Digite: nome do projeto — o que quer fazer" }
129
94
  ]
130
95
  })
131
96
  ```
132
97
 
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
- Se o usuário não souber, assuma `high`.
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:** {resposta}
153
- **Setor:** {resposta}
154
- **Linguagem de saída:** {resposta}
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:** {resposta}
128
+ **IDE Principal:** Claude Code
165
129
  **Formato de data:** YYYY-MM-DD
166
- **Task Tracker:** {github | linear | jira | none}
167
- **model_capability:** {high | standard | lite}
168
- **model_name:** {nome do modelo informado}
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
- ### 2.1Calcular Score de Documentação
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
- **Score total possível: 100**
141
+ **Tente inferir o modo automaticamente.** Só pergunte se não for possível inferir.
192
142
 
193
- Armazene como `[DOC_SCORE]` (0–100).
194
-
195
- ---
143
+ **Inferência automática (sem perguntar):**
196
144
 
197
- ### 2.2 Inferir Complexidade da Tarefa
198
-
199
- Pergunte ao usuário o que ele quer fazer. Se 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: "O que você quer fazer?",
154
+ question: "Como você quer executar?",
204
155
  options: [
205
- { label: "Vou descrever", description: "Ex: corrigir bug no login, criar endpoint de pagamento..." }
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
- Com base na descrição, classifique a complexidade:
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
- Para desbloquear mais pipelines:
255
- → /setup:build-tech (+35 pontos)
256
- /setup:build-business (+40 pontos)
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
- Continue para PASSO 3.
260
-
261
- **Se `[EXECUTION_MODE]` = STANDARD:**
262
-
263
- Informe e continue:
169
+ Log ao definir modo:
264
170
  ```
265
- 🟡 Standard Mode
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
- 🔴 Strict Mode
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\nInstale templates com:\n npx synapos add <template>",
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
- **Pare a execução.** Não continue para PASSO 4.
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 "Criar novo squad":
340
- - **Inclua** `{ label: "✨ Criar novo squad", description: "Montar um novo squad do zero" }` **apenas se** `[HAS_TEMPLATES]` = true.
341
- - **Se** `[HAS_TEMPLATES]` = false, **não inclua** essa opção e adicione um aviso no `question`: `"\n\n⚠️ Criação de squads indisponível — nenhum template instalado. Execute: npx synapos add <template>"`.
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 squad você quer trabalhar?{aviso se sem templates}",
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
- // ✨ Criar novo squad — incluir SOMENTE se [HAS_TEMPLATES] = true
234
+ // ✨ Novo role — incluir SOMENTE se [HAS_TEMPLATES] = true
350
235
  ]
351
236
  })
352
237
  ```
353
238
 
354
239
  **Status visual:**
355
- - 🟢 active — squad em andamento
240
+ - 🟢 active — role em andamento
356
241
  - 🟡 paused — pausado, pode retomar
357
242
  - ✅ completed — entregue
358
243
 
359
- **Se não existem squads e `[HAS_TEMPLATES]` = true** → vá direto para PASSO 5.
244
+ **Se não existem roles e `[HAS_TEMPLATES]` = true** → vá direto para PASSO 5.
360
245
 
361
- **Se não existem squads e `[HAS_TEMPLATES]` = false** → já foi tratado no PASSO 3.5. Este passo nunca será alcançado nesse estado.
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 DOMÍNIO
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
- Liste os subdiretórios em `.synapos/squad-templates/` e leia `template.yaml` para cada um.
254
+ **Tente inferir o role automaticamente** a partir do contexto capturado (mensagem inicial ou onboarding).
370
255
 
371
- Monte as opções para AskUserQuestion:
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: "Qual domínio você quer trabalhar?",
270
+ question: "Escolha como quer atuar:",
376
271
  options: [
377
272
  { label: "{icon} {displayName}", description: "{description}" },
378
- { label: "{icon} {displayName}", description: "{description}" },
379
- { label: "✨ Customizado", description: "Monte seu próprio squad" }
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
- - Se o usuário selecionou um template existente → **vá para PASSO 6**. Não execute SQUAD CUSTOMIZADO.
387
- - Se o usuário selecionou "✨ Customizado" → **vá para SQUAD CUSTOMIZADO**. Não execute PASSO 6.
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
- > **Restrições por `[EXECUTION_MODE]` — aplique antes de qualquer pergunta:**
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
- > Em **BOOTSTRAP**: se o template não tiver `quick-fix` nem `bug-fix`, ofereça `quick-fix` como opção genérica.
405
-
406
- ### 6.1 Agents disponíveis (SELEÇÃO INTERATIVA)
407
-
408
- **Use AskUserQuestion para apresentar os agents.**
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
- Aguarde a seleção. Agents base são sempre incluídos.
301
+ ### 6.1 Configuração
424
302
 
425
- ### 6.2 Modo de performance (SELEÇÃO INTERATIVA)
426
-
427
- **Use AskUserQuestion:**
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
- AskUserQuestion({
431
- question: "Qual modo de operação você prefere?",
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
- > **Importante:** O modo de performance NÃO afeta quais agents são instalados.
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: "Qual nome para identificar este squad?",
319
+ question: "Squad: {displayName}\n\nQuer usar defaults ou customizar?",
467
320
  options: [
468
- { label: "Auto-gerar", description: "Gerar: {domínio}-001" },
469
- { label: "Definir nome", description: "Vou informar o nome" }
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
- Se "Definir nome": peça input livre.
475
- Auto-geração: `{domínio}-{NNN}` backend-001, frontend-002
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: {bootstrap | standard | strict} # determinado pelo Mode Decision System no PASSO 2
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
- **Use AskUserQuestion:**
409
+ **Auto-detectar:** Liste as pastas em `docs/.squads/sessions/`.
567
410
 
568
- ```
569
- AskUserQuestion({
570
- question: "Squad {squad-slug} criado! 🎉\n\nAgora, em qual feature este squad vai trabalhar?",
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: "Selecione a feature session:",
417
+ question: "Role {squad-slug} ativado! 🎉\n\nFeature session:",
584
418
  options: [
585
- { label: "{feature-slug}", description: "{descrição do state.json}" },
586
- { label: "{feature-slug}", description: "{descrição}" }
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
- **Se "Nova feature":**
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 o campo `feature` e `session` no `squad.yaml` já criado:
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
- AskUserQuestion({
621
- 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━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
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
- ### 8.2 — Verificação de Skills
442
+ Agents: {lista}
443
+ Modo: {modo}
444
+ Pipeline: {pipeline}
445
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
631
446
 
632
- Antes de iniciar o pipeline:
633
- 1. Leia os arquivos de steps do pipeline
634
- 2. Busque por menções a skills nos steps
635
- 3. Para cada skill, verifique se `.synapos/skills/{skill-name}/SKILL.md` existe
447
+ **Modo Rápido:** iniciar direto sem AskUserQuestion
448
+ ```
449
+ Iniciando squad {slug}...
450
+ ```
636
451
 
637
- Se alguma skill não está instalada:
452
+ **Modo Completo:** pedir confirmação
638
453
  ```
639
454
  AskUserQuestion({
640
- question: "⚠️ Skills não instaladas detectadas no pipeline:\n ✗ {skill-name-1}\n ✗ {skill-name-2}\n\nEstas skills melhoram a qualidade dos outputs mas não são obrigatórias.",
455
+ question: "Squad pronto. Iniciar execução?",
641
456
  options: [
642
- { label: "Continuar sem skills", description: "Prosseguir mesmo sem as skills" },
643
- { label: "Instalar skills primeiro", description: "Cancelar e instalar as skills" }
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
- Se todas as skills estão instaladas:
649
- ```
650
- Skills verificadas: {lista de skills disponíveis}
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: "Squad {squad-slug} carregado.\nFeature: {feature-slug}\n\nSquads que já trabalharam: {lista}\n\nO que você quer fazer?",
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 squad" }
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
- ## SQUAD CUSTOMIZADO
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. Siga diretamente para a configuração abaixo.
579
+ > O domínio já foi identificado como "customizado" — não pergunte novamente.
762
580
 
763
- 1. Leia `.synapos/squad-templates/` e liste todos os agents disponíveis com AskUserQuestion (multi-select)
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
- 3. **Seleção de pipeline:**
586
+ ### Passo 1 — Selecionar roles adicionais
766
587
 
767
588
  ```
768
589
  AskUserQuestion({
769
- question: "Qual pipeline usar?",
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
- 4. Crie o squad.yaml com `domain: custom`
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
- | **Multi-squad é permitido** | Cada squad tem contexto isolado |
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` |