👁 154 次阅读
一、引言:一个公开反过 MCP 的项目,在 1.0 版本把它塞进了核心

2026 年 10 月 1 日,Earendil 发布了 Pi 1.0。发布说明只有一段话:a hardened, minimal, extensible agent harness that you can make your own——一个经过硬化、可最小化裁剪、可被你自己改造的智能体骨架。听起来毫无争议。
但懂行的人知道,真正的新闻是另一件事:Pi 1.0 的原生支持列表里,第一条就是 MCP(Model Context Protocol)。而在 2025 年 11 月 2 日,Pi 的作者 Mario Zechner 还公开发文论证过为什么智能体不需要 MCP,Pi 的官网曾经以不接入 MCP 作为卖点。The Register 用了一个很准确的动词形容这次转向——a 180,一个 180 度掉头。
这不是本文的重点。本文的重点是:一次公开反悔之后,Earendil 用一套叫 Codemode 的沙箱设计,把原本被视为 MCP 原罪的『上下文占用』问题变成了可量化的数字,并且把这个数字压到了约 40% 的位置。这套设计值得每一个正在选编程智能体的人认真读一遍。
二、为什么改:三句话讲清楚反悔的理由
Earendil 在 1.0 发布前两天专门写了一篇名为 You Said No, MCP! 的说明文章,把反悔的理由讲得很直接。
第一句,协议本身变了。2026 年 7 月的 MCP 规范修订让协议更加无状态化。Zechner 最初反对 MCP 的核心论据是工具 schema 会预先塞满上下文,如果协议本身变得更克制,这个反对的依据就削弱了。
第二句,反悔的代价换到了别处。Earendil 说,他们为接入 MCP 所做的改动,同时让 Pi 更容易接入 Jev 这类决策模型(决策分类器)。For example, the changes we have made to MCP also enable the use of Jev more easily within Pi. 换句话说,反悔不是白反的,是顺手把另一个能力解锁了。
第三句,也是技术上最关键的一句,Ultimately what Pi needs is quite similar to what MCP needs: a sandbox to play with in the form of an interpreter.——Pi 要的、和 MCP 要的,其实是同一个东西:一个解释器形态的沙箱。这句话就是 Codemode 的定义。
Earendil 是一家 2026 年 4 月收购 Pi 的公司,创始人是 Flask 之父 Armin Ronacher 和 Colin Daymond Hanna。Zechner 本人转成了股东,继续掌舵技术方向。这意味着 Pi 的品牌调性——如果 Pi 是一个 Python 框架,它更像 Flask 而不是 Django——是被刻意保留的。
三、Codemode:把工具调用的接口从『声明 schema』改成『可编程环境』

要理解 Codemode 的价值,先要理解 MCP 原来是怎么用上下文的。
传统的 MCP 接入方式是:服务器启动后,把所有工具的定义(name、description、parameters schema)一次性注入到模型的系统提示里。社区常引用的数字是每个工具定义大约占用 550 到 1400 个 token。Zechner 举过一个 Perplexity 的真实案例:三个 MCP 服务器加起来吃掉了 200k 上下文里的 143k——也就是说,模型在写第一个 token 之前,就已经用掉了七成预算。
Codemode 换了一种思路。它不往系统提示里塞 schema,而是给模型一个跑在 harness 侧的 JavaScript 沙箱(文档中记为 QuickJS 运行时)。模型在这个沙箱里做的事是:
- 发现工具——不是靠预先声明,而是调用
searchTools()、describeTool()或直接读ALL_TOOLS,按需查表; - 编写调度脚本——用 JavaScript 像调 SDK 一样调用这些工具,支持链式调用与并行分发;
- 过滤与蒸馏——对原始返回做聚合、裁剪、分类,只有最终结果重新进入模型上下文。
Earendil 在演示里给出的例子是:用 Codemode 同时接 Linear MCP 服务器和一个情感分类模型,对 167 个未关闭 issue 的评论做『识别出感到沮丧的用户』的批量分析。167 个 issue 被并行处理,除了最后那份汇总答案之外,中间过程没有一次触及模型上下文。
这就是 Codemode 真正想解决的问题:工具结果应该是被计算的对象,不是被阅读的对象。当工具结果变成可以被脚本处理和聚合的数据,它就不再是提示词税。
另外两个相关的 1.0 新能力值得一起看:虚拟模型(一个虚拟的 router/auto 模型,让 Claude Opus 负责规划、GPT 6 Luna 负责实现、Jev 决定何时切换),以及延迟工具加载(工具不在一开始就塞进上下文,只有被 tool_search 命中后才加载)。三者合起来,指向同一个结论:Earendil 把上下文预算当成了一等公民来管理。
四、算一算:Codemode 到底省了多少
这是本文最想展开的部分,因为 Pi 1.0 的价值主张里唯一能量化的数字,就在这里。
Pi 的 1.0.0 changelog 记录了一个具体对比:在默认工具集 + Codemode 激活的情况下,一次 GPT-5.6 请求的提示词 token 数从约 5,300 压缩到约 3,300,降幅约 40%。
把 40% 换成账单上的数字。GPT-5.6 的输入价格按 OpenAI 官方公布区间大致落在每百万 token 个位数美元级别,取 2 美元做保守估算:
| 场景 | 单次请求输入 | 一天 200 次请求 | 一个月 6000 次请求 |
|---|---|---|---|
| 无 Codemode(5300 tokens) | 约 10.6 美元(6000 次口径) | 约 1.06 美元 | 约 60.6 美元 |
| 启用 Codemode(3300 tokens) | 约 6.6 美元(6000 次口径) | 约 0.66 美元 | 约 39.6 美元 |
| 差额 | 约 3.0 美元/月 | 约 0.40 美元/天 | 约 21.0 美元/月 |
说明一下这张表的分母。这里的 40% 节省只发生在系统提示词这一层,也就是工具定义、系统指令和 harness 说明占据的那部分,不包含用户实际输入的问题和模型生成的回复。所以上面的 21 美元/月,是纯 Codemode 相对不用 Codemode 的差额,不是整个会话的总账单。
但真正值得看的不是这 21 美元。真正值得看的是预算余量。200k 上下文的模型,把工具定义从 5300 压到 3300,等于每月多出了 6000 次会话 × 2000 token = 约 1200 万 token 的可用空间,这些空间可以用来放更长的代码库文件、更完整的项目历史、更详细的 AGENTS.md。
换句话说:Codemode 省的不是钱,是让智能体有更多地方可以看见你的项目。
五、Pi Durable:最小主义怎么在『长期运行』上守住的

Pi 1.0 的另一半是 Pi Durable——一个实验性包,官方描述是 a new substrate for building long-running agentic applications。它单独发布,而不是塞进 Pi 主包,正是为了保住 Pi 那个『Flask 而不是 Django』的定位。
技术上 Pi Durable 做了几件关键的事:
- 存储后端可插拔——官方内置 memory、SQLite 和 JSONL 三种存储,SQLite 和 JSONL 的实现不使用任何 Node API,因此可以套一层适配层跑在 Bun 或 Cloudflare Durable Object 上;
- 工具调用是持久任务——每一次工具调用作为一个独立的 durable task 执行,意图在执行前就先落库;崩溃恢复时,只有工具自己声明了
safe才会重跑,否则模型会收到『这次调用被打断了,这是已有的部分输出,你决定接下来怎么做』; - 压缩是任务不是阻塞——上下文接近上限时,后台压缩任务把旧消息摘要化,在下一个对话边界插入摘要;只有当下一次请求装不下时才等待。如果提供商仍然拒绝长请求,harness 会压缩并重试一次;
- 扩展可以热替换——注册表在会话运行中可以更新;已经跑起来的工具调用用旧代码完成,下一次调用用新代码。会话只存扩展名和工具名,不存代码,所以重启后自动拿到新进程装的东西。
这套东西对普通用户的意义其实很朴素:一个『崩溃就重新问一遍』的智能体和一个『崩溃后知道自己断在哪一步、能接着往下走』的智能体,做长期任务的能力差了一个量级。Pi 编码智能体的定位仍然是『跑在你的机器上、在终端里、由一个人驱动』,如果进程挂了你自己去看发生了什么并让它继续;Pi Durable 是给那些要把智能体放到生产环境里、跑到崩溃再跑起来的人用的。
两个包都是 MIT 许可,代码在 github.com/earendil-works/pi。
六、真实使用感受:从零跑起来,你会碰到什么
按官方文档(pi.dev)和 GitHub README 整理了一份上手要点,这里挑出真正影响使用体验的部分。
6.1 安装与登录
npm 安装 @earendil-works/pi-coding-agent。进入终端后 /login 走各提供商的 OAuth。1.0 新增了两件实用事:Sign in with Radius 提供一步式 MCP 服务器配置;Anthropic 新增了 headless 机器可用的粘贴授权码登录——这对在远程服务器上跑 Pi 的人来说是刚需。
6.2 MCP 服务器配置
服务器定义放在 ~/.pi/agent/mcp.json(用户级)或 .pi/mcp.json(项目级,只在项目被信任后读取)。支持的传输方式只有 stdio 和 streamable HTTP,旧的 SSE 传输被显式拒绝。
配置项里值得关注的有:timeout(单请求超时,默认 60 秒,收到进度通知会重置)、enabled: false(保留配置但不连接)、description(一句话说明服务器提供什么,会被列进系统提示和工具搜索结果)、headers 和 oauth。
一个不太起眼但重要的设计:HTTP 服务器遇到 408、429、5xx 会自动重试两次,连接断开会标记为已断开并在下次调用时重连。
6.3 工具曝光的四种模式
这是 Pi 1.0 在工具管理上最重要的一次重构。每个 MCP 工具被注册成 mcp__服务器名__工具名,然后按四种曝光方式决定模型如何触达它:
| 曝光方式 | 行为 | 典型用途 |
|---|---|---|
codemode(默认) |
可从 Codemode 脚本调用,但不向模型声明、不出现在 Codemode 描述里。脚本用 searchTools()、describeTool() 或 ALL_TOOLS 找。 |
一般 MCP 服务器,尤其是需要脚本组合或过滤调用的场景。 |
deferred |
不声明,直到 tool_search 命中后才在下次模型调用时加载。 |
工具很多、应该被直接调用而非被脚本调用的大服务器。 |
direct |
像内置工具一样声明给模型,同时可从 Codemode 调用。 | 小而常用的工具集。 |
hidden |
已注册但不可达。 | 应长期保持不可用状态的服务器或工具。 |
toolExposure 可以按单个工具覆盖服务器的默认曝光,key 可以是精确工具名或带 * 的模式;精确名优先于模式,模式之间第一个命中生效。
6.4 上下文文件与系统提示
Pi 启动时会从 ~/.pi/agent/AGENTS.md、当前目录及向上各级父目录加载 AGENTS.md(或 CLAUDE.md),把所有匹配文件拼接起来——这个行为对已经有 Claude Code 使用习惯的人是个加分项。可以用 --no-context-files 关闭。
系统提示可以直接用 .pi/SYSTEM.md(项目级)或 ~/.pi/agent/SYSTEM.md(全局)替换,用 APPEND_SYSTEM.md 追加而不替换。
6.5 一次 1.0 升级你会踩到的破坏性变更
- 全屏 TUI 默认开启——不喜欢就把 tuiMode 设为 regular,或加 –tui-mode regular 参数恢复终端原有滚动历史;
- Codemode 脚本里的工具探测语法变了——旧写法
typeof tools.name不再可靠,需改用 in 运算符做键存在性检测; - MCP OAuth 凭证存储位置变了——现在按服务器名和 URL 分开存,之前只按 URL 存的会被迁移到第一个使用它的服务器上;
--provider不再静默忽略——之前--provider不带--model会被悄悄忽略,现在会直接报错;- 启动横幅可以更安静——嫌吵就把 quietStartup 设为 header;
- 扩展维护者需要看 0.84、0.86、0.87 的破坏性变更——session、event、provider API 都有改动;0.99.0 起内置扩展名统一为
builtin:<name>,--no-extensions现在也会禁用它们。
七、横向对比:Pi 1.0、Cursor、Claude Code、Devin Desktop
| 维度 | Pi 1.0 | Cursor | Claude Code | Devin Desktop(原 Windsurf) |
|---|---|---|---|---|
| 形态 | 终端 TUI 智能体骨架 | AI IDE | 终端智能体 | AI IDE |
| 许可与定价 | MIT 开源,软件本身不收费,按你自己的模型 API key 付费 | Hobby 免费;Individual 20 美元/月;Teams 40 美元/人/月 | 随 Claude Pro 20 美元/月(年付 17 美元/月)起;Max 100 美元/月起 | 2026 年 6 月 2 日由 Cognition 从 Windsurf 改名,套餐、价格和扩展延续 |
| 模型选择 | OpenAI、Anthropic、Google、OpenRouter,以及 llama.cpp 本地模型;models.json 可接 Ollama、LM Studio、vLLM、SGLang |
多模型,含自有推理 | Claude 系列 | Claude、GPT 等 |
| MCP 接入方式 | Codemode 沙箱调度,按曝光模式分层 | 标准 MCP,工具声明进上下文 | 标准 MCP | 标准 MCP |
| 可扩展性 | TypeScript 扩展、Skills、Prompt Templates、Themes,可通过 npm/git 分发 | 插件体系 | Skills、子代理 | Extensions |
| 长期运行能力 | Pi Durable 独立提供(实验性) | 不适用 | 不适用 | 不适用 |
数据来源:Cursor 定价来自 Cursor 官网公开档位;Claude Code 定价来自 Anthropic 官方定价页;Devin Desktop 改名时间与套餐延续说明来自 Cognition 2026 年 6 月公告与 SitePoint 2026 年横评。
值得注意的是 Pi 在定价上根本不是同一个赛道的对手——Cursor、Claude Code、Devin Desktop 都是按月收费的订阅制,Pi 是软件免费、模型按 token 直接付费给提供商。这意味着 Pi 的总账单完全取决于你怎么用它:一个每天跑 200 次请求、每次 3300 token 的系统提示 + 4000 token 实际对话的工作流,一个月大约 6000 次请求 × 7300 tokens × 2 美元/百万,也就是 87 美元左右;同一工作流在 Claude Pro 的 20 美元订阅里可能是超额限流,也可能是完全够用——这取决于 Cursor/Claude 各自的用量上限怎么算,而不是 API 单价。
换句话说,比较 Pi 和订阅制工具,比的不是单价,而是『你能不能把自己的用量控制在订阅额度内』。如果你能,订阅制永远更便宜;如果你不能,按 token 反而更可控。Pi 的价值主张是给了你后者,代价是你得自己承担运维。
八、什么时候选 Pi 1.0,什么时候不要选
适合选 Pi 1.0 的情况
- 你已经有一套自己的模型 key 池——比如通过 OpenRouter、OneAPI 或自建网关统一管理多家提供商的密钥和成本,Pi 的
models.json和router/auto虚拟模型能直接接进去; - 上下文预算敏感——你的工作流经常要处理大代码库、长 AGENTS.md 或大量工具调用,Codemode 的 40% 提示词压缩和延迟工具加载有直接收益;
- 想自己动手改智能体行为——Pi 的扩展系统、系统提示替换、Prompt Templates 和 Skills 都是给它『长出自己的样子』准备的,这也是 1.0 那句
an agent harness that you can make your own的实际含义; - 需要在本地跑模型——llama.cpp 集成是原生能力,
/llama命令可以管理路由器,Julia-1、Laya、Kev、OpenJev 等本地决策模型可以直接当分类器用; - 有生产级智能体的长期运行需求——Pi Durable 的崩溃恢复、检查点和持久化存储是为这个场景准备的。
不适合选 Pi 1.0 的情况
- 你想要开箱即用的图形界面——Pi 是终端 TUI,没有 IDE 集成、没有 diff 视图、没有内置的代码索引;这些场景直接选 Cursor 或 Devin Desktop;
- 你没有运维带宽——Pi 是 MIT 开源骨架,不是托管服务。扩展维护、凭证管理、MCP 服务器健康监控都是你自己负责;
- 团队采购或合规场景——企业通常需要 SOC 2、SSO、统一账单和 SLA,Pi 目前不提供这些;
- 你的团队还没有 Claude Code 或 Cursor 的替代动机——如果现有工具够用,切换到 Pi 的边际收益不足以覆盖迁移成本。
九、总结:一次公开反悔背后的三条判断
Pi 1.0 是 2026 年 10 月编程智能体赛道上最有意思的一次发布,不是因为功能列表——它的功能列表其实相当克制——而是因为 Earendil 用一次公开反悔,把『最小主义』这个原本容易变成教条的立场,变成了一个可被验证的工程方法。
这次发布给出了三条值得记住的判断:
第一,上下文是预算,不是资源。当工具调用变成被脚本计算的对象而不是被模型阅读的对象,上下文就从『越多越好』变成了『怎么分配』。Codemode 把一次 GPT-5.6 请求的提示词从约 5300 压到约 3300,省下的 40% 不是营销数字,而是 changelog 里可以复核的实测值。
第二,反悔需要成本,但公开反悔换来信任。Pi 团队在官网曾经明确写过不支持 MCP,然后花了 11 个月,在协议和内部依赖都变完之后,写了一篇 You Said No, MCP! 详细解释为什么改变。这比『一直支持但做得不好』更值得尊敬。
第三,最小主义的正确形态是分层,不是拒绝。把长期运行、编排、存储这些能力拆到 Pi Durable 而不是塞进 Pi 主包,是这个团队真正理解『最小』的证据。Flask 之所以活得比 Django 久,不是因为功能少,而是因为它知道哪些功能应该留到扩展里。
Pi 1.0 本身是 MIT 开源、软件免费、模型按 token 自付的产品。它不适合所有开发者,但它把一套原本只在少数人脑子里转的工程判断——上下文预算、工具蒸馏、崩溃恢复、最小可扩展——写进了 changelog。这些判断会扩散到其他智能体框架。
如果你正在为团队的编程智能体选型,值得花一个下午跑一次 Pi 1.0,然后把 Codemode 的 40% 这个数字放进你的成本模型里。
参考资料
- Earendil 官方发布:Pi 1.0 — https://earendil.com/posts/pi-1-0/
- Earendil 反悔说明:You Said No, MCP! — https://earendil.com/posts/you-said-no-mcp/
- Pi 官方更新日志 — https://pi.dev/changelog
- MCP 服务器配置文档(npm 包内 docs/mcp.md)— https://cdn.jsdelivr.net/npm/@earendil-works/pi-coding-agent@1.0.3/docs/mcp.md
- Pi 源码仓库 — https://github.com/earendil-works/pi
- The Register 报道:Pi coding agent pulls a 180 and adds MCP support — https://www.theregister.com/ai-and-ml/2026/10/02/pi-coding-agent-pulls-a-180-and-adds-mcp-support/5300678
- GIGAZINE 报道(日文原发,英文转载) — https://gigazine.net/gsc_news/en/20261002-pi-1-0
- Claude Code 与 Cursor 定价来源:SitePoint 2026 AI 编程工具横评 — https://www.sitepoint.com/best-ai-coding-tools-2026/