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.
@@ -1,16 +1,33 @@
1
1
  ---
2
2
  name: synapos-orchestrator
3
- version: 1.6.0
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
- ```
87
+ **1 AskUserQuestion. Nada mais.**
106
88
 
107
89
  ```
108
90
  AskUserQuestion({
109
- question: "Qual task tracker você usa?",
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: "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" }
93
+ { label: "Responder", description: "Digite: nome do projeto — o que quer fazer" }
115
94
  ]
116
95
  })
117
96
  ```
118
97
 
119
- ```
120
- AskUserQuestion({
121
- question: "Qual modelo de IA você está usando?",
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
- 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:
139
+ ## PASSO 2 — ESCOLHA DE MODO
182
140
 
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 |
141
+ **Tente inferir o modo automaticamente.** Só pergunte se não for possível inferir.
190
142
 
191
- **Score total possível: 100**
143
+ **Inferência automática (sem perguntar):**
192
144
 
193
- Armazene como `[DOC_SCORE]` (0–100).
194
-
195
- ---
196
-
197
- ### 2.2 Inferir Complexidade da Tarefa
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: "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
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
- **Se `[EXECUTION_MODE]` = STANDARD:**
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
- 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,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\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).
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
- Monte as opções para AskUserQuestion:
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
+
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
- > **Restrições por `[EXECUTION_MODE]` — aplique antes de qualquer pergunta:**
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
- > Em **BOOTSTRAP**: se o template não tiver `quick-fix` nem `bug-fix`, ofereça `quick-fix` como opção genérica.
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 — Agents disponíveis (SELEÇÃO INTERATIVA)
301
+ ### 6.1 — Configuração
402
302
 
403
- **Use AskUserQuestion para apresentar os agents.**
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
- AskUserQuestion({
407
- question: "Squad: {displayName}\n\nAgents base (sempre incluídos):\n ✅ {icon} {displayName} {role}\n ✅ {icon} {displayName} — {role}\n\nQuais agents opcionais você quer adicionar?",
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
- > **Importante:** O modo de performance NÃO afeta quais agents são instalados.
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: "Qual nome para identificar este squad?",
319
+ question: "Squad: {displayName}\n\nQuer usar defaults ou customizar?",
462
320
  options: [
463
- { label: "Auto-gerar", description: "Gerar: {domínio}-001" },
464
- { 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" }
465
323
  ]
466
324
  })
467
325
  ```
468
326
 
469
- Se "Definir nome": peça input livre.
470
- Auto-geração: `{domínio}-{NNN}` backend-001, frontend-002
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: {bootstrap | standard | strict} # determinado pelo Mode Decision System no PASSO 2
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
- **Use AskUserQuestion:**
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 "Session existente":**
574
- 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
575
414
 
576
415
  ```
577
416
  AskUserQuestion({
578
- question: "Selecione a feature session:",
417
+ question: "Role {squad-slug} ativado! 🎉\n\nFeature session:",
579
418
  options: [
580
- { label: "{feature-slug}", description: "{descrição do state.json}" },
581
- { 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" }
582
422
  ]
583
423
  })
584
424
  ```
585
425
 
586
- **Se "Nova feature":**
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 o campo `feature` e `session` no `squad.yaml` já criado:
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
- ### 8.2 — Verificação de Skills
442
+ Agents: {lista}
443
+ Modo: {modo}
444
+ Pipeline: {pipeline}
445
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
626
446
 
627
- Antes de iniciar o pipeline:
628
- 1. Leia os arquivos de steps do pipeline
629
- 2. Busque por menções a skills nos steps
630
- 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
+ ```
631
451
 
632
- Se alguma skill não está instalada:
452
+ **Modo Completo:** pedir confirmação
633
453
  ```
634
454
  AskUserQuestion({
635
- 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?",
636
456
  options: [
637
- { label: "Continuar sem skills", description: "Prosseguir mesmo sem as skills" },
638
- { 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" }
639
459
  ]
640
460
  })
641
461
  ```
642
462
 
643
- Se todas as skills estão instaladas:
644
- ```
645
- Skills verificadas: {lista de skills disponíveis}
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: "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?",
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 squad" }
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
- ## SQUAD CUSTOMIZADO
575
+ ## ROLE CUSTOMIZADO
576
+
577
+ Quando o usuário escolhe "✨ Customizado" no PASSO 5.
773
578
 
774
- Quando o usuário escolhe squad customizado:
579
+ > O domínio foi identificado como "customizado" — não pergunte novamente.
775
580
 
776
- 1. **Pergunte o domínio/objetivo com AskUserQuestion:**
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: "Qual é o objetivo deste squad customizado?",
590
+ question: "Role Customizado\n\nQue perspectivas você quer ativar (além da base)?",
781
591
  options: [
782
- { label: "Backend API", description: "Foco em endpoints e lógica de servidor" },
783
- { label: "Frontend Web", description: "Foco em UI e experiência do usuário" },
784
- { label: "Fullstack", description: "Frontend + Backend juntos" },
785
- { label: "Mobile", description: "App iOS/Android" },
786
- { label: "DevOps/Infra", description: "Infraestrutura e pipelines" },
787
- { label: "Outro", description: "Vou descrever o objetivo" }
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
- 2. Leia `.synapos/squad-templates/` e liste todos os agents disponíveis com AskUserQuestion (multi-select)
793
-
794
- 3. **Seleção de pipeline:**
601
+ ### Passo 2 Selecionar pipeline
795
602
 
796
603
  ```
797
604
  AskUserQuestion({
798
- question: "Qual pipeline usar?",
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
- 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)
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
- | **Multi-squad é permitido** | Cada squad tem contexto isolado |
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` |