新贡献者(new contributor)提交的 Issue 与 PR 默认会被自动关闭。维护者会每天审查这些自动关闭的 Issue。详见 CONTRIBUTING.md。
Pi Agent Harness
这里是 Pi 智能体编排框架(agent harness)项目的所在地,包含我们自扩展(self-extensible)的编程智能体。
- @earendil-works/pi-coding-agent:交互式编程智能体 CLI
- @earendil-works/pi-agent-core:具备工具调用与状态管理能力的智能体运行时
- @earendil-works/pi-ai:统一的多提供商 LLM API(支持 OpenAI、Anthropic、Google 等)
了解更多关于 Pi 的信息:
所有包
| 包 | 描述 |
|---|---|
| @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
