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

エージェントループ

エージェントループのライフサイクル、フロー、待機セマンティクス。

エージェントループはエージェントの完全な「真の」実行です:取り込み→コンテキストの組み立て→モデル推論→

ツール実行→ストリーミング返信→永続化。これはメッセージを配信するための権威あるパスです

アクションと最終回答に変換しながら、セッション状態の一貫性を維持します。

OpenClawでは、ループはセッションごとの単一のシリアル化された実行であり、ライフサイクルとストリームイベントを発行します

モデルが思考し、ツールを呼び出し、出力をストリーミングするように。このドキュメントは、実際のループがどのように進むかを説明します

エンドツーエンドのワイヤ接続。

Tutorial.step

エントリーポイント

- ゲートウェイ RPC:''agent'' と ''agent.wait''。

- CLI:''agent'' コマンド。

Tutorial.step

仕組み(高レベル)

1. ''agent'' RPC は引数を検証し、セッション(sessionKey/sessionId)を解決し、セッションメタデータを保存し、すぐに ''{ runId, acceptedAt }'' を返します。

2. ''agentCommand'' はエージェントを実行します:

- モデル+思考/詳細のデフォルトを解決

- スキルスナップショットをロード

- ''runEmbeddedPiAgent'' を呼び出す(pi-agent-core ランタイム)

- 組み込みループがライフサイクル終了/エラーを発行しない場合、ライフサイクル終了/エラーを発行

3.''runEmbeddedPiAgent'':

- セッションごと+グローバルキューで実行をシリアル化

- モデル+認証プロファイルを解決し、piセッションを構築

- piイベントをサブスクライブし、アシスタント/ツールデルタをストリーミング

- タイムアウトを強制 → 超過した場合に実行を中止

- ペイロード+使用量メタデータを返す

4. ''subscribeEmbeddedPiSession'' は pi-agent-core イベントを OpenClaw ''agent'' ストリームにブリッジします:

- ツールイベント => ''stream: "tool"''

- アシスタントデルタ => ''stream: "assistant"''

- ライフサイクルイベント => ''stream: "lifecycle"'' (''phase: "start" | "end" | "error"'')

5. ''agent.wait'' は ''waitForAgentJob'' を使用します:

- ''runId'' の''ライフサイクル終了/エラー''を待機

- ''{ status: ok|error|timeout, startedAt, endedAt, error? }'' を返す

Tutorial.step

キュー+同時実行

- 実行はセッションキー(セッションチャネル)ごとにシリアル化され、オプションでグローバルチャネルを介してシリアル化されます。

- これにより、ツール/セッションの競合を防ぎ、セッション履歴の一貫性を保ちます。

- メッセージングチャネルは、そのチャネルシステムのキューモード(収集/リード/フォロー)をオプションで提供できます。

''コマンドキュー''を参照してください。

Tutorial.step

セッション + ワークスペースの準備

- ワークスペースが解決され作成されます。サンドボックス実行はサンドボックスワークスペースルートにリダイレクトされる場合があります。

- スキルがロード(またはスナップショットから再利用)され、環境とプロンプトに注入されます。

- ブートストラップ/コンテキストファイルが解決され、システムプロンプトレポートに注入されます。

- セッション書き込みロックが取得されます。ストリーミング前に ''SessionManager'' が開かれ準備完了状態になります。

Tutorial.step

プロンプトの組み立て+システムプロンプト

- システムプロンプトは、OpenClawの基本プロンプト、スキルプロンプト、ブートストラップコンテキスト、実行ごとのオーバーライドから構築されます。

- モデル固有の制限と圧縮予約トークンが強制されます。

- モデルが見るものについては、''システムプロンプト''を参照してください。

Tutorial.step

フックポイント(インターセプトできる場所)

OpenClawには2つのフックシステムがあります:

- 内部フック(ゲートウェイフック):コマンドとライフサイクルイベントのイベント駆動型スクリプト。

- プラグインフック:エージェント/ツールライフサイクルとゲートウェイパイプライン内の拡張ポイント。

#

Tutorial.step

内部フック(ゲートウェイフック)

- ''''agent:bootstrap'''':システムプロンプトの最終化前にブートストラップファイルを構築するときに実行されます。

ブートストラップコンテキストファイルを追加/削除するために使用します。

- ''コマンドフック'':''/new''、''/reset''、''/stop'' およびその他のコマンドイベント(フックのドキュメントを参照)。

設定と例については、''フック''を参照してください。

#

Tutorial.step

プラグインフック(エージェント+ゲートウェイライフサイクル)

それらはエージェントループまたはゲートウェイパイプライン内で実行されます:

- ''''before_agent_start'''':実行開始前にコンテキストを注入するか、システムプロンプトを上書きします。

- ''''agent_end'''':完了後に最終メッセージリストを検査し、メタデータを実行します。

- ''''before_compaction'''' / ''after_compaction'''':圧縮ループを観察または注釈します。

- ''''before_tool_call'''' / ''after_tool_call'''':ツール引数/結果をインターセプトします。

- ''''tool_result_persist'''':セッションログに書き込む前にツール結果を同期的に変換します。

- ''''message_received'''' / ''message_sending'''' / ''message_sent'''':インバウンド + アウトバウンドメッセージフック。

- ''''session_start'''' / ''session_end'''':セッションライフサイクル境界。

- ''''gateway_start'''' / ''gateway_stop'''':ゲートウェイライフサイクルイベント。

フックAPIと登録の詳細については、''プラグイン''を参照してください。

Tutorial.step

ストリーミング + 部分返信

- アシスタントデルタは pi-agent-core からストリーミングされ、''assistant'' イベントとして発行されます。

- チャンクストリームは、''text_end'' または ''message_end'' で部分返信を発行できます。

- 推論ストリームは、個別のストリームまたはチャンク返信として発行できます。

- チャンキングとチャンク返信の動作については、''ストリーミング''を参照してください。

Tutorial.step

ツール実行+メッセージングツール

- ツール開始/更新/終了イベントは ''tool'' ストリームで発行されます。

- ツール結果は、ログ記録/送信前にサイズと画像ペイロードに基づいてサニタイズされます。

- メッセージングツールの送信は追跡され、重複するアシスタント確認を抑制します。

Tutorial.step

返信の整形+抑制

- 最終ペイロードは以下から組み立てられます:

- アシスタントテキスト(およびオプションの推論)

- インラインツールの概要(詳細+許可されている場合)

- モデルエラー時のアシスタントエラーテキスト

- ''NO_REPLY'' はサイレントトークンとして扱われ、発信ペイロードからフィルタリングされます。

- メッセージングツールの重複は最終ペイロードリストから削除されます。

- レンダリング可能なペイロードが残っておらず、ツールがエラーになった場合、フォールバックツールエラー返信が発行されます

(メッセージングツールがすでにユーザーに表示される返信を送信していない限り)。

Tutorial.step

Compaction+Retry

- 自動圧縮は ''compaction'' ストリームイベントを発行し、再試行をトリガーできます。

- 再試行時、メモリバッファとツールの概要がリセットされ、重複出力を回避します。

- 圧縮パイプラインについては、''圧縮''を参照してください。

Tutorial.step

イベントストリーム(現在)

- ''lifecycle'':''subscribeEmbeddedPiSession'' によって発行されます(''agentCommand'' のフォールバックとして)

- ''assistant'':pi-agent-core からのストリーミングデルタ

- ''tool'':pi-agent-core からのストリーミングツールイベント

Tutorial.step

チャットチャネルの処理

- アシスタントデルタはチャット ''delta'' メッセージにバッファリングされます。

- チャット ''final'' は''ライフサイクル終了/エラー''時に発行されます。

Tutorial.step

タイムアウト

- ''agent.wait'' デフォルト:30秒(待機のみ)。''timeoutMs'' パラメータで上書き。

- エージェント実行時間:''agents.defaults.timeoutSeconds'' デフォルト600秒。''runEmbeddedPiAgent'' 中止タイマーで強制実行。

Tutorial.step

早期終了できる場所

- エージェントタイムアウト(中止)

- AbortSignal(キャンセル)

- ゲートウェイの切断またはRPCタイムアウト

- ''agent.wait'' タイムアウト(待機のみ、エージェントは停止しない)