Sessions and memory
セッションツール
OpenClaw は、セッションをまたいで作業し、状態を検査し、サブエージェントをオーケストレーションするためのツールをエージェントに提供します。
利用可能なツール
| ツール | 機能 |
|---|---|
sessions_list |
任意のフィルター(種類、ラベル、エージェント、アーカイブ、プレビュー)でセッションを一覧表示する |
sessions_history |
特定のセッションのトランスクリプトを読む |
sessions_send |
別のセッションにメッセージを送信し、任意で待機する |
sessions_spawn |
バックグラウンド作業用に分離されたサブエージェントセッションを生成する |
sessions_yield |
現在のターンを終了し、後続のサブエージェント結果を待つ |
subagents |
このセッションで生成されたサブエージェントの状態を一覧表示する |
session_status |
/status 形式のカードを表示し、任意でセッション単位のモデル上書きを設定する |
これらのツールにも、アクティブなツールプロファイルと許可/拒否ポリシーが適用されます。tools.profile: "coding" には、sessions_spawn、sessions_yield、subagents を含む完全なセッションオーケストレーションセットが含まれます。tools.profile: "messaging" には、セッション間メッセージングツール(sessions_list、sessions_history、sessions_send、session_status)が含まれますが、サブエージェント生成は含まれません。メッセージングプロファイルを維持しつつネイティブ委任も許可するには、次を追加します。
{ tools: { profile: "messaging", alsoAllow: ["sessions_spawn", "sessions_yield", "subagents"], },}グループ、プロバイダー、サンドボックス、エージェント単位のポリシーは、プロファイル段階の後でもこれらのツールを削除できます。影響を受けるセッションで /tools を使用して、有効なツール一覧を確認してください。
セッションの一覧表示と読み取り
sessions_list は、キー、agentId、種類、チャネル、モデル、トークン数、タイムスタンプを含むセッションを返します。種類(main、group、cron、hook、node)、完全一致の label、完全一致の agentId、検索テキスト、または新しさ(activeMinutes)でフィルターできます。デフォルトではアクティブなセッションが返されます。アーカイブ済みセッションを調べるには archived: true を渡します。行には、ピン留め状態とアーカイブ状態が含まれます。メールボックス形式のトリアージが必要な場合は、可視性スコープ付きの派生タイトル、最後のメッセージのプレビュー断片、または各行の範囲付き最新メッセージも要求できます。派生タイトルとプレビューは、設定されたセッションツール可視性ポリシーの下で呼び出し元がすでに閲覧できるセッションに対してのみ生成されるため、無関係なセッションは非表示のままです。可視性が制限されている場合、sessions_list は有効なモードと、結果がスコープ制限されている可能性があるという警告を示す任意の visibility メタデータを返します。
sessions_history は、特定のセッションの会話トランスクリプトを取得します。デフォルトではツール結果は除外されます。表示するには includeTools: true を渡します。最新の範囲付き末尾には limit を使用します。ページネーションメタデータが必要な場合は offset: 0 を渡し、その後、返された nextOffset 値を渡して、未加工のトランスクリプトファイルを読まずに、より古い OpenClaw トランスクリプトウィンドウを後方にページングします。明示的なオフセットページは、外部 CLI フォールバックインポートをマージしません。そのマージ済み表示履歴が必要な場合は、デフォルトの最新末尾ビューを使用してください。
返されるビューは、意図的に範囲制限され、安全フィルター済みです。
- アシスタントテキストは想起前に正規化されます。
- thinking タグは取り除かれます
<relevant-memories>/<relevant_memories>の足場ブロックは取り除かれます<tool_call>...</tool_call>、<function_call>...</function_call>、<tool_calls>...</tool_calls>、<function_calls>...</function_calls>などのプレーンテキストのツール呼び出し XML ペイロードブロックは、正常に閉じられていない切り詰められたペイロードを含めて取り除かれます[Tool Call: ...]、[Tool Result ...]、[Historical context ...]などの格下げされたツール呼び出し/結果の足場は取り除かれます<|assistant|>などの漏えいしたモデル制御トークン、その他の ASCII<|...|>トークン、全角<|...|>バリアントは取り除かれます<invoke ...>/</minimax:tool_call>などの不正な MiniMax ツール呼び出し XML は取り除かれます
- 認証情報/トークンのようなテキストは、返される前に墨消しされます
- 長いテキストブロックは切り詰められます
- 非常に大きな履歴では、古い行が削除されたり、過大な行が
[sessions_history omitted: message too large]に置き換えられたりすることがあります - ツールは
truncated、droppedMessages、contentTruncated、contentRedacted、bytesなどの要約フラグとページネーションメタデータを報告します
どちらのツールも、セッションキー("main" など)または以前の一覧呼び出しから得た セッション ID のいずれかを受け付けます。
バイト単位で完全に一致するトランスクリプトが必要な場合は、sessions_history を未加工のダンプとして扱うのではなく、ディスク上のトランスクリプトファイルを確認してください。
セッション間メッセージの送信
sessions_send は別のセッションにメッセージを配信し、任意で応答を待機します。
- 送信して待たない:
timeoutSeconds: 0を設定すると、キューに入れてすぐに返ります。 - 返信を待つ: タイムアウトを設定し、応答をインラインで取得します。
Slack や Discord のキーが :thread:<id> で終わるようなスレッドスコープのチャットセッションは、有効な sessions_send ターゲットではありません。エージェント間の調整には親チャネルのセッションキーを使用し、ツール経由のメッセージがアクティブな人間向けスレッド内に表示されないようにしてください。
メッセージと A2A フォローアップ返信は、受信側プロンプト([Inter-session message ... isUser=false])とトランスクリプトの来歴で、セッション間データとしてマークされます。受信側エージェントは、それらを直接エンドユーザーが作成した指示ではなく、ツール経由のデータとして扱う必要があります。
ターゲットが応答した後、OpenClaw は、エージェントが交互にメッセージを送る 返信バックループ を実行できます(最大 session.agentToAgent.maxPingPongTurns、範囲 0-20、デフォルト 5)。ターゲットエージェントは REPLY_SKIP を返して早期に停止できます。
状態とオーケストレーションヘルパー
session_status は、現在または別の可視セッション向けの軽量な /status 相当ツールです。使用量、時刻、モデル/ランタイム状態、存在する場合はリンクされたバックグラウンドタスクコンテキストを報告します。/status と同様に、最新のトランスクリプト使用量エントリから疎なトークン/キャッシュカウンターをバックフィルでき、model=default はセッション単位の上書きを解除します。呼び出し元の現在のセッションには sessionKey="current" を使用します。openclaw-tui のような可視クライアントラベルはセッションキーではありません。
ルートメタデータが利用可能な場合、session_status には可視の Route context JSON ブロックと、一致する構造化された details フィールドも含まれます。これらのフィールドは、セッションキーと、現在ライブ実行を処理しているルートを区別します。
originは、セッションが作成された場所、または古い状態に保存済みの origin メタデータがない場合に、配信可能なセッションキーのプレフィックスから推定されたプロバイダーです。activeは、現在のライブ実行ルートです。現在処理されているライブセッションまたは現在のセッションに対してのみ報告されます。deliveryContextは、セッションに保存された永続的な配信ルートです。OpenClaw は、アクティブなサーフェスが異なる場合でも、後続の配信でこれを再利用できます。
sessions_yield は、待っているフォローアップイベントを次のメッセージにできるように、意図的に現在のターンを終了します。サブエージェントを生成した後、ポーリングループを構築する代わりに完了結果を次のメッセージとして受け取りたい場合に使用します。
subagents は、すでに生成された OpenClaw サブエージェント向けの可視性ヘルパーです。アクティブ/最近の実行を調べるために action: "list" をサポートします。
サブエージェントの生成
sessions_spawn は、デフォルトでバックグラウンドタスク用の分離セッションを作成します。これは常に非ブロッキングで、runId と childSessionKey を返してすぐに終了します。ネイティブサブエージェント実行は、子セッションの最初の可視 [Subagent Task] メッセージで委任されたタスクを受け取り、システムプロンプトにはサブエージェントランタイムルールとルーティングコンテキストのみが含まれます。
主なオプション:
runtime: "subagent"(デフォルト)または外部ハーネスエージェント用の"acp"。- 子セッション向けの
modelとthinkingの上書き。 - 生成をチャットスレッド(Discord、Slack など)にバインドするための
thread: true。 - 子でサンドボックス化を強制するための
sandbox: "require"。 - 子が現在のリクエスターのトランスクリプトを必要とする場合のネイティブサブエージェント向け
context: "fork"。クリーンな子には、省略するかcontext: "isolated"を使用します。スレッドバインドされたネイティブサブエージェントは、threadBindings.defaultSpawnContextが別の指定をしていない限り、デフォルトでcontext: "fork"になります。
デフォルトのリーフサブエージェントはセッションツールを取得しません。maxSpawnDepth >= 2 の場合、深さ 1 のオーケストレーターサブエージェントには追加で sessions_spawn、subagents、sessions_list、sessions_history が付与され、自分の子を管理できるようになります。リーフ実行には引き続き再帰的なオーケストレーションツールは付与されません。
完了後、通知ステップが結果をリクエスターのチャネルに投稿します。完了配信は、利用可能な場合はバインドされたスレッド/トピックルーティングを維持します。また、完了元がチャネルのみを識別している場合でも、OpenClaw はリクエスターセッションに保存されたルート(lastChannel / lastTo)を直接配信に再利用できます。
ACP 固有の動作については、ACP エージェント を参照してください。
可視性
セッションツールは、エージェントが閲覧できる範囲を制限するためにスコープされます。
| レベル | スコープ |
|---|---|
self |
現在のセッションのみ |
tree |
現在のセッション + 生成されたサブエージェント |
agent |
このエージェントのすべてのセッション |
all |
すべてのセッション(設定されている場合はエージェント横断) |
デフォルトは tree です。サンドボックス化されたセッションは、設定に関係なく tree にクランプされます。
関連情報
- セッション管理 -- ルーティング、ライフサイクル、メンテナンス
- ACP エージェント -- 外部ハーネス生成
- マルチエージェント -- マルチエージェントアーキテクチャ
- Gateway 設定 -- セッションツール設定ノブ