深度·R129·2026.10.02

Pi 1.0.0 与 Pi Durable:升级值得马上做,Durable 我先不引入

Pi coding agent 发布 1.0.0,同步推出实验性 Agent 运行时 Pi Durable。全屏 TUI、提示词瘦身 40%、MCP 大转弯之外,作者当天给自家项目评估了 Durable,结论是暂不引入。

2026 年 10 月 1 日,Pi coding agent 发布 1.0.0,同一天还推出了一个实验性的新东西,Pi Durable。我自己的项目里在用 pi-coding-agent,所以当天就把 changelog、Pi Durable 的公告和 The Register 的报道都通读了一遍,顺手评估了要不要把 Durable 引进自己的项目 value-tribe。

两篇文章读完,我的判断是,1.0 值得马上升级,Durable 是个认真做出来的好东西,但它解决的问题眼下不是我的问题。这篇把依据讲清楚。

Pi 是什么,现在在谁手里

Pi 是 Mario Zechner 写的终端 coding agent,走极简路线,系统提示词短,工具就几个,整个代码库小到一个人能读完。2026 年 4 月,Earendil 收购了 Pi。这家公司由 Armin Ronacher 和 Colin Daymond Hanna 创立,Ronacher 就是 Flask 的作者。The Register 报道里有个说法很传神,如果 Pi 是个 Python Web 框架,它是 Flask 不是 Django。考虑到是谁在掌舵,这个比方大概是认真的自我定位。

1.0 的含义很实际,API 稳定了,可以往生产环境里放。

1.0 改了什么

changelog 很长,挑我在意的几条。

默认全屏 TUI。 终端界面现在全屏运行,想要旧的滚动模式,把 tuiMode 设成 "regular"。用惯 Claude Code 那种滚动输出的人需要适应一下,全屏把上下文、diff、工具输出摆在一个画面里,信息密度高不少。

codemode 的提示词瘦身了 40%。 codemode 是 Pi 的脚本沙箱,让模型用写脚本的方式调工具,而不是一个一个 JSON 函数调用。这次优化后,一次 GPT-5.6 请求从约 5300 tokens 降到约 3300。做法也干净,工具声明不再把完整定义重复塞进提示词,一行话说清怎么调用,细节让模型需要时自己去读 Codemode reference。对按 token 计费的用户,这是直接的省钱;对所有人,上下文窗口里省出来的地方能装更多代码。

错误提示开始教模型怎么改。 模型写 tools.Bash 会收到提示,正确的写法是 tools.bash,工具名区分大小写。这类"纠错式报错"比甩一个 TypeError 有用得多。有一个配套的小破坏,脚本里探测工具的写法要从 typeof tools.name 改成 "name" in tools,写过 codemode 脚本的人升级时注意。

codemode 能生图了。 脚本里调 models.generateImages(),用会话凭证跑图像模型,比如 OpenRouter 上的那些,费用计入会话成本。配文档、画示意图这类活,以后不用切出去。

登录和 OAuth 补了一大堆。 我最欢迎的是 Anthropic 的 copy code 登录,浏览器在另一台机器上时,认证完拿到一个码,粘回终端就行,SSH 到服务器上用 Pi 的场景终于顺了。MCP OAuth 也做扎实了,凭证按服务器名加 URL 分开存,同一个 URL 可以登不同账号;step-up 登录不再丢掉之前授权的 scope,修掉了反复弹登录的 bug;按 RFC 9207 校验 iss,挡掉授权服务器不对口的响应。

内存占用降了。 长 assistant 消息在 transcript 里的堆占用降到原来的五分之一,长时间会话明显更稳。

MCP 大转弯

Zechner 以前公开说过 MCP 没必要,Pi 长期不接这个协议。1.0 不仅接入了,还把 MCP OAuth 做到上面说的那个细致程度。The Register 的标题直接写 Pi "pulls a 180",治出了鞭打伤。

Earendil 给出的解释是,MCP 本身在进步,而他们对 MCP 做的改动也让别的能力更容易接进来,比如 Jev 决策模型。原话的大意是,Pi 需要的东西和 MCP 需要的东西很像,一个可以玩的沙箱,一个解释器。

我看重这条转弯胜过上面任何一个功能。创始人公开否定过的东西,新东家接手后按实际价值重新评估,然后认账、转弯、做扎实。工具肯跟着证据走,比任何 roadmap 都更能说明这个项目以后靠得住。

Pi Durable 是什么

Pi Durable 是随 1.0 一起放出的实验性框架,npm 包 @earendil-works/pi-durable。公告里说得很明白,它不替代 Pi coding agent。coding agent 继续是那个跑在你终端里、一个人驾驶的编码工具;Durable 是拿来造任意 Agent 应用的运行时,coding agent 只是它能造的一种。

公告对 harness 的定义我很喜欢,存储,加上并行跑若干个大模型会话所需的全部机器。围绕这个定义,Durable 的机制大致是这几块。

一切都是任务,每步先存检查点。 模型请求、工具调用、上下文压缩,全是任务。进程死了,新进程打开同一份存储,找到没完成的任务,从上个检查点继续。被打断的模型请求重发,半成品答案留在记录里标记 aborted。工具调用只有声明了 replay: "safe" 才会重跑,否则框架告诉模型这次调用被打断了,附上已有输出,让模型自己决定怎么办。支付这种不能重复的操作,靠这个设计兜住。提交带 requestId,崩溃重试不会提交两遍。

会话可以在任意位置 fork。 子会话看到 fork 点之前的父会话历史,不复制。公告给的例子很直观,Slack 频道是一个会话,有人开 thread 就从那条消息 fork 一个子会话,两边同时跑互不阻塞。每个会话还存自己的 Agent 配置,模型、思考级别、启用的工具,可以各用各的。

所有权树管住级联清理。 任务和会话组成一棵树,父任务被中止时自底向上级联,每个任务先清理自己的副作用。公告的例子是拆单支付,几张卡同时扣款,一张失败,其余支付任务自动中止并退款。

压缩是后台任务。 上下文快满时,后台任务摘要旧消息,Agent 照常干活,只有下一条请求实在塞不下才等摘要。也可以随时手动压缩,或者用 handoff 从一段交接笔记重开上下文,旧消息还在存储里可以搜。

应用状态和对话记录同一个原子提交。 todo list、购物车这类状态存成类型化 JSON 文档,和 transcript 一起提交,状态永远不会和它对应的对话对不上。

多人同时在线。 任意多个客户端 attach 到同一个会话,后来者先拿当前视图再收增量,谁都可以发消息引导 Agent。做监控面板、多人监督同一个 Agent,基本不用自己造轮子。

代码可以热替换。 会话存的是扩展和工具的名字,不存代码。运行中把扩展的实现换掉,正在进行的那次调用跑完旧代码,下次调用用新的。

整个框架核心约 15000 行,折成 tokens 约 15 万到 25 万,公告说设计目标之一是让 Agent 能读懂自己跑的这个框架,读懂了就能提改进。这个野心挺 Pi 的。

我的评估,暂不引入

发布当天我拿 Durable 对 value-tribe 做了一遍评估。我们的现状是 ChatTurn 表加 pi-gateway 加 pi-coding-agent,架构简单,跑得也稳。

Durable 能带给我们的主要是容错重启,这块已有替代方案。换来它要付的成本不低,一套新的概念体系,会话、任务、扩展、文档,加上对现有代码的重构。收益有限,成本高,结论就是先观察。

继续跟踪三件事,Postgres 的集成方案,更轻量的部署模式,社区生态和稳定性。如果哪天真碰上极长会话、复杂任务编排、多人协作的需求,再重新评估。

不要为了技术而技术。框架是好框架,问题得是自己的问题才值得解。

给不同读者的建议

终端重度用户直接升 1.0.0,提示词省钱、全屏顺、登录省心,升级没有实质风险,唯一要查的是自己写的 codemode 脚本里有没有 typeof tools.name 的旧写法。

想在服务器上跑长期 Agent 的,去读 Durable 的 README 和仓库里三十多个例子。官方演示里那个度假规划 Agent 约 1300 行 TypeScript,崩了重启只重跑没完成的搜索,是理解这套设计最快的材料。记住它还是实验性,API 可能变。

社区里也已经有人在做周边,比如 pi-web.dev 给 Pi 会话做了浏览器端的监督界面,关掉浏览器会话照跑。这类东西多起来,Pi 的生态才算真立住了。


参考资料