Ferramentas de Sessão
Objetivo: conjunto de ferramentas pequeno e difícil de usar incorretamente para que agentes possam listar sessões, buscar histórico e enviar mensagens para outra sessão.Nomes das Ferramentas
sessions_listsessions_historysessions_sendsessions_spawn
Modelo de Chaves
- O bucket principal de chat direto é sempre a chave literal
"main"(resolvida para a chave principal do agente atual). - Chats em grupo usam
agent:<agentId>:<channel>:group:<id>ouagent:<agentId>:<channel>:channel:<id>(passe a chave completa). - Jobs de cron usam
cron:<job.id>. - Hooks usam
hook:<uuid>a menos que seja explicitamente definido. - Sessões de node usam
node-<nodeId>a menos que seja explicitamente definido.
global e unknown são valores reservados e nunca são listados. Se session.scope = "global", fazemos alias para main em todas as ferramentas para que os chamadores nunca vejam global.
sessions_list
Lista sessões como um array de linhas. Parâmetros:- filtro
kinds?: string[]: qualquer um de"main" | "group" | "cron" | "hook" | "node" | "other" limit?: numbermáximo de linhas (padrão: padrão do servidor, limitado, por exemplo, a 200)activeMinutes?: numberapenas sessões atualizadas nos últimos N minutosmessageLimit?: number0 = sem mensagens (padrão 0); >0 = incluir as últimas N mensagens
messageLimit > 0buscachat.historypor sessão e inclui as últimas N mensagens.- Resultados de ferramentas são filtrados na saída da lista; use
sessions_historypara mensagens de ferramenta. - Ao executar em uma sessão de agente em sandbox, as ferramentas de sessão usam por padrão visibilidade apenas das sessões geradas (veja abaixo).
key: chave da sessão (string)kind:main | group | cron | hook | node | otherchannel:whatsapp | telegram | discord | signal | imessage | webchat | internal | unknowndisplayName(rótulo de exibição do grupo, se disponível)updatedAt(ms)sessionIdmodel,contextTokens,totalTokensthinkingLevel,verboseLevel,systemSent,abortedLastRunsendPolicy(override de sessão, se definido)lastChannel,lastTodeliveryContext({ channel, to, accountId }normalizado quando disponível)transcriptPath(caminho de melhor esforço derivado do diretório do store + sessionId)messages?(somente quandomessageLimit > 0)
sessions_history
Busca a transcrição de uma sessão. Parâmetros:sessionKey(obrigatório; aceita chave da sessão ousessionIddesessions_list)limit?: numbermáximo de mensagens (limitado pelo servidor)includeTools?: boolean(padrão false)
includeTools=falsefiltra mensagensrole: "toolResult".- Retorna um array de mensagens no formato bruto da transcrição.
- Quando fornecido um
sessionId, o OpenClaw resolve para a chave de sessão correspondente (erro se id ausente).
sessions_send
Envia uma mensagem para outra sessão. Parâmetros:sessionKey(obrigatório; aceita chave da sessão ousessionIddesessions_list)message(obrigatório)timeoutSeconds?: number(padrão >0; 0 = fire-and-forget)
timeoutSeconds = 0: enfileira e retorna{ runId, status: "accepted" }.timeoutSeconds > 0: aguarda até N segundos pela conclusão e então retorna{ runId, status: "ok", reply }.- Se a espera expirar:
{ runId, status: "timeout", error }. A execução continua; chamesessions_historydepois. - Se a execução falhar:
{ runId, status: "error", error }. - Execuções de anúncio de entrega ocorrem após a execução primária concluir e são de melhor esforço;
status: "ok"não garante que o anúncio foi entregue. - Aguarda via
agent.waitdo gateway (lado do servidor) para que reconexões não interrompam a espera. - O contexto de mensagem agente‑para‑agente é injetado para a execução primária.
- Mensagens entre sessões são persistidas com
message.provenance.kind = "inter_session"para que leitores de transcrições possam distinguir instruções de agentes roteadas de entradas externas de usuários. - Quando o loop termina, o OpenClaw executa a etapa de anúncio agente‑para‑agente (somente agente alvo):
- A partir da rodada 2, alterna entre os agentes solicitante e alvo.
- Responda exatamente
REPLY_SKIPpara parar o ping‑pong. - O máximo de turnos é
session.agentToAgent.maxPingPongTurns(0–5, padrão 5).
- Após a execução primária concluir, o OpenClaw executa um loop de resposta de volta:
- Responda exatamente
ANNOUNCE_SKIPpara permanecer em silêncio. - Qualquer outra resposta é enviada para o canal de destino.
- A etapa de anúncio inclui a solicitação original + resposta da rodada 1 + a resposta mais recente do ping‑pong.
- Responda exatamente
Campo Channel
- Para grupos,
channelé o canal registrado na entrada da sessão. - Para chats diretos,
channelmapeia a partir delastChannel. - Para cron/hook/node,
channeléinternal. - Se ausente,
channeléunknown.
Segurança / Política de Envio
Bloqueio baseado em política por canal/tipo de chat (não por id de sessão).sendPolicy: "allow" | "deny"(não definido = herda configuração)- Definível via
sessions.patchou/send on|off|inheritexclusivo do proprietário (mensagem independente).
chat.send/agent(gateway)- lógica de entrega de resposta automática
sessions_spawn
Inicia a execução de um sub‑agente em uma sessão isolada e anuncia o resultado de volta ao canal de chat do solicitante. Parâmetros:task(obrigatório)label?(opcional; usado para logs/UI)agentId?(opcional; iniciar sob outro id de agente, se permitido)model?(opcional; sobrescreve o modelo do sub‑agente; valores inválidos geram erro)runTimeoutSeconds?(padrão 0; quando definido, aborta a execução do sub‑agente após N segundos)cleanup?(delete|keep, padrãokeep)
agents.list[].subagents.allowAgents: lista de ids de agentes permitidos viaagentId(["*"]para permitir qualquer). Padrão: apenas o agente solicitante.
- Use
agents_listpara descobrir quais ids de agentes são permitidos parasessions_spawn.
- Inicia uma nova sessão
agent:<agentId>:subagent:<uuid>comdeliver: false. - Sub‑agentes usam por padrão o conjunto completo de ferramentas menos ferramentas de sessão (configurável via
tools.subagents.tools). - Sub‑agentes não têm permissão para chamar
sessions_spawn(sem spawn de sub‑agente → sub‑agente). - Sempre não bloqueante: retorna
{ status: "accepted", runId, childSessionKey }imediatamente. - Após a conclusão, o OpenClaw executa uma etapa de anúncio do sub‑agente e publica o resultado no canal de chat do solicitante.
- Responda exatamente
ANNOUNCE_SKIPdurante a etapa de anúncio para permanecer em silêncio. - Respostas de anúncio são normalizadas para
Status/Result/Notes;Statusvem do resultado em tempo de execução (não do texto do modelo). - Sessões de sub‑agente são arquivadas automaticamente após
agents.defaults.subagents.archiveAfterMinutes(padrão: 60). - Respostas de anúncio incluem uma linha de estatísticas (tempo de execução, tokens, sessionKey/sessionId, caminho da transcrição e custo opcional).
Visibilidade de Sessões em Sandbox
Sessões em sandbox podem usar ferramentas de sessão, mas por padrão elas só veem as sessões que geraram viasessions_spawn.
Configuração: