# TOOLS.md - Local Notes Skills define _how_ tools work. This file is for _your_ specifics — the stuff that's unique to your setup. ## What Goes Here Things like: - Camera names and locations - SSH hosts and aliases - Preferred voices for TTS - Speaker/room names - Device nicknames - Anything environment-specific ## Examples ```markdown ### Cameras - living-room → Main area, 180° wide angle - front-door → Entrance, motion-triggered ### SSH - home-server → 192.168.1.100, user: admin ### TTS - Preferred voice: "Nova" (warm, slightly British) - Default speaker: Kitchen HomePod ``` ## Why Separate? Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure. --- Add whatever helps you do your job. This is your cheat sheet. ## Related - [Agent workspace](/concepts/agent-workspace) ## Tech Stack — Skills Instaladas (2026-05-19) | Skill | Versão | Uso | |-------|--------|-----| | agent-browser-clawdbot | 0.1.0 | Automação de browser headless com accessibility tree | | multi-search-engine-2-0-1 | 1.0.0 | Busca em 17 motores (8 CN + 9 Global) | | redis-labs-integration | 1.0.2 | Redis Labs via API | | self-improvement | 1.0.0 | Log de erros e aprendizados (self-improvement) | | nova-self-improver | 1.0.0 | Sistema de auto-melhoria completo (4 camadas) | | vision | 3.5.0 | Processamento de imagens, resize, watermark | | **typescript** | **1.0.2** | **TS seguro: genéricos, narrowing, strict mode, satisfies, utility types, declarations** | | **e2e-testing-patterns** | **1.0.0** | **Playwright/Cypress — pirâmide de testes, seletor estável, testes determinísticos** | | **xcloud-docker-deploy** | **1.2.1** | **Deploy Docker multi-stack (PHP, Python, Node, NextJS, Laravel, Go, Rust) + GitHub Actions** | | **openclaw-config** | **0.1.0** | **Edição segura do openclaw.json via config.schema, $include modular, validação strict** | | **openclaw-power-ops** | **1.0.0** | **CLI OpenClaw completo: channels, agents, models, security audit, gateway admin** | | **gitea-api** | **1.0.0** | **API Gitea: autenticação, tokens, repos, issues, webhooks — 5 métodos de auth** | ## Clawhub CLI — caminho do binário - **Caminho completo:** `/var/lib/openclaw/tools/node/npm/bin/clawhub` - **NÃO está no PATH global** — sempre usar caminho absoluto - Comandos: `search`, `install`, `inspect`, `explore`, `update`, `list` - Licença dos skills: MIT-0 (free, sem atribuição obrigatória) ### Quick Install ```bash /var/lib/openclaw/tools/node/npm/bin/clawhub install --workdir /root/.openclaw/workspace --dir skills ``` --- ## 🖥️ Browser Automation — agent-browser (headless Chromium) CLI baseado em Chromium com **snapshot → @refs → interação**. Ref lifecycle: refs são invalidados após navegação/DOM change — sempre re-snapshotar. ### Fluxo padrão ```bash # 1. Navegar agent-browser open https://exemplo.com # 2. Snapshot (descobre elementos interativos com @refs) agent-browser snapshot -i # output: @e1 [input type="email"], @e2 [input type="password"], @e3 [button] "Submit" # 3. Interagir agent-browser fill @e1 "user@exemplo.com" agent-browser fill @e2 "senha123" agent-browser click @e3 agent-browser wait --load networkidle # 4. Re-snapshot (sempre após mudança de DOM) agent-browser snapshot -i ``` ### Login + persistência de sessão ```bash agent-browser open https://app.exemplo.com/login agent-browser fill @e1 "$USER" && agent-browser fill @e2 "$PASS" agent-browser click @e3 agent-browser wait --url "**/dashboard" agent-browser state save ~/auth.json # salva cookies/login # Reutilizar: agent-browser state load ~/auth.json agent-browser open https://app.exemplo.com/dashboard ``` ### Extrair dados + print ```bash agent-browser get text body > page.txt agent-browser get text @e5 agent-browser screenshot paginateste.png agent-browser screenshot --full # página inteira agent-browser pdf relatorio.pdf ``` ### Sessões paralelas ```bash agent-browser --session site1 open https://site-a.com agent-browser --session site2 open https://site-b.com agent-browser session list ``` ### Segurança (ambiente) ```bash export AGENT_BROWSER_ALLOWED_DOMAINS="exemplo.com" # domínios permitidos export AGENT_BROWSER_MAX_OUTPUT=50000 # limite de saída export AGENT_BROWSER_CONTENT_BOUNDARIES=1 # segurança AI ``` --- ## 🔒 Security Audit — skill-security-audit **Princípio**: análise **read-only**. Use APENAS quando o usuário explicitamente pedir análise de segurança. ### Severidade | Nível | Impacto | |-------|---------| | Critical | RCE, exfiltração de dados, instruction override | | High | Leitura/modificação de dados sensíveis, bypass de ACL | | Medium | Dados limitados, engano de usuário | | Low | Impacto mínimo | ### Categorias de vulnerabilidade - **Hardcoded Secrets** — `API_KEY`, `PASSWORD`, credenciais em código - **Injection** — SQLi, XSS, Command Injection, SSRF - **Access Control** — IDOR, missing function-level AC - **LLM/Prompt Safety** — injection, output injection, execução arbitrária - **Privacidade** — vazamento de PII para logs/APIs externas ### Skill & SKILL.md review checklist - ✓ Sem `instruction override` (ex: "Ignore previous instructions...") - ✓ Sem exfiltração de dados (enviar dados para URL externa) - ✓ Sem falsas claims de privilégio - ✓ Sem conteúdo escondido (base64, zero-width chars) - ✓ Tool usage seguro (sem `eval(user_input)`, sem writes em `/etc/*`) - ✓ Sem engano (não dizer que é humano) - ✓ Scoped ao propósito declarado --- ## 🗄️ Banco de Dados — SQL (PostgreSQL / MySQL / SQLite) ### Comandos essenciais ```bash # SQLite (setup rápido) sqlite3 arquivo.db # modo interativo sqlite3 arquivo.db -header -column # com cabeçalhos sqlite3 arquivo.db "SELECT * FROM t LIMIT 5;" # one-liner sqlite3 arquivo.db ".tables" # listar tabelas sqlite3 arquivo.db ".schema t" # ver estrutura sqlite3 arquivo.db ".import dados.csv t" # importar CSV # PostgreSQL psql "postgresql://user:pass@host:5432/db?sslmode=require" psql -h host -U user -d db -c "SELECT NOW();" psql -h host -U user -d db -f migration.sql # MySQL mysql -h host -u user -p db mysql -h host -u user -p db < script.sql ``` ### Padrões recomendados - `UUID` PRIMARY KEY para sistemas distribuídos - CHECK constraints para valores válidos - JSONB + GIN index no PostgreSQL para dados semi-estruturados - Partial indexes para reduzir tamanho - Triggers para auto-update de `updated_at` ### Otimização - `EXPLAIN ANALYZE` antes de otimizar query - Medir antes e depois de cada index - Evitar SELECT * em produção --- ## 📁 File Management + Analysis ### file (organização digital) - **Organização por contexto**: busca por tipo de arquivo, projeto, data - **Naming conventions**: data + nome específico + versão (`YYYY-MM-DD_doc_v2.pdf`) - **Estrutura de pastas**: não movo nada sem você aprovar primeiro ### file-summary (análise de documentos) Suporte a extração e resumo de múltiplos formatos: - **Entrada**: `.txt`, `.docx`, `.pdf`, `.xlsx`, `.xls` - **Trigger**: "ajude a resumir [arquivo]", "analise [documento]" - **Output**: resumo estruturado em português/inglês --- ## 🧠 Sistema de Memória — Gitea Roberto/pulse-* (2026-05-20) Repositórios que o agent Pulse usa como memória persistente de curto e longo prazo. ### 4 repositórios ativos | Repo | Propósito | |------|-----------| | `pulse-memory` | Memórias diárias + LEARNINGS + ERRORS + PATTERN_COUNTER — o cérebro do agente | | `pulse-skills` | Skills organizadas por domínio (devops / testing / frontend / backend / ai / infra) | | `pulse-docs` | Guias, runbooks, architecture docs, ADRs | | `pulse-projects` | Rastreador de projetos (`pulse-libs/`, `infra/`, `past/`, `waits/`) | ### Credenciais Gitea - **Domínio**: `https://git.octal.tec.br` - **Usuário**: `Roberto` (`betotn91@gmail.com`) - **Token API**: `d7378a3d0b7fd38050c4bce6accfd28086b6174c` — scopes=all, nome=pulse-agent-token - **Admin stack**: `octal` — senha gerenciada por `gitea admin user change-password` - **SSH**: `ssh-ed25519` em `~/.ssh/id_ed25519_gitea` ### Política de commit - Fim de cada sessão: `memory/` e `context/` são commitados para `pulse-memory` - Instalação/remoção de skill: commit de `skills/` → `pulse-skills` - Novo projeto: commit → `pulse-projects` - Cadência: **1 push por sessão** (não commit a cada passo)