OpenClawSkills
GitHub
コア概念 • 5分で読める

セッションツール

セッションのリスト、履歴の取得、クロスセッションメッセージ送信用のエージェントセッションツール

目標:エージェントがセッションをリストし、履歴を取得し、別のセッションに送信できるようにするための、誤用しにくい小さなツールセット。

Tutorial.step

ツール名

- ''sessions_list''

- ''sessions_history''

- ''sessions_send''

- ''sessions_spawn''

Tutorial.step

主要なモデル

- プライマリダイレクトチャットバケットは常にリテラルキー ''"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'' を見ることはありません。

Tutorial.step

セッションリスト

セッションを行の配列としてリストします。

パラメータ:

- ''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'' の場合のみ)

Tutorial.step

セッション履歴

セッションのトランスクリプトを取得します。

パラメータ:

- ''sessionKey''(必須;セッションキーまたは ''sessions_list'' からの ''sessions_list'' を受け入れます)

- ''limit?: number'' 最大メッセージ数(サーバー制限)

- ''includeTools?: boolean''(デフォルトfalse)

Behavior:

- ''includeTools=false'' の場合、''role: "toolResult"'' メッセージをフィルタリングします。

- 生のレコード形式でメッセージの配列を返します。

- ''sessionId'' が指定されている場合、OpenClawはそれを対応するセッションキーに解決します(IDが見つからないエラー)。

Tutorial.step

セッション送信

別のセッションにメッセージを送信します。

パラメータ:

- ''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'' に返信してください。

- 他の返信はすべてターゲットチャネルに送信されます。

- 通知ステップには、元のリクエスト+最初のラウンドの返信+最新のピンポン返信が含まれます。

Tutorial.step

チャネルフィールド

- グループの場合、''channel'' はセッションエントリに記録されたチャネルです。

- ダイレクトチャットの場合、''channel'' は ''lastChannel'' からマッピングされます。

- cron/hook/nodeの場合、''channel'' は ''internal'' です。

- 欠落している場合、''channel'' は ''unknown'' です。

Tutorial.step

セキュリティ/送信ポリシー

チャネル/チャットタイプによるポリシーベースのブロック(セッションIDごとではありません)。

Json
{
  "session": {
    "sendPolicy": {
      "rules": [
        {
          "match": { "channel": "discord", "chatType": "group" },
          "action": "deny"
        }
      ],
      "default": "allow"
    }
  }
}

ランタイムオーバーライド(セッションエントリごと):

- ''sendPolicy: "allow" | "deny"''(未設定=設定を継承)

- ''sessions.patch'' または所有者のみの ''/send on|off|inherit''(スタンドアロンメッセージ)経由で設定可能。

実行ポイント:

- ''chat.send'' / ''agent''(ゲートウェイ)

- 自動返信転送ロジック

Tutorial.step

セッション生成

分離されたセッションで実行されるサブエージェントを生成し、結果をリクエスターチャットチャネルに通知します。

パラメータ:

- ''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、トランスクリプトパス、オプションのコスト)が含まれます。

Tutorial.step

サンドボックスセッションの可視性

サンドボックスセッションはセッションツールを使用できますが、デフォルトでは ''sessions_spawn'' 経由で生成されたセッションのみを表示できます。

Configure:

Json5
{
  agents: {
    defaults: {
      sandbox: {
        // default: "spawned"
        sessionToolsVisibility: "spawned", // or "all"
      },
    },
  },
}