Pi:统一多模型接口与可扩展编码代理 CLI
Pi 是给开发者用的多模型编码代理 CLI,集成工具调用和 TUI,权限隔离交给 Docker 或沙箱。
GitHub earendil-works/pi 更新 2026-09-04 分支 main 星标 105.7K 分叉 13.3K
LLM API AI Agent pi-coding-agent Terminal UI Linux micro-VM Docker OpenShell

🧭 决策指南

适合,如果你

  • 你要在 OpenAI、Anthropic、Google 等提供商之间统一调用 LLM。
    README 的 All Packages:pi-ai 是“Unified multi-provider LLM API (OpenAI, Anthropic, Google, etc.)”。
  • 你需要一个带工具调用、状态管理和终端界面的编码代理。
    README 的 All Packages:pi-agent-core 提供 tool calling and state management,pi-coding-agent 是 Interactive coding agent CLI,pi-tui 是 Terminal UI library。
  • 你能把 Pi 放进 Docker、Gondolin Linux micro-VM 或 OpenShell sandbox。
    README 的 Permissions & Containerization 列出了 Gondolin、Plain Docker 和 OpenShell 三种模式。
  • 你需要 MIT License 的开源 AI agent toolkit。
    README 的 License 章节写明 MIT;项目数据标注核心描述为 AI agent toolkit。

不适合,如果你

  • 你要求 Pi 原生限制文件系统、进程、网络或凭据访问。
    README 的 Permissions & Containerization 明确写着“Pi does not include a built-in permission system”。
  • 你无法提供模型 API keys,却需要执行完整的 LLM 依赖测试。
    README 的 Development:`./test.sh` 会“skip LLM-dependent tests without API keys”。
  • 你的团队依赖公开 issue 和 PR 立即进入社区处理流程。
    README 开头写明 new contributors 的 issues 和 PRs 默认 auto-closed。

前置条件

  • 开发章节提供了 `npm install --ignore-scripts`,说明开发安装依赖 npm。
  • 构建章节要求 `npm run build`,该命令会刷新 model data 并构建所有 packages。
  • 需要执行 LLM 依赖测试时,README 要求 API keys;`./test.sh` 无 keys 会跳过相关测试。
  • 需要强化边界时,README 指向 Gondolin、Plain Docker 或 OpenShell,而不是 Pi 内置权限系统。
  • README 的 standalone binary 构建脚本使用 Bun executable,但未说明运行时所需 Bun 版本。

第一步命令(README 原文)

npm install --ignore-scripts  # Install all dependencies without running lifecycle scripts

要注意

  • 直接运行 Pi 时,启动用户的文件、进程、网络和凭据权限不会被内置系统收紧。
    README 的 Permissions & Containerization 明确说明默认继承 user and process permissions,并建议 containerize or sandbox Pi。
  • 执行 `./test.sh` 时,没有 API keys 的 LLM-dependent tests 会被跳过。
    README 的 Development 命令注释原文写明 skips LLM-dependent tests without API keys。
  • 发布源代码构建使用 `--offline-model-data` 时,会固定到归档内的 provider model data 快照。
    README 的 Building standalone binaries from release source 说明该参数使用 archive snapshot,而不是实时 provider catalogs。
  • 依赖安装默认跳过 lifecycle scripts,新增生命周期脚本依赖会触发检查失败。
    README 的 Supply-chain hardening 写明 `npm ci --ignore-scripts`,并要求新 lifecycle-script deps 先审核。

替代方案

  • earendil-works/pi-chat:目标是 Slack/chat automation 和 workflows,而不是交互式 coding agent CLI。
    README 的 All Packages:For Slack/chat automation and workflows see earendil-works/pi-chat。
  • Plain Docker:你只需要把整个 Pi 进程放进本地容器,且不需要 Gondolin 的主机认证保留方式。
    README 的 Permissions & Containerization。
  • OpenShell:你需要 policy-controlled sandbox,而不是简单的本地 Docker 隔离。
    README 的 Permissions & Containerization。

材料未说明

  • README 未说明支持的 Node.js、npm 或 Bun 具体版本。
  • README 未列出 OpenAI、Anthropic、Google 各提供商的认证配置方式和必需环境变量。
  • README 未说明 pi-coding-agent 的完整用户安装命令及可用 CLI 参数。
  • README 未给出 Linux micro-VM、Docker 或 OpenShell 的 CPU、内存和磁盘要求。
  • 项目数据中的主要语言分布为空,技术栈标记为 Mixed/Unknown。
  • 项目数据未提供最近更新时间;开发活跃度显示贡献者 0 人、发布 0 个版本、最近提交 0 个。
  • README 未说明 101,642 个星标对应的实际生产使用案例或性能指标。
  • README 未说明 agent loop 的最大上下文、工具协议、重试策略或并发模型。

💡 深度解析

6
不适合 我负责 Slack 聊天自动化和工作流,不需要终端里的代码修改代理;Pi 是否应该作为我的主要项目依赖?
适合读者: 想把 AI 代理接入 Slack 聊天自动化和工作流、而不是在终端运行编码代理的应用开发者

不适合直接作为主要入口,因为 README 明确把 Slack、聊天自动化和工作流场景指向独立的 pi-chat 项目。

  • Pi 的顶层定位是 “unified LLM API, agent loop, TUI, coding agent CLI”,重点是代理运行时、终端 UI 和交互式编码代理。
  • All Packages 只列出 pi-coding-agentpi-agent-corepi-aipi-tuichordpi-telemetry,没有把 Slack 适配器列为 Pi 的组成包。
  • README 明确写着:For Slack/chat automation and workflows see earendil-works/pi-chat

如果你的应用仍需复用统一模型 API或代理核心,可以单独研究 pi-aipi-agent-core;但 Slack 事件接收、消息发送、工作流触发和权限模型不应假定由 Pi 已经提供。README 未说明 Pi 与 pi-chat 的接口或版本关系。

  • README 项目简介:"unified LLM API, agent loop, TUI, coding agent CLI"
  • All Packages:列出的包没有 Slack 适配器
  • All Packages:"For Slack/chat automation and workflows see earendil-works/pi-chat"
材料未说明:README 未说明 Pi 与 pi-chat 的集成接口、版本兼容性和功能边界。;README 未说明 Slack 事件、身份认证、消息发送和工作流编排能力。
不适合 我准备让编码代理执行文件、进程和网络操作,但运行环境必须有明确隔离;我能否把 Pi 默认安装后直接交给不受信任的代理任务?
适合读者: 需要让代理执行文件系统、进程和网络操作、但必须在本地 Linux 微型虚拟机、Docker 或 OpenShell 中控制权限的安全工程师

不适合,因为 Pi 默认不提供限制文件系统、进程、网络或凭证访问的内置权限系统。

  • README 明确写明,Pi 默认使用启动它的用户和进程权限;这不是面向不受信任任务的安全边界。
  • 文档提供三种隔离路径:Gondolin 将内置工具和 ! 命令路由到本地 Linux micro-VM,Docker 隔离整个 Pi 进程,OpenShell 提供策略控制沙箱。
  • 因此,若任务来源、代码或扩展不可信,必须把容器或沙箱纳入部署设计,而不能只依赖 CLI 本身。

README 没有比较三种方案的系统调用覆盖、网络策略、性能开销或凭证暴露范围;也没有说明如何为自定义工具继承同一权限边界。

  • Permissions & Containerization:"Pi does not include a built-in permission system"
  • Permissions & Containerization:"By default, it runs with the permissions of the user and process that launched it"
  • Permissions & Containerization:"Gondolin extension"、"Plain Docker"、"OpenShell"
材料未说明:README 未给出 Gondolin、Docker、OpenShell 的权限矩阵、网络默认策略和性能数据。;README 未说明自定义工具、插件及 provider auth 在隔离边界中的具体行为。
适合 我需要把 Pi 的 npm CLI 放进内部环境,要求依赖版本精确锁定、安装默认不执行生命周期脚本,并能审计发布包;README 提供的控制是否足够匹配这个约束?
适合读者: 要在企业内部安装 npm CLI、严格审查依赖生命周期脚本并运行供应链审计的发布或平台工程师

适合,因为 README 将依赖锁定、脚本控制、发布包收缩锁和审计流程都写成了明确机制。

  • 直接外部依赖固定为 exact versions,package-lock.json 被定义为依赖事实来源,发布 CLI 另带由根锁文件生成的 npm-shrinkwrap.json
  • .npmrc 设置 save-exact=truemin-release-age=2,降低解析到当天恶意或有问题版本的风险。
  • CI 使用 npm ci --ignore-scripts;本地发布安装、文档化 npm 安装和 pi update --self 在支持时也使用 --ignore-scripts
  • 定时 workflow 执行 npm audit --omit=devnpm audit signatures --omit=dev,生命周期脚本还要经过显式 allowlist 检查。

不过 README 没有给出内部制品仓库、签名验证流程、漏洞处置 SLA 或升级例外审批细节;这些仍需平台规范补齐。

  • Supply-chain hardening:"Direct external dependencies are pinned to exact versions"
  • Supply-chain hardening:"package-lock.json is the dependency ground truth"
  • Supply-chain hardening:"CI installs with npm ci --ignore-scripts"
  • Supply-chain hardening:"npm audit --omit=dev" plus "npm audit signatures --omit=dev"
npm install --ignore-scripts
材料未说明:README 未说明内部 npm registry、发布签名验证和制品留存的具体流程。;README 未说明漏洞修复时限、依赖升级例外和审计失败后的阻断规则。
适合 我需要从 GitHub release source 构建 linux-x64 独立二进制,构建机不能访问网络,而且必须复用发布包中的模型数据;Pi 的构建流程支持这个约束吗?
适合读者: 需要从 release source 构建 linux-x64 独立二进制、并且构建机不能访问网络的发布工程师

适合,因为 README 明确提供了带发布模型数据的离线独立二进制构建流程。

  • GitHub release 提供 versioned source archive,并由 SHA256SUMS 覆盖,适合先验证源代码归档。
  • 归档包含 release 使用的 generated provider model data;构建时可用 --offline-model-data,避免刷新在线 provider catalogs。
  • README 的脚本支持 --platform linux-x64 --out,并说明会安装依赖、构建 monorepo、编译 Bun executable 和整理运行时资源。
  • 若依赖由发布工程单独提供,还可传入 --skip-install --skip-deps

限制是“离线”主要针对模型数据刷新;README 仍说脚本会安装依赖,除非依赖已另行准备。它没有说明 Bun、npm 版本要求或完整离线依赖缓存格式。

  • Building standalone binaries from release source:"The source archive includes the generated provider model data"
  • Building standalone binaries from release source:"--offline-model-data"
  • README 原命令:"./scripts/build-binaries.sh --offline-model-data --platform linux-x64 --out \"$PWD/out\""
  • Building standalone binaries from release source:"--skip-install --skip-deps"
./scripts/build-binaries.sh --offline-model-data --platform linux-x64 --out "$PWD/out"
材料未说明:README 未说明离线构建所需的 Bun、npm 版本及预置依赖目录结构。;README 未说明首次获取 source archive、依赖和模型数据的完整供应链步骤。
适合 我想在终端中使用交互式编码代理完成代码修改和调试,同时保留在 OpenAI、Anthropic、Google 提供商之间切换的能力,Pi 适合我的工作流吗?
适合读者: 需要在终端里使用 AI 修改代码和调试项目、并计划在 OpenAI、Anthropic、Google 模型之间切换的软件开发者

适合,因为 Pi 同时提供终端编码代理和统一的多提供商 LLM 接口。

  • pi-coding-agent 被定义为 Interactive coding agent CLI,可直接承载终端中的编码代理会话。
  • pi-ai 统一封装 OpenAI、Anthropic、Google 等提供商,应用层不必为每家 API 单独维护入口。
  • pi-agent-core 提供 tool calling 和 state management,适合推进多轮、可执行的代码任务。

但统一接口不代表不同模型的工具调用、上下文限制和代码效果完全一致;README 也没有说明具体模型目录、凭证配置方式或模型切换命令。若直接从源码运行,README 给出了安装、构建和测试流程。

  • All Packages:"Interactive coding agent CLI"
  • All Packages:"Unified multi-provider LLM API (OpenAI, Anthropic, Google, etc.)"
  • All Packages:"Agent runtime with tool calling and state management"
npm install --ignore-scripts
材料未说明:README 未说明各提供商的凭证配置方法、可用模型清单和运行时切换方式。;README 未说明不同提供商之间工具调用和上下文能力的兼容边界。
适合 我需要基于统一 LLM API 自定义工具调用、多轮状态管理和代理流程,但不想把应用绑定到交互式编码 CLI;我应该采用 Pi 的哪些包?
适合读者: 正在构建自定义代理和工具调用流程、希望复用运行时而不是从固定 CLI 重新实现的工程师

适合,因为 Pi 把 LLM 接入、代理循环和终端界面拆成可复用包,而不是只暴露一个固定 CLI。

  • pi-ai 负责统一多提供商 LLM API,适合作为模型接入层。
  • pi-agent-core 明确提供代理运行时、工具调用和状态管理,可作为自定义代理流程的基础。
  • pi-coding-agent 是交互式 CLI,属于上层使用方式,不是复用底层代理能力的唯一入口。
  • 若应用还需要服务、复制状态、RPC 或插件,README 列出了独立的 chord 运行时;遥测需求则可查看 pi-telemetry

代价是多包边界、状态生命周期、错误传播和版本兼容需要自行理解。README 没有给出自定义工具的完整 API 示例,也没有说明各包的稳定性承诺。

  • All Packages:"Unified multi-provider LLM API"
  • All Packages:"Agent runtime with tool calling and state management"
  • All Packages:"Standalone application-composition runtime for services, replicated state, RPC, and plugins"
  • All Packages:"Vendor-neutral telemetry contracts, reference adapter, conformance tests, and typed schemas"
npm run check
材料未说明:README 未说明自定义工具、代理循环和状态管理的详细编程接口。;README 未说明各 workspace 包之间的版本兼容策略和稳定 API 范围。

✨ 核心亮点

  • pi-ai 统一接入 OpenAI、Anthropic、Google 等模型
  • pi-agent-core 提供工具调用与状态管理运行时
  • pi-coding-agent 提供交互式编码代理 CLI
  • 默认继承用户进程权限,不内置权限限制系统
  • MIT License,GitHub 星标超过 101,000

🔧 工程化

  • pi-ai 统一 OpenAI、Anthropic、Google 等多提供商 LLM API
  • pi-agent-core 管理工具调用、代理循环与状态
  • pi-coding-agent 结合 pi-tui 提供交互式终端编码代理
  • Gondolin、Docker、OpenShell 提供三种隔离路径

⚠️ 风险

  • README 明确指出 Pi 默认拥有启动进程的文件、进程和网络权限
  • 新贡献者提交的 issue 和 PR 默认自动关闭,维护者每日复审
  • LLM 依赖测试在无 API keys 时由 ./test.sh 跳过
  • 项目元数据显示贡献者 0 人、版本发布 0 个

👥 适合谁?

  • 需要在 OpenAI、Anthropic、Google 间切换的 LLM 应用开发者
  • 需要终端编码代理、工具调用和状态管理的团队
  • 能使用 Docker、Linux micro-VM 或 OpenShell 的隔离环境用户