@fabioforest/openclaw 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,73 +1,623 @@
1
- # OpenClaw OS
1
+ # 🦀 OpenClaw AI OS
2
2
 
3
- CLI e starter kit para configuração segura do OpenClaw em VPS, Mac, Windows e Docker.
3
+ **Sistema universal de agentes para IDEs** instale, configure e use via chat ou terminal.
4
4
 
5
- ## Instalação
5
+ O OpenClaw transforma qualquer projeto em um workspace inteligente com skills, regras de segurança e roteamento econômico de modelos de IA. Funciona em **Cursor, VSCode, Gemini Code Assist, Antigravity** e qualquer IDE com suporte a agentes.
6
+
7
+ ---
8
+
9
+ ## 📦 Instalação
10
+
11
+ ### Opção 1: Via npx (recomendado — sem instalar nada)
6
12
 
7
13
  ```bash
8
- # Via npx (recomendado)
14
+ # Simula o que será feito (modo seguro, não altera nada)
9
15
  npx @fabioforest/openclaw init
10
16
 
11
- # Ou instale globalmente
17
+ # Instala de fato no projeto
18
+ npx @fabioforest/openclaw init --apply
19
+ ```
20
+
21
+ ### Opção 2: Instalação global
22
+
23
+ ```bash
12
24
  npm install -g @fabioforest/openclaw
13
- openclaw init
25
+ openclaw init --apply
26
+ ```
27
+
28
+ ### Opção 3: Instalação completa para IDEs
29
+
30
+ ```bash
31
+ # Instala o "AI OS" com skills, rules, state e hooks
32
+ npx @fabioforest/openclaw ide install --apply
33
+ ```
34
+
35
+ > **💡 Dica**: Todos os comandos operam em **modo PLAN por padrão** (read-only). Nada é alterado sem `--apply`.
36
+
37
+ ---
38
+
39
+ ## 🎯 Quando usar cada comando
40
+
41
+ ### Resumo rápido
42
+
43
+ | Situação | Comando | O que faz |
44
+ |----------|---------|-----------|
45
+ | Primeira vez no projeto | `init --apply` | Cria `.agent/` com templates |
46
+ | Atualizar skills/rules | `update --apply` | Atualiza preservando customizações |
47
+ | Desinstalar do projeto | `uninstall --apply` | Remove `.agent/` com backup |
48
+ | Ver o que está instalado | `status` | Lista componentes e config |
49
+ | Algo não funciona | `doctor` | Diagnóstico completo |
50
+ | Quero entender meu ambiente | `inspect` | Análise 100% read-only |
51
+ | Preciso de ajuda geral | `assist` | Assistente com roteamento de skills |
52
+ | Instalar AI OS na IDE | `ide install --apply` | Skills + rules + state + hooks |
53
+ | Verificar IDE configurada | `ide doctor` | Checa se tudo está "armado" |
54
+ | Configurar do zero | `setup` | Wizard interativo passo a passo |
55
+ | Problemas de rede/VPN | `debug` | Diagnóstico de conectividade |
56
+ | Instalar ou reparar (automático) | `check` | Orquestrador inteligente |
57
+
58
+ ---
59
+
60
+ ## 📖 Manual de Uso Detalhado
61
+
62
+ ### `openclaw init` — Instalar no projeto
63
+
64
+ **Quando usar:** Primeira vez que você quer adicionar o OpenClaw a um projeto.
65
+
66
+ ```bash
67
+ # 1. Primeiro, simule para ver o que vai acontecer
68
+ npx @fabioforest/openclaw init
69
+ # → Mostra plano: "CREATE .agent/", "COPY templates", "CREATE openclaw.json"
70
+ # → Nenhum arquivo é criado
71
+
72
+ # 2. Se estiver tudo certo, aplique
73
+ npx @fabioforest/openclaw init --apply
74
+ # → Cria .agent/ com skills, rules, hooks e workflows
75
+ # → Cria openclaw.json com configurações default
76
+
77
+ # 3. Se já existe e quer sobrescrever (exige confirmação forte)
78
+ npx @fabioforest/openclaw init --apply --force
79
+ # → Pede para digitar "DESTROY .agent" para confirmar
80
+ ```
81
+
82
+ **Flags disponíveis:**
83
+
84
+ | Flag | O que faz |
85
+ |------|-----------|
86
+ | `--apply` | Executa de fato (sem isso, só simula) |
87
+ | `--force` | Permite sobrescrever `.agent/` existente |
88
+ | `--path ./dir` | Instala em outro diretório |
89
+ | `--yes` | Pula confirmações interativas |
90
+ | `--no-audit` | Não gera log de auditoria |
91
+
92
+ ---
93
+
94
+ ### `openclaw update` — Atualizar templates
95
+
96
+ **Quando usar:** Quando sair uma versão nova do OpenClaw e você quiser atualizar skills/rules sem perder customizações.
97
+
98
+ ```bash
99
+ # Simula a atualização (mostra o que mudou)
100
+ npx @fabioforest/openclaw update
101
+
102
+ # Aplica a atualização
103
+ npx @fabioforest/openclaw update --apply
104
+
105
+ # Merge seguro (preserva customizações)
106
+ npx @fabioforest/openclaw update --apply --merge
14
107
  ```
15
108
 
16
- ## Comandos
109
+ **Como funciona:**
110
+ - Compara cada arquivo por hash SHA-256
111
+ - Se você customizou um arquivo, faz backup (`.bak`) antes de atualizar
112
+ - Novos templates são copiados normalmente
113
+ - Tudo é registrado em `.agent/audit/`
114
+
115
+ ---
17
116
 
18
- | Comando | Descrição |
19
- |---------|-----------|
20
- | `openclaw init` | Instala templates `.agent/` no projeto |
21
- | `openclaw update` | Atualiza templates preservando customizações |
22
- | `openclaw status` | Mostra status da instalação |
23
- | `openclaw doctor` | Healthcheck automatizado do ambiente |
24
- | `openclaw setup` | Roda wizard interativo de configuração |
117
+ ---
25
118
 
26
- ### Opções
119
+ ### `openclaw uninstall` — Desinstalar do projeto
120
+
121
+ **Quando usar:** Quando quiser remover completamente o OpenClaw de um projeto.
27
122
 
28
123
  ```bash
29
- openclaw init --force # Sobrescreve .agent/ existente
30
- openclaw init --path ./dir # Instala em diretório específico
31
- openclaw doctor --quiet # Saída mínima
124
+ # 1. Simula a remoção (mostra o que seria deletado)
125
+ npx @fabioforest/openclaw uninstall
126
+ # → Mostra tree de .agent/ e openclaw.json
127
+ # → Alerta sobre audit logs e state que seriam perdidos
128
+ # → Nenhum arquivo é removido
129
+
130
+ # 2. Aplica a remoção (com backup automático)
131
+ npx @fabioforest/openclaw uninstall --apply
132
+ # → Pede para digitar "UNINSTALL" como confirmação
133
+ # → Oferece fazer backup (.agent.backup-<timestamp>/)
134
+ # → Remove .agent/ e openclaw.json
135
+ # → Salva log de auditoria no diretório
136
+
137
+ # 3. Remoção forçada (sem backup, com --yes pula confirmação)
138
+ npx @fabioforest/openclaw uninstall --apply --force --yes
139
+ ```
140
+
141
+ **Saída de exemplo (modo PLAN):**
142
+
32
143
  ```
144
+ 🗑️ OpenClaw Uninstall
145
+
146
+ 📂 Diretório: /home/user/meu-projeto
147
+
148
+ 🔴 REMOVER .agent/ (25 arquivos)
149
+ 📁 agents (3 arquivos)
150
+ 📁 audit (1 arquivos)
151
+ 📁 hooks (1 arquivos)
152
+ 📁 rules (5 arquivos)
153
+ 📁 skills (11 arquivos)
154
+ 📁 workflows (7 arquivos)
155
+ 🔴 REMOVER openclaw.json
156
+
157
+ ⚠️ 1 log(s) de auditoria serão perdidos!
158
+
159
+ 🔒 Modo PLAN (Read-Only). Nenhuma alteração feita.
160
+ Para desinstalar, rode: npx @fabioforest/openclaw uninstall --apply
161
+ ```
162
+
163
+ ---
33
164
 
34
- ## O que é instalado
165
+ ### `openclaw inspect` Analisar ambiente (read-only)
35
166
 
36
- O comando `init` cria a seguinte estrutura no seu projeto:
167
+ **Quando usar:** Antes de qualquer ação, para entender o contexto. 100% read-only — nunca altera nada.
168
+
169
+ ```bash
170
+ npx @fabioforest/openclaw inspect
171
+ ```
172
+
173
+ **Saída de exemplo:**
174
+
175
+ ```
176
+ 🔎 OpenClaw Inspect (Read-Only)
177
+
178
+ 🖥️ Plataforma: darwin
179
+ 🐳 Docker: false
180
+ 🪟 WSL: false
181
+ 💻 IDE: cursor
182
+ 📂 Path: /home/user/meu-projeto
183
+ 📦 OpenClaw instalado: Sim
184
+ 📋 Config: Sim
185
+ 🐙 Git repo: Sim
186
+
187
+ 🧠 Skills instaladas (15):
188
+ • content-sourcer • context-flush
189
+ • drive-organizer • linkedin-optimizer
190
+ • mission-control • openclaw-router
191
+ • smart-router • web-scraper
192
+ ...
193
+
194
+ ✅ Inspect concluído (nenhuma alteração feita).
195
+ ```
196
+
197
+ **Modo JSON (para automações):**
198
+
199
+ ```bash
200
+ npx @fabioforest/openclaw inspect --quiet
201
+ # → Retorna JSON puro, ideal para pipes e scripts
202
+ ```
203
+
204
+ ---
205
+
206
+ ### `openclaw assist` — Assistente geral com roteamento
207
+
208
+ **Quando usar:** Quando não sabe qual skill usar. O assist analisa sua solicitação e sugere a skill mais adequada.
209
+
210
+ ```bash
211
+ npx @fabioforest/openclaw assist
212
+ ```
213
+
214
+ **Como funciona:**
215
+ 1. Detecta contexto (IDE, plataforma, skills disponíveis)
216
+ 2. Pede sua solicitação em linguagem natural
217
+ 3. Roteia para a skill mais relevante via triggers
218
+ 4. Mostra alternativas e protocolo recomendado
219
+
220
+ **Exemplo de interação:**
221
+
222
+ ```
223
+ 🧠 OpenClaw Assist — Modo PLAN por padrão (seguro)
224
+ IDE: cursor | OpenClaw: instalado
225
+
226
+ Descreva o que deseja fazer:
227
+ > otimizar meu perfil do linkedin
228
+
229
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
230
+ 🎯 Skill selecionada: linkedin-optimizer
231
+ Descrição: Ajuda a otimizar perfil e posts para LinkedIn
232
+
233
+ Alternativas:
234
+ • content-sourcer: Busca fontes públicas
235
+ • smart-router: Roteia para perfis de modelo
236
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
237
+ ```
238
+
239
+ ---
240
+
241
+ ### `openclaw ide install` — Instalar AI OS na IDE
242
+
243
+ **Quando usar:** Para preparar sua IDE para usar o OpenClaw como agente via chat. Instala skills, rules, hooks e state templates.
244
+
245
+ ```bash
246
+ # Simula a instalação (mostra o plano)
247
+ npx @fabioforest/openclaw ide install
248
+
249
+ # Aplica a instalação
250
+ npx @fabioforest/openclaw ide install --apply
251
+
252
+ # Força reinstalação completa
253
+ npx @fabioforest/openclaw ide install --apply --force
254
+ ```
255
+
256
+ **O que é instalado:**
37
257
 
38
258
  ```
39
259
  .agent/
40
- ├── agents/ # Personas de agente (ex: sysadmin-proativo)
41
- ├── hooks/ # Hooks de segurança (PreToolUse)
42
- ├── rules/ # Guardrails de segurança
43
- ├── skills/
44
- │ ├── universal-setup/ # Wizard de configuração interativo
45
- └── openclaw-ops/ # 8 skills operacionais
46
- └── workflows/ # Runbooks e slash commands
260
+ ├── agents/ # Personas (sysadmin, automator, setup)
261
+ ├── hooks/ # pre-tool-use.js (bloqueia comandos destrutivos)
262
+ ├── rules/ # 5 regras de segurança
263
+ ├── CONSENT_FIRST.md
264
+ │ ├── SECURITY.md
265
+ ├── ROUTER_PROTOCOL.md
266
+ │ ├── DEV_MODE.md
267
+ │ └── WEB_AUTOMATION.md
268
+ ├── skills/ # 15 skills disponíveis
269
+ │ ├── openclaw-router/ # Roteador central chat-first
270
+ │ ├── openclaw-inspect/ # Inspeção read-only
271
+ │ ├── smart-router/ # Roteador econômico de modelos
272
+ │ ├── mission-control/ # Empresa de Agentes
273
+ │ ├── linkedin-optimizer/ # Otimização de LinkedIn
274
+ │ ├── drive-organizer/ # Google Drive via API
275
+ │ ├── site-tester/ # Lighthouse + Playwright
276
+ │ ├── web-scraper/ # Scraping responsável
277
+ │ ├── content-sourcer/ # Pesquisa de fontes
278
+ │ └── ... (+ 6 skills operacionais)
279
+ ├── state/ # Estado persistente
280
+ │ ├── mission_control.json # Empresa de Agentes
281
+ │ └── MEMORY.md # Memória do workspace
282
+ └── workflows/ # Slash commands e runbooks
283
+ ```
284
+
285
+ ---
286
+
287
+ ### `openclaw ide doctor` — Verificar IDE
288
+
289
+ **Quando usar:** Para confirmar que sua IDE está "armada" com todas as regras e skills necessárias.
290
+
291
+ ```bash
292
+ npx @fabioforest/openclaw ide doctor
47
293
  ```
48
294
 
49
- ### Skills Operacionais
295
+ **Saída de exemplo:**
296
+
297
+ ```
298
+ 🏥 IDE Doctor — Verificando instalação para IDE:
50
299
 
51
- | # | Skill | Descrição |
52
- |---|-------|-----------|
53
- | 01 | VPN WireGuard | Provisiona VPN entre VPS e hosts |
54
- | 02 | Enroll Host | Onboarding com aprovação humana |
55
- | 03 | Policy Baseline | RBAC + allowlists deny-by-default |
56
- | 04 | Remote Exec | Runbooks com timeout e auditoria |
57
- | 05 | File Transfer | Transferência com hash e allowlist |
58
- | 06 | Audit Logging | Log JSON com redaction de segredos |
59
- | 07 | Safe Update | Canary + rollback automático |
60
- | 08 | Healthchecks | Circuit breaker + auto-restart |
300
+ .agent/
301
+ ✅ rules/CONSENT_FIRST.md
302
+ rules/ROUTER_PROTOCOL.md
303
+ skills/openclaw-router/SKILL.md
304
+ skills/openclaw-inspect/SKILL.md
305
+ skills/openclaw-dev/SKILL.md
306
+ hooks/pre-tool-use.js
61
307
 
62
- ## Segurança
308
+ 🎉 IDE está totalmente configurada!
309
+ ```
63
310
 
64
- - **VPN-first** — sem VPN, sem acesso remoto
65
- - **bind localhost** + **auth token** por padrão
66
- - **Hook `pre-tool-use`** — bloqueia comandos destrutivos (`rm -rf`, `mkfs`, `dd`, `shutdown`)
67
- - **Break-glass** — acesso emergencial com expiração automática
68
- - **Auditoria** — todos os eventos logados com `request_id`
311
+ ---
69
312
 
70
- ## Desenvolvimento
313
+ ### `openclaw status` — Ver status da instalação
314
+
315
+ **Quando usar:** Para ver rapidamente o que está instalado e configurado.
316
+
317
+ ```bash
318
+ npx @fabioforest/openclaw status
319
+ ```
320
+
321
+ Mostra: componentes instalados, versão, config ativa (com tokens mascarados).
322
+
323
+ ---
324
+
325
+ ### `openclaw doctor` — Healthcheck completo
326
+
327
+ **Quando usar:** Quando algo não funciona. Faz diagnóstico completo do ambiente.
328
+
329
+ ```bash
330
+ npx @fabioforest/openclaw doctor
331
+ npx @fabioforest/openclaw doctor --quiet # Saída mínima
332
+ ```
333
+
334
+ Verifica: config, portas, VPN, integridade de arquivos, dependências.
335
+
336
+ ---
337
+
338
+ ### `openclaw setup` — Wizard interativo
339
+
340
+ **Quando usar:** Primeira configuração completa com perguntas guiadas.
341
+
342
+ ```bash
343
+ npx @fabioforest/openclaw setup
344
+ ```
345
+
346
+ Guia passo a passo para configurar ambiente, modelo de IA, canais e segurança.
347
+
348
+ ---
349
+
350
+ ### `openclaw check` — Orquestrador inteligente
351
+
352
+ **Quando usar:** Quando não sabe se precisa instalar ou reparar. Ele decide por você.
353
+
354
+ ```bash
355
+ npx @fabioforest/openclaw check
356
+ ```
357
+
358
+ Detecta se o OpenClaw já existe e oferece opções: instalar, atualizar, reparar ou forçar.
359
+
360
+ ---
361
+
362
+ ### `openclaw debug` — Diagnóstico avançado
363
+
364
+ **Quando usar:** Problemas de rede, VPN, npm ou GitHub.
365
+
366
+ ```bash
367
+ npx @fabioforest/openclaw debug
368
+ ```
369
+
370
+ Verifica conectividade, proxy, versões e integridade do ambiente.
371
+
372
+ ---
373
+
374
+ ## 🧠 Skills Disponíveis (15)
375
+
376
+ ### Core — Infraestrutura do AI OS
377
+
378
+ | Skill | O que faz | Quando usar |
379
+ |-------|-----------|-------------|
380
+ | `openclaw-router` | Roteador central chat-first | Sempre ativo — decide qual skill usar |
381
+ | `openclaw-inspect` | Inspeção read-only | Para analisar sem alterar |
382
+ | `openclaw-dev` | Modo Devin-like | Para criar features, backend, frontend |
383
+ | `openclaw-security` | Hardening | Para melhorar segurança do workspace |
384
+ | `openclaw-assist` | Assistente geral | Para menu de ações e ajuda |
385
+ | `mission-control` | Empresa de Agentes | Para orquestrar múltiplos agentes |
386
+ | `smart-router` | Roteador econômico | Para escolher modelo de IA por custo |
387
+ | `context-flush` | Flush de memória | Para economizar tokens em sessões longas |
388
+
389
+ ### Produtividade — Automação e Web
390
+
391
+ | Skill | O que faz | Quando usar |
392
+ |-------|-----------|-------------|
393
+ | `linkedin-optimizer` | Textos para LinkedIn | Para otimizar perfil/posts (human-in-the-loop) |
394
+ | `drive-organizer` | Google Drive via API | Para organizar arquivos na nuvem |
395
+ | `site-tester` | Lighthouse + Playwright | Para testar performance/SEO/acessibilidade |
396
+ | `web-scraper` | Scraping responsável | Para extrair dados de sites |
397
+ | `content-sourcer` | Pesquisa de fontes | Para criar dossiês citáveis |
398
+
399
+ ### Operacionais — DevOps e Infra
400
+
401
+ | Skill | O que faz | Quando usar |
402
+ |-------|-----------|-------------|
403
+ | `universal-setup` | Setup em qualquer ambiente | Para instalação em VPS/Docker/Mac/Windows |
404
+ | `openclaw-installation-debugger` | Debug de instalação | Para resolver problemas de setup |
405
+
406
+ ---
407
+
408
+ ## 🔒 Segurança
409
+
410
+ O OpenClaw segue 3 princípios fundamentais:
411
+
412
+ ### 1. Read-only por padrão
413
+ Todo comando opera em **modo PLAN** (simulação). Nada é alterado sem `--apply`.
414
+
415
+ ### 2. Consent-first
416
+ Antes de qualquer alteração, o sistema mostra exatamente o que vai fazer e pede confirmação. Ações destrutivas exigem **confirmação forte** (digitar frase específica).
417
+
418
+ ### 3. Audit-first
419
+ Toda ação gera log detalhado em `.agent/audit/` com timestamp, comando, modo, contexto e resultado.
420
+
421
+ ### Proteções ativas
422
+
423
+ | Proteção | Como funciona |
424
+ |----------|---------------|
425
+ | **Hook pre-tool-use** | Bloqueia 12+ padrões destrutivos (`rm -rf`, `mkfs`, `dd`, `shutdown`) |
426
+ | **VPN-first** | Sem VPN, sem acesso remoto |
427
+ | **Bind localhost** | Serviços só acessíveis localmente por padrão |
428
+ | **Auth token** | Token obrigatório para acesso |
429
+ | **Break-glass** | Acesso emergencial com expiração automática |
430
+ | **WEB_AUTOMATION rule** | Checklist de compliance para automação web |
431
+
432
+ ---
433
+
434
+ ## 💰 Roteador Econômico de Modelos
435
+
436
+ O `smart-router` escolhe automaticamente o modelo de IA mais econômico para cada tarefa:
437
+
438
+ | Perfil | Quando | Provedor default (free) |
439
+ |--------|--------|------------------------|
440
+ | **cheap** | Tarefas simples, formatação, resumos | Gemini Flash-Lite → Groq |
441
+ | **smart** | Planejamento, análise, raciocínio | Gemini Pro → Claude |
442
+ | **coding** | Código, debug, refactor, testes | Gemini Pro → GPT-5.2 |
443
+
444
+ Prioridade: **free-first** — só usa provedores pagos com autorização explícita.
445
+
446
+ ---
447
+
448
+ ## 🚀 Guia Rápido: Do Zero ao Funcionando
449
+
450
+ ```bash
451
+ # 1. Instale no seu projeto
452
+ npx @fabioforest/openclaw ide install --apply
453
+
454
+ # 2. Verifique se está tudo OK
455
+ npx @fabioforest/openclaw ide doctor
456
+
457
+ # 3. Analise seu ambiente
458
+ npx @fabioforest/openclaw inspect
459
+
460
+ # 4. Use o assistente
461
+ npx @fabioforest/openclaw assist
462
+ ```
463
+
464
+ **Ou via chat na IDE (Cursor, VSCode, Antigravity, Gemini):**
465
+ - Basta perguntar no chat! As skills e rules em `.agent/` guiam o agente automaticamente.
466
+ - O `openclaw-router` decide qual skill usar com base nos triggers de cada uma.
467
+ - Tudo segue o fluxo: **INSPECT → PLAN → CONSENT → APPLY → AUDIT**.
468
+
469
+ ---
470
+
471
+ ## 💬 Exemplo Real: Usando o OpenClaw na IDE (Chat)
472
+
473
+ O OpenClaw funciona como agente via chat na IDE. Aqui está uma simulação de como seria o fluxo real:
474
+
475
+ ### Exemplo 1: Otimizar perfil do LinkedIn
476
+
477
+ ```
478
+ 👤 Você (chat na IDE):
479
+ "Quero otimizar meu perfil do LinkedIn para vagas de AI Engineer"
480
+
481
+ 🤖 Agente (openclaw-router detecta: linkedin-optimizer):
482
+ 📋 INSPECT ─ Coletando contexto:
483
+ • Objetivo: otimizar perfil LinkedIn para AI Engineer
484
+ • Idioma: pt-BR
485
+ • Skills instaladas: linkedin-optimizer ✅
486
+
487
+ 📝 PLAN ─ Proposta de ações:
488
+ 1. Analisar headline atual e propor 2 versões A/B
489
+ 2. Reescrever seção "Sobre" com keywords de AI/MLOps
490
+ 3. Sugerir ajustes nas experiências com métricas
491
+ 4. Gerar checklist de publicação
492
+
493
+ ⚠️ RESTRIÇÃO: LinkedIn proíbe automação. Todo conteúdo
494
+ será gerado como rascunho para aplicação manual.
495
+
496
+ Deseja prosseguir? (S/n)
497
+
498
+ 👤 Você: "S"
499
+
500
+ 🤖 Agente:
501
+ ✅ APPLY ─ Rascunhos salvos em .agent/state/linkedin/drafts.md
502
+
503
+ ## Headline (opção A)
504
+ "AI Engineer | MLOps | Python | RAG & LLMs | Open Source"
505
+
506
+ ## Headline (opção B)
507
+ "Engenheiro de IA | Construindo pipelines de ML em produção"
508
+
509
+ 📝 AUDIT ─ log salvo em .agent/audit/
510
+ ```
511
+
512
+ ### Exemplo 2: Testar performance de um site
513
+
514
+ ```
515
+ 👤 Você:
516
+ "Testa a performance do meu site https://meu-portfolio.dev"
517
+
518
+ 🤖 Agente (openclaw-router detecta: site-tester):
519
+ 📋 INSPECT:
520
+ • URL: https://meu-portfolio.dev
521
+ • robots.txt: verificado ✅
522
+ • Ferramentas disponíveis: PageSpeed Insights API
523
+
524
+ 📝 PLAN:
525
+ 1. Rodar Lighthouse via PageSpeed Insights (sem infra local)
526
+ 2. Coletar métricas: Performance, SEO, Acessibilidade, PWA
527
+ 3. Listar as 5 principais oportunidades de melhoria
528
+ 4. Salvar relatório em .agent/state/site-tests/
529
+
530
+ Confirmar execução?
531
+
532
+ 👤 Você: "sim"
533
+
534
+ 🤖 Agente:
535
+ ✅ Resultados:
536
+ • Performance: 87 → otimizar imagens (ganho estimado: +8pts)
537
+ • SEO: 95 ✅
538
+ • Acessibilidade: 72 → falta alt em 3 imagens + contraste baixo
539
+ • PWA: 60 → falta manifest.json e service worker
540
+
541
+ 📊 Relatório salvo em .agent/state/site-tests/2026-02-19.json
542
+ 📝 Audit salvo
543
+ ```
544
+
545
+ ### Exemplo 3: Atualizar skills após nova versão
546
+
547
+ ```
548
+ 👤 Você:
549
+ "Saiu versão nova do OpenClaw, como atualizo?"
550
+
551
+ 🤖 Agente (openclaw-router detecta: assist):
552
+ Recomendo o seguinte fluxo:
553
+
554
+ 1. Primeiro, veja o que mudaria (modo PLAN, seguro):
555
+ $ npx @fabioforest/openclaw update
556
+
557
+ 2. Se estiver tudo OK, aplique:
558
+ $ npx @fabioforest/openclaw update --apply
559
+
560
+ 3. Para preservar customizações:
561
+ $ npx @fabioforest/openclaw update --apply --merge
562
+
563
+ O update faz backup automático de arquivos customizados
564
+ antes de sobrescrever, e copia novos templates.
565
+
566
+ Quer que eu execute o passo 1 agora?
567
+ ```
568
+
569
+ ### Exemplo 4: Desinstalar o OpenClaw de um projeto
570
+
571
+ ```
572
+ 👤 Você:
573
+ "Quero remover o OpenClaw deste projeto"
574
+
575
+ 🤖 Agente:
576
+ Vou simular a remoção primeiro (modo PLAN, seguro):
577
+
578
+ $ npx @fabioforest/openclaw uninstall
579
+
580
+ 🗑️ PLAN — Seria removido:
581
+ .agent/ (25 arquivos, 15 skills, 5 rules)
582
+ openclaw.json
583
+ ⚠️ 3 logs de auditoria seriam perdidos
584
+
585
+ Para aplicar de fato:
586
+ $ npx @fabioforest/openclaw uninstall --apply
587
+
588
+ O sistema vai pedir que você digite "UNINSTALL"
589
+ e oferecerá fazer backup antes de remover.
590
+
591
+ Quer que eu execute?
592
+ ```
593
+
594
+ ---
595
+
596
+ ## 🔄 Ciclo de Vida Completo
597
+
598
+ ```
599
+ 📦 INSTALAR → npx @fabioforest/openclaw init --apply
600
+ ou: npx @fabioforest/openclaw ide install --apply
601
+
602
+ 🔍 INSPECIONAR → npx @fabioforest/openclaw inspect
603
+ npx @fabioforest/openclaw status
604
+
605
+ 🛠️ USAR → Chat na IDE (skills + router fazem o resto)
606
+ ou: npx @fabioforest/openclaw assist
607
+
608
+ 🔄 ATUALIZAR → npx @fabioforest/openclaw update --apply
609
+ (preserva customizações com --merge)
610
+
611
+ 🏥 DIAGNOSTICAR → npx @fabioforest/openclaw doctor
612
+ npx @fabioforest/openclaw debug
613
+
614
+ 🗑️ DESINSTALAR → npx @fabioforest/openclaw uninstall --apply
615
+ (backup automático + confirmação forte)
616
+ ```
617
+
618
+ ---
619
+
620
+ ## 🛠️ Desenvolvimento
71
621
 
72
622
  ```bash
73
623
  # Instalar dependências
@@ -83,6 +633,25 @@ npm run test:watch
83
633
  npm run test:coverage
84
634
  ```
85
635
 
86
- ## Licença
636
+ ---
637
+
638
+ ## 📋 Flags Globais
639
+
640
+ Todas as flags funcionam com qualquer comando:
641
+
642
+ | Flag | Descrição | Padrão |
643
+ |------|-----------|--------|
644
+ | `--plan` | Modo simulação (read-only) | **Sim** |
645
+ | `--apply` | Modo execução (aplica alterações) | Não |
646
+ | `--yes, -y` | Pula confirmações interativas | Não |
647
+ | `--force, -f` | Permite operações destrutivas (sem backup no uninstall) | Não |
648
+ | `--path, -p <dir>` | Diretório alvo | `./` |
649
+ | `--quiet, -q` | Saída mínima | Não |
650
+ | `--no-audit` | Desabilita logs de auditoria | Não |
651
+ | `--merge` | Atualização segura (preserva customizações) | Não |
652
+
653
+ ---
654
+
655
+ ## 📄 Licença
87
656
 
88
657
  MIT
package/bin/openclaw.js CHANGED
@@ -24,6 +24,7 @@ const pkg = require("../package.json");
24
24
  const COMMANDS = {
25
25
  init: "../lib/cli/init",
26
26
  update: "../lib/cli/update",
27
+ uninstall: "../lib/cli/uninstall",
27
28
  status: "../lib/cli/status",
28
29
  doctor: "../lib/cli/doctor",
29
30
  debug: "../lib/cli/debug",
@@ -92,6 +93,7 @@ function showHelp() {
92
93
  Comandos:
93
94
  init Instala templates .agent/ no projeto atual
94
95
  update Atualiza templates preservando customizações
96
+ uninstall Remove .agent/ e openclaw.json (com backup)
95
97
  status Mostra status da instalação
96
98
  doctor Healthcheck automatizado do ambiente
97
99
  setup Roda wizard interativo de configuração
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Comando CLI: uninstall
5
+ *
6
+ * Remove a instalação do OpenClaw (.agent/) de um projeto.
7
+ * Segue o protocolo consent-first:
8
+ * - Modo PLAN por padrão (mostra o que seria removido)
9
+ * - Exige --apply para executar
10
+ * - Exige confirmação forte (digitar frase)
11
+ * - Backup opcional antes de remover
12
+ */
13
+
14
+ const fs = require("fs");
15
+ const path = require("path");
16
+ const readline = require("readline");
17
+ const { detectContext, getAuditHeader } = require("../context");
18
+
19
+ function ask(q) {
20
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
21
+ return new Promise((res) => rl.question(q, (ans) => { rl.close(); res(ans.trim()); }));
22
+ }
23
+
24
+ /**
25
+ * Conta arquivos recursivamente em um diretório.
26
+ */
27
+ function countFiles(dir) {
28
+ let count = 0;
29
+ if (!fs.existsSync(dir)) return 0;
30
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
31
+ if (entry.isDirectory()) {
32
+ count += countFiles(path.join(dir, entry.name));
33
+ } else {
34
+ count++;
35
+ }
36
+ }
37
+ return count;
38
+ }
39
+
40
+ /**
41
+ * Lista o conteúdo de um diretório de forma visual (tree).
42
+ */
43
+ function listTree(dir, prefix = "") {
44
+ const lines = [];
45
+ if (!fs.existsSync(dir)) return lines;
46
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
47
+ entries.forEach((entry, i) => {
48
+ const isLast = i === entries.length - 1;
49
+ const connector = isLast ? "└── " : "├── ";
50
+ const icon = entry.isDirectory() ? "📁" : "📄";
51
+ lines.push(`${prefix}${connector}${icon} ${entry.name}`);
52
+ if (entry.isDirectory()) {
53
+ const childPrefix = prefix + (isLast ? " " : "│ ");
54
+ lines.push(...listTree(path.join(dir, entry.name), childPrefix));
55
+ }
56
+ });
57
+ return lines;
58
+ }
59
+
60
+ /**
61
+ * Executa o comando uninstall.
62
+ * @param {object} options
63
+ * @param {string} options.targetPath — diretório alvo
64
+ * @param {object} options.flags — flags do CLI
65
+ */
66
+ async function run({ targetPath, flags }) {
67
+ const agentDir = path.join(targetPath, ".agent");
68
+ const configFile = path.join(targetPath, "openclaw.json");
69
+ const planMode = !flags.apply;
70
+ const ctx = detectContext(targetPath);
71
+
72
+ console.log("\n🗑️ OpenClaw Uninstall\n");
73
+
74
+ // Verificar se existe instalação
75
+ if (!fs.existsSync(agentDir) && !fs.existsSync(configFile)) {
76
+ console.log("ℹ️ Nenhuma instalação do OpenClaw encontrada neste diretório.");
77
+ console.log(` Path: ${targetPath}`);
78
+ return;
79
+ }
80
+
81
+ // Mostrar o que será removido
82
+ console.log(` 📂 Diretório: ${targetPath}`);
83
+ console.log("");
84
+
85
+ const toRemove = [];
86
+
87
+ if (fs.existsSync(agentDir)) {
88
+ const fileCount = countFiles(agentDir);
89
+ toRemove.push({ path: agentDir, label: ".agent/", files: fileCount, isDir: true });
90
+ console.log(` 🔴 REMOVER .agent/ (${fileCount} arquivos)`);
91
+
92
+ // Mostrar tree resumido (primeiro nível)
93
+ const entries = fs.readdirSync(agentDir, { withFileTypes: true });
94
+ entries.forEach(e => {
95
+ const icon = e.isDirectory() ? "📁" : "📄";
96
+ const subCount = e.isDirectory() ? ` (${countFiles(path.join(agentDir, e.name))} arquivos)` : "";
97
+ console.log(` ${icon} ${e.name}${subCount}`);
98
+ });
99
+ }
100
+
101
+ if (fs.existsSync(configFile)) {
102
+ toRemove.push({ path: configFile, label: "openclaw.json", isDir: false });
103
+ console.log(` 🔴 REMOVER openclaw.json`);
104
+ }
105
+
106
+ // Verificar audit logs que seriam perdidos
107
+ const auditDir = path.join(agentDir, "audit");
108
+ if (fs.existsSync(auditDir)) {
109
+ const auditCount = countFiles(auditDir);
110
+ if (auditCount > 0) {
111
+ console.log(`\n ⚠️ ${auditCount} log(s) de auditoria serão perdidos!`);
112
+ }
113
+ }
114
+
115
+ // Verificar state que seria perdido
116
+ const stateDir = path.join(agentDir, "state");
117
+ if (fs.existsSync(stateDir)) {
118
+ const stateCount = countFiles(stateDir);
119
+ if (stateCount > 0) {
120
+ console.log(` ⚠️ ${stateCount} arquivo(s) de estado serão perdidos (mission_control, MEMORY)!`);
121
+ }
122
+ }
123
+
124
+ // Modo PLAN: não faz nada
125
+ if (planMode) {
126
+ console.log("\n🔒 Modo PLAN (Read-Only). Nenhuma alteração feita.");
127
+ console.log(" Para desinstalar, rode: npx @fabioforest/openclaw uninstall --apply");
128
+ return;
129
+ }
130
+
131
+ // Modo APPLY: pedir confirmação forte
132
+ console.log("");
133
+ if (!flags.yes) {
134
+ const confirm = await ask("⚠️ Digite 'UNINSTALL' para confirmar a remoção: ");
135
+ if (confirm !== "UNINSTALL") {
136
+ console.log("⏹️ Cancelado. Nada foi removido.");
137
+ return;
138
+ }
139
+ }
140
+
141
+ // Backup opcional
142
+ if (!flags.force) {
143
+ const doBackup = flags.yes ? "s" : await ask("💾 Fazer backup antes de remover? (S/n): ");
144
+ if (doBackup.toLowerCase() !== "n") {
145
+ const backupName = `.agent.backup-${Date.now()}`;
146
+ const backupPath = path.join(targetPath, backupName);
147
+ try {
148
+ fs.cpSync(agentDir, backupPath, { recursive: true });
149
+ console.log(` ✅ Backup criado: ${backupName}/`);
150
+ } catch (err) {
151
+ console.error(` ⚠️ Falha no backup: ${err.message}`);
152
+ const cont = await ask(" Continuar sem backup? (y/N): ");
153
+ if (cont.toLowerCase() !== "y") {
154
+ console.log("⏹️ Cancelado.");
155
+ return;
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ // Executar remoção
162
+ const audit = [getAuditHeader(ctx, "uninstall", flags)];
163
+
164
+ try {
165
+ for (const item of toRemove) {
166
+ if (item.isDir) {
167
+ fs.rmSync(item.path, { recursive: true, force: true });
168
+ } else {
169
+ fs.unlinkSync(item.path);
170
+ }
171
+ console.log(` ✅ Removido: ${item.label}`);
172
+ audit.push(`- ACT: REMOVED ${item.label}`);
173
+ }
174
+
175
+ console.log("\n✨ OpenClaw desinstalado com sucesso!");
176
+ console.log(" Para reinstalar: npx @fabioforest/openclaw init --apply\n");
177
+
178
+ // Gravar audit no diretório pai (já que .agent/ foi removido)
179
+ if (flags.audit !== false) {
180
+ const filename = `openclaw-uninstall-${new Date().toISOString().replace(/[:.]/g, "-")}.md`;
181
+ const auditPath = path.join(targetPath, filename);
182
+ try {
183
+ fs.writeFileSync(auditPath, audit.join("\n") + "\n", "utf8");
184
+ console.log(` 📝 Log de auditoria: ${filename}`);
185
+ } catch (e) { /* silencioso */ }
186
+ }
187
+
188
+ } catch (err) {
189
+ console.error(`\n❌ Falha: ${err.message}`);
190
+ process.exit(1);
191
+ }
192
+ }
193
+
194
+ module.exports = { run };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fabioforest/openclaw",
3
- "version": "3.4.0",
3
+ "version": "3.5.0",
4
4
  "description": "Agentes autônomos para engenharia de software",
5
5
  "publishConfig": {
6
6
  "access": "public"