# OpenClaw 專案架構分析(2026-02-01)
> 本報告提供給首次接觸 OpenClaw 的工程師作為入門導覽。內容以「主題章節」方式整理,協助從不同切入點理解整體架構與實作方式。
::: warning
以下內容中包含 Copilot 與個人解讀,有任何錯誤都請提出!
:::
## 1. 專案總覽(What & Why)
OpenClaw 是一個「本機優先(local‑first)」的個人 AI 助理平台,重點在於**把所有聊天通道、裝置與工具都透過同一個控制平面協調**。它不是單一聊天機器人,而是能在多通道、多裝置之間協作的工作流系統。
**核心概念**:
- Gateway 是整個系統的中樞(控制平面)。
- 所有對外通道、CLI、UI、App 都以 Gateway 作為統一入口。
- Agent runtime 負責推理(模型)與工具調度。
這樣的設計使得:
- 通道擴充變得可插拔。
- UI / App / CLI 都只是不同形態的 Client。
- 安全策略可以集中在 Gateway 層處理。
<br>
## 2. 架構分層(High‑Level Architecture)
OpenClaw 可以抽象成以下幾層:
1. **控制平面(Gateway)**
- 主要負責 WebSocket 通訊、狀態同步、會話管理、事件分發、工具與節點管理。
- 任何 client 都透過 Gateway 溝通,避免重複的互通邏輯。
2. **通道適配層(Channels / Adapters)**
- 每個聊天平台都有獨立的 Adapter。
- 功能是把「平台原生格式」轉為「OpenClaw 通用事件」,再由 Gateway 分派給對應 session。
3. **Agent Runtime(推理 + 工具協調)**
- Agent 是「模型 + 工具」的實作核心。
- 推理後可呼叫工具(browser/canvas/nodes/cron 等)。
4. **UI / 客戶端**
- WebChat / Control UI / CLI / macOS/iOS/Android App。
- 這些都是「Gateway client」,本質只是一個入口形式的差異。
5. **Extensions / Plugins**
- 擴展通道或功能用的外掛,依賴獨立管理。
- 能減少核心依賴膨脹,也利於團隊/社群擴充。
<br>
## 3. 技術選擇(Tech Stack)
以下是從 codebase 中可觀察的主要技術選擇:
### 語言與平台
- TypeScript (ESM)
- Node.js 22+
- pnpm 為主的套件管理流程
### 主要核心技術
- WebSocket (`ws`):Gateway 的核心通訊層。
- Express:提供 Web 與控制面入口。
- CLI (`commander`):命令列入口與操作工具。
- Schema 驗證 (`ajv`, `@sinclair/typebox`, `zod`):強化配置與資料安全。
- UI (`lit`):WebChat/Control UI。
- 測試 (`vitest`):單元與整合測試。
### 平台整合
- 多通道 SDK(Slack/Discord/Telegram/WhatsApp 等)。
- macOS/iOS/Android 透過 Node/Swift/Kotlin 交互。
<br>
## 4. 專案搭建方式(Project Composition)
從 repo 結構可見 OpenClaw 是「多工作區 + 核心」的設計:
- `src/`:核心平台(Gateway、CLI、commands、infra、media 等)。
- `extensions/`:外掛通道與擴展功能。
- `apps/`:macOS/iOS/Android 原生應用。
- `ui/`:Web UI。
- `docs/`:文檔。
這種結構特別適合:
- 核心邏輯穩定、擴展容易。
- 不同平台能夠獨立演進。
- 支援開源生態的插件開發。
<br>
## 5. 基本執行邏輯(End‑to‑End Flow)
以下是訊息從進入到回覆的簡化流程:
1. **訊息進入**:
某通道(如 Telegram/WhatsApp)收到訊息。
2. **通道 Adapter 轉換**:
平台專用格式轉換成統一的 OpenClaw 事件。
3. **Gateway Routing**:
根據 session/router 規則,將訊息送往正確 agent。
4. **Agent Runtime 推理**:
模型產出回應,必要時呼叫工具。
5. **回傳**:
回覆交由 Gateway -> 通道 Adapter -> 原平台。
這個設計讓所有通道與工具共用同一套 ***routing / 安全 / 狀態*** 管理。
<br>
## 6. Junior 工程師的學習路線(建議切入點)
### Step 1:先理解「Gateway 是中樞」
**邏輯**:所有元件都 ***不直接互通***,而是經由 Gateway 交換事件、狀態與指令。
- Gateway = 系統的**大腦**與**路由**中心
- UI / CLI / Apps / Channels 都是 Gateway client
- 集中處理:Session 狀態、事件派發、工具調度、權限與安全政策
**為什麼重要**:
- 讓「多通道」與「多裝置」的協作成本降低
- 安全與審計集中化(控制點只有 Gateway)
- 擴展時不需要更動其他元件,只要連上 Gateway
### Step 2:理解「通道只是 Adapter」
**邏輯**:每個通道只做「翻譯」與「傳遞」,不做推理與決策。
- 入口:平台原生事件 → OpenClaw 通用事件
- 出口:OpenClaw 回覆 → 平台原生訊息
- 統一行為:只關注格式、速率限制、送達狀態
**為什麼重要**:
- 讓通道擴充「可插拔」,避免每個平台綁死核心邏輯
- 減少耦合,Gateway 依然能提供一致的 routing 與安全策略
### Step 3:理解「Agent 是推理 + 工具的核心」
**邏輯**:Agent 代表一個工作單元(session),負責推理與呼叫工具。
- 每個 session 都有自己的上下文、工具權限、設定
- 推理結果可觸發工具(browser / canvas / nodes / cron 等)
- 工具的回應再回流到 session,形成完整工作流
**為什麼重要**:
- 多 session 模式可支援「多角色 / 多任務」並行
- 工具調用與 Sandbox 策略都可由 session 控制
### Step 4:理解「UI/CLI 是 Client」
**邏輯**:UI/CLI/App 只是 Gateway 的不同使用介面。
- UI 提供視覺化管理與監控
- CLI 提供腳本化與自動化操作
- App 提供本機能力(語音、通知、Canvas、Camera)
**為什麼重要**:
- 功能不分散:所有操作流程與狀態都來自 Gateway
- UI/CLI/App 可以同時存在且不互相干擾
### Step 5:理解「Extensions 是外掛化」
**邏輯**:將可選功能與特定通道獨立成插件,以減少核心膨脹。
- 核心保持最小必要功能
- 插件各自管理依賴與版本
- 插件可獨立發佈、升級或下架
**為什麼重要**:
- 維護成本降低
- 社群可平行開發新通道
- 更容易做版本與安全隔離
<br>
## 7. 總結
OpenClaw 的核心價值在於「統一控制平面 + 多通道/多裝置協作」。
對初學者來說,理解順序建議是:
1. Gateway → 2) Channels → 3) Agent → 4) Tools → 5) UI/Apps → 6) Extensions。
一旦掌握這個脈絡,就能快速理解其模組化設計與可擴展性。
<br>
## 8. System Design Frame(圖解)
以下是以系統設計視角的整體框架圖,幫助工程師快速理解「訊息流」、「控制流」與「工具流」的關係:
```
┌──────────────────────────────────────────────────────────────────────┐
│ Channels │
│ WhatsApp / Telegram / Slack / Discord / Google Chat / iMessage │
│ (Extensions: Teams / Matrix / Zalo / ... ) │
└──────────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────────┐
│ Gateway (WS) │
│ - Session routing - Events & presence - Auth & policy │
│ - Tool dispatch - Control UI/WebChat - Node registry │
└──────────────┬───────────────────────┬───────────────────────────────┘
│ │
│ │
▼ ▼
┌────────────────────┐ ┌────────────────────┐
│ Agent Runtime │ │ UI / Clients │
│ - Model reasoning │ │ - WebChat / UI │
│ - Tool invocation │ │ - CLI / Apps │
└──────────┬─────────┘ └────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ Tools │
│ Browser / Canvas / Nodes / Cron / Webhooks / Media Pipeline │
└──────────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────────┐
│ Devices / Nodes │
│ macOS / iOS / Android (camera, screen, voice, notify, system.run)│
└──────────────────────────────────────────────────────────────────┘
```
**如何閱讀這張圖**:
- 上層(Channels):所有外部訊息來源都是「輸入入口」。
- 中間(Gateway):控制平面集中處理「路由 / 安全 / 狀態同步」。
- 右側(UI/Clients):只是不同介面,功能來源都來自 Gateway。
- 下層(Agent + Tools + Nodes):推理與執行的工作流,所有工具呼叫皆由 Gateway 調度。
<br>
## 9. System Prompt(設計理念與成效來源)
本專案的 System Prompt 並不是「單一長字串」,而是 ***以多層提示檔案* 與 *執行規範* 組合而成的提示框架**。在本專案中,提示與執行行為是高度整合的:一方面約束模型輸出風格與安全邊界,另一方面也提供可操作的工具與工作流程,讓模型能在可控的環境中完成任務。
### 9.1 System Prompt 的構成方式(從 codebase 觀察)
OpenClaw 的 agent 會載入「注入式提示檔案」,並以一致的規範驅動工具與工作流:
- **注入式提示檔案**:例如 `AGENTS.md` / `SOUL.md` / `TOOLS.md`(在專案的工作區與 agent workspace 會被注入使用)。
- **工具規範與限制**:提示內容會明確定義工具可用範圍、何時可操作、何時禁止。
- **一致的輸出與風格**:提示系統要求輸出簡潔、可追溯、並避免無根據的臆測。
### 9.2 為什麼能更有效率地驅動模型
這個專案的 Prompt 不只是「說明該怎麼回答」,還把**執行規則、工具流程與安全策略**一起納入:
- **任務導向**:Prompt 明確要求「完成任務」與「可執行行動」,避免空泛回覆。
- **工具導向**:模型被要求在需要時使用工具,並遵守工具使用規範。
- **安全導向**:對敏感內容、破壞性操作、與不安全輸出有明確限制。
- **上下文管理**:透過工作區與注入檔案,將專案規則與風格持續保持一致。
### 9.3 與其他專案的差異(概念層比較)
以下是以「架構策略」層級的比較(不涉及其他專案細節):
| 比較面向 | 常見專案做法 | OpenClaw 作法 | 優勢 |
| ------------ | --------------- | ---------------------------------- | ---------------------- |
| Prompt 結構 | 單一長 prompt | 多檔案注入式提示框架 | 可維護、可分工、可擴展 |
| 工具使用 | 依模型自行決定 | 明確規範何時可/不可使用工具 | 可控性高、可審計 |
| 安全限制 | 僅靠模型自律 | Prompt + Gateway + Policy 多層限制 | 減少誤用、提升可靠性 |
| 上下文一致性 | 依 session 記憶 | 透過固定提示 + 配置檔保持一致 | 跨任務一致性高 |
### 9.4 專案強大之處(Prompt 角度)
OpenClaw 的 Prompt 能「有效、高性能」並非因為文字本身更長,而是因為:
1. **Prompt 是流程的一部分**:不是只控制輸出,而是控制行為。
2. **工具與策略綁定**:把工具規範與安全策略寫進模型的「行為邊界」。
3. **可維護的知識注入**:以多檔案與工作區配置管理提示,避免單一巨大 prompt 失控。
4. **全系統一致性**:所有 client(CLI/UI/Apps/Channels)都共享同一套規則與流程,模型行為一致。
這些特性使得 OpenClaw 的 Prompt 不只是「指令」,而是**一整套可控、可審計、可擴展的行為框架**,也是其可靠性與可擴展性的關鍵來源之一。
<br>
## 10. Pipeline(處理流程、優勢與優化方向)
### 10.1 Pipeline 概念總覽
OpenClaw 的 pipeline 可以理解為「事件流 + 控制流 + 工具流」的組合,從訊息進入到回覆輸出都由 Gateway 統一協調。典型流程如下:
1. **Ingress(通道收訊)**:Channel Adapter 接收外部平台事件。
2. **Normalization(統一格式)**:轉成 OpenClaw 通用事件。
3. **Routing & Policy(路由與策略)**:依 session/router 規則決定 agent;同時套用安全/權限政策。
4. **Agent Reasoning(推理)**:模型推理與任務拆解。
5. **Tool Orchestration(工具調度)**:調用 browser/canvas/nodes/cron 等工具。
6. **Post‑Process(回應整形)**:格式化輸出、分段、附加 metadata。
7. **Delivery(通道回送)**:回覆送回原平台。
8. **Telemetry(狀態與紀錄)**:事件、狀態、使用量、錯誤回報。
### 10.2 這樣的流程有什麼優勢?為什麼強大?
- **統一入口與出口**:所有通道走相同管道,降低異質平台整合成本。
- **一致的安全控制**:在 Routing 階段就能應用安全政策,避免工具濫用。
- **可插拔的擴展能力**:通道與工具都是插件化設計,新增功能不需更動核心。
- **可觀測性強**:集中式事件與狀態記錄,便於追蹤與除錯。
- **多 Client 並存**:UI/CLI/App 同時使用,不互相干擾。
### 10.3 未來可考慮的優化方向
以下是一般 AI Agent 平台可考慮的改進方向(概念層):
- **更細緻的事件追蹤與分散式 tracing**:提升問題定位效率。
- **模型選擇與成本路由**:動態選擇模型以平衡成本與品質。
- **回應快取與重試策略**:減少重複推理成本,提高穩定性。
- **工具沙箱隔離加強**:降低執行風險與安全攻擊面。
- **插件依賴與版本隔離**:避免擴展造成核心不穩。
- **長期記憶與工作流編排**:讓 agent 能更好地處理長期任務。
### 10.4 在 agent 專案中,重要優化會落在 prompt 還是 codebase?為什麼?
**答案是兩者都重要,但優先順序依目標不同而變化:**
- **Prompt 優化**:影響模型的理解力、意圖拆解與回應品質。
- 主要用於提升任務完成率、回覆一致性、與人機互動體驗。
- **Codebase 優化**:影響穩定性、延遲、成本、安全與可觀測性。
- 在長期運行的生產環境中,codebase 的改進通常更關鍵。
**結論**:
- 如果目標是「提升任務表現」,Prompt 優化的效果最快顯著。
- 如果目標是「提升可靠性與可維運性」,Codebase 優化才是核心。
- 在 OpenClaw 這類平台中,最強的做法是 **Prompt + Pipeline 的協同演進**,以行為規則驅動模型,再以系統架構保證穩定性。
<br>
## 11. 參考資料與程式碼驗證(Codebase References)
本章節列出報告中提及的關鍵概念對應的實際檔案與程式碼位置,供讀者進一步驗證與深入研究。
### 11.1 Gateway(控制平面)
**核心實作**:
- `src/gateway/server.impl.ts` - Gateway 主伺服器實作,包含 WebSocket 與 HTTP 服務啟動邏輯
- `src/gateway/server/ws-connection.ts` - WebSocket 連線處理與 client 管理
- `src/gateway/server-runtime-state.ts` - Gateway 執行階段狀態管理(clients、broadcast、sessions)
- `src/gateway/server-methods.ts` - Gateway RPC 方法處理(agent、sessions、config 等)
**協議定義**:
- `src/gateway/protocol/schema.ts` - Gateway WebSocket 協議的 TypeBox schema
- `docs/gateway/protocol.md` - Gateway 協議完整文檔(framing、roles、scopes)
**關鍵概念驗證**:
```typescript
// src/gateway/server-runtime-state.ts
export function createGatewayRuntimeState(params) {
const clients = new Set<GatewayWsClient>();
const { broadcast } = createGatewayBroadcaster({ clients });
// Session routing, tool dispatch, presence management
return { clients, broadcast, agentRunSeq, chatRunState, ... };
}
```
### 11.2 Channels(通道適配層)
**通道架構**:
- `src/channels/plugins/types.ts` - 通道插件介面定義
- `src/channels/plugins/index.ts` - 通道插件註冊與查找
- `src/channels/registry.ts` - 通道 ID 標準化與元資訊管理
**具體通道實作**(範例):
- `extensions/telegram/` - Telegram 通道插件
- `extensions/discord/` - Discord 通道插件
- `extensions/slack/` - Slack 通道插件
- `extensions/whatsapp/` - WhatsApp 通道插件(Baileys)
**Adapter 模式驗證**:
```typescript
// src/channels/plugins/types.adapters.ts
export type ChannelOutboundAdapter = {
deliveryMode: "direct" | "gateway";
sendText: (ctx: ChannelOutboundContext) => Promise<OutboundDeliveryResult>;
sendMedia: (
ctx: ChannelOutboundMediaContext,
) => Promise<OutboundDeliveryResult>;
};
```
### 11.3 Routing & Session Management
**路由邏輯**:
- `src/routing/resolve-route.ts` - Agent 路由解析(根據 channel/peer/binding 決定 session)
- `src/routing/bindings.ts` - Agent bindings 管理(多 agent 路由規則)
- `src/routing/session-key.ts` - Session key 格式化與解析
**Session 管理**:
- `src/gateway/session-utils.ts` - Session store 讀寫與列表操作
- `src/config/sessions.ts` - Session 配置與持久化
**路由範例**:
```typescript
// src/routing/resolve-route.ts
export function resolveAgentRoute(
input: ResolveAgentRouteInput,
): ResolvedAgentRoute {
// 依 binding 規則決定 agentId + sessionKey
const bindings = listBindings(input.cfg);
// Match by peer/guild/team/account/channel
return { agentId, sessionKey, matchedBy };
}
```
### 11.4 Agent Runtime & Tools
**Agent 執行**:
- `src/agents/pi-embedded-runner/run/attempt.ts` - Agent 推理執行入口
- `src/agents/pi-tools.ts` - Pi agent 工具集註冊
- `src/agents/openclaw-tools.ts` - OpenClaw 專屬工具(sessions\_\*, agents_list 等)
**Tools 實作範例**:
- `src/agents/tools/sessions-spawn-tool.ts` - Sub-agent 產生工具
- `src/agents/tools/sessions-send-tool.ts` - 跨 session 訊息傳送
- `src/agents/tools/session-status-tool.ts` - Session 狀態查詢
- `src/agents/bash-tools.process.ts` - Process 管理工具
**工具調度驗證**:
```typescript
// src/agents/pi-tools.ts
export function createPiAgentTools(options?) {
const tools = [
createBashTool(...),
createProcessTool(...),
createWebSearchTool(...),
createBrowserTool(...),
// ... 其他工具
];
return tools;
}
```
### 11.5 System Prompt(注入式提示框架)
**提示檔案模板**:
- `docs/reference/templates/AGENTS.md` - Agent 工作區指南(記憶、工作流程)
- `docs/reference/templates/SOUL.md` - Agent 性格與行為準則
- `docs/reference/templates/TOOLS.md` - 工具與環境特定配置
**實際應用位置**:
- `~/.openclaw/workspace/AGENTS.md` - 使用者工作區(執行時注入)
- `~/.openclaw/workspace/SOUL.md` - Agent 性格檔案
- `~/.openclaw/workspace/TOOLS.md` - 環境特定配置
**提示框架特點**(從模板可見):
```markdown
# AGENTS.md 核心指令
## Every Session
Before doing anything else:
1. Read `SOUL.md` — this is who you are
2. Read `USER.md` — this is who you're helping
3. Read `memory/YYYY-MM-DD.md` for recent context
4. **If in MAIN SESSION**: Also read `MEMORY.md`
# SOUL.md 行為準則
**Be genuinely helpful, not performatively helpful.**
**Have opinions.** You're allowed to disagree.
**Be resourceful before asking.** Try to figure it out.
```
### 11.6 Pipeline 流程驗證
**事件流處理**:
- `src/gateway/server-chat.ts` - 訊息進入後的 agent 調度
- `src/infra/outbound/deliver.ts` - 訊息回送與通道適配
- `src/gateway/server-methods/agent.ts` - Agent RPC 方法(推理入口)
**Pipeline 階段對照**:
```typescript
// 簡化流程示意(實際分散在多個檔案)
1. Ingress: Channel Adapter 收訊
2. Normalization: 統一為 OpenClaw 事件格式
3. Routing: resolveAgentRoute() 決定 sessionKey
4. Agent Reasoning: callAgent() 呼叫模型
5. Tool Orchestration: 工具執行與回應
6. Post-Process: 格式化輸出
7. Delivery: deliverResponse() 回送通道
8. Telemetry: 狀態記錄與事件廣播
```
### 11.7 配置與文檔
**配置結構**:
- `src/config/config.ts` - 配置檔讀寫與驗證
- `src/config/types.gateway.ts` - Gateway 配置 TypeScript 型別
- `src/config/zod-schema.agent-runtime.ts` - Agent runtime 配置 Zod schema
**官方文檔**(完整架構說明):
- `docs/gateway/index.md` - Gateway 運行指南
- `docs/concepts/architecture.md` - 架構總覽
- `docs/cli/index.md` - CLI 完整參考
### 11.8 測試與驗證
**測試範例**(驗證上述邏輯確實運作):
- `src/gateway/server.config-patch.e2e.test.ts` - Gateway 配置更新測試
- `src/agents/openclaw-tools.agents.test.ts` - Agent 工具測試
- `src/agents/openclaw-tools.subagents.sessions-spawn-applies-model-child-session.test.ts` - Sub-agent 模型繼承測試
<br>
## 12. 結語
本報告所述內容均可在 OpenClaw codebase 中找到對應實作。以上參考資料提供了驗證路徑,讀者可依此深入研究各模組的細節實作。
OpenClaw 的強大之處在於「設計即程式碼」:架構概念與實際執行高度一致,Prompt 與 Pipeline 協同演進,使其成為一個既可靠又可擴展的 AI Agent 平台。