Pi vs Hermes vs OpenClaw,Pi 是什么?怎么选?
一句话概括
Pi 是一个开源的 AI 编程 agent 工具包——你在终端里跟它对话,它能帮你读代码、改代码、跑命令,本质上是"一个住在终端里的 AI 程序员"。52k 星,TypeScript 写的,架构非常干净。
整体结构:四层积木
把 Pi 想成一栋四层楼的房子,每层解决一个问题:

下面一层一层讲。
第 1 层:tui —— 终端里的"React"
解决什么问题? 终端本质上只能显示文字。你要在里面做出好看的交互界面(高亮代码、显示 diff、画进度条),需要一个渲染引擎。
怎么做的?
- 差分渲染(Differential Rendering):不是每次重画整个屏幕,而是只更新变了的部分。跟 React 的虚拟 DOM diffing 是一个思路。每个组件有个
render(width)方法返回一组文本行,框架对比上一帧,只重画不一样的行。 - 组件化:就像前端的 Component,它有
Text(文字)、Box(方框)、Editor(文本编辑器)、Markdown(渲染 Markdown)、Image(终端里显示图片)、SelectList(选择列表)等。 - 编辑器组件:内置了一个完整的多行文本编辑器,支持 Undo/Redo、Kill Ring(Emacs 式剪贴板)、自动补全、粘贴检测。用
Intl.Segmenter做 grapheme 级别的光标移动(emoji 不会被切成半个)。 - 终端 Markdown:用
marked解析 Markdown,然后用 ANSI 转义码给标题加颜色、给代码块加高亮、给链接加下划线。你在终端看到的漂亮格式化输出就是这层做的。
类比: 如果整个 Pi 是一辆车,tui 就是"仪表盘"——负责显示信息和接收输入。
第 2 层:ai —— “万能翻译官”
解决什么问题? 市面上十几家 AI 厂商(Anthropic、OpenAI、Google、Mistral、AWS Bedrock、Azure……),每家的 API 格式都不一样。你不想每换一个模型就重写一遍代码。
怎么做的?
- 统一类型系统:定义了
Message(消息)、ToolCall(工具调用)、Usage(token 用量)等通用类型。不管底层是 Anthropic 还是 OpenAI,对上层来说消息格式一模一样。 - Provider 懒加载注册:每个厂商是一个独立文件(
anthropic.ts、openai-responses.ts、google.ts……),只有你用到某个厂商时才加载它的代码。通过registerBuiltins()注册,加载失败不崩溃。 - 流式输出:所有厂商统一返回
AssistantMessageEventStream(一个 async iterable),事件包括文字片段、思考过程(thinking)、工具调用、token 计数。上层只需要for await (const event of stream)就行。 - 智能缓存:支持 Anthropic 的 prompt cache、OpenAI 的 cache affinity 等各家特有的缓存机制,让长对话更快更便宜。
支持的厂商(不完全列表): Anthropic、OpenAI、Google Gemini、Google Vertex、Mistral、AWS Bedrock、Azure OpenAI、DeepSeek、xAI、Groq、Together、Fireworks、Hugging Face、OpenRouter、GitHub Copilot……
类比: ai 层就是一个"万能充电头"——管你是 iPhone 还是安卓,USB-C 还是 Lightning,它都能给你充上电。
第 3 层:agent-core —— “大脑”
解决什么问题? 光能调 LLM 还不够,你得实现一个循环:“用户说话 → 问 LLM → LLM 要调工具 → 执行工具 → 把结果喂回 LLM → LLM 继续说”。这个循环要能处理各种边界情况(中断、重试、上下文太长要压缩、多轮嵌套调用等)。
这个循环有两层:
- 内循环:处理工具调用和"steering"消息(可以在 agent 运行中途注入额外指令)
- 外循环:处理 follow-up 消息(agent 本来要停了,但队列里还有后续任务)
工具调用生命周期:
beforeToolCall钩子 → 可以拦截或修改- 执行工具(支持串行或并行)
afterToolCall钩子 → 可以改写结果- 发事件通知外部
Agent Harness(agent 线束): 在 Agent Loop 外面再包一层,负责:
- 会话持久化:把对话存成 JSONL 文件,下次能接着聊
- 上下文压缩(Compaction):对话太长了,自动总结前面的内容,腾出空间
- 分支总结(Branch Summarization):把历史对话压缩成摘要
- 技能系统(Skills):可加载的能力模块
类比: agent-core 就是"自动驾驶系统"——感知(读 LLM 回复)、决策(要不要调工具)、执行(跑工具),循环往复。
第 4 层:coding-agent —— 用户直接用的产品
解决什么问题? 把前三层组装成一个拿来就能用的 CLI 编程助手。
7 个内置工具:
| 工具 | 干什么 | 类比 |
|---|---|---|
read |
读文件(支持图片、PDF、Notebook) | cat 的超级版 |
write |
写文件 | 重定向 > |
edit |
精确替换文件中的某段文字,输出 unified diff | 智能版 sed |
bash |
执行 shell 命令,有超时和进程管理 | 终端本身 |
grep |
正则搜索文件内容 | rg/grep |
find |
按 glob 模式找文件 | find/fd |
ls |
列目录 | ls |
工具的实现有个很聪明的设计:操作接口可替换。默认用本地文件系统,但你可以注入一个 SSH 实现,让工具在远程机器上执行。
四种运行模式:
- Interactive(交互模式):完整的终端 UI,打字对话
- Print(打印模式):非交互,适合管道
echo "fix bug" | pi - JSON:结构化输出
- RPC:作为服务端,接收 JSON-RPC 请求(给 IDE 插件用)
会话系统:
- 每次对话是一个"会话"(Session),存在
.pi/sessions/目录下 - 格式是 JSONL(每行一个 JSON,追加写入,极快)
- 支持
--continue(接着上次聊)、--resume(选一个历史会话)、--fork(从某个点分叉出新对话) - 会话里记录了所有消息、工具调用结果、文件快照、模型切换……完整的审计轨迹
扩展系统(Extensions):
这是 Pi 最酷的设计之一。你可以写 TypeScript 文件放到 .pi/extensions/ 里,给 Pi 添加能力:
- 自定义工具(比如加一个查 Jira 的工具)
- 自定义命令(
/my-command) - 自定义 UI 组件(在界面上加信息)
- 钩子(bash 命令执行前检查、compaction 完成后通知……)
- 甚至有人写了个 Doom 游戏跑在 Pi 的终端 UI overlay 里
上下文管理(Compaction): 对话太长时,token 会超出模型的上下文窗口。Pi 的做法:
- 检测 token 用量接近上限
- 找到合适的"切割点"(一般是对话中自然的分段)
- 把前面的对话交给 LLM 做摘要
- 用摘要替换原始消息,释放空间
- 继续对话,用户无感知
数据流全景:当你敲入一句话

工程亮点
- 供应链安全做得很硬核:所有依赖精确锁版本、
--ignore-scripts安装、shrinkwrap 锁传递依赖、pre-commit 阻止意外锁文件提交、CI 跑npm audit - 多 agent 并行安全:AGENTS.md 里有详细规则——禁止
git add .、禁止git reset --hard、只 add 自己改的文件 - TypeScript 使用 strip-only 模式:不用
enum、不用参数属性、不用namespace——这些需要编译时转换的语法都不用,保证代码可以被 Node 直接 strip 类型后执行 - Monorepo 但不用 Turborepo/Nx:手动
cd+npm run build管理构建顺序,够朴素,不引入额外复杂度
横向对比:Pi vs Hermes vs OpenClaw
这三个项目都是 AI agent 框架,但设计哲学完全不同。用一个比喻:Pi 是乐高积木,Hermes 是自学习机器人,OpenClaw 是开箱即用的家电。

三者定位
| 维度 | Pi | Hermes(Nous Research) | OpenClaw |
|---|---|---|---|
| 一句话定位 | 极简编程 agent 工具包,最大化可扩展 | 自学习 agent,越用越聪明 | 一体化 AI 助手平台,5 分钟上手 |
| 目标用户 | 想把 agent 适配到自己工作流的开发者 | 想要一个能跨会话学习的 power user | 不想折腾、开箱即用的非技术用户 |
| 语言 | TypeScript | Python | TypeScript(Node.js) |
| 星数 | ~52k | ~50k | 较大社区 |
架构差异
Pi 的思路:四层积木,每层可拆
Pi 的核心武器是分层和可替换。tui、ai、agent-core、coding-agent 四个包互不耦合,你可以只用 ai 层接 LLM,也可以只用 agent-core 跑自己的循环。扩展系统让你不用 fork 就能加功能。会话存成 JSONL,可观测、可审计、可分叉。
Hermes 的思路:自主学习闭环
Hermes 最独特的是"用着用着自己变强"。它有三个 Pi 没有的能力:
- 技能自生成:完成复杂任务后,自动把解决过程提炼成可复用的 skill,下次遇到类似问题直接调用
- 跨会话记忆:agent 主动整理记忆(不是简单的历史记录),用 FTS5 全文检索,还会给用户建画像(“这个用户偏好 X 风格”)
- 定时任务:内置 cron 调度器,用自然语言配置(“每天早上 8 点帮我总结昨天的 PR”),结果可以推到 Telegram/Discord/邮件
代价是架构更重、更黑盒——你不太容易看清它学了什么、为什么做这个决策。
OpenClaw 的思路:全都帮你装好
OpenClaw 走的是"全家桶"路线:100+ 插件预装、25+ 通信渠道(微信、Telegram、Discord、邮件……)、语音能力、可视化 Canvas UI。npm install 五分钟跑起来,不需要懂代码。但灵活性有限——你很难把它的某一层拆出来单独用。
关键能力对比
| 能力 | Pi | Hermes | OpenClaw |
|---|---|---|---|
| 工具数量 | 7 个核心工具 + 扩展系统无限加 | 40+ 内置工具 + MCP 扩展 | 100+ 插件预装 |
| 模型支持 | 十几家厂商统一接口 | 200+ 模型(via OpenRouter)+ 本地模型 | 多模型支持 |
| 记忆系统 | JSONL 会话文件,手动管理 | agent 自主整理 + FTS5 检索 + 用户画像 | 插件化记忆 |
| 学习能力 | 无(靠人写扩展) | 自动生成/改进 skill | 无 |
| 部署方式 | 本地终端 / RPC 服务 | 本地 / Docker / SSH / Serverless / HPC | 本地 Node.js 服务 |
| 会话管理 | 分叉、恢复、压缩,全可观测 | 跨会话记忆,自动总结 | 基础会话 |
| 定时任务 | 无(委托给外部 cron/tmux) | 内置自然语言 cron | 依赖外部 |
| 多用户 | 单用户终端 | Gateway 支持多用户 | 多渠道多用户 |
| 可观测性 | 极强(JSONL 审计轨迹) | 一般(学习过程较黑盒) | 一般 |
怎么选?
取决于你要解决什么问题:
- “我在做自己的 AI agent 产品,需要可靠的底层积木” → Pi。它的分层设计就是为了让你拆着用,每一层都有独立的 npm 包和稳定的 API。
- “我想要一个越用越懂我的私人助手” → Hermes。自学习能力是它的核心差异化,适合长期使用、个人定制的场景。
- “我不想写代码,就想快速跑起来一个能用的 AI 助手” → OpenClaw。全家桶路线对非技术用户最友好。
一个有意思的趋势:Pi 和 Hermes 都拿到了 ~50k 星,但走的是完全相反的路——Pi 做减法(核心工具只有 7 个,其他全靠扩展),Hermes 做加法(40+ 工具、自动学习、定时任务全内置)。最终谁赢不好说,但对于想理解 agent 架构的人来说,两个都值得读。Pi 教你怎么分层,Hermes 教你怎么做记忆和学习。