エントリーポイント
- Gateway RPC:
agentとagent.wait。 - CLI:
openclaw agent。
実行シーケンス
agentRPC はパラメーターを検証し、セッション(sessionKey/sessionId)を解決し、セッションメタデータを永続化して、直ちに{ runId, acceptedAt }を返します。agentCommandはターンを実行します。モデルと thinking/verbose/trace のデフォルトを解決し、Skills のスナップショットを読み込み、runEmbeddedAgentを呼び出します。また、組み込みループがまだ発行していない場合は、フォールバックの ライフサイクル終了/エラー を発行します。runEmbeddedAgent: セッション単位およびグローバルキューを介して実行を直列化し、モデルと認証プロファイルを解決し、OpenClaw セッションを構築し、ランタイムイベントを購読し、アシスタント/ツールの差分をストリーミングし、実行タイムアウトを適用して(期限切れ時に中止)、ペイロードと使用量メタデータを返します。Codex app-server のターンでは、受理されたターンが終端イベントの前に app-server の進行を生成しなくなった場合も中止します。subscribeEmbeddedAgentSessionはランタイムイベントをagentストリームへ橋渡しします。ツールイベントはstream: "tool"、アシスタント差分はstream: "assistant"、ライフサイクルイベントはstream: "lifecycle"(phase: "start" | "end" | "error")へ送られます。agent.wait(waitForAgentRun)は、runId上の ライフサイクル終了/エラー を待機し、{ status: ok|error|timeout, startedAt, endedAt, error? }を返します。
キューイングと並行処理
実行はセッションキー(セッションレーン)ごとに直列化され、必要に応じてグローバルレーンも経由するため、ツール/セッションの競合を防止できます。メッセージングチャネルは、このレーンシステムへ供給するキューモード(steer/followup/collect/interrupt)を選択します。コマンドキューを参照してください。 トランスクリプトへの書き込みは、セッションファイルに対するセッション書き込みロックによっても保護されます。このロックはプロセスを認識するファイルベースの仕組みであるため、プロセス内キューを迂回するライターや別プロセスのライターも検出します。ライターは、セッションがビジーであると報告する前に、デフォルトで最大 60 秒待機します(環境変数OPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS で上書き可能)。
セッション書き込みロックは、デフォルトでは再入可能ではありません。単一の論理ライターを維持しながら同じロックを意図的にネストして取得するヘルパーは、allowReentrant: true で明示的にオプトインする必要があります。
セッションとワークスペースの準備
- ワークスペースを解決して作成します。サンドボックス化された実行では、サンドボックスのワークスペースルートへリダイレクトされる場合があります。
- Skills を読み込み(またはスナップショットから再利用し)、環境とプロンプトへ注入します。
- ブートストラップ/コンテキストファイルを解決し、システムプロンプトへ注入します。
- ストリーミングの開始前にセッション書き込みロックを取得し、セッショントランスクリプトの書き込み先を準備します。その後に行われるトランスクリプトの再書き込み、Compaction、または切り詰めの各パスでは、SQLite のトランスクリプト行を変更する前に同じロックを取得する必要があります。
プロンプトの組み立て
システムプロンプトは、OpenClaw の基本プロンプト、Skills プロンプト、ブートストラップコンテキスト、実行単位の上書きから構築されます。モデル固有の制限と Compaction 用の予約トークンが適用されます。モデルに表示される内容については、システムプロンプトを参照してください。フック
OpenClaw には 2 つのフックシステムがあります。- 内部フック(Gateway フック): コマンドおよびライフサイクルイベント用のイベント駆動スクリプト。
- Plugin フック: エージェント/ツールのライフサイクルおよび Gateway パイプライン内の拡張ポイント。
内部フック(Gateway フック)
agent:bootstrap: システムプロンプトが確定する前に、ブートストラップファイルの構築中に実行されます。ブートストラップコンテキストファイルの追加または削除に使用します。- コマンドフック:
/new、/reset、/stop、およびその他のコマンドイベント(フックのドキュメントを参照)。
Plugin フック
これらはエージェントループまたは Gateway パイプライン内で実行されます。
送信/ツールガードに関するフックの判定規則:
before_tool_call:{ block: true }は終端であり、優先度の低いハンドラーを停止します。{ block: false }は何も行わず、先行するブロックを解除しません。before_install: 上記と同じ終端/無操作のセマンティクスです。CLI のインストールおよび更新パスを対象に含める必要がある、オペレーター所有のインストール許可/ブロック判定には、before_installではなくsecurity.installPolicyを使用します。message_sending:{ cancel: true }は終端であり、優先度の低いハンドラーを停止します。{ cancel: false }は何も行わず、先行するキャンセルを解除しません。
ストリーミング
- アシスタント差分は、エージェントランタイムから
assistantイベントとしてストリーミングされます。 - ブロックストリーミングでは、
text_endまたはmessage_endで部分的な返信を発行できます。 - 推論ストリーミングは、独立したストリームまたはブロック返信にできます。
- チャンク化とブロック返信の動作については、ストリーミングを参照してください。
ツール実行
- ツールの開始/更新/終了イベントは、
toolストリームで発行されます。 - ツール結果は、ログ記録/発行の前にサイズと画像ペイロードについてサニタイズされます。
- メッセージングツールによる送信は、アシスタントによる重複確認を抑制するために追跡されます。
返信の整形
最終ペイロードは、アシスタントのテキスト(オプションの推論を含む)、インラインのツール概要(verbose が有効かつ許可されている場合)、およびモデルでエラーが発生した場合のアシスタントエラーテキストから組み立てられます。- 完全一致するサイレントトークン
NO_REPLYは、送信ペイロードから除外されます。 - メッセージングツールによる重複は、最終ペイロードリストから削除されます。
- レンダリング可能なペイロードが残らず、ツールでエラーが発生した場合、メッセージングツールがすでにユーザーに表示される返信を送信していない限り、フォールバックのツールエラー返信が発行されます。
Compaction と再試行
自動 Compaction はcompaction ストリームイベントを発行し、再試行をトリガーする場合があります。再試行時には、出力の重複を避けるため、メモリ内バッファとツール概要がリセットされます。Compactionを参照してください。
イベントストリーム
lifecycle:subscribeEmbeddedAgentSessionによって発行されます(また、agentCommandによってフォールバックとして発行されます)。assistant: エージェントランタイムからストリーミングされる差分。tool: エージェントランタイムからストリーミングされるツールイベント。
チャットチャネルの処理
アシスタント差分は、チャットのdelta メッセージへバッファリングされます。チャットの final は、ライフサイクル終了/エラー 時に発行されます。
タイムアウト
停止したセッションの診断
診断を有効にすると、組み込みの 2 分間のしきい値により、応答、ツール、ステータス、ブロック、または ACP の進行が観測されない長時間のprocessing セッションが分類されます。
- アクティブな埋め込み実行、モデル呼び出し、およびツール呼び出しは
session.long_runningとして報告されます。所有されている無応答のモデル呼び出しは中止しきい値までsession.long_runningのままとなるため、低速または非ストリーミングのプロバイダーが早すぎる段階で停止と判定されることはありません。 - 最近の進行がないアクティブな処理は
session.stalledとして報告されます。所有されているモデル呼び出しは、中止しきい値以降にsession.stalledへ切り替わります。所有者のいない古いモデルまたはツールのアクティビティが、長時間実行として隠されることはありません。 session.stuckは、所有者のいない古いモデルまたはツールのアクティビティがあるアイドル状態のキュー済みセッションなど、復旧可能な古いセッション管理情報のために予約されています。
session.stuck 診断の間隔が段階的に延長されます。
処理が早期終了する場合
- エージェントのタイムアウト(中止)
- AbortSignal(キャンセル)
- Gateway の切断または RPC タイムアウト
agent.waitのタイムアウト(待機のみ。エージェントは停止しません)
関連項目
- ツール - 利用可能なエージェントツール
- フック - エージェントのライフサイクルイベントによって起動されるイベント駆動型スクリプト
- Compaction - 長い会話が要約される仕組み
- 実行の承認 - シェルコマンドの承認ゲート
- 思考 - 思考および推論レベルの設定