エントリポイント、起動シーケンス、主要コンポーネントの関係性
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の起動は以下のフローで進みます:
src/entry.ts がメインエントリポイントです。
process.title = "openclaw" でプロセス名を設定import("./cli/run-main.js") で runCli() を動的インポート・実行
src/cli/run-main.ts の runCli() が次のフェーズを担います:
.env ファイルの読み込みと環境変数の正規化tryRouteCli() でコマンドが高速パスに該当するか確認
openclaw gateway run コマンドにより、
src/gateway/server.impl.ts の startGatewayServer() が呼ばれます。
設定は src/config/ 以下で管理され、
主設定ファイルは ~/.openclaw/openclaw.json(JSON5形式)です。
${ENV_VAR}形式)| パス | 内容 |
|---|---|
~/.openclaw/ | 状態ディレクトリ(セッション、認証情報等) |
~/.openclaw/openclaw.json | 主設定ファイル |
~/.openclaw/sessions/ | セッションデータ |
~/.openclaw/credentials/ | 認証情報 |
~/.openclaw/workspace/ | デフォルトワークスペース |
OpenClawは createDefaultDeps()(src/cli/deps.ts)
を中心とした依存性注入パターンを採用しています。
import() を使い、起動時間を最小化createDefaultDeps()、createProcessSupervisor()、createProgramContext() パターンGatewayService インターフェースでmacOS/Linux/Windowsを統一的に扱う
src/daemon/service.ts の resolveGatewayService() が
プラットフォーム固有のサービス管理を提供します:
| OS | サービス方式 | 詳細 |
|---|---|---|
| macOS | LaunchAgent (launchd plist) | ユーザーログイン時に自動起動 |
| Linux | systemd unit | lingerサポートでSSH不要の常時起動 |
| Windows | Scheduled Task (schtasks) | タスクスケジューラ経由 |
src/process/supervisor/supervisor.ts の createProcessSupervisor() が
プロセスの生成・監視を管理します。2つのスポーンモードがあります:
child_process.spawn(非対話的コマンド用)node-pty による擬似端末(対話的シェルコマンド用)機能:スコープベースのキャンセル、全体タイムアウト、無出力タイムアウト、stdout/stderrキャプチャ、PID追跡、状態マシン(starting → running → exiting → finalized)。
src/agents/defaults.ts で定義されるデフォルト値:
| 項目 | 値 |
|---|---|
| デフォルトプロバイダ | anthropic |
| デフォルトモデル | claude-opus-4-6 |
| デフォルトコンテキストトークン数 | 200,000 |
| Gatewayポート | 18789 |