Pular para o conteúdo principal

Referência Completa da Configuração

Exemplo completo e anotado do config.json. Copie a partir de config/config.example.json no repositório.

"version": 2 aqui significa versão 2 do schema de configuração, não uma versão de release do produto.

Para o gerenciamento diário de modelos, recomenda-se a Web UI. Use edição manual do JSON para templates de automação e fluxos de deployment avançados.

Web UI Model Setup

{
"version": 2,

"agents": {
"defaults": {
"workspace": "~/.picoclaw/workspace",
"restrict_to_workspace": true,
"model_name": "gpt-5.4",
"max_tokens": 32768,
"max_tool_iterations": 50
}
},

"model_list": [
{
"model_name": "ark-code-latest",
"model": "volcengine/ark-code-latest",
"api_keys": ["sk-your-volcengine-key"]
},
{
"model_name": "gpt-5.4",
"model": "openai/gpt-5.4",
"api_keys": ["sk-your-openai-key"],
"api_base": "https://api.openai.com/v1"
},
{
"model_name": "claude-sonnet-4.6",
"model": "anthropic/claude-sonnet-4.6",
"api_keys": ["sk-ant-your-key"],
"api_base": "https://api.anthropic.com/v1"
},
{
"model_name": "gemini",
"model": "antigravity/gemini-2.0-flash",
"auth_method": "oauth"
},
{
"model_name": "deepseek",
"model": "deepseek/deepseek-chat",
"api_keys": ["sk-your-deepseek-key"]
},
{
"model_name": "loadbalanced-gpt-5.4",
"model": "openai/gpt-5.4",
"api_keys": ["sk-key1"],
"api_base": "https://api1.example.com/v1"
},
{
"model_name": "loadbalanced-gpt-5.4",
"model": "openai/gpt-5.4",
"api_keys": ["sk-key2"],
"api_base": "https://api2.example.com/v1"
}
],

"channels": {
"telegram": {
"enabled": false,
"token": "YOUR_TELEGRAM_BOT_TOKEN",
"base_url": "",
"proxy": "",
"allow_from": ["YOUR_USER_ID"],
"reasoning_channel_id": ""
},
"discord": {
"enabled": false,
"token": "YOUR_DISCORD_BOT_TOKEN",
"proxy": "",
"allow_from": [],
"group_trigger": {
"mention_only": false
},
"reasoning_channel_id": ""
},
"qq": {
"enabled": false,
"app_id": "YOUR_QQ_APP_ID",
"app_secret": "YOUR_QQ_APP_SECRET",
"allow_from": [],
"reasoning_channel_id": ""
},
"maixcam": {
"enabled": false,
"host": "0.0.0.0",
"port": 18790,
"allow_from": [],
"reasoning_channel_id": ""
},
"whatsapp": {
"enabled": false,
"bridge_url": "ws://localhost:3001",
"use_native": false,
"session_store_path": "",
"allow_from": [],
"group_trigger": {
"mention_only": false,
"prefixes": []
},
"reasoning_channel_id": ""
},
"feishu": {
"enabled": false,
"app_id": "",
"app_secret": "",
"encrypt_key": "",
"verification_token": "",
"allow_from": [],
"reasoning_channel_id": ""
},
"dingtalk": {
"enabled": false,
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"allow_from": [],
"reasoning_channel_id": ""
},
"slack": {
"enabled": false,
"bot_token": "xoxb-YOUR-BOT-TOKEN",
"app_token": "xapp-YOUR-APP-TOKEN",
"allow_from": [],
"reasoning_channel_id": ""
},
"line": {
"enabled": false,
"channel_secret": "YOUR_LINE_CHANNEL_SECRET",
"channel_access_token": "YOUR_LINE_CHANNEL_ACCESS_TOKEN",
"webhook_path": "/webhook/line",
"allow_from": [],
"reasoning_channel_id": ""
},
"onebot": {
"enabled": false,
"ws_url": "ws://127.0.0.1:3001",
"access_token": "",
"reconnect_interval": 5,
"group_trigger_prefix": [],
"allow_from": [],
"reasoning_channel_id": ""
},
"wecom": {
"enabled": false,
"bot_id": "YOUR_BOT_ID",
"secret": "YOUR_SECRET",
"websocket_url": "wss://openws.work.weixin.qq.com",
"send_thinking_message": true,
"allow_from": [],
"reasoning_channel_id": ""
},
"matrix": {
"enabled": false,
"homeserver": "https://matrix.org",
"user_id": "@your-bot:matrix.org",
"access_token": "YOUR_MATRIX_ACCESS_TOKEN",
"device_id": "",
"join_on_invite": true,
"allow_from": [],
"group_trigger": {
"mention_only": true
},
"placeholder": {
"enabled": true,
"text": "Thinking..."
},
"reasoning_channel_id": ""
}
},

"tools": {
"web": {
"brave": {
"enabled": false,
"api_keys": ["YOUR_BRAVE_API_KEY"],
"max_results": 5
},
"duckduckgo": {
"enabled": true,
"max_results": 5
},
"perplexity": {
"enabled": false,
"api_keys": ["pplx-xxx"],
"max_results": 5
},
"proxy": ""
},
"mcp": {
"enabled": false,
"servers": {
"context7": {
"enabled": false,
"type": "http",
"url": "https://mcp.context7.com/mcp"
},
"filesystem": {
"enabled": false,
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
},
"github": {
"enabled": false,
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "YOUR_TOKEN" }
}
}
},
"cron": {
"exec_timeout_minutes": 5
},
"exec": {
"enable_deny_patterns": true,
"custom_deny_patterns": [],
"custom_allow_patterns": []
},
"skills": {
"registries": {
"clawhub": {
"enabled": true,
"base_url": "https://clawhub.ai",
"search_path": "/api/v1/search",
"skills_path": "/api/v1/skills",
"download_path": "/api/v1/download"
}
}
}
},

"heartbeat": {
"enabled": true,
"interval": 30
},

"devices": {
"enabled": false,
"monitor_usb": true
},

"gateway": {
"host": "127.0.0.1",
"port": 18790,
"log_level": "warn"
}
}

Referência de Campos

version

CampoTipoPadrãoDescrição
versionint0Versão do schema de configuração. A versão atual é 2. Novas configurações devem definir isso como 2.

agents.defaults

CampoTipoPadrãoDescrição
workspacestring~/.picoclaw/workspaceDiretório de trabalho do agente (respeita PICOCLAW_HOME)
restrict_to_workspacebooltrueRestringe acesso a arquivos/comandos ao workspace
allow_read_outside_workspaceboolfalsePermite leitura de arquivos fora do workspace (quando restrict_to_workspace está ativo)
model_namestringNome do modelo padrão (deve corresponder a uma entrada em model_list)
modelstringDescontinuado: use model_name no lugar
model_fallbacksarray[]Nomes de modelos de fallback testados em ordem se o primário falhar
max_tokensint32768Máximo de tokens por resposta
temperaturefloatTemperatura do LLM (omita para usar o padrão do provedor)
max_tool_iterationsint50Máximo de iterações de chamadas de ferramentas por requisição
max_media_sizeint20971520Tamanho máximo de arquivo de mídia em bytes (padrão 20MB)
image_modelstringNome do modelo para geração de imagens
image_model_fallbacksarray[]Modelos de fallback para imagens
routingobjectConfigurações de roteamento inteligente de modelos (veja abaixo)

routing

CampoTipoPadrãoDescrição
enabledboolfalseHabilitar roteamento inteligente de modelos
light_modelstringNome do modelo (do model_list) a ser usado para tarefas simples
thresholdfloatScore de complexidade no intervalo [0,1]; mensagens com score >= threshold usam o modelo primário, abaixo usam o light_model

Quando habilitado, o PicoClaw pontua cada mensagem recebida com base em características estruturais (tamanho, blocos de código, histórico de chamadas de ferramentas, profundidade da conversa, anexos) e roteia mensagens simples para um modelo mais leve/barato.

model_list[]

CampoTipoObrigatórioDescrição
model_namestringSimAlias usado em agents.defaults.model_name
modelstringSimFormato vendor/model-id. O prefixo vendor/ é usado apenas para resolução de protocolo/API base e não é enviado ao upstream como está.
api_keysarrayDependeChaves de autenticação da API (array; suporta múltiplas chaves para load balancing). Obrigatório para provedores baseados em HTTP, a menos que api_base aponte para um servidor local.
api_basestringNãoSobrescreve a URL base da API padrão
enabledboolNãoIndica se esta entrada de modelo está ativa. Durante a migração, o padrão é true para modelos com chaves de API ou nomeados local-model. Defina como false para desabilitar um modelo sem remover sua configuração.
auth_methodstringNãoMétodo de autenticação (ex.: oauth)
proxystringNãoProxy HTTP/SOCKS para este modelo
request_timeoutintNãoTimeout de requisição em segundos; <=0 usa o padrão de 120s
rpmintNãoLimite de taxa (requisições por minuto)
max_tokens_fieldstringNãoSobrescreve o nome do campo de max tokens nas requisições da API
connect_modestringNãoSobrescrita do modo de conexão
workspacestringNãoSobrescrita de workspace por modelo
thinking_levelstringNãoNível de extended thinking: off, low, medium, high, xhigh, ou adaptive
fallbacksarrayNãoNomes de modelos de fallback para failover
extra_bodyobjectNãoCampos adicionais a injetar no corpo da requisição da API
custom_headersobjectNãoCabeçalhos HTTP adicionais a injetar em toda requisição a este provider (apenas providers baseados em HTTP)
Comportamento de API Key no Schema V2

Na versão V2 do schema de configuração, model_list[].api_key em config.json é ignorado. Use api_keys e prefira armazenar credenciais reais em .security.yml. Durante a migração de V0/V1, os campos legados api_key e api_keys são mesclados automaticamente em api_keys. As chaves de API podem usar formatos SecureString: texto puro, enc://<base64>, ou file://<path>. Consulte Credential Encryption.

gateway

CampoTipoPadrãoDescrição
hoststring127.0.0.1Host de escuta do gateway
portint18790Porta de escuta do gateway
log_levelstringwarnVerbosidade do log: debug, info, warn, error, fatal. Também pode ser definido via variável de ambiente PICOCLAW_LOG_LEVEL.
hot_reloadboolfalseHabilita hot-reload de mudanças na configuração

Defina host: "0.0.0.0" para tornar o gateway acessível a partir de outros dispositivos.

Campos Comuns de Canais

Todos os canais suportam estes campos:

CampoTipoDescrição
enabledboolHabilitar/desabilitar o canal
allow_fromarrayIDs de usuários autorizados a usar o bot (vazio = permitir todos)
reasoning_channel_idstringCanal/chat dedicado para rotear saída de raciocínio
group_triggerobjectConfigurações de gatilho para chats em grupo (veja abaixo)
placeholderobjectConfigurações de mensagem de placeholder (veja abaixo)
typingobjectConfigurações do indicador de digitação (veja abaixo)

group_trigger

CampoTipoDescrição
mention_onlyboolResponder apenas quando mencionado com @ em grupos
prefixesarrayPrefixos de palavras-chave que acionam o bot em grupos

placeholder

CampoTipoDescrição
enabledboolHabilitar mensagens de placeholder
textstringTexto de placeholder exibido durante o processamento (ex.: "Thinking...")

Suportado por: Feishu, Slack, Matrix.

typing

CampoTipoDescrição
enabledboolMostrar indicador de digitação durante o processamento

Suportado por: Slack, Matrix.

Configuração de Segurança

Arquivo .security.yml

O PicoClaw suporta um arquivo dedicado .security.yml para credenciais sensíveis (chaves de API, tokens, secrets). Ele é carregado a partir do mesmo diretório do config.json ativo (incluindo caminhos customizados definidos por PICOCLAW_CONFIG).

Ordem de Prioridade das Chaves

Ao resolver credenciais, o PicoClaw aplica os valores nesta ordem:

  1. Variáveis de ambiente: Prioridade mais alta (env.Parse roda após o carregamento dos arquivos)
  2. .security.yml: Sobrescreve valores do mesmo caminho em config.json
  3. config.json: Valores base

Para model_list no schema V2, o api_key em config.json é ignorado; use .security.yml + api_keys.

Para os caminhos campo a campo do .security.yml, regras de mapeamento e exemplos completos, consulte .security.yml Reference.