ツール一覧
sessions_listsessions_historysessions_sendsessions_spawn
セッションキーのモデル
- メインのダイレクトチャットは、常にリテラル(文字通り)のキー
"main"を使用します(現在のエージェントのメインキーに解決されます)。 - グループチャットは
agent:<agentId>:<channel>:group:<id>またはagent:<agentId>:<channel>:channel:<id>の形式です(完全なキーを渡してください)。 - Cron ジョブは
cron:<job.id>です。 - Webhook は明示的に設定されていない限り
hook:<uuid>です。 - ノードセッションは明示的に設定されていない限り
node-<nodeId>です。
global および unknown は予約された値であり、一覧には表示されません。session.scope = "global" の場合、すべてのツールにおいて main の別名として扱われるため、呼び出し側が global という値を直接目にすることはありません。
sessions_list
セッションを配列形式で一覧表示します。
パラメータ:
kinds?: string[]: フィルタリング。"main" | "group" | "cron" | "hook" | "node" | "other"のいずれかを指定。limit?: number: 最大取得件数(デフォルトはサーバー設定に従います。例:200件)。activeMinutes?: number: 指定した分以内に更新されたセッションのみを抽出。messageLimit?: number: 履歴を含めるかどうか。0= 含めない(デフォルト)、>0= 直近 N 件のメッセージを含める。
messageLimit > 0の場合、各セッションのchat.historyから直近 N 件のメッセージを取得して含めます。- 一覧出力からはツール実行結果(toolResult)は除外されます。ツールのメッセージを確認したい場合は
sessions_historyを使用してください。 - サンドボックス化 されたエージェントセッションで実行している場合、セッションツールで見える範囲はデフォルトで 自身が生成(spawn)したもののみ に制限されます(詳細は後述)。
key: セッションキー(文字列)kind:main | group | cron | hook | node | otherchannel:whatsapp | telegram | discord | signal | imessage | webchat | internal | unknowndisplayName: グループの表示名(利用可能な場合)updatedAt: 最終更新日時(ミリ秒)sessionId: セッション IDmodel,contextTokens,totalTokens: 使用モデルとトークン統計thinkingLevel,verboseLevel,systemSent,abortedLastRun: 実行設定とステータスsendPolicy: セッションごとの送信ポリシー上書き設定lastChannel,lastTo: 最終送信先情報deliveryContext: 正規化された配信コンテキスト({ channel, to, accountId })transcriptPath: 履歴ファイルのパス(ベストエフォート)messages?:messageLimit > 0の場合にのみ含まれるメッセージ配列
sessions_history
特定のセッションの会話記録(トランスクリプト)を取得します。
パラメータ:
sessionKey: 必須。セッションキー、またはsessions_listから取得したsessionId。limit?: number: 最大メッセージ取得数。includeTools?: boolean: ツールメッセージを含めるかどうか(デフォルトはfalse)。
includeTools=falseの場合、role: "toolResult"のメッセージを除外します。- メッセージを生の記録形式の配列で返します。
sessionIdが指定された場合、OpenClaw は対応するセッションキーを自動的に解決します。
sessions_send
別のセッションに対してメッセージを送信します。
パラメータ:
sessionKey: 必須。送信先のセッションキー、または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: "error", error }。 - 通知(Announce)の配信は、メインの実行完了後にベストエフォートで行われます。
status: "ok"は通知の到達を保証するものではありません。 - ゲートウェイの
agent.waitを介して待機するため、通信が一時的に切断されても待機状態は維持されます。 - 送信先のエージェントには、エージェント間メッセージである旨のコンテキストが注入されます。
- メッセージには
message.provenance.kind = "inter_session"が付与されるため、履歴を確認する際にユーザー入力とエージェントからの指示を区別できます。 - メインの実行完了後、OpenClaw は 返信ループ(ピンポン) を実行します:
- 2 ターン目以降は、依頼元と送信先のエージェントが交互に応答します。
- ループを終了するには、メッセージとして正確に
REPLY_SKIPと返します。 - 最大ターン数は
session.agentToAgent.maxPingPongTurns(0〜5、デフォルト 5) です。
- ループ終了後、送信先エージェントのみが アナウンスステップ を実行します:
- 何も送信したくない場合は
ANNOUNCE_SKIPと返します。 - それ以外の場合、最終的な応答がチャネルに送信されます。
- アナウンス内容には、最初の依頼内容、1 回目の返信、および最新のやり取りが含まれます。
- 何も送信したくない場合は
チャネルフィールドの扱い
- グループの場合、セッションエントリに記録されたチャネルが
channelとなります。 - ダイレクトチャットの場合、
lastChannelからマップされます。 - Cron/Webhook/ノードの場合、
channelはinternalです。 - 不明な場合は
unknownとなります。
セキュリティ / 送信ポリシー
チャネルやチャット形式に基づいたブロック設定が可能です。sendPolicy: "allow" | "deny"(未設定時は構成を継承)sessions.patchツール、または所有者による/send on|off|inheritコマンドで設定可能。
chat.send/agent(ゲートウェイ)- 自動応答の配信ロジック
sessions_spawn
分離されたセッションでサブエージェントを起動し、その結果を依頼元のチャットチャネルに通知します。
パラメータ:
task: 必須。実行させるタスク内容。label?: 任意。ログや UI で使用されるラベル。agentId?: 任意。許可されていれば、別のエージェント ID として起動。model?: 任意。サブエージェントが使用するモデルを上書き。thinking?: 任意。サブエージェントの思考レベルを上書き。runTimeoutSeconds?: 実行タイムアウト秒数(デフォルトはagents.defaults.subagents.runTimeoutSeconds)。thread?: 任意(デフォルトfalse)。チャネルが対応している場合、スレッドに紐付いたルーティングを要求。mode?:run | session(デフォルトrun)。thread=trueの場合はsessionがデフォルト。cleanup?:delete | keep(デフォルトkeep)。終了後の処理。sandbox?:inherit | require(デフォルトinherit)。requireの場合、送信先がサンドボックス化されていないと起動を拒否。attachments?: 任意。インラインファイルの配列(サブエージェントランタイムのみ)。ファイルは.openclaw/attachments/<uuid>/に作成されます。attachAs?: 任意。将来のマウント実装用のヒント。
agents.list[].subagents.allowAgents: 指定可能なエージェント ID のリスト(["*"]で全許可)。デフォルトは依頼元と同じ ID のみ。- サンドボックス継承ガード: 依頼元のセッションがサンドボックス化されている場合、サンドボックスなしで実行されるターゲットへの
sessions_spawnは拒否されます。
deliver: false設定で、新しいagent:<agentId>:subagent:<uuid>セッションを開始します。- サブエージェントは、デフォルトで セッションツールを除いた すべてのツールを利用可能です(
tools.subagents.toolsで変更可能)。 - サブエージェントがさらに
sessions_spawnを呼び出すことはできません(入れ子の生成は不可)。 - 常に非ブロッキング(非同期)で動作し、即座に
{ status: "accepted", runId, childSessionKey }を返します。 - 完了後、OpenClaw は アナウンスステップ を実行し、結果を依頼元のチャネルに投稿します。
- モデルの返信が空の場合、履歴内の最後の
toolResultがResultとして採用されます。
- モデルの返信が空の場合、履歴内の最後の
- アナウンスを行いたくない場合は、アナウンスステップ中に
ANNOUNCE_SKIPと返してください。 - 投稿される内容は
Status,Result,Notesに正規化されます。Statusはモデルのテキストではなく、実際の実行結果から決定されます。 - サブエージェントのセッションは、
agents.defaults.subagents.archiveAfterMinutes(デフォルト 60 分)経過後に自動的にアーカイブされます。
サンドボックスセッションの可視性
セッションツールがアクセスできる範囲を制限して、セッションを跨いだ操作を抑制できます。 デフォルトの挙動:tools.sessions.visibilityはデフォルトでtree(現在のセッション + 自身が生成したサブエージェント) です。- サンドボックス化されたセッションでは、
agents.defaults.sandbox.sessionToolsVisibilityによってさらに厳格に制限できます。
self: 現在のセッションのみ。tree: 現在のセッションと、そこから派生したすべてのセッション。agent: 現在のエージェント ID に属するすべてのセッション。all: すべてのセッション(エージェントを跨ぐ場合はtools.agentToAgentの許可も必要)。- セッションがサンドボックス化され、
sessionToolsVisibility="spawned"が設定されている場合、tools.sessions.visibility="all"と設定していても、OpenClaw は強制的にtreeの範囲に制限します。