Gateway
Ferramentas invocam a API
O Gateway do OpenClaw expõe um endpoint HTTP para invocar diretamente uma única ferramenta. Ele está sempre habilitado e usa a autenticação do Gateway juntamente com a política de ferramentas. Assim como na interface compatível com OpenAI /v1/*, a autenticação bearer por segredo compartilhado é tratada como acesso confiável de operador a todo o Gateway.
POST /tools/invoke- Mesma porta que o Gateway (multiplexação de WS + HTTP):
http://<gateway-host>:<port>/tools/invoke - Tamanho máximo padrão do corpo da solicitação: 2 MB
Autenticação
Usa a configuração de autenticação do Gateway.
Caminhos comuns de autenticação HTTP:
- autenticação por segredo compartilhado (
gateway.auth.mode="token"ou"password"):Authorization: Bearer <token-or-password> - autenticação HTTP confiável com identidade (
gateway.auth.mode="trusted-proxy"): encaminhe pelo proxy configurado com reconhecimento de identidade e permita que ele injete os cabeçalhos de identidade necessários - autenticação aberta em entrada privada (
gateway.auth.mode="none"): nenhum cabeçalho de autenticação é necessário
Observações:
mode="token"usagateway.auth.token(ouOPENCLAW_GATEWAY_TOKEN).mode="password"usagateway.auth.password(ouOPENCLAW_GATEWAY_PASSWORD).mode="trusted-proxy"exige que a solicitação HTTP venha de uma origem de proxy confiável configurada; proxies local loopback no mesmo host exigemgateway.auth.trustedProxy.allowLoopback = trueexplicitamente.- Chamadores internos no mesmo host que contornam o proxy podem usar
gateway.auth.password/OPENCLAW_GATEWAY_PASSWORDcomo alternativa direta local. Qualquer evidência dos cabeçalhosForwarded,X-Forwarded-*ouX-Real-IPmantém a solicitação no caminho do proxy confiável. - Se
gateway.auth.rateLimitestiver configurado e ocorrerem muitas falhas de autenticação, o endpoint retornará429comRetry-After.
Limite de segurança (importante)
Trate este endpoint como uma interface de acesso total de operador para a instância do Gateway.
- A autenticação bearer HTTP aqui não é um modelo de escopo restrito por usuário.
- Um token/senha válido do Gateway para este endpoint deve ser tratado como uma credencial de proprietário/operador.
- Nos modos de autenticação por segredo compartilhado (
tokenepassword), o endpoint restaura os padrões normais de operador com acesso total, mesmo que o chamador envie um cabeçalhox-openclaw-scopesmais restrito. - A autenticação por segredo compartilhado também trata invocações diretas de ferramentas neste endpoint como turnos enviados pelo proprietário.
- Os modos HTTP confiáveis com identidade (autenticação por proxy confiável ou
gateway.auth.mode="none"em uma entrada privada) respeitamx-openclaw-scopesquando presente e, caso contrário, recorrem ao conjunto normal de escopos padrão do operador. - Mantenha este endpoint apenas em local loopback, tailnet ou entrada privada; não o exponha diretamente à internet pública.
Matriz de autenticação:
| Modo de autenticação | Comportamento |
|---|---|
token ou password + Authorization: Bearer ... |
Comprova a posse do segredo compartilhado de operador do Gateway. Ignora valores mais restritos de x-openclaw-scopes. Restaura o conjunto completo de escopos padrão do operador: operator.admin, operator.approvals, operator.pairing, operator.read, operator.talk.secrets, operator.write. Trata invocações diretas de ferramentas como turnos enviados pelo proprietário. |
HTTP confiável com identidade (autenticação por proxy confiável ou mode="none" em entrada privada) |
Autentica uma identidade confiável externa ou um limite de implantação. Respeita x-openclaw-scopes quando presente. Recorre ao conjunto normal de escopos padrão do operador quando o cabeçalho está ausente. Só perde a semântica de proprietário quando o chamador restringe explicitamente os escopos e omite operator.admin. |
Corpo da solicitação
{ "tool": "sessions_list", "action": "json", "args": {}, "sessionKey": "main", "dryRun": false}Campos:
tool/name(string, obrigatório): nome da ferramenta a ser invocada.nametem precedência se ambos forem enviados.action(string, opcional): incorporado aargs.actionse o esquema da ferramenta aceitar uma propriedadeactioneargsainda não tiver definido uma.args(objeto, opcional): argumentos específicos da ferramenta.sessionKey(string, opcional): chave da sessão de destino. Se for omitida ou for"main", o Gateway usará a chave configurada da sessão principal (respeitasession.mainKeye o agente padrão, ouglobalno escopo de sessão global).agentId(string, opcional): resolve a chave de sessão desse agente. Retorna erro400se houver conflito com umsessionKeyexplícito que já esteja associado a outro agente.idempotencyKey(string, opcional): usado para derivar um ID estável de chamada de ferramenta para a invocação.dryRun(booleano, opcional): reservado para uso futuro; atualmente ignorado.
Comportamento de política e roteamento
A disponibilidade das ferramentas é filtrada pela mesma cadeia de políticas usada pelos agentes do Gateway:
tools.profile/tools.byProvider.profiletools.allow/tools.byProvider.allowagents.<id>.tools.allow/agents.<id>.tools.byProvider.allow- políticas de grupo (se a chave da sessão estiver associada a um grupo ou canal)
- política de subagente (ao invocar com a chave de sessão de um subagente)
Se uma ferramenta não for permitida pela política, o endpoint retornará 404.
Observações importantes sobre os limites:
- As aprovações de execução são proteções operacionais, não um limite de autorização separado para este endpoint HTTP. Se uma ferramenta estiver acessível aqui por meio da autenticação do Gateway e da política de ferramentas,
/tools/invokenão adicionará uma solicitação extra de aprovação por chamada. - Se
execestiver acessível aqui, trate-o como uma interface de shell com capacidade de alteração. Negarwrite,edit,apply_patchou ferramentas HTTP de gravação no sistema de arquivos não torna a execução do shell somente leitura. - Não compartilhe credenciais bearer do Gateway com chamadores não confiáveis. Se precisar separar limites de confiança, execute gateways distintos (idealmente sob usuários ou hosts distintos do sistema operacional).
O HTTP do Gateway também aplica por padrão uma lista rígida de bloqueio (mesmo que a política da sessão permita a ferramenta):
| Ferramenta | Motivo |
|---|---|
exec |
Execução direta de comandos (interface de RCE) |
spawn |
Criação arbitrária de processos filhos (interface de RCE) |
shell |
Execução de comandos de shell (interface de RCE) |
fs_write |
Alteração arbitrária de arquivos no host |
fs_delete |
Exclusão arbitrária de arquivos no host |
fs_move |
Movimentação/renomeação arbitrária de arquivos no host |
apply_patch |
A aplicação de patches pode reescrever arquivos arbitrários |
sessions_spawn |
Orquestração de sessões; iniciar agentes remotamente constitui RCE |
sessions_send |
Injeção de mensagens entre sessões |
cron |
Plano de controle de automação persistente |
gateway |
Plano de controle do Gateway; impede a reconfiguração por HTTP |
nodes |
O retransmissor de comandos do Node pode acessar system.run em hosts pareados |
cron, gateway e nodes também são exclusivos do proprietário: mesmo fora dessa lista de bloqueio padrão, chamadores que não sejam proprietários não podem invocá-los por esta interface.
Personalize a lista geral de bloqueio por meio de gateway.tools:
{ gateway: { tools: { // Additional tools to block over HTTP /tools/invoke deny: ["browser"], // Remove tools from the default deny list for owner/admin callers allow: ["gateway"], }, },}gateway.tools.allow é uma substituição de exposição, não uma elevação de escopo. Nos modos HTTP com identidade, cron, gateway e nodes permanecem indisponíveis para chamadores sem identidade de proprietário/administrador (operator.admin), mesmo quando incluídos em gateway.tools.allow. A autenticação bearer por segredo compartilhado continua seguindo a regra de operador totalmente confiável descrita acima.
Para ajudar as políticas de grupo a resolver o contexto, você pode definir opcionalmente:
x-openclaw-message-channel: <channel>(exemplo:slack,telegram)x-openclaw-account-id: <accountId>(quando existem várias contas)x-openclaw-message-to: <target>(destino de entrega para a política da ferramenta de mensagens)x-openclaw-thread-id: <threadId>(contexto da thread para a política da ferramenta de mensagens)
Respostas
| Status | Significado |
|---|---|
200 |
{ ok: true, result } |
400 |
{ ok: false, error: { type, message } } (solicitação inválida ou erro na entrada da ferramenta) |
401 |
Não autorizado |
403 |
{ ok: false, error: { type, message, requiresApproval? } } (chamada de ferramenta bloqueada pela política) |
404 |
Ferramenta indisponível (não encontrada ou não incluída na lista de permissões) |
405 |
Método não permitido |
408 |
Tempo limite excedido durante a leitura do corpo da solicitação |
413 |
O corpo da solicitação excedeu o tamanho máximo da carga útil |
429 |
Autenticação limitada por taxa (Retry-After definido) |
500 |
{ ok: false, error: { type, message } } (erro inesperado na execução da ferramenta; mensagem sanitizada) |
Exemplo
curl -sS http://127.0.0.1:18789/tools/invoke \ -H 'Authorization: Bearer secret' \ -H 'Content-Type: application/json' \ -d '{ "tool": "sessions_list", "action": "json", "args": {} }'