🦞
🦞 OpenClawアーキテクチャ解説に関する訂正と技術的補足
記事「OpenClawの何が特別なのか?」におけるアーキテクチャの説明について、ソースコードの実装およびプロトコル仕様と異なる点がいくつか見受けられました。
OpenClawは「Nodeがエージェントを動かす」のではなく、 「Gatewayがエージェントの頭脳(推論・HEARTBEAT)であり、Nodeは手足(ツール実行・入出力)である」 という構成が正となります。
正確な理解のために、主要な訂正箇所をまとめました。
1. エージェントとHEARTBEATの実行主体について
記事の記述:
Nodeがエージェントを実行し、Nodeが常時起動してHEARTBEATを回す。
実装の実態:
エージェントの推論とHEARTBEATの実行は、すべて「Gateway」が行います。
-
Gatewayの役割:
runEmbeddedPiAgent()によるLLM推論、およびstartHeartbeatRunner()による定期実行(HEARTBEAT)を担当する重量級プロセスです。 -
Nodeの役割: Gatewayからの指示(RPC)を待ち受ける軽量な周辺機器(ワーカー)です。
role: "node"としてWebSocketで接続し、node.invoke.requestを受信したときのみコマンドを実行します。自律的にエージェントを動かすことはありません。
2. Gatewayの位置付けについて
記事の記述:
Gatewayは外部アタッチの窓口である。
実装の実態:
Gatewayはアーキテクチャの「中央ハブ(制御プレーン)」です。
Gatewayは単なる接続窓口ではなく、以下を行う中核プロセスです。
- 20以上のチャネル(Slack/Discord/Telegram等)との接続管理
- メッセージのルーティングとセッション管理
- ツール実行の振り分け(Gateway自身で実行するか、Nodeに委譲するかの判断)
3. Nodeのバリエーションと役割
Nodeは単一のアプリケーションではなく、Gatewayに接続して機能を提供する周辺機器の総称です。
用途に合わせて以下の3種類の実装が存在します。
- Node Host (CLI)
- サーバーやローカル環境でバックグラウンド実行するための軽量CLI。
- 主な役割:
system.runコマンドの実行環境提供。
- macOS Native App
- メニューバー常駐型のデスクトップアプリ。
- 主な役割: CLIの機能に加え、Canvas描画、カメラ/画面共有、通知などの視覚的・OS固有機能の提供。
- Mobile App (iOS/Android)
- スマートフォン上で動作するクライアント。
- 主な役割: 位置情報、モバイル通知、カメラ入力などの提供。
これらはすべて、Gatewayから見れば等しく「機能を提供する周辺デバイス(Node)」として扱われます。
正しいアーキテクチャ概要図
Gatewayを中心に、各デバイスがNodeとしてぶら下がる構成です。
責務の整理
| コンポーネント | 役割 | 実行主体 | 主な機能 |
|---|---|---|---|
| Gateway | Brain | Main | LLM推論、HEARTBEAT、チャネル接続、セッション管理 |
| Node (CLI) | Hands | Sub | コマンド実行(system.run) |
| Node (macOS) | Eyes/Hands | Sub | Canvas描画、画面/カメラ共有、通知、コマンド実行 |
| Node (Mobile) | Senses | Sub | モバイル通知、位置情報、カメラ入力 |
以上、記事の更新や理解の助けになれば幸いです。
Discussion