@fabioforest/openclaw 3.0.0 → 3.4.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.
Files changed (35) hide show
  1. package/bin/openclaw.js +37 -8
  2. package/lib/cli/assist.js +84 -0
  3. package/lib/cli/doctor.js +37 -3
  4. package/lib/cli/ide.js +218 -0
  5. package/lib/cli/init.js +135 -79
  6. package/lib/cli/inspect.js +58 -0
  7. package/lib/cli/orchestrate.js +43 -15
  8. package/lib/cli/update.js +113 -47
  9. package/lib/context/collector.js +104 -0
  10. package/lib/context/index.js +75 -0
  11. package/lib/router/match.js +107 -0
  12. package/lib/setup/config_wizard.js +2 -0
  13. package/package.json +2 -2
  14. package/templates/.agent/agents/workflow-automator.md +31 -0
  15. package/templates/.agent/rules/CONSENT_FIRST.md +24 -0
  16. package/templates/.agent/rules/DEV_MODE.md +18 -0
  17. package/templates/.agent/rules/ROUTER_PROTOCOL.md +22 -0
  18. package/templates/.agent/rules/WEB_AUTOMATION.md +52 -0
  19. package/templates/.agent/skills/content-sourcer/SKILL.md +48 -0
  20. package/templates/.agent/skills/context-flush/SKILL.md +30 -0
  21. package/templates/.agent/skills/drive-organizer/SKILL.md +40 -0
  22. package/templates/.agent/skills/linkedin-optimizer/SKILL.md +48 -0
  23. package/templates/.agent/skills/mission-control/SKILL.md +37 -0
  24. package/templates/.agent/skills/openclaw-assist/SKILL.md +30 -0
  25. package/templates/.agent/skills/openclaw-dev/SKILL.md +26 -0
  26. package/templates/.agent/skills/openclaw-inspect/SKILL.md +21 -0
  27. package/templates/.agent/skills/openclaw-installation-debugger/scripts/debug.js +16 -2
  28. package/templates/.agent/skills/openclaw-router/SKILL.md +34 -0
  29. package/templates/.agent/skills/openclaw-security/SKILL.md +21 -0
  30. package/templates/.agent/skills/site-tester/SKILL.md +49 -0
  31. package/templates/.agent/skills/smart-router/SKILL.md +116 -0
  32. package/templates/.agent/skills/web-scraper/SKILL.md +51 -0
  33. package/templates/.agent/state/MEMORY.md +8 -0
  34. package/templates/.agent/state/mission_control.json +34 -0
  35. package/templates/.agent/workflows/ai-capture.md +39 -0
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Context Collector — Read-only snapshot do ambiente.
5
+ * Nunca altera arquivos. Apenas lê e retorna dados.
6
+ *
7
+ * Baseado no módulo do openclaw-agents-addons,
8
+ * adaptado para o projeto principal.
9
+ */
10
+
11
+ const fs = require("fs");
12
+ const os = require("os");
13
+ const path = require("path");
14
+
15
+ function exists(p) {
16
+ try { return fs.existsSync(p); } catch { return false; }
17
+ }
18
+
19
+ /**
20
+ * Detecta IDE ativa no workspace.
21
+ */
22
+ function detectIDE(targetPath) {
23
+ if (exists(path.join(targetPath, ".cursor"))) return "cursor";
24
+ if (exists(path.join(targetPath, ".vscode"))) return "vscode";
25
+ if (exists(path.join(targetPath, ".idea"))) return "jetbrains";
26
+ return "unknown";
27
+ }
28
+
29
+ /**
30
+ * Detecta ambiente de execução (SO, Docker, WSL).
31
+ */
32
+ function detectEnvironment() {
33
+ const platform = os.platform();
34
+ const docker = exists("/.dockerenv") ||
35
+ (exists("/proc/1/cgroup") && fs.readFileSync("/proc/1/cgroup", "utf8").includes("docker"));
36
+ const wsl = platform === "linux" &&
37
+ (os.release().toLowerCase().includes("microsoft") || !!process.env.WSL_DISTRO_NAME);
38
+ return { platform, docker, wsl };
39
+ }
40
+
41
+ /**
42
+ * Detecta instalação existente do OpenClaw.
43
+ */
44
+ function detectOpenClaw(targetPath) {
45
+ const agentDir = path.join(targetPath, ".agent");
46
+ const config = path.join(targetPath, "openclaw.json");
47
+ const dockerCompose = path.join(targetPath, "docker-compose.yml");
48
+ return {
49
+ hasAgentDir: exists(agentDir),
50
+ hasConfig: exists(config),
51
+ hasDockerCompose: exists(dockerCompose),
52
+ };
53
+ }
54
+
55
+ /**
56
+ * Lista skills disponíveis nos templates.
57
+ */
58
+ function listSkillsFromTemplates(templatesDir) {
59
+ const skillsDir = path.join(templatesDir, ".agent", "skills");
60
+ if (!exists(skillsDir)) return [];
61
+ const out = [];
62
+ for (const name of fs.readdirSync(skillsDir)) {
63
+ const skillPath = path.join(skillsDir, name, "SKILL.md");
64
+ if (exists(skillPath)) out.push({ name, skillPath });
65
+ }
66
+ return out;
67
+ }
68
+
69
+ /**
70
+ * Lista skills instaladas no workspace do usuário.
71
+ */
72
+ function listInstalledSkills(targetPath) {
73
+ const skillsDir = path.join(targetPath, ".agent", "skills");
74
+ if (!exists(skillsDir)) return [];
75
+ const out = [];
76
+ for (const name of fs.readdirSync(skillsDir)) {
77
+ const skillPath = path.join(skillsDir, name, "SKILL.md");
78
+ if (exists(skillPath)) out.push({ name, skillPath });
79
+ }
80
+ return out;
81
+ }
82
+
83
+ /**
84
+ * Coleta contexto completo (read-only).
85
+ * @param {object} options
86
+ * @param {string} options.targetPath — diretório do workspace
87
+ * @param {string} options.templatesDir — diretório de templates do pacote
88
+ * @returns {object} snapshot do contexto
89
+ */
90
+ function collectContext({ targetPath, templatesDir }) {
91
+ const env = detectEnvironment();
92
+ return {
93
+ targetPath,
94
+ env,
95
+ ide: detectIDE(targetPath),
96
+ openclaw: detectOpenClaw(targetPath),
97
+ git: { isRepo: exists(path.join(targetPath, ".git")) },
98
+ skillsInTemplates: listSkillsFromTemplates(templatesDir),
99
+ skillsInstalled: listInstalledSkills(targetPath),
100
+ ts: new Date().toISOString(),
101
+ };
102
+ }
103
+
104
+ module.exports = collectContext;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+
3
+ const fs = require("fs");
4
+ const path = require("path");
5
+ const os = require("os");
6
+
7
+ /**
8
+ * Detecta o ambiente de execução e metadados de contexto.
9
+ * Retorna um objeto seguro para logs e auditoria.
10
+ */
11
+ function detectContext(cwd = process.cwd()) {
12
+ const ctx = {
13
+ timestamp: new Date().toISOString(),
14
+ platform: os.platform(),
15
+ cwd: cwd,
16
+ env: "local",
17
+ ide: "unknown",
18
+ isDocker: false,
19
+ hasExistingInstall: false,
20
+ };
21
+
22
+ // 1. Detectar Docker
23
+ if (fs.existsSync("/.dockerenv") || fs.existsSync("/run/.containerenv")) {
24
+ ctx.isDocker = true;
25
+ ctx.env = "docker";
26
+ }
27
+
28
+ // 2. Detectar IDEs comuns
29
+ const ideMarkers = [
30
+ { name: "vscode", path: ".vscode" },
31
+ { name: "cursor", path: ".cursor" },
32
+ { name: "idea", path: ".idea" },
33
+ { name: "antigravity", path: ".agent/antigravity" } // Marcador fictício ou real se existir
34
+ ];
35
+
36
+ for (const m of ideMarkers) {
37
+ if (fs.existsSync(path.join(cwd, m.path))) {
38
+ ctx.ide = m.name;
39
+ break;
40
+ }
41
+ }
42
+
43
+ // 3. Detectar instalação existente
44
+ const agentDir = path.join(cwd, ".agent");
45
+ const configPath = path.join(cwd, "openclaw.json");
46
+
47
+ if (fs.existsSync(agentDir) || fs.existsSync(configPath)) {
48
+ ctx.hasExistingInstall = true;
49
+ }
50
+
51
+ return ctx;
52
+ }
53
+
54
+ /**
55
+ * Gera um cabeçalho de auditoria formatado em Markdown.
56
+ */
57
+ function getAuditHeader(ctx, command, flags) {
58
+ return [
59
+ `# OpenClaw Audit Log`,
60
+ `- **Time**: ${ctx.timestamp}`,
61
+ `- **Command**: ${command}`,
62
+ `- **Mode**: ${flags.plan ? "PLAN (Simulation)" : "APPLY (Execution)"}`,
63
+ `- **Environment**: ${ctx.env} (Docker: ${ctx.isDocker})`,
64
+ `- **IDE**: ${ctx.ide}`,
65
+ `- **Existing Install**: ${ctx.hasExistingInstall}`,
66
+ `- **Flags**: ${JSON.stringify(flags)}`,
67
+ `---`,
68
+ ``
69
+ ].join("\n");
70
+ }
71
+
72
+ module.exports = {
73
+ detectContext,
74
+ getAuditHeader
75
+ };
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Skill Matcher — Escolhe a skill mais adequada para uma solicitação.
5
+ *
6
+ * Faz parse do YAML frontmatter de cada SKILL.md e pontua
7
+ * a relevância com base nos triggers e descrição.
8
+ */
9
+
10
+ const fs = require("fs");
11
+ const path = require("path");
12
+
13
+ /**
14
+ * Extrai metadados (name, description, triggers) do frontmatter YAML.
15
+ * @param {string} md — conteúdo Markdown com frontmatter
16
+ * @returns {object|null} metadados extraídos ou null
17
+ */
18
+ function parseFrontmatter(md) {
19
+ const m = md.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);
20
+ if (!m) return null;
21
+
22
+ const yaml = m[1];
23
+
24
+ // Extrair listas (ex: triggers)
25
+ const getList = (key) => {
26
+ const r = new RegExp(`^${key}:\\s*\\n([\\s\\S]*?)(\\n\\w|$)`, "m");
27
+ const mm = yaml.match(r);
28
+ if (!mm) return [];
29
+ return mm[1]
30
+ .split("\n")
31
+ .map(l => l.trim())
32
+ .filter(l => l.startsWith("-"))
33
+ .map(l => l.replace(/^-\s*/, "").trim())
34
+ .filter(Boolean);
35
+ };
36
+
37
+ // Extrair escalares (ex: name, description)
38
+ const getScalar = (key) => {
39
+ const r = new RegExp(`^${key}:\\s*(.+)$`, "m");
40
+ const mm = yaml.match(r);
41
+ return mm ? mm[1].trim() : "";
42
+ };
43
+
44
+ return {
45
+ name: getScalar("name"),
46
+ description: getScalar("description"),
47
+ triggers: getList("triggers"),
48
+ };
49
+ }
50
+
51
+ /**
52
+ * Carrega todas as skills de um diretório de templates.
53
+ * @param {string} skillsDir — diretório com subpastas de skills
54
+ * @returns {Array} lista de skills com metadados
55
+ */
56
+ function loadSkills(skillsDir) {
57
+ if (!fs.existsSync(skillsDir)) return [];
58
+ const skills = [];
59
+ for (const folder of fs.readdirSync(skillsDir)) {
60
+ const p = path.join(skillsDir, folder, "SKILL.md");
61
+ if (!fs.existsSync(p)) continue;
62
+ const md = fs.readFileSync(p, "utf8");
63
+ const meta = parseFrontmatter(md);
64
+ if (!meta) continue;
65
+ skills.push({ ...meta, path: p, folder });
66
+ }
67
+ return skills;
68
+ }
69
+
70
+ /**
71
+ * Calcula score de relevância de uma skill para um texto.
72
+ * @param {object} skill — skill com triggers e description
73
+ * @param {string} text — texto do usuário
74
+ * @returns {number} pontuação (maior = mais relevante)
75
+ */
76
+ function scoreSkill(skill, text) {
77
+ const t = (text || "").toLowerCase();
78
+ let s = 0;
79
+ for (const trig of (skill.triggers || [])) {
80
+ if (t.includes(String(trig).toLowerCase())) s += 5;
81
+ }
82
+ // Bonus parcial para match de descrição
83
+ if (skill.description && t.includes(skill.description.toLowerCase().slice(0, 12))) s += 1;
84
+ return s;
85
+ }
86
+
87
+ /**
88
+ * Encontra a skill mais relevante para uma solicitação.
89
+ * @param {object} options
90
+ * @param {string} options.skillsDir — diretório de skills (templates/.agent/skills)
91
+ * @param {string} options.userText — texto da solicitação do usuário
92
+ * @returns {object} { chosen, alternatives, ranked }
93
+ */
94
+ function matchSkill({ skillsDir, userText }) {
95
+ const skills = loadSkills(skillsDir);
96
+ const ranked = skills
97
+ .map(sk => ({ sk, score: scoreSkill(sk, userText) }))
98
+ .sort((a, b) => b.score - a.score);
99
+
100
+ return {
101
+ chosen: ranked[0]?.sk || null,
102
+ alternatives: ranked.slice(1, 4).map(x => x.sk),
103
+ ranked,
104
+ };
105
+ }
106
+
107
+ module.exports = { matchSkill, loadSkills, parseFrontmatter };
@@ -176,6 +176,8 @@ async function main() {
176
176
  }
177
177
 
178
178
  console.log("\n✅ Setup finalizado.");
179
+ console.log("\n🌐 CONTROL UI: http://127.0.0.1:18789");
180
+ console.log(" Acesse para gerenciar seus agentes visualmente.\n");
179
181
  console.log("Próximo passo: configurar VPN (WireGuard) e aplicar policies (skills/openclaw-ops).");
180
182
  rl.close();
181
183
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fabioforest/openclaw",
3
- "version": "3.0.0",
4
- "description": "CLI e starter kit para configuração segura do OpenClaw em VPS, Mac, Windows e Docker",
3
+ "version": "3.4.0",
4
+ "description": "Agentes autônomos para engenharia de software",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: Workflow Automator
3
+ description: Especialista em criar, validar e otimizar workflows e automações do OpenClaw.
4
+ system_prompt: |
5
+ Você é o Workflow Automator, um agente especializado na arquitetura de automação do OpenClaw.
6
+
7
+ ## Suas Responsabilidades
8
+ 1. **Criar Workflows**: Escrever arquivos `.md` válidos em `.agent/workflows/` seguindo a sintaxe de nodes.
9
+ 2. **Explicar Conceitos**: Ensinar sobre `AI Capture`, `Interactive Nodes` e `Message Nodes`.
10
+ 3. **Validar Sintaxe**: Garantir que o YAML frontmatter e a estrutura dos passos estejam corretos.
11
+
12
+ ## Conhecimento de Sintaxe
13
+ Você domina a estrutura de workflows do OpenClaw:
14
+ - **Frontmatter**: `description`, `params` (opcional).
15
+ - **Steps**: Lista numerada ou bullets.
16
+ - **AI Capture**: Uso de prompts para extrair JSON de conversas.
17
+ - **Integração**: Como chamar skills dentro de workflows.
18
+
19
+ ## Personalidade
20
+ Técnico, preciso e focado em eficiência. Você adora transformar processos manuais em arquivos `.md` elegantes.
21
+ ---
22
+ # Workflow Automator
23
+
24
+ Olá! Eu sou o especialista em **Workflows Inteligentes**.
25
+
26
+ Posso ajudar você a:
27
+ 1. Criar um workflow de **Onboarding** que coleta dados do usuário.
28
+ 2. Configurar um **AI Capture** para estruturar pedidos ou tickets.
29
+ 3. Debugar um workflow que não está rodando corretamente.
30
+
31
+ Comando sugerido: `Crie um workflow para coletar feedback de usuários`
@@ -0,0 +1,24 @@
1
+ ---
2
+ description: Regra de Ouro: Consentimento Prévio para Alterações
3
+ ---
4
+
5
+ # Consent First (Segurança Absoluta)
6
+
7
+ Como um agente OpenClaw, você opera sob um contrato estrito de "Read-Only por Padrão".
8
+
9
+ ## 1. Regra de Ouro
10
+ **Nunca altere, apague ou crie arquivos sem que o usuário tenha solicitado explicitamente essa ação específica.**
11
+
12
+ ## 2. Protocolo de Modificação
13
+ Antes de qualquer operação de escrita (write, edit, delete, move), você deve:
14
+ 1. **Analisar**: Entender o contexto e o impacto.
15
+ 2. **Planejar**: Explicar ao usuário o que será feito.
16
+ 3. **Confirmar**: Perguntar "Posso prosseguir?" ou aguardar comando explícito (ex: `--apply`).
17
+
18
+ ## 3. Proibições Estritas
19
+ - Nunca execute `rm -rf`, `git clean` ou deletar diretórios inteiros sem um aviso gigante e confirmação dupla.
20
+ - Nunca sobrescreva arquivos de configuração (`openclaw.json`, `.env`) silenciosamente.
21
+ - Nunca assuma que pode "consertar" algo sem perguntar antes.
22
+
23
+ ## 4. Auditoria
24
+ Sempre que realizar uma alteração, registre o que foi feito. O sistema já gera logs em `.agent/audit/`, mas você deve comunicar o sucesso ao usuário com clareza.
@@ -0,0 +1,18 @@
1
+ # OpenClaw AI OS — Dev Mode (Devin-like)
2
+
3
+ Você pode atuar como:
4
+ - backend engineer
5
+ - frontend engineer
6
+ - UX/UI
7
+ - devops
8
+ - security engineer
9
+
10
+ ## Travas obrigatórias
11
+ - Sempre começar com INSPECT (read-only)
12
+ - Sempre gerar PLANO com lista de arquivos impactados
13
+ - Sempre pedir CONSENTIMENTO antes de editar/criar/deletar
14
+ - Sempre gerar AUDIT do que foi feito/certo/errado
15
+
16
+ ## Defaults seguros
17
+ - escrever por padrão somente em `.agent/**` e arquivos explicitamente aprovados
18
+ - qualquer alteração fora disso exige confirmação detalhada
@@ -0,0 +1,22 @@
1
+ # OpenClaw AI OS — Router Protocol (Chat-first)
2
+
3
+ ## Regra Suprema
4
+ **READ-ONLY por padrão.**
5
+ Nada pode ser criado/alterado/apagado sem **autorização explícita** do usuário.
6
+
7
+ ## Fluxo obrigatório para qualquer pedido no chat
8
+ 1) **Inspecionar (read-only):** entender o contexto do workspace (SO, IDE, Docker/VPS/local, OpenClaw existente, skills disponíveis).
9
+ 2) **Roteamento:** escolher a skill mais adequada com base em `triggers`/`description`.
10
+ 3) **Plano:** apresentar um plano claro e verificável com:
11
+ - arquivos que seriam tocados
12
+ - comandos que seriam executados
13
+ - riscos e rollback
14
+ 4) **Consentimento:** perguntar: **"Posso aplicar?"**
15
+ 5) **Aplicar somente após confirmação:**
16
+ - se envolver overwrite/delete: exigir confirmação reforçada (ex.: digitar uma frase)
17
+ 6) **Auditoria:** documentar tudo que foi feito/alterado e resultado (certo/errado).
18
+
19
+ ## Segurança mínima
20
+ - bind localhost + token por padrão
21
+ - acesso remoto somente via VPN (WireGuard)
22
+ - bloquear ações destrutivas sem confirmação explícita
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: WEB_AUTOMATION
3
+ description: Regra de compliance para automação web, scraping e integração com serviços externos.
4
+ ---
5
+
6
+ # Web Automation — Regras de Compliance e Segurança
7
+
8
+ ## Princípio central
9
+ **Separar "planejar" de "executar"**: a IA pode planejar e escrever scripts/patches, mas execução real vem **após consentimento explícito** do usuário.
10
+
11
+ ## Checklist obrigatório antes de qualquer automação web
12
+
13
+ ### 1. ToS e legalidade
14
+ - [ ] Verificar se o site/plataforma permite automação (ex: LinkedIn **proíbe** bots)
15
+ - [ ] Verificar `robots.txt` — não é autorização, mas é prática obrigatória respeitá-lo
16
+ - [ ] Preferir APIs oficiais quando existirem (Google Drive API, SerpAPI, PageSpeed, etc.)
17
+ - [ ] Só automatizar contas que o usuário controla e autorizou
18
+
19
+ ### 2. Credenciais e autenticação
20
+ - [ ] Preferir OAuth (Google/Microsoft) com escopos mínimos (ex: `drive.file`)
21
+ - [ ] Nunca armazenar senhas — usar variáveis de ambiente ou secret manager
22
+ - [ ] Cookies/storage state tratados como segredo (criptografar, expirar, consentimento)
23
+ - [ ] Nunca logar tokens ou chaves em texto puro
24
+
25
+ ### 3. Execução isolada
26
+ - [ ] Executar em sandbox (Docker/VM) quando possível
27
+ - [ ] Preferir modo `non-main` ou `all` para sessões de automação
28
+ - [ ] Rate limiting autoimposto (nunca saturar servidores alvo)
29
+ - [ ] Timeout e retry com backoff exponencial
30
+
31
+ ### 4. Dados e privacidade
32
+ - [ ] Minimizar dados enviados a provedores externos (evitar PII, segredos, dumps)
33
+ - [ ] Documentar qual provedor/modelo foi usado e sua política de retenção
34
+ - [ ] Ativar Zero Data Retention (ZDR) quando disponível e necessário
35
+ - [ ] Masking/redação de dados sensíveis antes de enviar a LLMs
36
+
37
+ ### 5. Auditoria
38
+ - [ ] Registrar cada execução com entradas, saídas, status e artefatos
39
+ - [ ] Incluir timestamps, URLs, volume de dados e erros
40
+ - [ ] Manter trilha de decisões (por que fallback, por que retry)
41
+
42
+ ## Plataformas com restrições conhecidas
43
+
44
+ | Plataforma | Restrição | Ação permitida |
45
+ |-----------|-----------|---------------|
46
+ | LinkedIn | Proíbe bots/crawlers/extensões que automatizam | Gerar textos + checklist; execução manual |
47
+ | Facebook/Instagram | Restrições em automação de perfil | Usar APIs oficiais com aprovação |
48
+ | Twitter/X | Rate limits estritos na API | Usar API oficial com chave própria |
49
+ | Google (busca) | Custom Search com limites; descontinuação prevista | Usar SerpAPI/Brave como alternativa |
50
+
51
+ ## Nota sobre skills de terceiros
52
+ Skills de terceiros devem ser **revisadas antes de uso**. Há relatos públicos de skills maliciosas em marketplaces/registries. Tratar como código não confiável e preferir execuções sandboxed.
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: content-sourcer
3
+ description: Busca fontes públicas e gera um "dossiê citável" (links + trechos) para alimentar posts e páginas.
4
+ triggers:
5
+ - buscar fontes
6
+ - referências
7
+ - pesquisa web
8
+ - dossiê
9
+ - fontes
10
+ - pesquisar
11
+ - research
12
+ ---
13
+
14
+ # Content Sourcer
15
+
16
+ ## Objetivo
17
+ Pesquisar fontes públicas sobre um tema e gerar um dossiê citável com links, trechos e relevância, útil para posts, artigos, apresentações e projetos.
18
+
19
+ ## Contexto necessário
20
+ - Tema de pesquisa
21
+ - País/idioma preferido
22
+ - Critérios de qualidade (recência, autoridade, fontes primárias)
23
+
24
+ ## Fluxo (inspect → plan → apply → audit)
25
+
26
+ 1. **INSPECT**: Escolher provedor de busca e validar orçamento (queries disponíveis)
27
+ 2. **PLAN**: Definir queries, critérios de filtragem e quantidade de fontes
28
+ 3. **APPLY**: Executar busca, extrair resumo por fonte, salvar em `.agent/state/research/`
29
+ 4. **AUDIT**: Registrar queries executadas, provedores usados e custos estimados
30
+
31
+ ## Provedores de busca suportados
32
+
33
+ | Provedor | Free tier | Limites | Nota |
34
+ |---------|---------|--------|------|
35
+ | SerpAPI | 250 buscas/mês (free) | Throughput/hora definido | Amplo (Google, Bing, etc.) |
36
+ | Brave Search API | US$ 5 créditos/mês | Preço por 1.000 queries | Boa relação custo/qualidade |
37
+ | Google Custom Search | 100 queries/dia (free) | Descontinuação prevista (2027) | Usar com cautela |
38
+
39
+ ## Requisitos de segurança
40
+ - ✅ Usar API keys do próprio usuário (nunca embutir chaves no skill)
41
+ - ✅ Respeitar limites de taxa e quotas dos provedores
42
+ - ✅ Citar fontes com links completos (transparência)
43
+ - ❌ Nunca plagiar conteúdo (apenas resumir e citar)
44
+ - ❌ Nunca gastar créditos sem confirmar com o usuário
45
+
46
+ ## Armazenamento
47
+ - `.agent/state/research/` — dossiês por tema/data
48
+ - `.agent/audit/` — log com queries, custos e provedores
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: context-flush
3
+ description: Resume contexto útil e propõe anexar a MEMORY.md e/ou history do Mission Control; só aplica com consentimento.
4
+ triggers:
5
+ - flush
6
+ - limpar contexto
7
+ - resumir
8
+ - economizar tokens
9
+ - reset
10
+ ---
11
+
12
+ # Context Flush (economia)
13
+
14
+ ## Fluxo
15
+ 1) Produzir um resumo curto com:
16
+ - objetivo atual
17
+ - decisões tomadas
18
+ - pendências
19
+ - links/arquivos relevantes
20
+ 2) Propor onde salvar:
21
+ - `.agent/state/MEMORY.md` (por projeto) ou `MEMORY.md` do workspace
22
+ - `.agent/state/mission_control.json` (history)
23
+ 3) Mostrar PLANO: quais arquivos seriam alterados e como.
24
+ 4) Perguntar: "Posso aplicar?"
25
+ 5) Se aprovado, anexar e registrar auditoria.
26
+
27
+ ## Regras
28
+ - Nunca apagar histórico automaticamente.
29
+ - Nunca rodar reset automaticamente.
30
+ - Sempre deixar o usuário decidir.
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: drive-organizer
3
+ description: Organiza arquivos no Google Drive (renomear, mover, criar pastas, padronizar nomenclatura) usando Drive API com OAuth e escopo mínimo.
4
+ triggers:
5
+ - google drive
6
+ - organizar drive
7
+ - renomear arquivos
8
+ - mover para pasta
9
+ - drive
10
+ - arquivos nuvem
11
+ ---
12
+
13
+ # Drive Organizer
14
+
15
+ ## Objetivo
16
+ Organizar, renomear e categorizar arquivos no Google Drive de forma segura e auditável, usando a Drive API com o escopo `drive.file` (mínimo privilégio).
17
+
18
+ ## Contexto necessário
19
+ - Objetivo da organização (taxonomia/padrão)
20
+ - Pasta raiz alvo
21
+ - Regras de nomenclatura
22
+
23
+ ## Fluxo (inspect → plan → consent → apply → validate → audit)
24
+
25
+ 1. **INSPECT** (read-only): Listar arquivos selecionados + simular mudanças
26
+ 2. **PLAN**: Tabela "antes/depois" e quantidade de mudanças previstas
27
+ 3. **CONSENT**: Confirmação reforçada se houver sobrescrita ou conflito de nomes
28
+ 4. **APPLY**: Executar via Drive API + registrar audit (IDs, mudanças, erros)
29
+ 5. **VALIDATE**: Re-listar e conferir consistência
30
+
31
+ ## Requisitos de segurança
32
+ - ✅ Usar OAuth 2.0 (sem senha) — fluxo para apps instalados
33
+ - ✅ Preferir escopo `drive.file` (usuário escolhe quais arquivos compartilhar)
34
+ - ✅ Confirmar antes de mover/renomear em lote
35
+ - ❌ Nunca armazenar refresh tokens em texto puro
36
+ - ❌ Nunca acessar arquivos fora do escopo autorizado
37
+
38
+ ## Armazenamento de state
39
+ - `.agent/state/drive/last_operation.json` — resultado da última operação
40
+ - `.agent/audit/` — log completo com IDs de arquivos e mudanças aplicadas
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: linkedin-optimizer
3
+ description: Ajuda a otimizar perfil e posts para LinkedIn (texto, SEO social, CTA). Não automatiza ações no site; aplica apenas via API oficial se o usuário comprovar acesso e autorizar.
4
+ triggers:
5
+ - linkedin
6
+ - otimizar perfil
7
+ - headline
8
+ - sobre
9
+ - post
10
+ - rede social
11
+ ---
12
+
13
+ # LinkedIn Optimizer
14
+
15
+ ## Objetivo
16
+ Gerar textos otimizados para perfil e posts do LinkedIn, seguindo boas práticas de SEO social e copywriting.
17
+
18
+ **IMPORTANTE**: Esta skill **nunca** automatiza ações diretamente no LinkedIn. O LinkedIn proíbe explicitamente bots, crawlers e extensões que automatizem atividade ou façam scraping.
19
+
20
+ ## Modo de operação
21
+
22
+ ### Human-in-the-loop (padrão recomendado)
23
+ 1. O agente gera rascunhos e checklists
24
+ 2. O usuário aplica manualmente no LinkedIn
25
+ 3. Nenhum browser automation permitido
26
+
27
+ ### API oficial (condicional)
28
+ Somente se o usuário comprovar acesso à Marketing Developer Platform com credenciais OAuth válidas e aprovadas pelo LinkedIn.
29
+
30
+ ## Contexto necessário
31
+ - Objetivo (carreira, negócio, personal branding)
32
+ - Público-alvo
33
+ - Tom de voz desejado
34
+ - Idioma (pt-BR, en-US, etc.)
35
+
36
+ ## Fluxo (inspect → plan → consent → apply → audit)
37
+
38
+ 1. **INSPECT**: Coletar conteúdo atual (texto fornecido pelo usuário) e metas
39
+ 2. **PLAN**: Propor 2 versões (A/B) com rationale e checklist de ajustes
40
+ 3. **CONSENT**: Pedir autorização antes de salvar qualquer rascunho
41
+ 4. **APPLY** (opcional): Salvar rascunho em `.agent/state/linkedin/drafts.md` + audit
42
+ 5. **DONE**: Instruções de publicação manual + tracking (UTM/links)
43
+
44
+ ## Restrições de segurança
45
+ - ❌ Proibido usar Playwright/Puppeteer/Selenium para navegar no LinkedIn
46
+ - ❌ Proibido armazenar credenciais do LinkedIn
47
+ - ✅ Permitido gerar texto otimizado e salvar como rascunho local
48
+ - ✅ Permitido usar API oficial com OAuth se o usuário tiver acesso aprovado
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: mission-control
3
+ description: Orquestra a “Empresa de Agentes” via mission_control.json. Lê estado, cria tarefas, respeita dependências, executa em ticks e registra auditoria.
4
+ triggers:
5
+ - mission control
6
+ - fila
7
+ - tarefas
8
+ - orquestrar
9
+ - equipe
10
+ - sprint
11
+ - tick
12
+ ---
13
+
14
+ # Mission Control
15
+
16
+ ## Onde fica o estado (IDE / opção B)
17
+ - `.agent/state/mission_control.json`
18
+ - outputs em `.agent/state/mission_control/`
19
+
20
+ ## Regras
21
+ - READ-ONLY por padrão.
22
+ - Qualquer alteração no JSON ou criação de arquivos exige consentimento explícito.
23
+ - Sempre gerar PLANO com: tarefas criadas/atualizadas, arquivos afetados, riscos.
24
+
25
+ ## Fluxo (Tick)
26
+ 1) Ler `mission_control.json`.
27
+ 2) Identificar tarefas `pending` cujo `depends_on` esteja resolvido.
28
+ 3) Selecionar até `max_tasks_per_tick` tarefas.
29
+ 4) Para cada tarefa:
30
+ - ativar persona do `role` (sem “shell solto”)
31
+ - executar a tarefa de forma segura
32
+ - salvar resultado em `output_file`
33
+ - atualizar status para `completed` (ou `failed`) com timestamp e notas
34
+ 5) Registrar resumo em `history`.
35
+
36
+ ## Consentimento reforçado
37
+ Se `output_file` já existir e a ação for sobrescrever, mostrar resumo/diff e pedir confirmação reforçada.