@pixeleducacao/curso-openclaw 2026.5.8 → 2026.5.9

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.
Files changed (42) hide show
  1. package/assets/skills/_registry.md +41 -13
  2. package/assets/skills/operacional/_registry.md +6 -0
  3. package/assets/skills/operacional/backup-workspace-github/SKILL.md +39 -3
  4. package/assets/skills/operacional/commit-diario-workspace/SKILL.md +233 -0
  5. package/assets/skills/operacional/cron-resume-wizards/SKILL.md +329 -0
  6. package/assets/skills/operacional/seguranca-checklist/SKILL.md +202 -0
  7. package/assets/skills/starter/_registry.md +13 -9
  8. package/assets/skills/starter/continuar-jornada/SKILL.md +358 -0
  9. package/assets/skills/starter/gera-log-jornada/SKILL.md +338 -0
  10. package/assets/skills/starter/onboarding-checklist/SKILL.md +416 -88
  11. package/assets/skills/starter/onboarding-checklist/references/arquivos-raiz.md +44 -16
  12. package/assets/skills/starter/onboarding-checklist/references/aula-menus.md +304 -0
  13. package/assets/skills/starter/onboarding-checklist/references/checklist-template.md +70 -1
  14. package/assets/skills/starter/onboarding-checklist/references/comandos-canonicos.md +337 -9
  15. package/assets/skills/starter/onboarding-checklist/references/mapa-aulas.md +17 -12
  16. package/assets/skills/starter/onboarding-checklist/references/principios-defensivos.md +772 -0
  17. package/assets/skills/starter/onboarding-checklist/references/sistema-de-mapas.md +2 -2
  18. package/assets/skills/starter/onboarding-checklist/references/wizard-header-template.md +51 -0
  19. package/assets/skills/starter/primeira-vitoria/SKILL.md +448 -53
  20. package/assets/skills/starter/primeira-vitoria/evals/evals.json +2 -2
  21. package/assets/skills/starter/wizard-agente/SKILL.md +123 -17
  22. package/assets/skills/starter/wizard-agente/evals/evals.json +3 -3
  23. package/assets/skills/starter/wizard-aluno/SKILL.md +28 -3
  24. package/assets/skills/starter/wizard-aluno/evals/evals.json +1 -1
  25. package/assets/skills/starter/wizard-autonomia/SKILL.md +157 -27
  26. package/assets/skills/starter/wizard-autonomia/evals/evals.json +2 -2
  27. package/assets/skills/starter/wizard-autonomia/screenshots/painel-hostinger-cli.jpg +0 -0
  28. package/assets/skills/starter/wizard-conectar/SKILL.md +382 -74
  29. package/assets/skills/starter/wizard-conectar/screenshots/github-pat/01-avatar-settings.png +0 -0
  30. package/assets/skills/starter/wizard-conectar/screenshots/github-pat/02-developer-settings.png +0 -0
  31. package/assets/skills/starter/wizard-conectar/screenshots/github-pat/03-tokens-classic.png +0 -0
  32. package/assets/skills/starter/wizard-conectar/screenshots/github-pat/04-generate-classic.png +0 -0
  33. package/assets/skills/starter/wizard-whisper-quick/SKILL.md +160 -23
  34. package/assets/skills/starter/wizard-workspace/SKILL.md +23 -4
  35. package/assets/skills/starter/wizard-workspace/evals/evals.json +1 -1
  36. package/assets/templates/HEARTBEAT.template.md +58 -0
  37. package/assets/templates/README.md +65 -13
  38. package/assets/templates/SOUL-stub.template.md +1 -1
  39. package/assets/templates/template-material-didatico.html +457 -0
  40. package/assets/templates/template-report-executivo.html +368 -0
  41. package/assets/templates/template-report.html +370 -0
  42. package/package.json +1 -1
@@ -3,14 +3,61 @@ name: wizard-conectar
3
3
  status: ATIVO
4
4
  category: starter
5
5
  owner: aluno
6
- version: 1.0
6
+ version: 2.0
7
7
  mode: guided
8
8
  estimated_time: 12min (varia se chaves já existem)
9
9
  model_compatible: [gpt-5, gpt-5.5, claude-sonnet-4, claude-opus-4, gemini-pro]
10
- description: Use when student types "conecta superpoderes" / "configura integrações" / "ativa brave/github", OR when dispatched by onboarding-checklist as passo 5. Configures Brave Search API key + GitHub Service Token + (optional) Chromium browser via .env first pattern. Backs up .env before changes (Princípio 1). Detects each credential individually. Ends by activating backup-workspace-github skill (link to operacional/).
10
+ description: Use when student types "conecta superpoderes" / "configura integrações" / "ativa tavily/brave/github", OR when dispatched by onboarding-checklist as passo 5. Configures Tavily Search API key (default desde kit v2.5.5 — designed pra agente IA, sem cartão obrigatório) OU Brave Search API key (alternativa legada) + GitHub Personal Access Token (classic) + (optional) Chromium via .env first pattern. **v2.0 (kit v2.5.5 fix Brave Search free tier apertou): default Search API trocado de Brave → Tavily. Razão: Brave virou "cartão obrigatório + $5 créditos/mês" enquanto Tavily mantém 1.000 créditos/mês SEM cartão + foi feito specifically pra agente IA + 99.99% SLA + 1M+ devs adopters (AWS, IBM, MongoDB, BCG como clientes enterprise). Brave Search continua suportado como alternativa pra aluno que prefira (compat com kit v1.x-v2.5.4). Wizard pergunta default Tavily, aceita "brave" pra escolher fluxo legado. Plus known key OpenClaw: `TAVILY_API_KEY` precisa estar como known key no Hostinger Managed; se não estiver, fallback é SDK Python via shell export.** v1.9 (kit v2.5.3 — fix Allan VPS root + Chromium SingletonLock + silêncio 10min): (1) Novo ramo SingletonLock detecta erro literal `SingletonLock: Permission denied` + ambiente vps-root → executa sequência canônica (--no-sandbox attempt, snap remove chromium, apt install chromium-browser, gateway restart, validate). Caso comum em VPS root onde Chromium veio via Snap por default e AppArmor restringe acesso. Anti-loop: 2 tentativas máx — se falhar, fallback opcional (skip Chromium, marca `chromium=skipped` em MEMORY). (2) Regra UX EXPECTATIVA aplicada antes de invocar tool de install Chromium — mensagem canonical avisa que comando `apt install chromium-browser` pode levar 5-10min e que agente vai ficar bloqueado durante execução. Sem aviso, aluno acha que travou (caso Allan: 10min silêncio levou aluno a perguntar "ainda processando?").** v1.8 (kit v2.5.2 — fix Adrylan P14 violado em validações): header ganha bloco "P14 EXTRA-RÍGIDO" no topo com 3 mensagens obrigatórias em ordem (anúncio + comando → output literal → interpretação). Caso real Adrylan: bot anunciou "vou validar Brave" + "vou validar GitHub" + confirmou "validado" SEM mostrar comando nem output em 4 momentos (13:18, 13:57, 17:26, 17:30). v2.5.2 obriga: passo 2 (output) NUNCA pode ser pulado.** v1.7 (kit v2.5 — stress test Letícia round 2): Chromium passa a detectar `ambiente:` ANTES de afirmar "vem incluído". Em local-dev (Mac/Linux dev), Chromium não vem bundled — comando `openclaw browser status` falha. v2.5 adapta mensagem por ambiente (Managed/VPS root: bundled; local-dev: brew/apt manual; unknown: pergunta).** v1.6 (kit v2.4): (1) Brave 401 ramo dedicado — antes mensagem genérica "tenta de novo" tratava chave existente-mas-expirada igual a chave digitada errada; agora distingue (chave Brave de meses atrás é caso comum em VPS legados, requer regenerar, não re-colar); (2) PAT browser local — adicionada 1 frase antes do tutorial "abre seu navegador no laptop/desktop, não na máquina onde o agente roda" (caso Rodrigo VPS root SSH sem GUI).** v1.5: Brave URL homepage (`brave.com/pt-br/search/api/`) + cartão obrigatório no free tier. v1.4: PAT-only (sem `gh` CLI). v1.3: `conectado=partial` + flags individuais.
11
11
  ---
12
12
 
13
- # Wizard Conectar — Passo 5 (Brave Search + GitHub + Chromium)
13
+ # Wizard Conectar — Passo 5 (Tavily Search + GitHub + Chromium · Brave como alternativa)
14
+
15
+ > 🔴 **AVISOS CRÍTICOS PRO AGENTE (v2.1, REFORÇADOS em v2.5.2):**
16
+ >
17
+ > ⚠️ **P14 EXTRA-RÍGIDO nesta skill (kit v2.5.2 — fix Adrylan):** validações de Brave + GitHub têm 4 momentos historicamente violados (caso Adrylan 13:18, 13:57, 17:26, 17:30 — bot anunciou "vou validar" + confirmou "validado" SEM mostrar comando nem output). REGRA: cada validação tem 3 mensagens em ordem:
18
+ >
19
+ > 1. **Anúncio + comando exato:** "Vou validar a chave Brave: `curl ...`"
20
+ > 2. **Output literal:** "Output: ```200```" (ou ```401```/etc)
21
+ > 3. **Interpretação SÓ DEPOIS:** "✓ HTTP 200 = chave válida" (ou erro específico)
22
+ >
23
+ > **NUNCA pular passo 2.** Se output não disponível (problema de tool/bridge), ABORTA + reporta honesto: "Não consegui rodar o comando — me mostra um print da chave funcionando OU rode manualmente e cola o output aqui." NÃO finja sucesso.
24
+ >
25
+ > Validações sob esta regra (todos os 4 anúncios do caso Adrylan):
26
+ > - Detecção `.env` Whisper (`grep -E "^OPENAI_API_KEY=" $WORKSPACE/.env`)
27
+ > - `openclaw exec-policy show` (em wizard-autonomia)
28
+ > - Validação Brave (`curl /res/v1/web/search?q=test`)
29
+ > - Validação GitHub PAT (`curl /user`)
30
+ >
31
+ > **1. URLs SEMPRE COMPLETOS + corretos por cenário (v1.5 fix Brave 03/05).** NUNCA mostrar URL truncada — gera 403/404 quando aluno clica direto. Sempre:
32
+ > - **Brave (criar conta + chave):** `https://brave.com/pt-br/search/api/` (homepage com "Get Started" — funciona pra aluno SEM conta)
33
+ > - **Brave (gerenciar chaves, depois de logado):** `https://api.search.brave.com/app/keys` (essa URL dá 403 pra aluno sem conta — usar SÓ depois do login)
34
+ > - GitHub PAT: `https://github.com/settings/tokens/new?scopes=repo&description=openclaw-backup` (completo, com query params pra pré-preencher)
35
+ > - GitHub signup (caso aluno não tenha conta): `https://github.com/signup`
36
+ >
37
+ > Falhas reais:
38
+ > - Dr. Thiago v1.9.2: aluno clicou Brave e deu 403 (URL `api.search.brave.com` requer login; v1.4 tinha essa URL como primária)
39
+ > - Bruno v2.2 conta nova: `https://api.search.brave.com/app/keys` deu 403 ("você não tem autorização"). Aluno teve que ir em `https://brave.com/pt-br/search/api/` manualmente pra criar conta. v1.5 corrige.
40
+ >
41
+ > **2. SMOKE TESTS VISÍVEIS (Princípio 14).** Toda chamada `curl` de validação:
42
+ > - MOSTRA o comando exato (em bloco de código) ANTES de rodar
43
+ > - MOSTRA o output literal (HTTP code + body se relevante) DEPOIS
44
+ > - Só DEPOIS interpretar/narrar
45
+ > - Se não conseguir rodar → ABORTA e pede ajuda. NUNCA fingir que validou.
46
+ >
47
+ > Falha real (Dr. Thiago, v1.9.2): outros wizards inventaram resultado de validação. Aqui você SEMPRE mostra evidência.
48
+ >
49
+ > **3. CAMINHO GITHUB É APENAS PAT CLASSIC** (decisão Bruno v2.1):
50
+ > - NÃO instalar `gh` CLI (não precisa)
51
+ > - NÃO chamar skill OpenClaw "github" (não existe pra todos)
52
+ > - NÃO ramificar por OS (Managed/VPS root usam o MESMO caminho aqui)
53
+ > - O agente usa `git` (built-in Linux/macOS) + GitHub API (curl + token) pra commits/push/repo create
54
+ > - Aluno cria conta (se não tem) → gera PAT classic com scope `repo` → cola → agente salva em `.env` como `GITHUB_TOKEN` → usa daí pra frente
55
+ >
56
+ > **4. GUARD RAIL (Princípio 13).** Se aluno desviar no meio do passo (ex: pergunta sobre Whisper, sobre outro tema), agente:
57
+ > - Anota a pergunta em `## Perguntas pendentes` em MEMORY.md
58
+ > - Responde 1 linha se for tangencial sobre o passo
59
+ > - Traz de volta: "Anotado, vou abordar depois. Mas pra fechar este passo, preciso que você {ação atual}"
60
+ > - Após 3 desvios consecutivos, oferece pausar (`wizard_resume_at` agendado)
14
61
 
15
62
  ## Promessa
16
63
 
@@ -56,7 +103,16 @@ Antes de pedir nada, lê `.env` e valida cada chave.
56
103
  ### Estado das 3 credenciais
57
104
 
58
105
  ```bash
59
- # Brave Search
106
+ # Tavily Search (default desde v2.5.5) — verifica primeiro
107
+ 1. Lê TAVILY_API_KEY do .env
108
+ 2. Se existe, valida:
109
+ curl -s -X POST "https://api.tavily.com/search" \
110
+ -H "Content-Type: application/json" \
111
+ -d "{\"api_key\":\"$TAVILY_API_KEY\",\"query\":\"test\",\"max_results\":1}" \
112
+ -o /dev/null -w "%{http_code}"
113
+ 3. 200 = válida, 401 = inválida
114
+
115
+ # Brave Search (alternativa legada — verifica se Tavily não estiver presente)
60
116
  1. Lê BRAVE_SEARCH_API_KEY do .env
61
117
  2. Se existe, valida:
62
118
  curl -s -H "X-Subscription-Token: $BRAVE_SEARCH_API_KEY" \
@@ -79,25 +135,27 @@ Antes de pedir nada, lê `.env` e valida cada chave.
79
135
 
80
136
  ### Estados detectáveis
81
137
 
82
- | Brave | GitHub | Chromium | Ação |
138
+ | Search | GitHub | Chromium | Ação |
83
139
  |---|---|---|---|
84
- | ✓ válida | ✓ válido | ✓ instalado | "Tudo conectado já. Vou só ativar backup-workspace-github e ir pra pergunta-âncora." |
85
- | ✓ | ✓ | ⏳ | "Brave + GitHub OK. Chromium opcional, posso pular ou instalar agora — qual prefere?" |
86
- | ✓ | ⏳ | qualquer | "Brave OK. Vou pedir só GitHub Token." |
87
- | ⏳ | ✓ | qualquer | "GitHub OK. Vou pedir só Brave key." |
140
+ | ✓ Tavily ou Brave válida | ✓ válido | ✓ instalado | "Tudo conectado já. Vou só ativar backup-workspace-github e ir pra pergunta-âncora." |
141
+ | ✓ | ✓ | ⏳ | "Search + GitHub OK. Chromium opcional, posso pular ou instalar agora — qual prefere?" |
142
+ | ✓ | ⏳ | qualquer | "Search OK. Vou pedir só GitHub Token." |
143
+ | ⏳ | ✓ | qualquer | "GitHub OK. Vou pedir só search key (Tavily recomendado)." |
88
144
  | ⏳ | ⏳ | qualquer | Fluxo normal completo |
89
145
 
90
146
  ### Mensagem padrão ao detectar tudo pronto
91
147
 
92
148
  ```
93
149
  "✓ Detectei suas integrações já configuradas:
94
- - Brave Search API (validei agorabusca de teste retornou 200)
150
+ - Search API ({Tavily | Brave Search} validei agora, retornou 200)
95
151
  - GitHub Token (validei — username: @{username})
96
152
  - Chromium {se instalado}
97
153
 
98
154
  Vou ativar o backup-workspace-github e seguir pra pergunta-âncora."
99
155
  ```
100
156
 
157
+ **Nota:** se aluno tem AMBAS configuradas (Tavily E Brave), agente prioriza Tavily (default v2.5.5+) e marca Brave como `search_legacy_active`. Aluno pode trocar manualmente depois com `troca search` (comando opcional, atalho pra desabilitar Tavily e voltar pra Brave).
158
+
101
159
  ## Fluxo principal
102
160
 
103
161
  ### 1. Narrar promessa
@@ -105,106 +163,292 @@ Vou ativar o backup-workspace-github e seguir pra pergunta-âncora."
105
163
  ```
106
164
  "Vamos conectar 3 superpoderes externos. ~12min total.
107
165
 
108
- 1. Brave Search API → eu busco coisa na web (notícias, dados, refs).
109
- Free tier: $5/mês de uso, ~1.000 buscas. Renova mensal.
166
+ 1. Tavily Search API → eu busco coisa na web (notícias, dados, refs).
167
+ Designed pra agentes IA. Free tier: 1.000 buscas/mês. Sem cartão.
110
168
 
111
169
  2. GitHub Service Token → backup automático do seu workspace inteiro
112
170
  pro GitHub privado. Cron diário às 03:00. 30 dias de histórico.
113
171
 
114
172
  3. Chromium (opcional) → eu abro páginas web em headless quando preciso
115
173
  ler conteúdo (artigo, doc, página inteira). Sem isso, eu vejo só
116
- título + descrição do Brave Search.
174
+ título + descrição da busca.
117
175
 
118
176
  Sem essas 3, eu fico isolada — não busco web, não salvo histórico,
119
177
  não leio página completa.
120
178
 
121
- Bora começar pelo Brave?"
179
+ Bora começar pelo Tavily?"
180
+ ```
181
+
182
+ ### 2. Tavily Search — gerar e validar chave (default desde kit v2.5.5)
183
+
184
+ ```
185
+ "Pra gerar Tavily Search API key:
186
+
187
+ 1. Abre https://tavily.com/
188
+ 2. Clica em 'Get API Key' / 'Sign up'
189
+ 3. Faz cadastro: email + senha (sem cartão de crédito)
190
+ 4. Confirma email
191
+ 5. Acessa o dashboard → 'API Keys' → copia a chave (formato: tvly-XXXXXXXXX...)
192
+
193
+ Plano Free Researcher: 1.000 créditos/mês renováveis. Suficiente pra
194
+ agente PME usar buscas todo dia. Quando estourar, plano Pay As You Go
195
+ fica $0.008/crédito (= $8/1.000 buscas adicionais). Sem cartão exigido
196
+ no plano free.
197
+
198
+ Se quiser conhecer mais antes: https://tavily.com/pricing
199
+
200
+ Quando tiver a chave, cola aqui que eu salvo no .env e valido."
201
+ ```
202
+
203
+ **Validação Tavily (smoke test visível — Princípio 14):**
204
+
205
+ ```bash
206
+ # 1. Salvar a chave (known key OpenClaw — TAVILY_API_KEY)
207
+ openclaw secrets set TAVILY_API_KEY tvly-XXXXXXXXX
208
+ openclaw secrets reload
209
+
210
+ # 2. Validar com call real (mostrar comando + output literal)
211
+ curl -s -X POST "https://api.tavily.com/search" \
212
+ -H "Content-Type: application/json" \
213
+ -d "{\"api_key\":\"$TAVILY_API_KEY\",\"query\":\"test\",\"max_results\":1}" \
214
+ -w "\nHTTP %{http_code}\n"
215
+
216
+ # 3. 200 OK = válida · 401 = inválida · 429 = rate limit
122
217
  ```
123
218
 
124
- ### 2. Brave Search gerar e validar chave
219
+ > ⚠️ **Atenção known key OpenClaw:** se `TAVILY_API_KEY` ainda NÃO estiver na allow-list de known keys do Hostinger Managed (verificar com `openclaw secrets list` após o reload), a chave NÃO vai ficar acessível pro agente nativo. Workaround: configurar via `export TAVILY_API_KEY=...` no shell + agente usa SDK Python (`pip install tavily-python`) em vez do daemon nativo. Esse caminho é mais flexível e independe da Hostinger atualizar known keys.
220
+
221
+ ### 2b. Brave Search — alternativa (mantém compat com kit v1.x-v2.5.4)
222
+
223
+ Se aluno preferir Brave (já tem conta, prefere o ecosystem Brave, etc), wizard aceita:
125
224
 
126
225
  ```
127
- "Pra gerar Brave Search API key:
226
+ "Beleza, vamos com Brave Search (alternativa). 2 coisas a saber antes:
128
227
 
129
- 1. Abre https://api.search.brave.com/app/keys
130
- 2. Faz cadastro (se nunca usou) email + senha, sem cartão
131
- 3. Plano 'Free' vem ativado (5k queries/mês free)
132
- 4. Clica 'Add API Key'
133
- 5. Nome sugerido: 'openclaw-{nome_agente}' (ex: 'openclaw-atlas')
134
- 6. Copia a chave (começa com 'BSAk...')
135
- 7. Cola aqui
228
+ 1. Brave exige cartão de crédito pra ativar plano Free ($5 créditos/mês = ~1.000 buscas).
229
+ Não cobra dentro do free tiercartão é anti-fraude.
230
+ 2. Tavily não exige cartão e tem o mesmo free tier (1k/mês).
231
+ Recomendamos como default em v2.5.5+, mas Brave continua suportado.
136
232
 
137
- Tier free renova mensalmente. Sem cartão. Sem assinatura."
233
+ Confirma que quer Brave mesmo? Manda 'brave' que eu sigo, 'tavily' que
234
+ eu volto pro caminho default."
138
235
  ```
139
236
 
140
- Quando aluno colar:
237
+ **Se aluno confirma Brave, fluxo legado:**
238
+
239
+ 1. Abre https://brave.com/pt-br/search/api/ (homepage da API)
240
+ 2. Clica em 'Get Started' / 'Começar agora'
241
+ 3. Faz cadastro: email + senha
242
+ 4. **⚠️ Heads up: Brave vai pedir cartão de crédito pra ativar o plano Free.** Não cobra nada se você ficar dentro do free tier (~1k queries/mês). Cartão é só pra prevenir abuso/bots. Se preferir não cadastrar agora, manda 'pula' — você pode ativar quando quiser.
243
+ 5. Após cadastro completo, vai pra https://api.search.brave.com/app/keys (essa URL agora vai funcionar pra você porque tá logado)
244
+ 6. Clica 'Add API Key'
245
+ 7. Nome sugerido: 'openclaw-{nome_agente}' (ex: 'openclaw-atlas')
246
+ 8. Copia a chave (começa com 'BSAk...')
247
+ 9. Cola aqui
248
+
249
+ Resumo: free tier não cobra, mas precisa cartão no cadastro. Renova mensalmente."
250
+ ```
251
+
252
+ Quando aluno colar a chave, **smoke test visível (Princípio 14)** — mostra comando + output literal:
253
+
254
+ ```
255
+ "Validando a chave Brave agora:
141
256
 
142
257
  ```bash
143
- curl -s -H "X-Subscription-Token: {chave}" \
144
- "https://api.search.brave.com/res/v1/web/search?q=hello" \
145
- -o /dev/null -w "%{http_code}"
258
+ curl -s -o /dev/null -w "%{http_code}" \
259
+ -H "X-Subscription-Token: BSAk-xxxx" \
260
+ "https://api.search.brave.com/res/v1/web/search?q=hello"
261
+ ```
262
+
263
+ Output:
264
+ ```
265
+ 200
146
266
  ```
147
267
 
268
+ ✓ HTTP 200 = chave válida."
269
+ ```
270
+
271
+ (NÃO inventar HTTP code. Se não conseguir rodar curl, abortar e pedir ajuda.)
272
+
148
273
  | Resposta | Ação |
149
274
  |---|---|
150
275
  | 200 | "✓ Brave validada. Vou salvar." |
151
- | 401 | "Erro 401. Chave inválida — copy/paste truncado? Manda de novo." |
152
- | 429 | "Rate limit você gerou e logo passou? Tenta de novo em 1min." |
153
- | Outros | Investigar |
276
+ | 401 (chave que aluno acabou de colar) | "Erro 401 chave inválida. Copy/paste truncado? Tenta de novo." → volta pro passo 1 |
277
+ | 401 (chave existia em `.env` antes kit v2.4 ramo dedicado) | Ramo "chave expirada/revogada" abaixo |
278
+ | 429 | "Rate limit já. Você gerou e logo passou da quota? Tenta de novo em 1min." |
279
+ | Outros | Mostrar output literal + investigar com aluno |
280
+
281
+ #### Ramo: Brave 401 com chave PRÉ-EXISTENTE (kit v2.4 — fix Rodrigo)
282
+
283
+ ⚠️ **Distinção importante:** se a Detecção do Princípio 11 já tinha encontrado `BRAVE_SEARCH_API_KEY` no `.env` ANTES desse fluxo (chave de meses atrás), e a validação inicial retornou 401, **não tratar como copy/paste errado** — chave realmente existia, foi revogada/expirada (Brave revogou 03/2026, comum em VPS legados).
284
+
285
+ Mensagem canonical (P15):
286
+
287
+ ```
288
+ "Achei sua chave Brave já no `.env` (provavelmente configurada antes), mas a validação retornou **HTTP 401**:
289
+
290
+ ```
291
+ {output_literal}
292
+ ```
293
+
294
+ Isso significa: a chave foi **revogada ou expirou**. Não é erro de digitação — a chave existia, mas perdeu validade.
295
+
296
+ Próximo passo:
297
+
298
+ 1. Abre **https://api.search.brave.com/app/keys** (você já tem login lá — chave antiga indica isso)
299
+ 2. **Revoga** a chave antiga (botão Revoke ao lado dela)
300
+ 3. **Add API Key** → nome: `openclaw-{nome_agente}` → copia a nova
301
+ 4. Cola aqui que eu sobrescrevo o `.env`
302
+
303
+ Se você não conseguir acessar o painel (perdeu senha, etc), usa o caminho de criar do zero: https://brave.com/pt-br/search/api/"
304
+ ```
305
+
306
+ (NÃO ficar perguntando "tenta de novo" — Rodrigo vai colar a mesma chave revogada em loop. P14 manda mostrar evidência e explicar root cause.)
154
307
 
155
308
  Salvar como `BRAVE_SEARCH_API_KEY` no `.env` (após backup do `.env` se já existia — Princípio 1).
156
309
 
157
310
  ### 3. GitHub Personal Access Token (classic) — gerar e validar
158
311
 
312
+ ⚠️ **Antes de pedir o token, perguntar:** "Você já tem conta GitHub?" Se aluno disser "não" / "preciso criar" / "nunca usei", vai pra **3a (criar conta)**. Se sim, vai pra **3b (gerar token)**.
313
+
314
+ #### 3a. Criar conta GitHub (caso aluno não tenha)
315
+
159
316
  ```
160
- "Pra gerar GitHub Token classic (que é o que o backup usa):
317
+ "Beleza, vamos criar sua conta GitHub primeiro. É grátis e leva ~2min.
161
318
 
162
- 1. Acessa https://github.com/settings/tokens (logado)
163
- Caminho manual: GitHub seu avatar (canto superior direito)
164
- Settings Developer settings Personal access tokens
165
- ⚠️ clica em 'Tokens (classic)' (a outra opção, 'Fine-grained
166
- tokens', é diferente não usa)
319
+ 1. Acessa https://github.com/signup
320
+ 2. Email pessoal (ou de trabalho) + senha forte + username
321
+ - Username vai aparecer em URLs públicas escolhe algo profissional.
322
+ Ex: 'thiago-russo' melhor que 'tagueitiago42'
323
+ 3. Verifica email (eles mandam código)
324
+ 4. Plano 'Free' já vem ativo
167
325
 
168
- 2. Botão 'Generate new token' (canto superior direito)
169
- 'Generate new token (classic)'
326
+ Quando criar, manda 'criei' que a gente vai pro próximo passo (gerar
327
+ token)."
328
+ ```
329
+
330
+ Aguardar aluno confirmar. Quando confirmar, vai pra 3b.
170
331
 
171
- 3. Note (descrição): 'openclaw-backup-{nome_agente}'
172
- (ex: 'openclaw-backup-atlas')
332
+ #### 3b. Gerar PAT classic — tutorial visual em 4 cliques
173
333
 
174
- 4. Expiration: 'No expiration' (ou 1 ano se quiser rotacionar)
334
+ ⚠️ **Antes de tudo (kit v2.4 — fix Rodrigo VPS root):** o tutorial abaixo é executado **no SEU navegador** (Chrome/Safari/Firefox no seu laptop/celular) — NÃO na máquina onde o agente roda. Se você em VPS root via SSH (ou não tem GUI na máquina do agente), abre o navegador no SEU computador/celular e segue os passos lá. Quando copiar o token gerado, vem aqui pro Telegram e cola — eu salvo.
175
335
 
176
- 5. Scopes marca esse 1:
177
- ☑ repo (Full control of private repositories)
336
+ ⚠️ **Agente: tem 2 caminhos pro aluno (oferecer link direto primeiro, fallback manual com screenshots):**
178
337
 
179
- ⚠️ Não marca admin:* nem nada além de 'repo'. Princípio do
180
- menor privilégio: o token só precisa criar/modificar repos pra
181
- guardar seu backup, nada além disso.
338
+ **Caminho A Link direto (mais rápido):**
339
+
340
+ ```
341
+ "Agora gera o Personal Access Token. Tem 2 jeitos:
182
342
 
183
- 6. Botão 'Generate token' no fim da página
343
+ 🔗 **JEITO RÁPIDO** (link direto com scope 'repo' pré-marcado):
344
+ https://github.com/settings/tokens/new?scopes=repo&description=openclaw-backup
345
+
346
+ Esse link abre a página de criação já configurada — você só precisa
347
+ escolher 'No expiration' e clicar 'Generate token' no fim.
348
+
349
+ Se o link não funcionar (raro), me responde 'manual' que eu te guio
350
+ pelos 4 cliques no painel."
351
+ ```
352
+
353
+ **Caminho B — Manual em 4 cliques (com screenshots):**
354
+
355
+ ⚠️ **Agente: ao apresentar o caminho manual, anexar os 4 screenshots na ordem.** Cada passo tem 1 imagem em `screenshots/github-pat/`. Se a bridge Telegram não suportar `sendPhoto`, mandar links raw GitHub como fallback (já incluídos no texto).
356
+
357
+ ```
358
+ "Beleza, vou te guiar passo a passo:
184
359
 
185
- 7. Copia o token que aparece (começa com 'ghp_...') e cola aqui
360
+ 📷 **Clique 1** — abre o menu do seu avatar (canto superior direito)
361
+ → clica em **Settings**
362
+ [foto: 01-avatar-settings.png anexada]
186
363
 
187
- ⚠️ Atenção: o token é mostrado UMA vez. Fechou janela = tem que
188
- gerar outra. Copia agora.
364
+ 📷 **Clique 2** na página Settings, sidebar esquerdo (no FIM da lista,
365
+ no rodapé) **Developer settings**
366
+ [foto: 02-developer-settings.png anexada]
189
367
 
190
- Antes de colar aqui: confirma que esse chat é seu (não é grupo).
368
+ 📷 **Clique 3** no sidebar de Developer settings **Personal access
369
+ tokens** → **Tokens (classic)** (NÃO 'Fine-grained tokens')
370
+ → no canto superior direito: botão **Generate new token**
371
+ [foto: 03-tokens-classic.png anexada]
372
+
373
+ 📷 **Clique 4** — no dropdown que abre, escolhe a 2ª opção:
374
+ **Generate new token (classic)** (For general use)
375
+ ⚠️ NÃO clica na 1ª (Fine-grained, repo-scoped) — a versão 'classic'
376
+ é a que precisamos
377
+ [foto: 04-generate-classic.png anexada]
378
+
379
+ Configurações na próxima tela:
380
+ ☑ Note: openclaw-backup
381
+ ☑ Expiration: 'No expiration' (ou 1 ano se quiser rotacionar depois)
382
+ ☑ Scopes: SÓ 'repo' (Full control of private repositories)
383
+ ⚠️ NÃO marca admin:* nem nada além de 'repo'. Princípio do menor
384
+ privilégio: token só precisa criar/modificar repos pra backup.
385
+
386
+ Clica 'Generate token' no fim da página.
387
+
388
+ ⚠️ Atenção: o token só é mostrado UMA vez. Fechou janela = gerar outro.
389
+
390
+ Copia o token (começa com 'ghp_...') e cola aqui.
391
+
392
+ Antes de colar: confirma que esse chat é só seu (não é grupo).
191
393
  Token em chat público = vazado."
192
394
  ```
193
395
 
194
- Validar:
396
+ **Fallback de links raw (caso bridge Telegram não anexe imagens):**
397
+
398
+ ```
399
+ Se as fotos não chegaram, são esses 4 links:
400
+ 1. https://raw.githubusercontent.com/okjpg/repo-amora-cos/main/memory/curso-openclaw-v2/starter-kit/skills/starter/wizard-conectar/screenshots/github-pat/01-avatar-settings.png
401
+ 2. https://raw.githubusercontent.com/okjpg/repo-amora-cos/main/memory/curso-openclaw-v2/starter-kit/skills/starter/wizard-conectar/screenshots/github-pat/02-developer-settings.png
402
+ 3. https://raw.githubusercontent.com/okjpg/repo-amora-cos/main/memory/curso-openclaw-v2/starter-kit/skills/starter/wizard-conectar/screenshots/github-pat/03-tokens-classic.png
403
+ 4. https://raw.githubusercontent.com/okjpg/repo-amora-cos/main/memory/curso-openclaw-v2/starter-kit/skills/starter/wizard-conectar/screenshots/github-pat/04-generate-classic.png
404
+ ```
405
+
406
+ #### 3c. Validar (smoke test visível — Princípio 14)
407
+
408
+ ⚠️ Quando aluno colar o token, MOSTRAR o comando + output literal:
409
+
410
+ ```
411
+ "Validando o token agora:
412
+
413
+ ```bash
414
+ curl -s -o /dev/null -w "%{http_code}" \
415
+ -H "Authorization: token ghp_xxxx" \
416
+ https://api.github.com/user
417
+ ```
418
+
419
+ Output:
420
+ ```
421
+ 200
422
+ ```
423
+
424
+ ✓ HTTP 200 = token válido."
425
+ ```
426
+
427
+ (Mostrar HTTP code real recebido. NÃO inventar.)
428
+
429
+ Após validação OK, extrair username:
195
430
 
196
431
  ```bash
197
432
  curl -s -H "Authorization: token {token}" \
198
- https://api.github.com/user -w "%{http_code}"
433
+ https://api.github.com/user | jq -r '.login'
434
+ ```
435
+
436
+ Mostrar resultado:
437
+
438
+ ```
439
+ "Você é @{username}. Anotado.
440
+
441
+ Salvando como GITHUB_TOKEN no .env."
199
442
  ```
200
443
 
201
444
  | Resposta | Ação |
202
445
  |---|---|
203
- | 200 | Extrai `username` do JSON. "✓ Validado. Você é @{username}." |
204
- | 401 | "Token inválido. Copia/cola pode ter cortado o final. Tenta de novo." |
205
- | 403 | "Token sem scope 'repo'. Volta no GitHub e marca o scope, gera de novo." |
446
+ | 200 | "✓ Validado. Você é @{username}." → salva |
447
+ | 401 | "Token inválido (HTTP 401). Copia/cola pode ter cortado o final, ou token expirou. Tenta de novo gerando outro." → volta pra 3b |
448
+ | 403 | "Token sem scope 'repo' (HTTP 403). Volta no GitHub e marca o scope, gera de novo." → volta pra 3b |
449
+ | Outro | Mostrar o output literal + investigar com aluno |
206
450
 
207
- Salvar como `GITHUB_TOKEN` no `.env`.
451
+ Salvar como `GITHUB_TOKEN` no `.env` (após backup do `.env` se já existia — Princípio 1).
208
452
 
209
453
  ### 4. Chromium — opcional
210
454
 
@@ -224,24 +468,76 @@ Manda 'instala' ou 'pula'."
224
468
 
225
469
  Se "instala":
226
470
 
471
+ ⚠️ **kit v2.5 — fix Letícia stress test:** detectar ambiente ANTES de afirmar "vem incluído". Em local-dev (Mac/Linux dev), Chromium não vem bundled — comando `openclaw browser status` falha. Mensagem deve adaptar.
472
+
473
+ **Lê `ambiente:` em MEMORY:**
474
+
475
+ | Ambiente | Mensagem + comando |
476
+ |---|---|
477
+ | `managed` | "Boa notícia: o Chromium já vem incluído no seu OpenClaw Managed. Não precisa instalar nada. Vou validar." → `openclaw browser status` |
478
+ | `vps-root` | "Em VPS root, o OpenClaw bundle inclui Chromium. Vou validar." → `openclaw browser status` |
479
+ | `local-dev` | "Em dev local, Chromium não vem bundled — você precisa instalar manualmente. Mac (brew): `brew install chromium`. Linux: `apt install chromium-browser` ou similar. Manda 'instalado' quando finalizar OU manda 'pula' se não quiser agora." (NÃO roda `openclaw browser status` — comando provavelmente falha) |
480
+ | `unknown` | "Não consegui detectar seu ambiente automaticamente. Você instalou OpenClaw via 1-click Hostinger (Managed), via SSH no VPS, ou local no seu computador?" → conforme resposta, redireciona |
481
+
482
+ **Após `openclaw browser status` (Managed/VPS root):**
483
+
484
+ | Resultado | Ação |
485
+ |---|---|
486
+ | `running` ou `available` | "✓ Browser disponível. Marcando como ativo." |
487
+ | `not started` ou similar | Ativar com `openclaw browser start --headless` (rodar via execução de tool, não pedir aluno colar) |
488
+ | **`SingletonLock: Permission denied`** (kit v2.5.3 — fix Allan VPS root + Snap) | Ramo dedicado SingletonLock — ver seção abaixo |
489
+ | Erro inesperado | "Hm, browser não tá respondendo. Manda no @cursoopenclaw que ajudo a debugar — não bloqueia o resto da jornada." |
490
+
491
+ #### Ramo SingletonLock (kit v2.5.3 — fix Allan)
492
+
493
+ ⚠️ **Caso real Allan stress test 03/05/2026 18:43-18:55:** Chromium em VPS root via Snap retornou `SingletonLock: Permission denied`. Snap-based Chromium é incompatível com containers root (profile lock falha). Solução: trocar pra executável fora do Snap.
494
+
495
+ **Detecção:** se output de `openclaw browser status` ou primeira tentativa de start contém `SingletonLock` E ambiente é `vps-root`.
496
+
497
+ **Antes de invocar tool de instalação (P14 + Regra UX EXPECTATIVA — kit v2.5.3):**
498
+
227
499
  ```
228
- "Boa notícia: o Chromium vem incluído no seu OpenClaw Managed.
229
- Não precisa instalar nada.
500
+ "Detectei Chromium via Snap incompatível com root (erro de profile lock — `SingletonLock: Permission denied`). É edge case conhecido em containers VPS com Snap.
501
+
502
+ Vou tentar reinstalar fora do Snap (via apt direto). Esse processo:
503
+ - Configura `browser.noSandbox: true` (necessário pra root)
504
+ - Remove Chromium-Snap atual
505
+ - Instala chromium-browser via apt
506
+ - Restart Gateway pra apontar pro novo executável
230
507
 
231
- Vou validar que disponível e funcionando."
508
+ Leva 5-10min total (apt install em VPS Hostinger costuma ser lento). Vou ficar bloqueado durante a execução, não consigo mandar update no meio — se passar de 12min sem retorno, me avisa pra eu confirmar que não travei."
232
509
  ```
233
510
 
234
- Validar via:
511
+ **Comandos (P14 — mostrar comando + output após retornar):**
235
512
 
236
513
  ```bash
514
+ # 1. Configurar noSandbox
515
+ openclaw config set browser.noSandbox true
516
+
517
+ # 2. Remover Snap (se existir)
518
+ snap remove chromium 2>/dev/null || true
519
+
520
+ # 3. Instalar via apt (Debian/Ubuntu) ou yum (RHEL)
521
+ apt-get install -y chromium-browser 2>/dev/null || yum install -y chromium
522
+
523
+ # 4. Restart Gateway
524
+ openclaw gateway restart
525
+
526
+ # 5. Validar
527
+ sleep 5 # aguarda Gateway estabilizar
237
528
  openclaw browser status
238
529
  ```
239
530
 
240
- | Resultado | Ação |
531
+ **Output após retorno:**
532
+
533
+ | Status | Ação |
241
534
  |---|---|
242
- | `running` ou `available` | "✓ Browser disponível. Marcando como ativo." |
243
- | `not started` ou similar | Ativar com `openclaw browser start --headless` (rodar via execução de tool, não pedir aluno colar) |
244
- | Erro inesperado | "Hm, browser não tá respondendo. Manda no @cursoopenclaw que ajudo a debugar — não bloqueia o resto da jornada." |
535
+ | `running` ou `available` | "✓ Chromium reinstalado fora do Snap, Gateway estabilizado, browser disponível. Marcando como ativo." |
536
+ | Ainda `SingletonLock` ou outro erro | Fallback: "Não consegui ativar Chromium aqui — Snap+root é tricky. Marcado como skipped — você pode reativar depois com 'ativa browser' (vai precisar instalar Chromium manual via `apt install chromium-browser` ou similar). Bora seguir o passo? Brave Search e GitHub funcionam sem Chromium — você só perde leitura de página completa (Brave dá título+descrição, suficiente em 70% dos casos)." |
537
+
538
+ **Limite anti-loop:** se 2 tentativas de fix falharem (SingletonLock persiste), aplicar fallback skipped diretamente. Não tentar terceira vez.
539
+
540
+ **Após instalação manual (local-dev):** se aluno mandar "instalado", validar via `which chromium` ou `which chromium-browser`. Se OK, marca `chromium_active=true`. Se não encontrar, "Não encontrei `chromium` nem `chromium-browser` no PATH. Você instalou onde? Se preferir, manda 'pula' e ativa depois."
245
541
 
246
542
  Se "pula": marca `chromium_active=false` em `MEMORY.md`. Aluno pode ativar depois com 'ativa browser'.
247
543
 
@@ -265,6 +561,10 @@ Se sim: invoca skill `backup-workspace-github` (passa `GITHUB_TOKEN` pro escopo
265
561
 
266
562
  Se aluno disser "não, depois": marca `backup_disabled=true` em `MEMORY.md`. Aluno reativa com "ativa backup".
267
563
 
564
+ ⚠️ **CRÍTICO — não falsifique sucesso:** se aluno pulou Brave OU pulou GitHub OU desabilitou backup, **NÃO marque `conectado=true` no final do passo**. Use `conectado=partial` + flags individuais (`brave_search_active`, `github_token_active`, `backup_active`, `chromium_active`) refletindo o que REALMENTE foi feito. A skill `primeira-vitoria` (passo 6) verifica essas flags antes de oferecer pós-vitória — se algo crítico ficou pendente (ex: backup que aluno disse "depois"), ela vai voltar pra completar em vez de tratar como opcional.
565
+
566
+ Falha real observada (sessão Lia/Mira 02/05): aluno disse "Roda aí" sobre Brave mas wizard pulou pra primeira vitória sem configurar nada e marcou passo 5 ✓. Backup nunca foi ativado mas apareceu como "opção pós-vitória" depois — confundiu o fluxo. Não repetir.
567
+
268
568
  ### 6. Confirmação final ao aluno
269
569
 
270
570
  ```
@@ -301,7 +601,7 @@ Fechar com:
301
601
 
302
602
  ```
303
603
  "Se quer aprofundar gestão de credenciais (1Password, rotação de
304
- chaves, vault), a aula é a *D2* (1Password e secrets) — manda 'aula D2'.
604
+ chaves, vault), a aula é a Aula 10 (Instalando 1password) — manda 'aula 10'.
305
605
 
306
606
  E se ficou alguma dúvida que eu não cobri, dois caminhos no grupo:
307
607
  - resposta rápida 24/7: chama @Openclawzinho (bot IA) no tópico Suporte
@@ -313,18 +613,26 @@ Marquei o passo 5 como feito. Bora pro passo 6 — sua primeira vitória?"
313
613
 
314
614
  ### 8. Atualizar MEMORY.md
315
615
 
616
+ **Regra:** `conectado` reflete o estado REAL. Use `true` SÓ se TODOS os 3 essenciais (Brave + GitHub + backup) foram configurados com sucesso. Caso contrário, `partial` + flags individuais.
617
+
316
618
  ```markdown
317
619
  ## Flags
318
- conectado: true
319
- brave_search_active: true
320
- github_token_active: true
321
- chromium_installed: {true|false}
322
- backup_active: {true|false}
620
+ conectado: {true | partial | false}
621
+ brave_search_active: {true | false | skipped}
622
+ github_token_active: {true | false | skipped}
623
+ backup_active: {true | false | postponed}
624
+ chromium_active: {true | false | skipped}
323
625
 
324
626
  ## Decisões da jornada
325
- - {data}: Conectou Brave Search + GitHub Token. Chromium {instalado|pulado}. Backup-workspace-github {ativado|adiado}.
627
+ - {data}: Conectou {N de 4} superpoderes. {Brave: ✓/skip} | {GitHub: ✓/skip} | {Backup: ✓/postponed} | {Chromium: ✓/skip}.
326
628
  ```
327
629
 
630
+ **Exemplos do que `conectado` deve ser:**
631
+ - Brave ✓ + GitHub ✓ + backup ✓ + Chromium ✓ → `conectado: true`
632
+ - Brave ✓ + GitHub ✓ + backup ✓ + Chromium skipped → `conectado: true` (Chromium é opcional)
633
+ - Brave ✓ + GitHub ✓ + backup postponed → `conectado: partial` (primeira-vitoria vai voltar pra completar backup)
634
+ - Brave skipped + GitHub skipped → `conectado: false` (passo 5 efetivamente não rodou)
635
+
328
636
  Atualizar `onboarding_current_step: 6`.
329
637
 
330
638
  ### 9. Devolver controle pra onboarding-checklist
@@ -366,7 +674,7 @@ Marca `github_token_active=false`, `backup_active=false`. Devolve controle.
366
674
  - **GitHub Token sem scope `repo`:** validação API user passa, mas criação de repo via API falha. Pegar isso na ativação do backup-workspace-github (skill faz call de criação) e pedir aluno regenerar com scope correto.
367
675
  - **Aluno tem 2FA no GitHub e tenta usar password:** explicar que Service Token substitui password pra API (não usa password mesmo).
368
676
  - **`.env` foi commitado por engano antes desse passo:** aluno chega aqui com .env público no GitHub. Não detectar é catastrófico. Antes de salvar GITHUB_TOKEN, fazer `git log -- .env` no workspace pra ver se foi commitado. Se sim, alertar e instruir revogação imediata.
369
- - **Aluno pede Apify, Perplexity, Notion:** ainda não cobertos no v1 do kit. Resposta: "Apify e Perplexity ficam pra skills opcionais pós-vitória. Notion vira aula D4. Por enquanto: Brave + GitHub cobre 80%."
677
+ - **Aluno pede Apify, Perplexity, Notion:** ainda não cobertos no v1 do kit. Resposta: "Apify e Perplexity ficam pra skills opcionais pós-vitória. Notion vira Aula 12. Por enquanto: Brave + GitHub cobre 80%."
370
678
 
371
679
  ## Aplicação dos princípios defensivos
372
680