Pi:97.3k star 的自扩展编码 Agent 工具包,把权限边界交给外部沙箱

Pi(仓库 earendil-works/pi)是一个面向终端开发的 AI Agent 工具包:它把多供应商 LLM 调用、Agent 运行时、交互式编码 CLI 和终端 UI 拆成一组可独立使用的包,核心哲学是「保持核心最小,一切能力通过 TypeScript 扩展、技能、包来叠加」。

项目当前 97.3k star、12.0k fork、279 名贡献者(数据截至 2026-08-24),最新版本 v0.84.3(2026-08-24 发布),MIT 协议,TypeScript 约占代码量 94%,已累计 256 个 release。

它把自己定位成一个可以被使用者自行改装的编码 Agent harness(工具架):默认只给模型 read、write、edit、bash 四个工具,没有内置子代理、计划模式,也没有内置权限系统——这三类能力要么让你自己用扩展实现,要么安装社区包。对想完全掌控 agent 行为的开发者来说,这是它的核心卖点。

五个包,把 agent 拆成可替换的层

Pi 采用 monorepo 结构(多个分层的包放入同一个仓库管理),每个层一个 npm 包,可以单独取用:

  • @earendil-works/pi-ai:统一的多供应商 LLM API,一套接口对接 OpenAI、Anthropic、Google 等多家模型,换模型不换代码。
  • @earendil-works/pi-agent-core:Agent 运行时,负责工具调用与状态管理。
  • @earendil-works/pi-coding-agent:交互式编码 agent CLI,日常使用的主要入口,可全局安装为 pi 命令。
  • @earendil-works/pi-tui:终端 UI 库,采用差分渲染,只更新屏幕变化的部分,专门为 agent 会话场景优化。
  • @earendil-works/pi-telemetry:供应商中立的遥测契约(上报数据的格式标准,不绑死任何一家服务商)。

扩展机制是这套设计的关键:扩展、技能、提示词模板、主题,都可以打包成可分享的「Pi 包」,通过 npm 或 Git 分发。社区已做出子代理、权限门、Git 自动提交、MCP 适配器等核心之外的组件。项目用 AGENTS.md 记录对人与 agent 的统一规则。

权限边界:默认信任,隔离靠外部沙箱

Pi 不内置权限系统限制文件系统、进程、网络或凭据访问,默认以启动它的用户权限运行,即 agent 最多只能做到你本人在该账号下能做的事——README 对此明确说明。需要隔离时,官方给出三种容器化模式:

  • Gondolin extension:本地 Linux 微虚拟机,宿主保留配置与凭据,内置工具和命令进入 VM 执行;
  • Plain Docker:整个进程跑在本地容器里,简单隔离;
  • OpenShell:在策略受控的沙箱中运行整个进程。

在无隔离运行与容器化隔离之间,它把选择交给了部署者。

治理上还有一个动作:新贡献者的 issue 和 PR 默认自动关闭,由维护者每天人工评审后再重新打开,用这种方式控制外部代码进入的速度。

安装与上手

安装与大多数编码 agent 类似:

npm install -g --ignore-scripts @earendil-works/pi-coding-agent
pi

认证取决于你选择的提供商路径:可用 pi /login 登录订阅型提供商,或用 API Key(如 ANTHROPIC_API_KEY)直连。Pi 本身免费开源,但模型调用仍按你的供应商计费。

项目还维护了供应链加固细节:npm 直接依赖固定到精确版本,.npmrc 要求依赖发布满两天才允许进入解析;发布包附带 npm-shrinkwrap 锁定传递依赖;CI 用 npm ci --ignore-scripts 安装并定时跑 npm audit。

结论

Pi 走的是与「开箱即用」相反的路线:核心尽量小、每一层都可替换、能力靠共享包扩展,权限边界交给外部沙箱。它适合愿意自己接管 agent 行为的开发者——想在终端里拥有一个可逐层替换、方便改装的编码 agent,Pi 是目前值得看的选项之一。选用前需要明确一点:没有内置权限系统意味着隔离是使用者的责任,正式环境务必按官方三种容器化模式之一部署。