Skip to main content
このドキュメントでは、OpenClaw が pi-coding-agent と、その関連パッケージである pi-aipi-agent-corepi-tui をどのように統合し、AI エージェント機能を実装しているかを説明します。

概要

OpenClaw は pi SDK を使って、AI コーディングエージェントをメッセージング Gateway アーキテクチャへ組み込みます。pi をサブプロセスとして起動したり、RPC モードを使ったりするのではなく、createAgentSession() を通じて pi の AgentSession を直接 import し、インスタンス化します。この組み込み方式には、次の利点があります。
  • セッションのライフサイクルとイベント処理を完全に制御できる
  • カスタムツールを注入できる(メッセージング、サンドボックス、チャンネル固有のアクションなど)
  • チャンネルやコンテキストごとにシステムプロンプトをカスタマイズできる
  • 分岐や compaction を含むセッション永続化をサポートできる
  • フェイルオーバー付きのマルチアカウント認証プロファイルローテーションを使える
  • プロバイダーに依存しないモデル切り替えができる

パッケージ依存関係

ファイル構成

コア統合フロー

1. 組み込みエージェントの実行

メインエントリポイントは pi-embedded-runner/run.tsrunEmbeddedPiAgent() です。

2. セッション作成

runEmbeddedAttempt()runEmbeddedPiAgent() から呼び出される)の内部では、pi SDK を使用します。

3. イベント購読

subscribeEmbeddedPiSession() は pi の AgentSession イベントを購読します。
主に次のイベントを処理します。
  • message_start / message_end / message_update(ストリーミング中のテキスト/思考)
  • tool_execution_start / tool_execution_update / tool_execution_end
  • turn_start / turn_end
  • agent_start / agent_end
  • auto_compaction_start / auto_compaction_end

4. プロンプト送信

セットアップ後、セッションに対してプロンプトを送ります。
SDK 側で、LLM への送信、tool call の実行、応答のストリーミングを含むエージェントループ全体を処理します。 画像注入はプロンプトローカルです。OpenClaw は現在のプロンプトから画像参照を読み取り、そのターンに限って images 経由で渡します。過去の履歴ターンを再走査して、画像ペイロードを再注入することはありません。

ツールアーキテクチャ

ツールパイプライン

  1. ベースツール: pi の codingTools(read、bash、edit、write)
  2. カスタム置き換え: OpenClaw は bash を exec / process に置き換え、sandbox 向けに read / edit / write をカスタマイズ
  3. OpenClaw ツール: messaging、browser、canvas、sessions、cron、gateway など
  4. チャンネルツール: Discord / Telegram / Slack / WhatsApp 固有のアクションツール
  5. ポリシーフィルタリング: profile、provider、agent、group、sandbox のポリシーでツールを絞り込む
  6. スキーマ正規化: Gemini / OpenAI の実装上の癖に合わせてスキーマを調整
  7. AbortSignal ラップ: 中断シグナルを尊重するようにツールをラップ

ツール定義アダプター

pi-agent-core の AgentTool は、pi-coding-agent の ToolDefinition とは異なる execute シグネチャを持ちます。pi-tool-definition-adapter.ts の adapter が、その差分を吸収します。

ツール分割戦略

splitSdkTools() はすべてのツールを customTools 経由で渡します。
これにより、OpenClaw の policy filtering、サンドボックス統合、拡張 toolset を provider ごとにぶらさず適用できます。

システムプロンプトの構築

システムプロンプトは buildAgentSystemPrompt()system-prompt.ts)で構築されます。Tooling、Tool Call Style、安全ガードレール、OpenClaw CLI リファレンス、Skills、Docs、Workspace、Sandbox、Messaging、Reply Tags、Voice、Silent Replies、Heartbeats、ランタイムメタデータに加え、有効時には Memory と Reactions、さらに任意の context file や追加 system prompt も含めて、完全なプロンプトを組み立てます。subagent 用の minimal prompt mode では、各セクションを短縮します。 プロンプトは、セッション作成後に applySystemPromptOverrideToSession() を通じて適用されます。

セッション管理

セッションファイル

セッションは、ツリー構造(id / parentId のリンク)を持つ JSONL ファイルです。pi の SessionManager が永続化を処理します。
OpenClaw はこれを guardSessionManager() でラップし、tool result の取り扱いを安全側に寄せています。

セッションキャッシュ

session-manager-cache.tsSessionManager instance をキャッシュし、同じファイルの再解析を避けます。

履歴制限

limitHistoryTurns() は、チャンネル種別(DM 対グループ)に応じて会話履歴を切り詰めます。

Compaction

自動 compaction はコンテキストオーバーフロー時に発動します。compactEmbeddedPiSessionDirect() が手動 compaction を処理します。

認証とモデル解決

認証プロファイル

OpenClaw は、provider ごとに複数の API key を持てる認証 profile store を維持します。
profile は、cooldown を追跡しながら失敗時にローテーションされます。

モデル解決

フェイルオーバー

FailoverError は、設定されている場合に model fallback を発動します。

Pi 拡張

OpenClaw は、特化した挙動を実現するためにカスタムの pi extension を読み込みます。

Compaction Safeguard

src/agents/pi-extensions/compaction-safeguard.ts は、適応的な token budget に加えて、tool failure と file operation の要約を含む compaction の guardrail を追加します。

Context Pruning

src/agents/pi-extensions/context-pruning.ts は、Cache-TTL ベースの context pruning を実装します。

ストリーミングとブロック返信

ブロックチャンク化

EmbeddedBlockChunker は、ストリーミングテキストを個別の返信ブロックへ分割して管理します。

Thinking / Final タグの除去

ストリーミング出力は、<think> / <thinking> ブロックを除去し、<final> の内容を抽出するよう処理されます。

返信ディレクティブ

[[media:url]][[voice]][[reply:id]] のような返信ディレクティブは、解析されて抽出されます。

エラー処理

エラー分類

pi-embedded-helpers.ts は、後続処理を分岐させるために error を分類します。

Thinking レベルのフォールバック

Thinking level がサポートされていない場合は、fallback します。

サンドボックス統合

サンドボックスモードが有効な場合、tool と path には制約が適用されます。

プロバイダー別の処理

Anthropic

  • Refusal の magic string 除去
  • 連続する role に対するターン検証
  • Claude Code のパラメーター互換性

Google/Gemini

  • ターン順序の修正(applyGoogleTurnOrderingFix
  • ツールスキーマのサニタイズ(sanitizeToolsForGoogle
  • セッション履歴のサニタイズ(sanitizeSessionHistory

OpenAI

  • Codex モデル向けの apply_patch ツール
  • Thinking レベルのダウングレード処理

TUI 統合

OpenClaw には、pi-tui の component を直接使うローカル TUI mode もあります。
これにより、pi の native mode に近い対話型 terminal 体験を提供します。

Pi CLI との主な違い

今後の検討事項

今後の再設計候補として、次の領域があります。
  1. ツールシグネチャの整合: 現在は pi-agent-core と pi-coding-agent のシグネチャ差分を吸収している
  2. セッションマネージャーのラップ: guardSessionManager は安全性を高める一方で複雑さも増やす
  3. 拡張の読み込み: pi の ResourceLoader をより直接的に使える可能性がある
  4. ストリーミングハンドラーの複雑化: subscribeEmbeddedPiSession が大きくなってきている
  5. プロバイダー固有の癖: pi 側で吸収できる可能性のあるプロバイダー別コードパスが多い

テスト

Pi 統合のカバレッジは、次の test suite にまたがっています。
  • src/agents/pi-*.test.ts
  • src/agents/pi-auth-json.test.ts
  • src/agents/pi-embedded-*.test.ts
  • src/agents/pi-embedded-helpers*.test.ts
  • src/agents/pi-embedded-runner*.test.ts
  • src/agents/pi-embedded-runner/**/*.test.ts
  • src/agents/pi-embedded-subscribe*.test.ts
  • src/agents/pi-tools*.test.ts
  • src/agents/pi-tool-definition-adapter*.test.ts
  • src/agents/pi-settings.test.ts
  • src/agents/pi-extensions/**/*.test.ts
ライブ/オプトイン:
  • src/agents/pi-embedded-runner-extraparams.live.test.tsOPENCLAW_LIVE_TEST=1 を有効化)
現在の実行コマンドについては、Pi 開発ワークフローを参照してください。