1. 全体概要とアーキテクチャ

エントリポイント、起動シーケンス、主要コンポーネントの関係性

プロジェクトの全体像

OpenClawは「パーソナルAIアシスタント」を自分のデバイスで動かすためのプロダクトです。 WhatsApp、Telegram、Discord、Slack、Signal、iMessageなど複数のメッセージングプラットフォームを統合し、 単一のAIエージェントとして動作します。

コアコンセプト

ディレクトリ構造

主要なソースディレクトリとその役割:

ディレクトリ役割
src/agents/AIエージェントランタイム全体(プロンプト構築、ツール定義、セッション管理、サブエージェント)
src/auto-reply/受信メッセージに対する自動応答パイプライン
src/channels/チャンネル抽象化レイヤー(レジストリ、Dock、ルーティング)
src/cli/CLIフレームワーク(Commander.js ベース)
src/commands/CLIコマンド実装
src/config/設定システム(JSON5、Zodバリデーション、環境変数置換)
src/cron/スケジュールタスク(Cronジョブサービス)
src/daemon/OSサービス管理(launchd/systemd/schtasks)
src/discord/Discord統合
src/gateway/WebSocket Gatewayサーバー
src/hooks/ライフサイクルフック(Pub/Sub)
src/memory/メモリシステム(SQLite + ベクトル検索 + FTS5)
src/process/プロセス監視(子プロセス管理、PTY)
src/routing/メッセージルーティング
src/telegram/Telegram統合
src/whatsapp/, src/web/WhatsApp統合
skills/50以上のスキル定義
extensions/チャンネル拡張(MS Teams, Matrix, Zalo等)

エントリポイントと起動シーケンス

OpenClawの起動は以下のフローで進みます:

Step 1: CLIエントリポイント

src/entry.ts がメインエントリポイントです。

  1. process.title = "openclaw" でプロセス名を設定
  2. 実験的警告の抑制チェック — 必要であればNode.jsフラグ付きで自身を再スポーン
  3. CLIプロファイル引数の解析
  4. import("./cli/run-main.js")runCli() を動的インポート・実行

Step 2: CLI初期化

src/cli/run-main.tsrunCli() が次のフェーズを担います:

  1. .env ファイルの読み込みと環境変数の正規化
  2. 高速ルートtryRouteCli() でコマンドが高速パスに該当するか確認
  3. 通常ルート:Commander.js プログラムの構築
    • プライマリコマンドモジュールの遅延登録
    • 25以上のサブCLI(gateway, daemon, acp, cron 等)の遅延登録
    • プラグインCLIコマンドの登録
  4. Commander によるコマンド解析・実行

Step 3: Gatewayサーバー起動

openclaw gateway run コマンドにより、 src/gateway/server.impl.tsstartGatewayServer() が呼ばれます。

Gateway起動シーケンス: 1. 設定ファイル読み込み・バリデーション 2. プラグイン自動有効化(環境変数ベース) 3. Gateway認証トークン生成 4. 診断ハートビート開始 5. サブエージェントレジストリ初期化 6. デフォルトエージェントID・ワークスペース解決 7. Gatewayプラグイン読み込み 8. チャンネルプラグイン初期化 ├── Telegram (grammY) ├── Discord (discord.js) ├── Slack (@slack/bolt) ├── WhatsApp (Baileys) ├── Signal (signal-cli) ├── iMessage └── 拡張チャンネル (MS Teams, Matrix等) 9. 認証レートリミッター作成 10. Control UI(Webダッシュボード)セットアップ 11. HTTP/WebSocketサーバー起動 12. チャンネル健全性モニター開始 13. 設定リローダー開始 14. Cronサービス開始 15. Boot.md実行(初回起動タスク)

設定システム

設定は src/config/ 以下で管理され、 主設定ファイルは ~/.openclaw/openclaw.json(JSON5形式)です。

設定の読み込みフロー

  1. JSON5ファイルの読み込み
  2. 環境変数の置換(${ENV_VAR}形式)
  3. Config includesの適用(組み合わせ可能な設定)
  4. 環境変数オーバーライド
  5. マージパッチの適用
  6. デフォルト値の適用
  7. パス正規化
  8. シェル環境からのAPIキーフォールバック
  9. Zodスキーマによるバリデーション

主な設定パス

パス内容
~/.openclaw/状態ディレクトリ(セッション、認証情報等)
~/.openclaw/openclaw.json主設定ファイル
~/.openclaw/sessions/セッションデータ
~/.openclaw/credentials/認証情報
~/.openclaw/workspace/デフォルトワークスペース

依存性注入パターン

OpenClawは createDefaultDeps()src/cli/deps.ts) を中心とした依存性注入パターンを採用しています。

デーモン / サービスレイヤー

src/daemon/service.tsresolveGatewayService() が プラットフォーム固有のサービス管理を提供します:

OSサービス方式詳細
macOSLaunchAgent (launchd plist)ユーザーログイン時に自動起動
Linuxsystemd unitlingerサポートでSSH不要の常時起動
WindowsScheduled Task (schtasks)タスクスケジューラ経由

プロセス監視

src/process/supervisor/supervisor.tscreateProcessSupervisor() が プロセスの生成・監視を管理します。2つのスポーンモードがあります:

機能:スコープベースのキャンセル、全体タイムアウト、無出力タイムアウト、stdout/stderrキャプチャ、PID追跡、状態マシン(starting → running → exiting → finalized)。

デフォルト設定

src/agents/defaults.ts で定義されるデフォルト値:

項目
デフォルトプロバイダanthropic
デフォルトモデルclaude-opus-4-6
デフォルトコンテキストトークン数200,000
Gatewayポート18789