第一时间捕获有价值的信号
本文译自 Pi: The Minimal Agent Within OpenClaw,作者 Armin Ronacher。本文介绍了 Pi —— Openclaw 背后的极简主义编码 Agent,探讨其设计理念、扩展系统,以及为什么它代表了软件构建软件的未来方向。

如果你不是一直生活在岩石下,你会注意到本周我朋友 Peter 的一个项目在互联网上病毒式传播。它有很多名字。最近的一个是 Openclaw,但在新闻中你可能会根据阅读时间遇到它作为 ClawdBot 或 MoltBot。它是一个连接到你选择的通信渠道的 Agent,就是运行代码。
你可能不太熟悉的是,Openclaw 引擎盖下的是一个叫做 Pi 的小编码 Agent。而 Pi 恰好是,在这一点上,我几乎完全使用的编码 Agent。在过去几周里,我越来越成为这个小 Agent 的推销员。在我最近就此做了一个演讲后,我意识到我实际上还没有在这个博客上写过关于 Pi 的文章,所以我觉得我可能想给一些关于我为什么痴迷于它以及它与 Openclaw 关系的背景。
Pi 是由 Mario Zechner 编写的,与 Peter 不同,Peter 的目标是”带点疯狂的科幻”,1 Mario 非常脚踏实地。尽管方法不同,Openclaw 和 Pi 都遵循相同的想法:LLM 真的很擅长写代码和运行代码,所以拥抱这一点。在某些方面,我认为这不是意外,因为 Peter 去年让我和 Mario 迷上了这个想法和 Agent。
什么是 Pi?
所以 Pi 是一个编码 Agent。而且有很多编码 Agent。真的,我认为你现在实际上可以从架子上挑任何人,你将能够体验 Agent 式编程是什么样的。在这个博客的评论中,我积极地谈论过 AMP,我与它产生共鸣的原因之一是,它真的感觉像是一个由既对 Agent 式编程上瘾又尝试了一些不同的东西来看看哪些有效,而不只是在它周围构建一个花哨 UI 的人构建的产品。
Pi 对我来说有趣有两个主要原因:
- 首先,它有一个极小的核心。它有我所知道的任何 Agent 中最短的系统提示词,并且只有四个工具:Read、Write、Edit、Bash。
- 第二件事是,它通过提供一个也允许扩展将会话持久化状态的扩展系统来弥补其极小的核心,这非常强大。
还有一个小奖励:Pi 本身写得像优秀的软件。它不闪烁,它不消耗很多内存,它不会随机崩溃,它非常可靠,而且它是由一个非常关心什么进入软件的人写的。
Pi 也是小组件的集合,你可以在其上构建你自己的 Agent。这就是 Openclaw 是如何构建的,这也是我如何构建我自己的小 Telegram 机器人以及 Mario 如何构建他的 mom 的方式。如果你想构建你自己的 Agent,连接到某个东西,当指向自己和 mom 时,Pi 会为你召唤一个。
Pi 中没有什么
而且为了理解 Pi 中有什么,理解 Pi 中没有什么、为什么它不在那里,以及更重要的是:为什么它不会在 Pi 中,甚至更重要。最明显的遗漏是对 MCP 的支持。它里面没有 MCP 支持。虽然你可以为它构建一个扩展,但你也可以做 Openclaw 为支持 MCP 所做的事情,也就是使用 mcporter。mcporter 通过 CLI 接口或 TypeScript 绑定暴露 MCP 调用,也许你的 Agent 可以用它做些什么。或者不行,我不知道 :)
而且这不是一个懒惰的遗漏。这来自 Pi 如何工作的理念。Pi 的整个想法是,如果你想让 Agent 做它还不能做的事情,你不要去下载一个扩展或技能或这样的东西。你让 Agent 扩展自己。它庆祝写代码和运行代码的想法。
这不是说你不能下载扩展。这非常受支持。但不是一定鼓励你下载别人的扩展,你也可以将你的 Agent 指向一个已经存在的扩展,比如说,构建成像你在那里看到的东西,但对你喜欢的它做这些更改。
为构建 Agent 而构建的 Agent
当你看 Pi 和扩展后的 Openclaw 在做什么时,有一个像粘土一样可延展的软件示例。而且这为其底层架构设定了某些要求,这些要求实际上在很多方面为系统设定了某些约束,这些约束真的需要进入核心设计。
因此,例如,Pi 的底层 AI SDK 被编写成一个会话真的可以包含来自许多不同模型提供商的许多不同消息。它认识到会话的可移植性在模型提供商之间有些有限,所以它不太倾向于任何无法转移到另一个的模型提供商特定功能集。
第二是,除了模型消息之外,它在会话文件中维护自定义消息,这些消息可以被扩展用来存储状态或被系统本身用来维护根本不发送给 AI 或只发送其中一部分的信息。
因为这个系统存在,并且扩展状态也可以持久化到磁盘,所以它有内置的热重载,这样 Agent 就可以写代码、重载、测试它并循环,直到你的扩展实际上是功能性的。它还附带了 Agent 自己可以用来扩展自己的文档和示例。更好的是:Pi 中的会话是树。你可以分支并在会话内导航,这开辟了各种有趣的机会,比如启用工作流来进行支线任务来修复损坏的 Agent 工具,而不会在主会话中浪费上下文。工具修复后,我可以将会话倒回更早,Pi 总结在另一个分支上发生了什么。
这一切都很重要,因为例如,如果你考虑 MCP 如何工作,在大多数模型提供商上,MCP 的工具,像 LLM 的任何工具一样,需要在会话开始时加载到系统上下文或工具部分。这使得完全重载工具能做什么而不破坏完整缓存或让 AI 对先前调用如何不同工作感到困惑变得非常困难到不可能。
上下文之外的工具
Pi 中的扩展可以注册一个工具让 LLM 可用,我偶尔发现这很有用。例如,尽管我批评 Beads 是如何实现的,但我确实认为让 Agent 可以访问待办事项列表是一件非常有用的事情。而且我确实使用了一个我让 Agent 自己构建的、在本地工作的特定 Agent 问题追踪器。而且因为我希望 Agent 也能管理待办事项,在这个特定情况下,我决定给它一个工具而不是 CLI。对于问题的范围,这感觉是合适的,而且它目前是我加载到上下文中的唯一额外工具。
但在很大程度上,我添加到我的 Agent 的所有东西要么是技能,要么是 TUI 扩展,让我与 Agent 一起工作更愉快。除了斜杠命令,Pi 扩展可以直接在终端中渲染自定义 TUI 组件:微调器、进度条、交互式文件选择器、数据表、预览窗格。TUI 足够灵活,Mario 证明了你可以在里面运行 Doom。不实用,但如果你可以运行 Doom,你当然可以构建一个有用的仪表板或调试界面。
我想强调我的一些扩展来给你一个什么是可能的想法。虽然你可以原样使用它们,但整个想法真的是你将你的 Agent 指向一个并随心所欲地 remix 它。
/answer
我不使用计划模式。我鼓励 Agent 问问题,并且有高效的来回。但我不喜欢如果你给 Agent 一个问题工具就会发生的结构化问题对话框。我更喜欢 Agent 自然的散文,穿插着解释和图表。
问题:内联回答问题会变得混乱。所以 /answer 读取 Agent 的最后响应,提取所有问题,并将它们重新格式化为一个漂亮的输入框。

/todos
即使我批评 Beads 的实现,给 Agent 一个待办事项列表真的很有用。/todos 命令将存储在 .pi/todos 中的所有项目作为 Markdown 文件显示。Agent 和我都可以操纵它们,并且会话可以认领任务以将它们标记为进行中。
(此处省略 YouTube 视频嵌入)
/review
随着更多代码由 Agent 编写,在 Agent 首先审查之前,把未完成的工作扔给人类就没什么意义了。因为 Pi 会话是树,我可以分支到一个新鲜的审查上下文中,获得发现,然后将修复带回主会话。

UI 以 Codex 为模型,它提供易于审查的提交、差异、未提交的更改或远程 PR。提示关注我关心的事情,所以我得到我想要的标注(例如:我让它标注新添加的依赖)。
/control
我试验但不积极使用的一个扩展。它让一个 Pi Agent 向另一个发送提示。这是一个没有复杂编排的简单多 Agent 系统,对于实验很有用。
/files
列出在会话中更改或引用的所有文件。你可以在 Finder 中显示它们、在 VS Code 中差异、快速查看它们,或在你的提示中引用它们。shift+ctrl+r 快速查看最近提到的文件,这在 Agent 生成 PDF 时很方便。
其他人也构建了扩展:Nico 的子 Agent 扩展和 interactive-shell,它让 Pi 在可观察的 TUI 覆盖层中自主运行交互式 CLI。
构建软件的软件
这些都只是你可以用你的 Agent 做什么的想法。它的重点主要是,这都不是我写的,它是由 Agent 按照我的规范创建的。我告诉 Pi 做一个扩展,它就做了。没有 MCP,没有社区技能,什么都没有。别误会我,我用了很多技能。但它们是由我的 clanker 手工制作的,不是从任何地方下载的。例如,我用一个只使用 CDP 的技能完全替换了我所有用于浏览器自动化的 CLI 或 MCP。不是因为替代方案不工作,或是坏的,而是因为这只是简单和自然。Agent 维护它自己的功能。
我的 Agent 有不少技能,而且关键是如果我不需要它们,我就把它们扔掉。例如,我给了它一个技能来读取其他工程师分享的 Pi 会话,这有助于代码审查。或者我有一个技能来帮助 Agent 制作我想要的提交消息和提交行为,以及如何更新变更日志。这些最初是斜杠命令,但我目前正在将它们迁移到技能,看看这是否同样有效。我还有一个技能,希望能帮助 Pi 使用 uv 而不是 pip,但我也添加了一个自定义扩展来拦截对 pip 和 python 的调用,以将它们重定向到 uv。
与像 Pi 这样的极简 Agent 一起工作给我的部分魅力在于,它让你生活在那个使用构建更多软件的软件的想法中。这走到极端就是当你移除 UI 和输出并将其连接到你的聊天时。这就是 Openclaw 所做的,并且鉴于其巨大的增长,我真的越来越觉得这将以一种或另一种方式成为我们的未来。