earendil-works/pi

发布时间 2026-09-23 8 天前
来源 GitHub TypeScript
字数 2,640 字
查看原文

AI智能总结

earendil-works/pi 是一个智能体编排框架项目,包含可自扩展的编程智能体及相关运行时包。

新贡献者(new contributor)提交的 Issue 与 PR 默认会被自动关闭。维护者会每天审查这些自动关闭的 Issue。详见 CONTRIBUTING.md。

Pi Agent Harness

这里是 Pi 智能体编排框架(agent harness)项目的所在地,包含我们自扩展(self-extensible)的编程智能体。

了解更多关于 Pi 的信息:

  • 访问 pi.dev,这是包含演示的项目官网
  • 阅读文档,你也可以直接让智能体解释它自己

所有包

包 描述
@earendil-works/chord 用于服务、复制状态、RPC 和插件的独立应用组合运行时
@earendil-works/pi-telemetry 与供应商无关的可观测性(telemetry)合约、参考适配器、一致性测试与类型化 schema
@earendil-works/pi-ai 统一的多提供商 LLM API(OpenAI、Anthropic、Google 等)
@earendil-works/pi-durable 持久化的会话、任务与文档运行时
@earendil-works/pi-agent-core 具备工具调用与状态管理能力的智能体运行时
@earendil-works/pi-coding-agent 交互式编程智能体 CLI
@earendil-works/pi-tui 采用差异渲染(differential rendering)的终端 UI 库

如需用于 Slack 或聊天的自动化和工作流,请参阅 earendil-works/pi-chat。

权限与容器化

Pi 内置并不提供用于限制文件系统、进程、网络或凭据访问的权限系统。默认情况下,它以启动它的用户和进程所拥有的权限运行。

如果你需要更强的隔离边界,请对 Pi 进行容器化或沙箱化处理。详见 packages/coding-agent/docs/containerization.md 中介绍的三种模式:

  • Gondolin 扩展:将 pi 与提供商鉴权信息保留在宿主机上,同时把内置工具和 ! 命令路由到本地 Linux micro-VM 中执行。
  • 普通 Docker:将整个 pi 进程运行在本地容器中,以获得简单的隔离。
  • OpenShell:将整个 pi 进程运行在由策略控制的沙箱中。

贡献

请参阅 CONTRIBUTING.md 了解贡献指南,以及 AGENTS.md 了解项目专属规则(同时适用于人类与智能体)。关于 Pi 的长期规划也可在 RFCs 中查阅。

开发

npm install --ignore-scripts  # 安装所有依赖,但不执行生命周期脚本
npm run build         # 刷新模型数据,然后构建所有包
npm run build:offline # 在无网络条件下使用现有模型数据进行重新构建
npm run check         # 进行 lint、格式检查与类型检查
./test.sh            # 运行测试(在缺少 API Key 时跳过依赖 LLM 的测试)
./pi-test.sh         # 从源码直接运行 pi(可在任意目录下执行)

从发布源码构建独立二进制

GitHub Releases 中包含一份带版本号的源码归档,其完整性由对应发布版本的 SHA256SUMS 文件校验。解压后,运行与官方独立二进制相同的构建脚本:

VERSION="<release-version>"
tar -xzf "pi-${VERSION}-source.tar.gz"
cd "pi-${VERSION}"
./scripts/build-binaries.sh --offline-model-data --platform linux-x64 --out "PWD/out"

该归档已包含发布版本的模型数据与原生预构建产物。--offline-model-data 表示使用随归档提供的模型数据,而不刷新提供商的目录信息。该脚本会安装依赖并构建可执行文件及其运行时资源;若依赖已就绪,可传入 --skip-install。

供应链加固

我们将 npm 依赖变更视作需要评审的代码变更。

  • 直接外部依赖均固定到精确版本。内部 workspace 包仍使用版本范围。
  • .npmrc 设置 save-exact=true 与 min-release-age=2,以避免在 npm 解析过程中引入当天新发布的依赖。
  • package-lock.json 是依赖的事实来源。Pre-commit 钩子会拦截对 lockfile 的意外提交,除非设置了 PI_ALLOW_LOCKFILE_CHANGE=1。
  • npm run check 会校验直接依赖的固定版本、原生 TypeScript 导入兼容性,以及生成的 coding-agent shrinkwrap。
  • 已发布的 CLI 包包含 packages/coding-agent/npm-shrinkwrap.json,由根 lockfile 生成,用于为 npm 用户锁定传递依赖。
  • 发布冒烟测试使用 npm run release:local,在打 tag 之前先构建、打包,并在仓库外部创建隔离的 npm 与 Bun 安装环境进行验证。
  • 本地发布安装、文档化的 npm 安装,以及 pi update --self,在受支持的情况下均使用 --ignore-scripts。
  • CI 中通过 npm ci --ignore-scripts 进行安装,并有一个周期性的 GitHub workflow 运行 npm audit --omit=dev 与 npm audit signatures --omit=dev。
  • shrinkwrap 生成对依赖生命周期脚本设有明确的允许名单(allowlist);未在名单内的新增生命周期脚本依赖在校验中会失败,直至通过审查。

分享你的开源编程智能体会话

如果你使用 Pi 或其他编程智能体进行开源工作,欢迎分享你的会话。

公开的开源会话数据能够基于真实任务、工具调用、失败与修复,而非玩具级基准测试,帮助改进编程智能体。

完整说明请参阅这篇 X 上的帖子。

发布会话请使用 badlogic/pi-share-hf。阅读其 README.md 了解设置步骤。你只需要一个 Hugging Face 账号、Hugging Face CLI,以及 pi-share-hf。

你也可以观看这段视频,我在其中演示了如何发布自己的 pi-mono 会话。

我会定期在此发布我自己的 pi-mono 工作会话:

许可证

MIT

pi.dev 域名由 exe.dev 慷慨捐赠。

Exy 吉祥物