セッション ツール
目的:エージェントがセッションを一覧表示し、履歴を取得し、別のセッションに送信できる、小さく誤用しにくいツール セットを提供します。ツール名
sessions_listsessions_historysessions_sendsessions_spawn
キー モデル
- メインのダイレクト チャット バケットは、常にリテラル キー
"main"(現在のエージェントのメイン キーに解決)です。 - グループ チャットは
agent:<agentId>:<channel>:group:<id>またはagent:<agentId>:<channel>:channel:<id>を使用します(完全なキーを渡します)。 - Cron ジョブは
cron:<job.id>を使用します。 - フックは、明示的に設定されていない限り
hook:<uuid>を使用します。 - ノード セッションは、明示的に設定されていない限り
node-<nodeId>を使用します。
global と unknown は予約されており、一覧に表示されません。 global と unknown は予約されており、一覧に表示されません。 global と unknown は予約値であり、一覧には表示されません。session.scope = "global" の場合、すべてのツールで main にエイリアスされ、呼び出し側が global を目にすることはありません。
sessions_list
セッションを行の配列として一覧表示します。 パラメータ:kinds?: string[]フィルター:"main" | "group" | "cron" | "hook" | "node" | "other"のいずれかlimit?: number最大行数(デフォルト:サーバー既定、例:200 にクランプ)activeMinutes?: numberN 分以内に更新されたセッションのみmessageLimit?: number0 = メッセージなし(デフォルト 0);>0 = 直近 N 件のメッセージを含める
messageLimit > 0は、セッションごとにchat.historyを取得し、直近 N 件のメッセージを含めます。- ツールの結果は一覧出力から除外されます。ツール メッセージには
sessions_historyを使用してください。 - サンドボックス化された エージェント セッションで実行している場合、セッション ツールは既定で spawned-only 可視性(下記参照)になります。
key:セッション キー(string)kind:main | group | cron | hook | node | otherchannel:whatsapp | telegram | discord | signal | imessage | webchat | internal | unknowndisplayName(利用可能な場合のグループ表示ラベル)updatedAt(ms)sessionIdmodel、contextTokens、totalTokensthinkingLevel、verboseLevel、systemSent、abortedLastRunsendPolicy(設定されている場合のセッション オーバーライド)lastChannel、lastTodeliveryContext(利用可能な場合の正規化された{ channel, to, accountId })transcriptPath(ストア ディレクトリ + sessionId から導出したベストエフォートのパス)messages?(messageLimit > 0の場合のみ)
sessions_history
1 つのセッションのトランスクリプトを取得します。 パラメータ:sessionKey(必須;セッション キーまたはsessions_listのsessionIdを受け付けます)limit?: number最大メッセージ数(サーバーでクランプ)includeTools?: boolean(デフォルト false)
includeTools=falseはrole: "toolResult"メッセージをフィルターします。- 生のトランスクリプト形式でメッセージ配列を返します。
sessionIdが与えられた場合、OpenClaw は対応するセッション キーに解決します(欠落した id はエラー)。
sessions_send
別のセッションにメッセージを送信します。 パラメータ:sessionKey(必須;セッション キーまたはsessions_listのsessionIdを受け付けます)message(必須)timeoutSeconds?: number(デフォルト >0;0 = fire-and-forget)
timeoutSeconds = 0:キューに入れて{ runId, status: "accepted" }を返します。timeoutSeconds > 0:完了まで最大 N 秒待機し、その後{ runId, status: "ok", reply }を返します。- 待機がタイムアウトした場合:
{ runId, status: "timeout", error }。実行は継続され、後でsessions_historyを呼び出してください。 待機がタイムアウトした場合:{ runId, status: "timeout", error }。実行は継続され、後でsessions_historyを呼び出してください。 実行を続けます; 後でsessions_historyを呼び出します。 - 実行が失敗した場合:
{ runId, status: "error", error }。 - 配信のアナウンス実行は一次実行の完了後に行われ、ベストエフォートです。
status: "ok"はアナウンスの配信を保証しません。 - 待機はゲートウェイ
agent.wait(サーバー側)経由で行われるため、再接続で待機が中断されません。 - 一次実行には、エージェント間メッセージのコンテキストが注入されます。
- セッション間メッセージは
message.provenance.kind = "inter_session"として永続化されるため、トランスクリプト閲覧者はルーティングされたエージェント指示と外部ユーザー入力を区別できます。 - ループ終了後、OpenClaw は エージェント間アナウンス ステップ(ターゲット エージェントのみ)を実行します:
- ラウンド2+は、要求者とターゲットエージェントを交互に切り替えます。
- ping‑pong を停止するには、正確に
REPLY_SKIPと返信してください。 - 最大ターン数は
session.agentToAgent.maxPingPongTurns(0–5、デフォルト 5)です。
- 一次実行の完了後、OpenClaw は reply-back ループ を実行します:
- 何も送信しない場合は、正確に
ANNOUNCE_SKIPと返信してください。 - それ以外の返信は、ターゲット チャンネルに送信されます。
- アナウンス ステップには、元のリクエスト + ラウンド 1 の返信 + 最新の ping‑pong 返信が含まれます。
- 何も送信しない場合は、正確に
チャンネル フィールド
- グループの場合、
channelはセッション エントリーに記録されたチャンネルです。 - ダイレクト チャットの場合、
channelはlastChannelからマッピングされます。 - cron/hook/node の場合、
channelはinternalです。 - 欠落している場合、
channelはunknownです。
セキュリティ / 送信ポリシー
チャンネル/チャット種別ごとのポリシー ベースのブロック(セッション id ごとではありません)。sendPolicy: "allow" | "deny"(未設定 = 設定を継承)sessions.patchまたはオーナーのみの/send on|off|inherit(スタンドアロン メッセージ)で設定可能。
chat.send/agent(ゲートウェイ)- 自動返信の配信ロジック
sessions_spawn
隔離されたセッションでサブ エージェント実行を起動し、結果をリクエスターのチャット チャンネルにアナウンスします。 パラメータ:task(必須)label?(任意;ログ/UI 用)agentId?(任意;許可されていれば別のエージェント id の配下で起動)model?(任意;サブ エージェントのモデルを上書き;無効な値はエラー)runTimeoutSeconds?(デフォルト 0;設定時は N 秒後にサブ エージェント実行を中止)cleanup?(delete|keep、デフォルトkeep)
agents.list[].subagents.allowAgents:agentId(任意を許可する場合は["*"])経由で許可されるエージェント id の一覧。デフォルト:リクエスター エージェントのみ。 デフォルト: リクエスターエージェントのみ。 デフォルト: リクエスターエージェントのみ。
agents_listを使用して、sessions_spawnに対して許可されているエージェント id を検出します。
deliver: falseを伴う新しいagent:<agentId>:subagent:<uuid>セッションを開始します。- サブ エージェントは既定で、セッション ツールを除く フル ツール セットを使用します(
tools.subagents.toolsで設定可能)。 - サブ エージェントは
sessions_spawnを呼び出すことはできません(サブ エージェント → サブ エージェントの起動は不可)。 - 常にノンブロッキング:即座に
{ status: "accepted", runId, childSessionKey }を返します。 - 完了後、OpenClaw はサブ エージェントの アナウンス ステップ を実行し、結果をリクエスターのチャット チャンネルに投稿します。
- アナウンス ステップ中に何も送信しない場合は、正確に
ANNOUNCE_SKIPと返信してください。 - アナウンス返信は
Status/Result/Notesに正規化されます。Statusは実行時の結果に由来します(モデルのテキストではありません)。 - サブ エージェント セッションは
agents.defaults.subagents.archiveAfterMinutes後に自動アーカイブされます(デフォルト:60)。 - アナウンス返信には、統計行(実行時間、トークン数、sessionKey/sessionId、トランスクリプト パス、および任意のコスト)が含まれます。
サンドボックス セッションの可視性
サンドボックス化されたセッションはセッション ツールを使用できますが、既定ではsessions_spawn によって生成したセッションのみを参照できます。
設定: