前言
大家都知道小龙虾Openclaw,但pi的知名度就低很多了,它是Openclaw的核心,是一个最小化的agent项目,作者是Mario Zechner。他的履历很精彩,也是资深开源极客了。
本文是作者本人的演讲视频《I Hated Every Coding Agent, So I Built My Own — Mario Zechner (Pi)》的学习笔记。
Mario为何要写pi
像视频标题一样直接,吐槽了很多Coding Agent项目,不过演讲中,他还是叠了很多甲,反复强调这些Coding Agent项目其实很好,用的人很多,但不免会有缺点。
Claude Code
- 越来越重。一直在加入越来越多的feature,视频中他称为
spaceship,我们真的需要这么多功能吗?可能只会用到5%到10%的功能? - 闪屏问题。
Claude Code的开发人员在twitter上声称他们在做游戏引擎来解释这个问题,巧了,Mario是游戏开发大佬,Claude Code的闪屏问题并不是复杂度问题,而是他们代码确实不行。 - 不可预测性。对
Context的处理很多很复杂,而且不可观测;后续更新可能会导致已有工作流不可用。 - 扩展性差。只有
hooks,会不断的拉起进程,非常慢。我觉得,这也是他设计pi的extension的初衷吧,更像函数调用,且有状态。
(哈哈,这里作者还解释,Claude Code 很成功,但是只是不适合他自己,他自己老了。)
OpenCode
- 上下文管理不够好。会调用
compaction.prune去删除tool result,导致一些细节的丢失。不过我理解这本身就是Context的一种tradeoff,后面OpenCode也加了开关。 - 开箱自带
LSP。LSP会一直校验文件的语法规则,在修改文件过程中,其实是没必要的,会浪费很多资源开销。 Session用JSON管理。这点我也很诧异,甚至不用JSONL。- 架构漏洞。他只是提了一嘴,我没看懂。详细了解了一下,OpenCode为了做多端,所以设计了
CS架构,终端只是其中一个Client,本地会启动一个HTTP Server,所有的文件,shell等操作都在这个Server中运行。这样就可能有问题了,这个Server权限巨大,暴露底层API,认证又太松,本地任何进程都可以请求。接着我又求证了下,目前在TUI中启动OpenCode没有这个漏洞了,只有用opencode serve命令才会启动服务。
pi的设计理念
他先描述了现在混乱的阶段,很多人有各种各样的尝试,各种架构都存在在排行榜上,还在探索阶段。因此他决定创造一个属于自己的,扩展性高的,最小化的Coding Agent。
架构

理念
- 极短的系统提示词。他认为
LLM经过了后训练,本身就知道coding是什么了,为什么还要那么多提示词告诉如何coding。 YOLOby default。他认为如果需要批准,会导致人很累,不批准的话,安全性不够,其实现在并没有很好的安全性的解决方案。- 四个基本工具。
read,write,edit,bash。
不做什么

- 这里提到了
tmux,前面mario也用一些篇幅提到了tmux,我也尝试用了下,用起来没那么习惯。。可能不够极客吧,不过关于子agent的编排上,其实就是用pi再调用pi就行。核心就是pi不会帮你编排,而是要你自己去编排agent。 - 他觉得很多功能都可以本地文件实现,为何不用呢?
- 我觉得他说的
MCP功能的替代方案最有启发,如果要用MCP,那么就用CLI实现,再加上说明书,也就是skills,就完成了。
扩展性

- 插件系统是最具有扩展性的,覆盖到了方方面面, 因此可定制性很高。
- 这里的热更新,并不是改动了任何文件,自动更新,而是要使用一下/reload命令,但至少不用重启。
Context is King
怎么翻译这句话呢,agent管理中的重要任务就是Context管理,可以被查看,可以被追踪。
- 关于树状结构,他提到了一个例子可以跟操作子agent一样,每个分支去分批读文件,然后带着总结回到根节点,这样减少上下文污染,但是细节还保留在分支中。
- 不会像
Claude Code一样给你塞很多上下文,全靠自己。
结尾
- Mario提到现在维护很困难,尤其是因为
Openclaw,很多垃圾PR涌入进来,他给自己发明了开源假期,在这个时间内的PR他是不会看的,都是自动关闭。 - 他还提了一种防止coding agent乱提
PR的办法,在仓库中加了一个白名单,如果不在这个名单中,就会自动关闭PR。人必须知道这个办法,把自己加入白名单,才行。