セッションツール
セッションのリスト、履歴の取得、クロスセッションメッセージ送信用のエージェントセッションツール
目標:エージェントがセッションをリストし、履歴を取得し、別のセッションに送信できるようにするための、誤用しにくい小さなツールセット。
ツール名
- ''sessions_list''
- ''sessions_history''
- ''sessions_send''
- ''sessions_spawn''
主要なモデル
- プライマリダイレクトチャットバケットは常にリテラルキー ''"main"'' です(現在のエージェントのプライマリキーに解決されます)。
- グループチャットは ''agent:<agentId>:<channel>:group:<id>'' または ''agent:<agentId>:<channel>:channel:<id>'' を使用します(完全なキーを渡します)。
- Cronジョブは ''cron:<job.id>'' を使用します。
- フックは明示的に設定されていない限り ''hook:<uuid>'' を使用します。
- ノードセッションは明示的に設定されていない限り ''node-<nodeId>'' を使用します。
''global'' と ''unknown'' は予約値であり、リストされません。''session.scope = "global"'' の場合、すべてのツールで ''main'' にエイリアスされるため、呼び出し側が ''global'' を見ることはありません。
セッションリスト
セッションを行の配列としてリストします。
パラメータ:
- ''kinds?: string[]'' フィルター:''"main" | "group" | "cron" | "hook" | "node" | "other"'' のいずれか
- ''limit?: number'' 最大行数(デフォルト:サーバーのデフォルト、例:200)
- ''activeMinutes?: number'' N分以内に更新されたセッションのみ
- ''messageLimit?: number'' 0 = メッセージなし(デフォルト0); >0 = 最後のNメッセージを含める
Behavior:
- ''messageLimit > 0'' の場合、各セッションで ''chat.history'' を取得し、最後のNメッセージを含めます。
- ツール結果はリスト出力からフィルタリングされます。ツールメッセージには ''sessions_history'' を使用してください。
- サンドボックスエージェントセッションで実行されている場合、セッションツールはデフォルトで生成のみの可視性になります(以下を参照)。
行の形状(JSON):
- ''key'':セッションキー(文字列)
- ''kind'':''main | group | cron | hook | node | other''
- ''channel'':''whatsapp | telegram | discord | signal | imessage | webchat | internal | unknown''
- ''displayName''(グループ表示ラベルがある場合)
- ''updatedAt''(ミリ秒)
- ''sessionId''
- ''model''、''contextTokens''、''totalTokens''
- ''thinkingLevel''、''verboseLevel''、''systemSent''、''abortedLastRun''
- ''sendPolicy''(設定されている場合のセッションオーバーライド)
- ''lastChannel''、''lastTo''
- deliveryContext(利用可能な場合の正規化された '{ channel, to, accountId }')
- ''transcriptPath''(ストレージディレクトリ + sessionId から派生したベストエフォートパス)
- ''messages?''(''messageLimit > 0'' の場合のみ)
セッション履歴
セッションのトランスクリプトを取得します。
パラメータ:
- ''sessionKey''(必須;セッションキーまたは ''sessions_list'' からの ''sessions_list'' を受け入れます)
- ''limit?: number'' 最大メッセージ数(サーバー制限)
- ''includeTools?: boolean''(デフォルトfalse)
Behavior:
- ''includeTools=false'' の場合、''role: "toolResult"'' メッセージをフィルタリングします。
- 生のレコード形式でメッセージの配列を返します。
- ''sessionId'' が指定されている場合、OpenClawはそれを対応するセッションキーに解決します(IDが見つからないエラー)。
セッション送信
別のセッションにメッセージを送信します。
パラメータ:
- ''sessionKey''(必須;セッションキーまたは ''sessions_list'' からの ''sessions_list'' を受け入れます)
- ''message'' (required)
- ''timeoutSeconds?: number''(デフォルト >0; 0 = 発射して忘れる)
Behavior:
- timeoutSeconds = 0:キューに入れて '{ runId, status: "accepted" }' を返します。
- timeoutSeconds > 0:完了まで最大N秒待機し、'{ runId, status: "ok", reply }' を返します。
- 待機がタイムアウトした場合:'{ runId, status: "timeout", error }'。実行は継続します。後で sessions_history を呼び出してください。
- 実行が失敗した場合:'{ runId, status: "error", error }'。
- メイン実行の完了後にベストエフォートで配信実行を通知します。''status: "ok"'' は通知が配信されたことを保証しません。
- ゲートウェイ ''agent.wait''(サーバーサイド)経由で待機するため、再接続しても待機が放棄されません。
- メイン実行のためにエージェント間メッセージコンテキストを注入します。
- 初期実行の完了後、OpenClawは返信ループを実行します:
- 2ラウンド目以降はリクエスターとターゲットエージェントの間で交互に行われます。
- ピンポンを停止するには正確に ''REPLY_SKIP'' に返信してください。
- 最大ターン数は ''session.agentToAgent.maxPingPongTurns''(0–5、デフォルト5)です。
- ループの終了後、OpenClawはエージェント間通知ステップを実行します(ターゲットエージェントのみ):
- 沈黙を保つには正確に ''ANNOUNCE_SKIP'' に返信してください。
- 他の返信はすべてターゲットチャネルに送信されます。
- 通知ステップには、元のリクエスト+最初のラウンドの返信+最新のピンポン返信が含まれます。
チャネルフィールド
- グループの場合、''channel'' はセッションエントリに記録されたチャネルです。
- ダイレクトチャットの場合、''channel'' は ''lastChannel'' からマッピングされます。
- cron/hook/nodeの場合、''channel'' は ''internal'' です。
- 欠落している場合、''channel'' は ''unknown'' です。
セキュリティ/送信ポリシー
チャネル/チャットタイプによるポリシーベースのブロック(セッションIDごとではありません)。
{
"session": {
"sendPolicy": {
"rules": [
{
"match": { "channel": "discord", "chatType": "group" },
"action": "deny"
}
],
"default": "allow"
}
}
}ランタイムオーバーライド(セッションエントリごと):
- ''sendPolicy: "allow" | "deny"''(未設定=設定を継承)
- ''sessions.patch'' または所有者のみの ''/send on|off|inherit''(スタンドアロンメッセージ)経由で設定可能。
実行ポイント:
- ''chat.send'' / ''agent''(ゲートウェイ)
- 自動返信転送ロジック
セッション生成
分離されたセッションで実行されるサブエージェントを生成し、結果をリクエスターチャットチャネルに通知します。
パラメータ:
- ''task'' (required)
- ''label?''(オプション;ログ/UI用)
- ''agentId?''(オプション;許可されている場合、別のエージェントIDで生成)
- ''model?''(オプション;サブエージェントモデルをオーバーライド;無効な値エラー)
- ''runTimeoutSeconds?''(デフォルト0;設定されている場合、N秒後にサブエージェント実行を中止)
- ''cleanup?''(''delete|keep''、デフォルト ''keep'')
許可リスト:
- ''agents.list[].subagents.allowAgents'':''agentId'' による許可されたエージェントIDのリスト(''["*"]'' は任意のエージェントIDを許可)。デフォルト:リクエスターエージェントのみ。
Discovery:
- ''agents_list'' を使用して、''sessions_spawn'' でどのエージェントIDが許可されているかを発見します。
Behavior:
- ''deliver: false'' で新しい ''deliver: false'' セッションを開始します。
- サブエージェントはデフォルトで完全なツールセット''マイナスセッションツール''を使用します(''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'' 経由で生成されたセッションのみを表示できます。
Configure:
{
agents: {
defaults: {
sandbox: {
// default: "spawned"
sessionToolsVisibility: "spawned", // or "all"
},
},
},
}