把 AI 编程工具做减法,Pi 用 4 个工具 + 自我扩展重塑终端 Agent

Pi —— 在 AI 编程工具"做加法"的风潮下反其道行之:4 个核心工具、1000 token 不到的系统提示词,让工具适配你的工作流,而不是反过来。

AI 编程工具越用越重,真正用到的却越来越少

过去两年,AI 编程工具的更新节奏越来越快,但开发者真正用到的功能并没有同步增长。子代理、计划模式、权限弹窗、后台 bash、内置任务列表、内置 MCP 客户端、模型专用提示词……每隔几周新功能就被塞进工具,新版本又默默改变系统提示词的措辞。听起来是好事——可一旦把这些功能当作"开关"关掉,会发现工作流其实并没有被破坏。剩下用到的,可能也就读文件、改文件、执行命令这三件事。

更让人恼火的是行为不透明:很多 harness 会在上下文里偷偷注入 prompt、用户看不到注入的东西、模型行为随之变化、但作者声明"那是为了让 Agent 更聪明"。对于追求可控的工程师来说,这是工作流被悄悄破坏的根源——9 点开工跑得好好的流程,10 点可能就因为新版 harness 变了行为而崩掉。

Pi(Pi Coding Agent)从立项那天起就把这些问题当成设计约束:只给 4 个基础工具(read / write / edit / bash),系统提示词控制在 1000 token 以内,刻意跳过几乎所有"看起来很酷"的特性,剩下的全靠 TypeScript 扩展让 Agent 自己长出来。作者 Mario Zechner 是 libGDX 游戏框架的作者,也是开源老兵;2026 年 4 月 Pi 被 Earendil Inc.(Flask 作者 Armin Ronacher 创办的公益公司)收购并持续运营,GitHub stars 早已突破 98K。

局部截取_20260903_202728.png

把工具砍到 4 个,提示词压到 1000 token 以内

Pi 的核心工具集是教科书级别的极简:read 读文件、write 写文件、edit 编辑文件(基于精确字符串替换)、bash 执行命令。这 4 个工具加上不到 1000 token 的系统提示词,是 Pi 整个项目的"标准配置"。相比之下,Claude Code 的系统提示词超过 10000 token,OpenCode 的模型专用提示词也是类似量级——模型还没开始干活,几十分之一的上下文窗口就已经被内置功能吃掉了。

极简设计带来的收益是直观的:根据 Composio 的基准测试,Pi 完成同样编程任务的速度比同类 Agent 快 1.5 至 2 倍;Databricks 在百万行代码仓库里的横评显示,Pi 在大多数成本/通过率组合下优于 Claude Code 和 Codex,最优组合出现在 Pi + Claude Opus 4.8。一个简单的问候指令,Pi 只需 1100 token(占上下文窗口 0.4%),而 Codex 就要 18000 token(占 7%)。

Pi 在 Terminal Bench 2.0 上与 Codex、Cursor、Windsurf 一同排进前五。它"什么都没有",却能在最考验实战能力的榜单上挤掉那些功能完备的竞品——这恰好印证了 Mario 的判断:模型已经经过了海量 RL 训练,天然就知道 coding harness 是什么,根本不需要在 harness 上堆那么多东西。

让 Agent 自己改自己,自我扩展才是核心

Pi 的"少"不是功能残缺,而是把"功能"变成"积木"——4 个工具只是底座,所有高级能力都通过 TypeScript 扩展机制搭建出来。官网首页那句 Pi is a minimal agent harness. Adapt Pi to your workflows, not the other way around. 正是这套哲学的浓缩。

扩展机制完全开放:写 TypeScript 模块,可以注册自定义工具、创建斜杠命令、扩展键盘快捷键、监听事件、定制 TUI。Pi 官方提供了 50 多个示例,覆盖 sub-agents、plan mode、permission gates、path protection、SSH execution、sandboxing、MCP integration、custom editors、status bars、overlays 等等。"需要某个功能"和"自己实现这个功能"之间的距离,被压到一段可阅读的 TypeScript 之内。

更有意思的是 Self-extension:你不必自己写扩展——直接让 Pi 帮你写。需要一个数据库查询工具?让 Pi 用 bash 跑一段脚本;需要一个 UI 渲染器?让 Pi 写一个 TUI 组件。完成后 /reload 加载新扩展,立刻生效。Pi 成了一个会自我扩展的工具,功能的边界由你和你的工作流决定,不由厂商决定。

需要把扩展分享给团队或社区时,可以打包成 npm 包或 git 仓库,通过 `pi install npm:@foo/pi-tools` 或 `pi install git:github.com/user/repo` 安装。已经有 oh-my-pi(带 LSP 支持)等 fork,以及能在 Pi 里跑 Doom 游戏的 `@termdraw/pi` 扩展——这就是"给积木"的真实威力。

四种使用方式,每一种都贴合终端用户

Pi 不是单一形态的工具,而是一组针对场景设计的入口:

Interactive(默认)

完整 TUI 体验,支持差分渲染、Kitty 键盘协议、终端图像显示、OSC 8 超链接

Print/JSON

pi -p "query" 一次性脚本模式,适合 CI/CD、自动化任务;--mode json 输出事件流供其他工具消费

RPC

--mode rpc 走 stdin/stdout 的 JSON 协议,方便非 Node 环境嵌入

SDK

将 Pi 嵌入到自己的应用中,最著名的实战案例就是 OpenClaw——基于 Pi RPC 模式构建的多平台 AI 助手

多模型支持同样克制又完整:内置 15+ 提供商、覆盖数百模型,Anthropic、OpenAI、Google、Azure、Bedrock、Mistral、Groq、Cerebras、xAI、Hugging Face、Kimi For Coding、MiniMax、NVIDIA、OpenRouter、Ollama 等。session 中途可以一键切模型(/modelCtrl+L),切 favorite(Ctrl+P),还能通过 models.json 或扩展添加自定义 provider 和模型。

会话运行时的两种交互模式也很贴心:Steering(Enter 即时引导)会立刻中断当前工具调用,把新指令插进上下文;Follow-up(Alt+Enter 排队)则等本轮跑完再处理新指令。这意味着你不必打断 Agent 的当前节奏,但又能随时调整方向——比起"提示词注入黑箱"的体验,要可控得多。

局部截取_20260903_202330.png

Primitives, not features —— 一句被刻意挂在官网上的话

Pi 官网有一个专门的版块叫 What we didn't build,列出了被刻意不做的功能清单:

不内置 MCP

主流 MCP server 会一次性灌入大量工具定义(Playwright MCP 21 个工具 / 13700 token),未工作就吃掉 7-9% 上下文。Pi 选择让 agent 按需读 README、调用 CLI 工具,按 token 付出换灵活度

不内置 plan mode

需要规划就写到 PLAN.md,agent 可以读、改、引用,还能跟代码一起版本化

不内置 to-do 系统

经验证:to-do 列表通常让模型更困惑而不是更高效

不内置后台 bash

改用 tmux 跑后台进程,保留完全可观测性

不内置 SubAgent

需要时直接 bash 启动另一个 Pi 实例,放在 tmux 里跑,获得完全可观测性

这套刻意留白让 Pi 能保持"瘦核心",但又不牺牲任何关键能力——所有被省略的功能,都能通过 Pi 的 extension system 或第三方包补回来。正如作者 Mario 自己所说:"我给你们造了一台 meta slop machine,这样你们可以尽情发挥。而我自己住在我非常斯巴达式的世界里。"


如果你已经厌倦了"功能越加越多、用到的越来越少"的 AI 编程工具,或是想让自己的工作流而不是厂商的 roadmap 来决定工具的形状,Pi 可能是当前最值得认真把玩的终端 Coding Agent——不是少一个功能,而是给一个不同的设计起点。

Pi 的真正革命不在"少了什么",而在"怎么补回来"。当工具不再替你做决定,工程师才能重新拿回对上下文、对工作流、对模型行为的完全控制——前提是你愿意花一点时间用 TypeScript 写扩展,或者让 Pi 自己动手。极简不是简陋,而是另一种工程哲学。

Pi下载地址
支持的操作系统: macOS Linux Windows