Pi Agent 实测:10.4 万 Star 的极简编码 Agent,默认只给模型 4 个工具

用过终端 AI 编码 Agent 的人,大多撞过同一堵墙:功能越加越多,工具列表越拉越长,系统提示词动辄几千 token,模型反而开始选错工具、忘掉目标。Pi Agent 反着做——默认只给模型 4 个工具,系统提示词压到 2.6KB 左右,一年发了 259 个版本,拿到 10.4 万 Star、每周 152 万次 npm 下载。官方文档还明说它「不要」MCP、不要子代理、不要计划模式。这些「不要」到底是省钱的真本事,还是把活甩给社区?我在安卓手机的沙盒里把它装了一遍,跑通了它的 agent 循环,并把每次发给模型的请求原样抓了下来。

一、Pi 是什么:一个「什么都不自带」的编码 Agent

Pi(仓库 earendil-works/pi,命令 pi)是终端里的编码 Agent,也就是常说的 harness。作者 Mario Zechner 是游戏引擎 libGDX 的作者,网名 badlogic。MIT 协议,2025 年 8 月建仓,到发稿时 103,904 Star、12,997 fork、323 订阅者;npm 包 @earendil-works/pi-coding-agent 上周下载 1,526,012 次(9 月 3 日至 9 日,npm 官方统计接口)。

这不是小玩具。主仓库是 11 个包组成的 monorepo,TypeScript 代码合计 318,385 行,其中测试文件 544 个、测试代码 139,487 行;release 累计 259 个,最新版 v0.85.1(9 月 5 日);贡献者里 badlogic 本人 3,701 次提交,第二名 mitsuhiko(Armin Ronacher,Flask/Jinja 作者)668 次。11 个包分别是 coding-agent(CLI 本体)、agent(agent 运行时)、ai(多厂商 LLM API)、tui、protocol、client、server、session-backends、telemetry、chord、evals。

它的官方定位是「minimal agent harness」:让 Pi 适应你的工作流,而不是反过来。落到代码上就是六个明确的「没有」——没有 MCP(官方的理由是「写个带 README 的 CLI 工具就够了」,并专门写了篇博文解释)、没有子代理(要就 tmux 起多个实例)、没有权限弹窗(要更强边界请自己进容器)、没有 plan mode、没有内置待办清单、没有后台 bash。核心保持空,能力全靠四类资源外挂:TypeScript 扩展、SKILL.md 技能包、提示词模板、主题,打包成 Pi Package 用 npm 或 git 分发。运行方式有四种:交互式 TUI、print/JSON(可脚本化,也能被管道喂输入)、RPC(进程集成)、SDK(嵌进自己的应用)。

这和站内此前评测的 ECC(Everything Claude Code) 恰好是两个方向:ECC 把工程纪律整套塞进 Agent,Pi 把核心清空、把选择权交回给使用者。

二、实测:手机 + 零 API key,把它的 Agent 循环抓出来看

测试环境是一台安卓手机里的 Alpine aarch64 沙盒(PRoot,没有任何 GPU 和模型),Node v22.23.2——Pi 要求 Node ≥ 22.19.0,刚好过线。

安装本身没有意外:npm install -g @earendil-works/pi-coding-agent 拉进 132 个依赖包耗时 25 秒,落地体积 154.7MB,pi --version 输出 0.85.1。官方还专门写了 Termux(安卓终端)安装文档,手机跑 Pi 是被支持的场景。

真正要看的是它发给模型什么。我没有 API key,也不想编造数字,于是写了一个假的 OpenAI 兼容服务(本地 HTTP + SSE 流式响应),再用一个十几行的 Pi 扩展注册成自定义 provider,让 pi 把请求打到本地。这样每一次请求的完整 payload——系统提示词、工具定义、消息历史——都会被原样落盘,可以逐字节量。

抓包项 默认配置 显式开启全部内置工具
发给模型的工具数 4 个(read / bash / edit / write) 7 个(+ grep / find / ls)
工具定义 JSON 长度 3,024 字符 5,302 字符
系统提示词长度 2,571 字符 2,673 字符

三个可以复现的结论:

第一,默认真的只有 4 个工具。官方文档写「By default, pi gives the model four tools」,抓包证实:read(读文件)、bash(执行命令)、edit(精确替换改文件)、write(写文件)。grep、find、ls 存在但要靠 --tools 显式打开,一打开工具定义就从 3,024 涨到 5,302 字符,接近翻倍。社区里 Pi 被称作「只用 4 个工具的 Agent」,说的就是这个默认值,不是营销话术。

第二,系统提示词确实小。2,571 字符(英文,约合六七百 token),官方站点的说法是「very token efficient due to its minimal system prompt」,第三方横评也写它「系统提示词不到 1000 token」——实测对得上。这个数字的意义在于:工具定义加系统提示词合计不到 6KB,每一轮对话都要重发一遍,长会话里省下来的就是真金白银。

第三,agent 循环是真的能跑完。假模型按脚本返回工具调用,pi 依次执行了:读文件 → 用 bash 写文件并 cat 回来 → 用 write 落一个新文件,共 4 次 LLM 往返,最后以自然语言收尾。沙盒里真实出现了 out.txtsummary.md。零密钥、零真实模型,但工具调度、结果回填、多轮循环、会话持久化这条链路全部走通。

顺手还测了两件事。一是技能兼容:把一份带 frontmatter 的 SKILL.md 丢进项目的 .pi/skills/,pi 把它注入系统提示词的 区块(系统提示词从 2,571 涨到 3,172 字符),只给模型「名字 + 描述 + 文件路径」,让它需要时再用 read 去读全文——惰性加载,不是全文塞进上下文。也就是说,为别的 Agent 写的技能包,Pi 能直接复用。二是会话与导出:会话存成 JSONL(格式版本 3),每一条带 idparentId,天然支持从任意历史消息分支重开;--export 能把整个会话导出成 273KB 的单文件 HTML 分享出去。

两个坑,也如实记下:

  • 走管道运行时,Pi 默认会读 stdin 并把它合并进 prompt。我的第一次调用没关闭 stdin,进程就一直等着,看起来像卡死;加 < /dev/null 才正常。
  • 项目级安装的包,在项目被标记为「信任」之前对 CLI 不可见:pi install npm:pi-web-access -l 明明装好了 134 个依赖,pi list 却显示「No packages installed」,加 --approve 才列出来。设计上是安全考虑,但第一次遇到很容易以为装失败了。

三、横向对比:一个 fork 拿到 3 万 Star,也提供了反面数据

Pi 的极简是有代价的,代价就是别人替你补。最典型的例子是 can1357/oh-my-pi(命令 omp):安全研究员 Can Bölük 在 2025 年 12 月 31 日直接 fork 了 Pi,塞进 LSP 客户端、调试器、浏览器、Python 内核、子代理,约 8 万行 Rust,命名致敬 Oh My Zsh。今天它有 30,562 Star——相当于 Pi 星数的三成,是判断「极简派 vs 全家桶派」谁更受欢迎的一个参考。

有意思的是,同一个模型下 Pi 反而更快更省。工具平台 Composio 在 9 月 1 日发布过一组同模型(deepseek-v4-flash)30 个真实任务的对比:

指标 Pi oh-my-pi(OMP)
任务通过 20 / 30 17 / 30
每次成功成本 $0.028 $0.103
单任务中位耗时 132.2 秒 272.4 秒
平均 token 消耗 558,885 742,283

数据要打折看:这是第三方单一模型、单一题集的测试,不能当成通用结论。但方向和 Pi 的设计逻辑一致——工具越多、提示词越长,便宜模型被拖慢、被绕晕的概率越高。Composio 的结论是 Pi 在「便宜模型的编辑可靠性」上输给 OMP 的 hash 锚定编辑(OMP 自称把某模型的一次通过率从 6.7% 拉到 68.3%),这也是极简派最实在的软肋:没有花招兜底,全靠模型自己稳。

另外,社区的选择本身就构成反讽:Pi 官方说「不需要 MCP」,而 pi.dev/packages 上安装量最大的扩展恰好是 pi-mcp-adapter(约 86.6 万次/月),第二是子代理扩展 pi-subagents(约 41.2 万次/月)。官方留白 + 社区填空,这条路走得通,但「Pi 什么都不带」的代价最终是使用者自己装回来。

模型接入这块对国内读者更实用:除了常规 API key,Pi 支持订阅登录——ChatGPT Plus/Pro(Codex,OpenAI 官方为开源项目背书)、Claude Pro/Max、GitHub Copilot、xAI、OpenRouter。要提醒一句:官方文档明确写了,用 Claude Pro/Max 登录第三方 harness,消耗走的是 extra usage 按 token 计费,不占用你的订阅额度——别以为登录了就能白嫖月费。国内厂商则以 token plan / coding 套餐形式支持:Kimi for Coding、Qwen Token Plan(含中国版、个人版)、小米 MiMo Token Plan(中国/阿姆斯特丹/新加坡三区)、MiniMax 中国站、智谱 zai-coding-cn。

四、259 个 release 背后:一套很硬的治理规则

Pi 的发布节奏和治理方式是它最容易被忽略、但对团队选型很关键的一面。

259 个 release、45 个 npm 版本、最新版本 9 月 5 日发布,同时 issue 关闭 5,855 个、开放 138 个,PR 累计 3,124 个——高频迭代但积压不严重。更能说明问题的是贡献规则:新贡献者的 issue 和 PR 默认自动关闭,维护者每天人工捞回值得处理的,用回复里的 lgtmi(此后你的 issue 不再自动关)或 lgtm(issue 和 PR 都放行)作为通行证;周五到周日提交的内容不保证被审阅。官方贡献指南里写着一条「唯一规则」:你必须理解你自己的代码——用 AI 写代码没问题,提交自己看不懂的 AI 垃圾不行。

供应链上它的洁癖也很少见:直接外部依赖钉死精确版本、.npmrc 设置 min-release-age=2(不使用当天刚发布的依赖)、package-lock 是唯一真源、发布包内附 npm-shrinkwrap 锁传递依赖、CI 用 npm ci --ignore-scripts 且定时跑 npm audit signatures,新增带生命周期脚本的依赖会直接让检查失败。

代价同样清楚,而且是官方自己写在文档里的:

  • 没有内置权限系统。README 原话是「Pi 不包含限制文件系统、进程、网络或凭证访问的权限系统」,默认以启动者的权限运行。要隔离请自行容器化(它给了三种方案:微虚拟机扩展、Docker、策略沙盒)。
  • 扩展和技能等于完全系统权限。官方在包管理文档里直说:扩展执行任意代码,技能可以指示模型做任何事,安装第三方包前请先读源码。
  • 提示词注入无法防护。SECURITY.md 承认 AGENTS.md 或代码注释里的指令可以轻易操纵 Agent,本地用户账号与 Pi 进程被视为同一个信任边界,报告这类问题不算漏洞。
  • 会话数据可以公开。项目鼓励把开源工作的会话用 pi-share-hf 发到 Hugging Face 供改进模型,作者自己也在公开数据集里发布自己的工作会话。这是自愿行为,但团队用之前最好先明确策略。

五、结论:值得放进你的 Agent 工具箱

我的判断是:Pi 不是给「想一键变强」的人准备的,而是给愿意把 Agent 当基础设施来改的人准备的。10.4 万 Star、152 万周下载、259 个 release、六成代码是测试——这套组合说明它已经跑过了「个人玩具」阶段,进入「有人拿它当底座」的阶段。

适合谁:① 想把 Agent 接进自己流程(CI、脚本、自家产品)的人,print/JSON/RPC/SDK 四种模式足够;② 预算敏感、用便宜模型的人,4 个工具 + 2.6KB 系统提示词对低成本模型更友好;③ 已经有一堆 SKILL.md 技能包的人,实测可直接复用。

不适合谁:① 想要开箱即用的调试器、LSP、子代理的人,直接看 oh-my-pi 或 OmO 这类组队方案;② 需要权限弹窗、审计、隔离的人,得先自己搭容器;③ 完全不想读文档的人——Pi 的「没有」清单,每一条都要你自己补。

中文资料已经不缺入门介绍了(知乎有长文、runoob 有教程,甚至有人写了本 Pi 架构书),所以本文更想留的是三件能复现的事:默认确实只发 4 个工具、系统提示词真的只有 2.6KB、SKILL.md 技能包真的能跨 harness 复用。至于「极简还是全家桶」,站内此前评测的 mattpocock/skillsOpenMontage 的工具注册表实测 已经给过两种答案,Pi 提供了第三种:把核心清空,让使用者自己决定装什么。

发表评论