Pular para o conteúdo principal

Configuração de Ferramentas

A configuração de ferramentas do PicoClaw fica no campo tools do config.json.

{
"tools": {
"web": { ... },
"mcp": { ... },
"exec": { ... },
"cron": { ... },
"skills": { ... }
}
}

Filtragem de Dados Sensíveis

Antes que os resultados das ferramentas sejam enviados para o LLM, o PicoClaw pode filtrar valores sensíveis (chaves de API, tokens, secrets) da saída. Isso evita que o LLM veja as próprias credenciais.

Veja Sensitive Data Filtering para a documentação completa.

ConfigTipoPadrãoDescrição
filter_sensitive_databooltrueHabilitar/desabilitar a filtragem
filter_min_lengthint8Tamanho mínimo do conteúdo para acionar a filtragem

Ferramentas Web

As ferramentas web são usadas para busca e fetching na web.

No schema de configuração 2, brave, tavily, e perplexity usam api_keys (array). O campo api_key destas em config.json é ignorado.

Web Fetcher

Configurações gerais para buscar e processar o conteúdo de páginas web.

ConfigTipoPadrãoDescrição
enabledbooltrueHabilitar a capacidade de fetching de páginas
fetch_limit_bytesint10485760Tamanho máximo do payload da página a ser buscado, em bytes (padrão: 10MB)
formatstring"plaintext"Formato de saída do conteúdo obtido. Opções: plaintext ou markdown (recomendado)
ConfigTipoPadrãoDescrição
enabledboolfalseHabilitar busca Brave
api_keysstring[]Uma ou mais chaves de API do Brave Search para rotação
max_resultsint5Número máximo de resultados

Obtenha uma chave de API gratuita em brave.com/search/api (2000 consultas gratuitas/mês).

DuckDuckGo

ConfigTipoPadrãoDescrição
enabledbooltrueHabilitar busca DuckDuckGo
max_resultsint5Número máximo de resultados

O DuckDuckGo é habilitado por padrão e não requer chave de API.

O Baidu Search usa a Qianfan AI Search API, que é baseada em IA e otimizada para consultas em chinês.

ConfigTipoPadrãoDescrição
enabledboolfalseHabilitar Baidu Search
api_keystringChave de API do Qianfan
base_urlstringhttps://qianfan.baidubce.com/v2/ai_search/web_searchURL da API do Baidu Search
max_resultsint5Número máximo de resultados
{
"tools": {
"web": {
"baidu_search": {
"enabled": true,
"api_key": "YOUR_BAIDU_QIANFAN_API_KEY",
"max_results": 10
}
}
}
}

Perplexity

ConfigTipoPadrãoDescrição
enabledboolfalseHabilitar busca Perplexity
api_keysstring[]Uma ou mais chaves de API do Perplexity para rotação
max_resultsint5Número máximo de resultados

Tavily

ConfigTipoPadrãoDescrição
enabledboolfalseHabilitar busca Tavily
api_keysstring[]Uma ou mais chaves de API do Tavily para rotação
base_urlstringURL base customizada da API Tavily
max_resultsint5Número máximo de resultados

SearXNG

ConfigTipoPadrãoDescrição
enabledboolfalseHabilitar busca SearXNG
base_urlstringhttp://localhost:8888URL da instância SearXNG
max_resultsint5Número máximo de resultados

GLM (智谱)

ConfigTipoPadrãoDescrição
enabledboolfalseHabilitar GLM Search
api_keystringChave de API do GLM
base_urlstringhttps://open.bigmodel.cn/api/paas/v4/web_searchURL da API do GLM Search
search_enginestringsearch_stdTipo de search engine
max_resultsint5Número máximo de resultados

Proxy Web

Todas as ferramentas web (busca e fetch) podem usar um proxy compartilhado:

ConfigTipoPadrãoDescrição
proxystringURL do proxy para todas as ferramentas web (http, https, socks5)
fetch_limit_bytesint6410485760Máximo de bytes a buscar por URL (padrão 10MB)

Configurações Web Adicionais

ConfigTipoPadrãoDescrição
prefer_nativebooltruePreferir a busca nativa do provedor sobre os search engines configurados
private_host_whiteliststring[][]Hosts privados/internos autorizados para web fetching

Em tempo de execução, a ferramenta web_search aceita os seguintes parâmetros:

CampoTipoObrigatórioDescrição
querystringsimString de consulta de busca
countintegernãoNúmero de resultados a retornar. Padrão: 10, máximo: 10
rangestringnãoFiltro opcional de tempo: d (dia), w (semana), m (mês), y (ano)

Se range for omitido, o PicoClaw executa uma busca sem restrição.

Exemplo de chamada do web_search:

{
"query": "ai agent news",
"count": 10,
"range": "w"
}

Exemplo de Configuração de Ferramentas Web

{
"tools": {
"web": {
"brave": {
"enabled": true,
"api_keys": ["YOUR_BRAVE_API_KEY"],
"max_results": 5
},
"duckduckgo": {
"enabled": true,
"max_results": 5
},
"baidu_search": {
"enabled": false,
"api_key": "YOUR_BAIDU_QIANFAN_API_KEY"
},
"perplexity": {
"enabled": false,
"api_keys": ["pplx-xxx"],
"max_results": 5
},
"proxy": "socks5://127.0.0.1:1080"
}
}
}

Ferramenta Exec

A ferramenta exec executa comandos shell em nome do agente.

ConfigTipoPadrãoDescrição
enabledbooltrueHabilitar a ferramenta exec
enable_deny_patternsbooltrueHabilitar bloqueio padrão de comandos perigosos
custom_deny_patternsarray[]Padrões de negação customizados (expressões regulares)
custom_allow_patternsarray[]Padrões de permissão customizados — comandos correspondentes ignoram as verificações de negação

Desabilitando a Ferramenta Exec

Para desabilitar completamente a ferramenta exec, defina enabled como false:

Via arquivo de configuração:

{
"tools": {
"exec": {
"enabled": false
}
}
}

Via variável de ambiente:

PICOCLAW_TOOLS_EXEC_ENABLED=false

Nota: Quando desabilitada, o agente não conseguirá executar comandos shell. Isso também afeta a capacidade da ferramenta Cron de rodar comandos shell agendados.

Padrões de Comandos Bloqueados por Padrão

Por padrão, o PicoClaw bloqueia estes comandos perigosos:

  • Comandos de exclusão: rm -rf, del /f/q, rmdir /s
  • Operações de disco: format, mkfs, diskpart, dd if=, escrita em dispositivos de bloco (/dev/sd*, /dev/nvme*, /dev/mmcblk*, etc.)
  • Operações de sistema: shutdown, reboot, poweroff
  • Substituição de comandos: $(), ${}, backticks
  • Pipe para shell: | sh, | bash
  • Escalação de privilégios: sudo, chmod, chown
  • Controle de processos: pkill, killall, kill -9
  • Operações remotas: curl | sh, wget | sh, ssh
  • Gerenciamento de pacotes: apt, yum, dnf, npm install -g, pip install --user
  • Containers: docker run, docker exec
  • Git: git push, git force
  • Outros: eval, source *.sh

Padrões de Permissão Customizados

Use custom_allow_patterns para permitir explicitamente comandos que seriam bloqueados pelos padrões de negação:

{
"tools": {
"exec": {
"enable_deny_patterns": true,
"custom_allow_patterns": ["^git push origin main$"]
}
}
}

Limitação Arquitetural Conhecida

O exec guard valida apenas o comando de nível mais alto enviado ao PicoClaw. Ele não inspeciona recursivamente processos filhos criados por build tools ou scripts depois que o comando inicia.

Exemplos de workflows que podem burlar o guard do comando direto uma vez que o comando inicial é permitido:

  • make run
  • go run ./cmd/...
  • cargo run
  • npm run build

Isso significa que o guard é útil para bloquear comandos diretos obviamente perigosos, mas não é um sandbox completo para pipelines de build não revisados. Se o seu modelo de ameaça inclui código não confiável no workspace, use isolamento mais forte como containers, VMs, ou um fluxo de aprovação em torno dos comandos de build-and-run.

Exemplo de Configuração do Exec

{
"tools": {
"exec": {
"enable_deny_patterns": true,
"custom_deny_patterns": ["\\brm\\s+-r\\b", "\\bkillall\\s+python"],
"custom_allow_patterns": []
}
}
}

Ferramenta Cron

A ferramenta cron é usada para agendar tarefas periódicas.

ConfigTipoPadrãoDescrição
enabledbooltrueRegistra a ferramenta cron disponível para o agente
allow_commandbooltruePermite jobs de comando sem confirmação adicional
exec_timeout_minutesint5Timeout de execução em minutos (0 = sem limite)

Para tipos de schedule, modos de execução (deliver, turno de agente, e jobs de comando), persistência, e os gates de segurança de comando atuais, veja Scheduled Tasks and Cron Jobs.

Ferramenta Reaction

A ferramenta reaction adiciona uma reação (emoji) a uma mensagem. Ela é registrada automaticamente e não tem opções de configuração.

ParâmetroTipoObrigatórioDescrição
message_idstringNãoID da mensagem alvo; por padrão, a mensagem recebida atual
channelstringNãoCanal alvo (telegram, whatsapp, etc.)
chat_idstringNãoID do chat/usuário alvo

Quando todos os parâmetros opcionais são omitidos, a ferramenta reage à mensagem recebida atual no canal atual.

MCP (Model Context Protocol)

O PicoClaw suporta servidores MCP para estender as capacidades do agente com ferramentas externas.

Descoberta de Ferramentas (Lazy Loading)

Ao conectar-se a múltiplos servidores MCP, expor centenas de ferramentas simultaneamente pode esgotar a janela de contexto do LLM e aumentar os custos da API. O recurso Discovery resolve isso mantendo as ferramentas MCP ocultas por padrão.

Em vez de carregar todas as ferramentas, o LLM recebe uma ferramenta leve de busca (usando correspondência por palavra-chave BM25 ou Regex). Quando o LLM precisa de uma capacidade específica, ele busca na biblioteca oculta. Ferramentas correspondentes são então temporariamente "desbloqueadas" e injetadas no contexto por um número configurado de turnos (ttl).

Config Global

ConfigTipoPadrãoDescrição
enabledboolfalseHabilita a integração MCP globalmente
discoveryobject{}Configuração do Tool Discovery (veja abaixo)
serversobject{}Mapa de nome do servidor para configuração do servidor

Config do Discovery (discovery)

ConfigTipoPadrãoDescrição
enabledboolfalsePadrão global: se true, todas as ferramentas MCP ficam ocultas e são carregadas sob demanda via busca; se false, todas as ferramentas são carregadas no contexto. Servidores individuais podem sobrescrever isso com o campo deferred por servidor.
ttlint5Número de turnos conversacionais em que uma ferramenta descoberta permanece desbloqueada
max_search_resultsint5Número máximo de ferramentas retornadas por consulta de busca
use_bm25booltrueHabilita a ferramenta de busca por linguagem natural/palavra-chave (tool_search_tool_bm25). Aviso: consome mais recursos que a busca regex
use_regexboolfalseHabilita a ferramenta de busca por padrão regex (tool_search_tool_regex)

Nota: Se discovery.enabled for true, você DEVE habilitar pelo menos um search engine (use_bm25 ou use_regex), caso contrário a aplicação não iniciará.

Config por Servidor

ConfigTipoObrigatórioDescrição
enabledboolsimHabilita este servidor MCP
deferredboolnãoSobrescreve o modo deferred apenas para este servidor. true = ferramentas ocultas e descobertas via busca; false = ferramentas sempre visíveis no contexto. Quando omitido, o valor global de discovery.enabled se aplica.
typestringnãoTipo de transporte: stdio, sse, http
commandstringstdioComando executável para transporte stdio
argsarraynãoArgumentos do comando para transporte stdio
envobjectnãoVariáveis de ambiente para o processo stdio
env_filestringnãoCaminho para arquivo env do processo stdio
urlstringsse/httpURL do endpoint para transporte sse/http
headersobjectnãoHeaders HTTP para transporte sse/http

Comportamento do Transporte

  • Se type for omitido, o transporte é detectado automaticamente:
    • url está definido -> sse
    • command está definido -> stdio
  • http e sse usam ambos url + headers opcional.
  • env e env_file são aplicados apenas a servidores stdio.

As ferramentas MCP são registradas com a convenção de nomenclatura mcp_<server>_<tool> e aparecem junto com as ferramentas nativas.

Exemplos de Configuração MCP

1) Servidor MCP stdio

{
"tools": {
"mcp": {
"enabled": true,
"servers": {
"filesystem": {
"enabled": true,
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/tmp"
]
}
}
}
}
}

2) Servidor MCP remoto SSE/HTTP

{
"tools": {
"mcp": {
"enabled": true,
"servers": {
"remote-mcp": {
"enabled": true,
"type": "sse",
"url": "https://example.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
}
}

3) Setup massivo de MCP com Tool Discovery habilitado

Neste exemplo, o LLM verá apenas a tool_search_tool_bm25. Ele buscará e desbloqueará as ferramentas do Github ou Postgres dinamicamente apenas quando solicitado pelo usuário.

{
"tools": {
"mcp": {
"enabled": true,
"discovery": {
"enabled": true,
"ttl": 5,
"max_search_results": 5,
"use_bm25": true,
"use_regex": false
},
"servers": {
"github": {
"enabled": true,
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "YOUR_GITHUB_TOKEN"
}
},
"postgres": {
"enabled": true,
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://user:password@localhost/dbname"
]
},
"slack": {
"enabled": true,
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "YOUR_SLACK_BOT_TOKEN",
"SLACK_TEAM_ID": "YOUR_SLACK_TEAM_ID"
}
}
}
}
}
}

4) Setup misto: sobrescrita de deferred por servidor

O Discovery está habilitado globalmente, mas filesystem é fixado como sempre visível, enquanto context7 segue o padrão global (deferred). aws escolhe explicitamente o modo deferred, mesmo sendo o mesmo que o padrão global.

{
"tools": {
"mcp": {
"enabled": true,
"discovery": {
"enabled": true,
"ttl": 5,
"max_search_results": 5,
"use_bm25": true
},
"servers": {
"filesystem": {
"enabled": true,
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
"deferred": false
},
"context7": {
"enabled": true,
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"]
},
"aws": {
"enabled": true,
"command": "npx",
"args": ["-y", "aws-mcp-server"],
"deferred": true
}
}
}
}
}

Dica: deferred por servidor é independente de discovery.enabled. Você pode manter discovery.enabled: false globalmente (todas as ferramentas visíveis por padrão) e ainda marcar servidores específicos de alto volume como "deferred": true para evitar poluir o contexto com as ferramentas deles.

Ferramentas de Arquivo

Read File

A ferramenta read_file lê arquivos do workspace. Ela suporta dois modos:

ConfigTipoPadrãoDescrição
enabledbooltrueHabilita a ferramenta read_file
modestring"bytes"Modo de leitura: "bytes" (slicing por offset/length) ou "lines" (slicing baseado em número de linha)
max_read_file_sizeint0Tamanho máximo do arquivo em bytes que a ferramenta lerá (0 = limite padrão)
{
"tools": {
"read_file": {
"enabled": true,
"mode": "bytes"
}
}
}

No modo "bytes", o agente especifica offsets de bytes; no modo "lines", ele especifica números de linha. Escolha "lines" ao trabalhar com código-fonte em que o agente navega frequentemente por referência de linha.

Load Image

A ferramenta load_image carrega um arquivo de imagem local no contexto do agente para que modelos com capacidade de visão possam analisá-lo. Formatos suportados: JPEG, PNG, GIF, WebP, BMP.

ConfigTipoPadrãoDescrição
enabledbooltrueHabilita a ferramenta load_image
{
"tools": {
"load_image": {
"enabled": true
}
}
}

A ferramenta retorna uma referência media:// que o loop do agente resolve para uma imagem codificada em base64 na próxima requisição do LLM. Isso é distinto de send_file (que envia o arquivo para o usuário); load_image torna a imagem visível para o LLM.

Send TTS

A ferramenta send_tts converte texto em fala e envia o áudio para o chat atual. Ela requer um modelo TTS configurado em voice.tts_model_name.

ConfigTipoPadrãoDescrição
enabledboolfalseHabilita a ferramenta send_tts
{
"tools": {
"send_tts": {
"enabled": true
}
}
}

Ferramenta Skills

A ferramenta skills gerencia a descoberta e instalação de skills via registries como o ClawHub.

Registries

ConfigTipoPadrãoDescrição
registries.clawhub.enabledbooltrueHabilitar registry ClawHub
registries.clawhub.base_urlstringhttps://clawhub.aiURL base do ClawHub
registries.clawhub.auth_tokenstring""Token Bearer opcional para rate limits mais altos
registries.clawhub.search_pathstring""Caminho da API de busca
registries.clawhub.skills_pathstring""Caminho da API de skills
registries.clawhub.download_pathstring""Caminho da API de download
registries.clawhub.timeoutint0Timeout de requisição em segundos (0 = padrão)
registries.clawhub.max_zip_sizeint0Tamanho máximo do zip de skill em bytes (0 = padrão)
registries.clawhub.max_response_sizeint0Tamanho máximo da resposta da API em bytes (0 = padrão)

Integração com GitHub

ConfigTipoPadrãoDescrição
github.proxystring""Proxy HTTP para requisições da API do GitHub
github.tokenstring""Personal access token do GitHub

Configurações de Busca

ConfigTipoPadrãoDescrição
max_concurrent_searchesint2Número máximo de requisições concorrentes de busca de skills
search_cache.max_sizeint50Número máximo de resultados de busca em cache
search_cache.ttl_secondsint300TTL do cache em segundos

Exemplo de Configuração de Skills

{
"tools": {
"skills": {
"registries": {
"clawhub": {
"enabled": true,
"base_url": "https://clawhub.ai",
"auth_token": ""
}
},
"github": {
"proxy": "",
"token": ""
},
"max_concurrent_searches": 2,
"search_cache": {
"max_size": 50,
"ttl_seconds": 300
}
}
}
}

Variáveis de Ambiente

Todas as opções de configuração podem ser sobrescritas por variáveis de ambiente no formato PICOCLAW_TOOLS_<SEÇÃO>_<CHAVE>:

  • PICOCLAW_TOOLS_WEB_BRAVE_ENABLED=true
  • PICOCLAW_TOOLS_EXEC_ENABLED=false
  • PICOCLAW_TOOLS_EXEC_ENABLE_DENY_PATTERNS=false
  • PICOCLAW_TOOLS_CRON_EXEC_TIMEOUT_MINUTES=10
  • PICOCLAW_TOOLS_MCP_ENABLED=true

Nota: Configurações de mapa aninhadas (por exemplo tools.mcp.servers.<name>.*) devem ser feitas no config.json, não por variáveis de ambiente.