在上一篇文章中,我们介绍了 OpenClaw——这个前称 Clawdbot、在一周内突破 145,000 颗 GitHub 星标的爆红开源 AI 代理。那篇文章谈的是它「是甚么」以及「为甚么重要」。这篇文章会再深入一步:我们分析了实际原始码(版本 2026.1.30),了解它「如何」运作——尤其是 OpenClaw 如何建立在 Pi 之上。
我们发现,这是一套工程设计相当出色的系统,其理念挑战了业界大部分人对建立 AI 代理的既有思维。

Pi 基础:四个套件,一套理念
OpenClaw 的核心是 Pi——由 Mario Zechner 建立的极简编程代理。正如 Armin Ronacher 在分析文章中所写,Pi 有趣之处在于两点:
- 它的核心非常精简。 Pi 拥有所有代理中最短的系统提示词,而且只有四个工具:
Read、Write、Edit、Bash。 - 它透过扩充系统弥补精简核心的不足,让扩充功能能将状态持久储存至工作阶段。
这是刻意作出的架构决定,而不是限制。Pi 的理念是:如果你想让代理做新的事情,就请代理自行扩充能力。不需要 MCP 协定,也不用从技能市集下载——代理会自行编写程式码。
正如 Ronacher 所说:
「这不是偷懒而省略功能,而是源于 Pi 的运作理念。Pi 的整个想法是,如果你想让代理做它尚未能做的事情,你不会去下载扩充功能、技能或其他类似东西,而是请代理自行扩充能力。它推崇的是编写程式码和执行程式码的理念。」
OpenClaw 如何使用 Pi
查看实际的 package.json,可见 OpenClaw 依赖四个 Pi 套件(全部为 v0.51.0):
| 套件 | 用途 |
|---|---|
@mariozechner/pi-agent-core |
核心型别:AgentMessage、AgentTool、AgentEvent、StreamFn |
@mariozechner/pi-ai |
LLM 抽象层:Model<Api>、complete()、streamSimple()、OAuthCredentials |
@mariozechner/pi-coding-agent |
工作阶段管理:SessionManager、createAgentSession()、Skill、ExtensionContext、工具工厂(createReadTool、createWriteTool、createEditTool、codingTools) |
@mariozechner/pi-tui |
终端机介面:TUI、Component、SlashCommand、互动式元件 |
OpenClaw 并没有建立 Pi 的分支版本,而是在外层封装它。Pi 的代理核心提供基本的代理回圈、工具系统及工作阶段管理。OpenClaw 则在其上加入其余功能:闸道、通讯渠道、额外工具、记忆、浏览器自动化及子代理系统。
flowchart TB
subgraph PI["Pi Packages (v0.51.0)"]
direction TB
PAC["pi-agent-core<br/>AgentMessage, AgentTool, AgentEvent"]
PAI["pi-ai<br/>Model, complete(), stream(), OAuth"]
PCA["pi-coding-agent<br/>SessionManager, AgentSession,<br/>Read/Write/Edit/Bash tools,<br/>Skills, Extensions"]
PTU["pi-tui<br/>TUI, Components, SlashCommands"]
end
subgraph OC["OpenClaw Layer"]
direction TB
EMB["Pi Embedded Runner<br/>(wraps Pi's agent loop)"]
TW["Tool Wrappers<br/>(extends Pi's 4 tools)"]
OT["20+ Additional Tools<br/>browser, message, exec,<br/>web_search, image, cron,<br/>sessions_spawn, memory..."]
TP["8-Layer Tool Policy<br/>profile → provider → global →<br/>agent → group → sandbox →<br/>subagent"]
EXT["Pi Extensions<br/>Context Pruning,<br/>Compaction Safeguard"]
end
subgraph INFRA["OpenClaw Infrastructure"]
GW["Gateway + Channels"]
MEM["Memory + Vector Search"]
SUB["Subagent Registry"]
SEC["Security + Sandbox"]
ACP["Agent Communication<br/>Protocol (ACP)"]
end
PI --> OC
OC --> INFRA
OpenClaw 如何封装 Pi 的工具
OpenClaw 并非直接照用 Pi 的四个核心工具,而是为每个工具加入适合正式环境的强化层;这些实作可在 src/agents/pi-tools.ts 中看到:
Read → createOpenClawReadTool:封装 Pi 的 createReadTool(),加入 MIME 侦测(透过档案魔术位元组验证图片类型)、图片清理(在传送至供应商前移除过大的图片),以及 Claude Code 相容处理(将 file_path 作为 path 的别名)。
Write → 沙箱封装:封装 Pi 的 createWriteTool(),在启用沙箱模式时加入路径防护,防止档案写入沙箱根目录以外的位置。
Edit → 沙箱封装:封装 Pi 的 createEditTool(),加入参数标准化(为相容 Claude,将 old_string/new_string 转为 oldText/newText)及沙箱路径防护。
Bash → 完全取代:Pi 的 bash 工具由 OpenClaw 的 exec 工具取代。这是一个明显更完善的执行引擎,支援 Docker 沙箱执行、背景程序管理(透过独立的 process 工具)、安全政策(逐项指令询问/拒绝/允许)、提权模式、逾时处理、长时间执行程序的审批流程,以及按作用范围追踪程序。
除了四个核心工具,OpenClaw 还加入 20+ 个额外工具:
| 类别 | 工具 |
|---|---|
| 讯息通讯 | message、sessions_send、sessions_spawn、sessions_list、sessions_history |
| 浏览器 | browser(13 项子操作:navigate、snapshot、act、tabs、console、pdf...) |
| 网页 | web_search、web_fetch |
| 媒体 | image(视觉分析)、tts(文字转语音) |
| 基础设施 | gateway、nodes、cron、canvas、memory |
| 特定渠道 | discord_actions、slack_actions、telegram_actions、whatsapp_actions |
| 程式码 | apply_patch(OpenAI Codex 专用)、process(背景工作) |
嵌入式执行器:OpenClaw 的代理回圈封装层
最重要的整合点是 Pi Embedded Runner(src/agents/pi-embedded-runner/)。OpenClaw 透过它封装 Pi 的代理回圈,以支援多渠道使用:
flowchart TB
ENTRY["Entry Points<br/>Gateway RPC / CLI / Cron / Webhook"]
subgraph P1["Phase 1: Setup"]
WS["Resolve Workspace + Sandbox"]
TOOLS["Build OpenClaw Tools<br/>(Pi's 4 + 20+ extras)"]
SM["Open SessionManager<br/>(Pi JSONL store)"]
SETTINGS["Load SettingsManager<br/>(Pi workspace config)"]
AGENT["createAgentSession()<br/>(Pi factory)"]
end
subgraph P2["Phase 2: Context Assembly"]
SYS["Build System Prompt<br/>Base + Tools + Skills +<br/>SOUL.md + USER.md +<br/>AGENTS.md + HEARTBEAT.md"]
MODEL["Resolve Model + Auth<br/>(Pi ModelRegistry +<br/>OpenClaw AuthStorage)"]
HIST["Load Full History<br/>(Pi SessionManager)"]
SAN["Sanitize History<br/>(Anthropic/Gemini turn ordering)"]
IMG["Auto-inject Images<br/>(vision model detection)"]
PRUNE["Context Pruning Extension<br/>(soft trim / hard clear)"]
end
subgraph P3["Phase 3: Execution"]
PROMPT["session.prompt()<br/>(Pi agent loop)"]
STREAM["subscribeEmbeddedPiSession()<br/>(OpenClaw stream wrapper)"]
POLICY["8-Layer Tool Policy<br/>Check before each tool call"]
end
subgraph P4["Phase 4: Completion"]
COMP["Compaction if Triggered<br/>(Pi + Safeguard Extension)"]
PERSIST["Persist to JSONL"]
REPLY["Shape + Send Reply<br/>to Channel"]
CLEANUP["Dispose Session +<br/>Release Locks"]
end
ENTRY --> P1
P1 --> P2
P2 --> P3
P3 -->|"Tool calls loop<br/>back through Pi"| P3
P3 --> P4
嵌入式执行器的工作
- 工作区设定:解析代理的工作区目录、沙箱设定及技能快照
- 建立工具:呼叫
createOpenClawCodingTools()——取得 Pi 的codingTools阵列,逐一取代或封装工具,再加入 20+ 个 OpenClaw 专用工具 - 初始化工作阶段:开启 Pi 的
SessionManager(JSONL 对话纪录)、建立SettingsManager,然后呼叫 Pi 的createAgentSession()工厂函式 - 覆写系统提示词:将基础提示词、工具摘要、技能、启动档案(SOUL.md、USER.md 等)及执行环境资讯组合成完整系统提示词
- 清理历史纪录:验证并修正供应商特定的对话轮次顺序(Anthropic 要求用户与助理轮次交替;Gemini 要求以用户轮次开始)
- 执行提示词:呼叫
session.prompt()——此时实际执行的是 Pi 的代理回圈 - 订阅串流:
subscribeEmbeddedPiSession()封装 Pi 的串流,加入 OpenClaw 特定处理,包括区块式回复、推理内容撷取,以及向闸道回呼部分回复 - 压缩:若触发条件成立,执行 Pi 的
session.compact(),并由 Compaction Safeguard 扩充功能确保过程不会消耗过多上下文
八层工具政策系统
OpenClaw 架构中最精密的部分之一,是它的工具政策系统。任何工具执行前,都必须通过八层允许/拒绝筛选:
- 设定档政策(
tools.profile)——具名政策预设组合 - 供应商设定档(
tools.byProvider.profile)——按 LLM 供应商覆写设定 - 全域允许清单(
tools.allow)——整个执行个体的限制 - 供应商允许清单(
tools.byProvider.allow)——按供应商设定的全域限制 - 代理专属政策(
agents.{id}.tools.allow)——逐个代理的限制 - 群组政策——渠道层级限制(例如在 Discord 伺服器中停用
exec) - 沙箱政策——Docker 沙箱限制
- 子代理政策——针对新建立子代理的限制
这表示,在你的私人 WhatsApp 工作阶段中获准使用的浏览器工具,可以在 Discord 群组聊天中被拒绝;而沙箱内的子代理又可能采用完全不同的一组限制。每一层都会缩窄可用工具范围——最严格的组合优先。
Pi 扩充功能:上下文修剪与压缩防护
OpenClaw 内置两个自订 Pi 扩充功能,会挂接 Pi 的生命周期事件:
上下文修剪扩充功能
这个扩充功能位于 src/agents/pi-extensions/context-pruning/,会拦截 LLM 呼叫前的阶段,在上下文视窗空间不足时修剪旧工具结果:
- 软性裁剪:截短大型工具结果,保留开头及结尾
- 硬性清除:以占位内容取代非常旧的工具结果
- 保护机制:绝不修剪第一则用户讯息之前的内容(保护启动时读取的资料),并遵守
keepLastAssistants设定 - 触发条件:只在 Anthropic 快取 TTL 到期时启动(预设为 5 分钟),减少不必要的快取写入成本
压缩防护扩充功能
这个扩充功能位于 src/agents/pi-extensions/compaction-safeguard.ts,会拦截 Pi 的 session_before_compact 事件:
- 防止压缩过程消耗过多上下文
- 为移除的讯息另行制作摘要
- 追踪档案操作(已读取/修改的档案),并将其纳入摘要
- 纳入工具失败摘要
这些扩充功能展示了 Pi 架构的实际运作方式:它们以档案路径形式载入,由 Pi 在执行时发现,并透过 Pi 的 SessionManager 持久储存状态。
子代理系统
OpenClaw 在 Pi 之上加入子代理协调层(src/agents/subagent-registry.ts):
- 建立子代理:
sessions_spawn工具会建立拥有独立工作区及工具集的子代理工作阶段 - 登录表:在记忆体及磁碟上追踪子代理执行
- 生命周期:监听 Pi 代理的开始/完成/错误事件
- 清理:可设定政策,以
delete或keep删除或保留已完成的子代理资料 - 通知:子代理完成时通知父代理
- 跨程序:透过闸道 RPC 跨程序等待子代理
OpenClaw 代理正是这样委派任务:「研究这个主题」会建立研究子代理,「草拟回复」会建立写作子代理——全部由父代理协调。
代理通讯协定(ACP)
OpenClaw 实作了代理通讯协定(Agent Communication Protocol)(src/acp/)——一项新兴的代理间通讯标准:
- 伺服器:实作
@agentclientprotocol/sdk的AgentSideConnection - 转换层:连接 ACP 与 OpenClaw 的闸道协定
- 工作阶段对映:将 ACP 工作阶段对映至 OpenClaw 工作阶段金钥
- 事件对映:将闸道生命周期事件转换为 ACP 事件
这让外部相容 ACP 的客户端能透过 stdio(NDJSON)控制 OpenClaw 代理,为与其他代理框架互通打开大门。
记忆:向量搜寻与语意档案
OpenClaw 的记忆系统(src/memory/)不止于简单的档案储存:
- 向量嵌入:支援 OpenAI、Gemini 及本机 node-llama-cpp 嵌入供应商
- SQLite-vec:使用带有向量扩充功能的 SQLite 作本机向量储存
- 混合搜寻:结合向量相似度搜寻与关键字比对
- 自动建立索引:自动为工作阶段对话纪录、
MEMORY.md及每日笔记建立索引 - 去重:在重新建立索引时避免重复项目
记忆 tool 让代理能以语意方式搜寻自己的历史纪录——例如「我上周二讨论了 API 项目的甚么内容?」——而不必将完整历史纪录放入上下文。
安全存取范围仍然至关重要:
- 主要工作阶段(与拥有者直接聊天):可以读写
MEMORY.md,并使用向量搜寻 - 群组工作阶段:不能存取
MEMORY.md或个人记忆,防止资料外泄
浏览器自动化:Playwright 与 AI 快照
OpenClaw 实作了一套精密的浏览器控制系统(browser-tool.ts 共 725 行),以 Playwright 为基础,并整合 Chrome DevTools Protocol(CDP)。
flowchart LR
subgraph PROFILES["Browser Profiles"]
OC["openclaw<br/>Managed Playwright"]
CE["chrome extension<br/>Extension Relay"]
SB["sandbox<br/>Docker Container"]
RM["remote<br/>Browserless.io"]
end
subgraph TOOLS["13 Browser Actions"]
NAV["navigate"]
SNAP["snapshot"]
SCRN["screenshot"]
ACT["act (click/type/drag)"]
TABS["tabs / open / focus / close"]
CON["console"]
PDF["pdf"]
end
REQ["Agent Tool Call"] --> PROF["Profile Selection"]
PROF --> PROFILES
PROFILES --> PW["Playwright Connection"]
PW --> TOOLS
TOOLS --> RES["Role References<br/>e1, e2, e3..."]
RES -->|"Used in future actions"| REQ
视觉系统:不使用外部程式库
OpenClaw 不会使用外部视觉程式库(tesseract、pixelmatch 等)来理解网页,而是利用 Playwright 内部的 _snapshotForAI 方法——这是一个无障碍树 API,能产生稳定、以角色为基础的元素参照。
代理透过稳定参照来指定元素:click e7、type e4 "user@example.com"。这比以像素为基础的方法更可靠,因为角色参照不会因页面布局改变、动画或响应式断点而失效。
多设定档架构
- openclaw——由 Playwright 管理的浏览器,拥有独立的用户资料目录,与你的个人浏览器完全隔离。
- chrome extension——透过本机扩充功能中继连接至你实际使用的 Chrome 浏览器,适合需要存取已登入工作阶段的情况。
- sandbox——以 Docker 容器执行的浏览器,为不可信网站提供完全隔离。
- remote——Browserless.io 或类似的远端 CDP 端点,供伺服器端自动化使用。
技能:有安全保障的自我扩充
技能是带有 YAML 前置资料的 Markdown 档案(SKILL.md),会按优先次序从多个来源载入:
- 工作区技能(
./skills/)——最高优先次序 - 受管理技能(
~/.openclaw/skills/) - 内置技能(npm 套件)
- 额外目录(设定)
- 外挂技能目录
- ClawHub(clawhub.com)——公开登录库
技能包含载入检查机制,会在载入前检查作业系统相容性、所需执行档、环境变数及设定值。它们亦可转换为斜线指令(/skillname),并自动去重。
不过,Pi 的理念依然不变:虽然你可以下载技能,但它鼓励的做法是让代理自行编写技能。正如 Ronacher 所描述:
「我的代理有不少技能,关键是,当我不再需要某个技能时,就会将它丢弃。我有一个技能,协助代理按照我的要求撰写提交讯息、执行提交操作,以及更新变更纪录。」
安全模型
OpenClaw 的安全防护分布于输入、执行及资料边界:
- 输入:私讯配对(未知发送者会收到验证码)、明确的允许清单、群组提及触发限制
- 执行:非主要工作阶段使用 Docker 沙箱、八层工具政策系统、逐个工作阶段的提权模式开关
- 资料:只在本机储存、记忆存取范围(主要与群组工作阶段之别)、凭证储存于
~/.openclaw/credentials/ - 网络:Gateway WebSocket 只绑定回路介面(
127.0.0.1:18789)、以权杖进行身分验证
共有三个权限层级:non-main(限制最多)、main(正常)、elevated(执行敏感操作时明确启用)。
这对 AI 代理架构意味着甚么
我们的原始码分析揭示了几个值得留意的架构模式:
1. 封装,而非建立分支。 OpenClaw 以 npm 套件形式依赖 Pi,封装其工具及工作阶段管理,而不是建立程式码库的分支版本。这表示 Pi 的改进会自动传递至下游。
2. 从 4 个扩展至 24+ 个工具的模式。 Pi 由 4 个工具起步。OpenClaw 封装这 4 个工具,再加入 20+ 个——但全部都遵循 Pi 统一的 AgentTool 介面。代理回圈不在意有多少工具,只会执行 LLM 选择的工具。
3. 多租户代理必须具备多层政策系统。 当一个代理同时服务 WhatsApp 私讯、Discord 伺服器及沙箱子代理时,你需要的是可组合的安全政策,而不是单一的允许/拒绝清单。
4. 处理代理内部事务时,扩充功能优于外挂。 Pi 的扩充系统(生命周期挂接点及状态持久储存)比外挂系统更适合处理代理内部事务(上下文管理、压缩),因为扩充功能可以拦截代理回圈本身。
5. 保留完整历史纪录,配合智能淘汰。 OpenClaw 将完整对话历史传送至 LLM,透过压缩(持久摘要)及修剪(暂时裁剪)管理成本,保留过度摘要会遗失的细节。
这与 CHATTERgo 的关系
CHATTERgo 与 OpenClaw 在理念上有共通之处——尤其是重视自主、能使用工具的代理,而非预先编写的工作流程。我们的 AI 代理亦会:
- 动态推理客户问题,而不是依循流程图
- 使用执行时选取的工具(产品目录搜寻、订单查询、知识库)
- 跨工作阶段保留对话上下文
- 透过自订工具、API 及 MCP 扩充能力
关键差异在于我们专注的领域。OpenClaw 是在你自己的硬件上执行的通用个人代理。CHATTERgo 则是以托管服务形式运作、专为电子商务而设的代理,针对产品推荐、客户支援及多语言商务营运作出最佳化。
两种方法都指向同一个未来:AI 不只是谈论事情,而是真正采取行动。
资料来源
- OpenClaw 原始码(v2026.1.30):github.com/openclaw/openclaw
- OpenClaw 文件:docs.openclaw.ai
- OpenClaw 网站:openclaw.ai
- ClawHub 技能登录库:clawhub.com
- Armin Ronacher,〈Pi:OpenClaw 之中的极简代理〉,2026 年 1 月 31 日:lucumr.pocoo.org/2026/1/31/pi
- CHATTERgo 程式码分析——OpenClaw 架构深度剖析(v2026.1.30):app.chattergo.com/apps/public/doc/c2758da9
- CHATTERgo 程式码分析——OpenClaw 浏览器控制系统:app.chattergo.com/apps/public/doc/5965a85b