Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Pi Agent(智能体) 生态参考

本章节围绕 Harness Engineering(驾驭工程)Loop Engineering(循环工程) 两大主线,将 Pi Agent 生态资源按工程价值分类组织,帮助你在实际工作中找到最相关的工具和实践参考。

Pi 的设计哲学是极简但可工程化——内置 4 个核心工具(read/write/edit/bash)、~1K token 系统提示、20+ Provider 自由切换。以下生态分类围绕这一哲学,聚焦如何用 Pi 构建可靠的生产环境工作流。

驾驭工程生态(Harness Engineering)

聚焦 Provider 策略、安全模型和 Extension 约束机制——让 Pi Agent 在可控范围内可靠执行。

Provider 策略生态

Pi 提供 20+ 内置 Provider,覆盖 324 个模型,这是驾驭工程中“成本管控“和“模型路由“的基础能力。

类别Provider
前沿模型Anthropic(Claude 系列)、OpenAI(GPT-4o/o1/o3 系列)、Google(Gemini 系列)
开源/国产DeepSeek、Mistral、Groq、Together AI、Fireworks AI
云平台AWS Bedrock、GCP Vertex AI、Azure OpenAI
代码助手GitHub Copilot、Codeium
本地模型Ollama、LM Studio、vLLM
其他xAI(Grok)、Perplexity、Anyscale、Replicate、OpenRouter

模型管理特性(直接对应 Harness Engineering 成本支柱):

  • 统一流式 API:所有 Provider 通过一致的流式接口调用,无需适配不同 SDK
  • 自动认证解析:支持 API Key、OAuth 等多种认证方式
  • Token 与成本追踪:内置 Token 计数和成本估算,可实时监控消耗
  • 跨 Provider 切换:同一 Session 内可中途切换模型(/model 命令),适配不同任务复杂度
  • 类型安全工具定义:使用 TypeBox(@sinclair/typebox)Schema 定义工具参数
  • 摇树优化:可按需注册单个 Provider,减小打包体积
  • 循环切换Ctrl+P / Shift+Ctrl+P 在已启用模型间轮换

Thinking Budget 控制:

等级说明
off不展示推理过程
minimal最小推理
low低推理预算
medium中等推理预算(默认)
high高推理预算
xhigh最大推理预算

安全模型

Pi 的安全哲学基于明确信任边界:

Pi 将宿主机用户账户视为同一信任边界内的实体。

安全模型的 Harness Engineering 映射:

  1. 用户信任边界:Pi 默认具有宿主机用户的所有权限(L3 约束起点)
  2. 无内置沙箱:不提供内置权限弹窗或沙箱,需通过容器化方案隔离(L3 约束扩展)
  3. Project Trust:通过 /trust 控制每个项目的信任决策(L3 访问控制)
  4. 可信扩展:Extensions 和 Skills 运行在 Agent 进程中,需从可信源安装(L3 供应链安全)
  5. Prompt 注入:Pi 明确不对 AGENTS.md 及项目文件中的指令注入做防护(L3 风险认知)

完整的安全策略见 SECURITY.md

容器化沙箱方案

对于需要安全隔离的场景,Pi 提供 3 种容器化方案,构成 Harness Engineering 的隔离层:

方案隔离对象最佳场景要求
Gondolin内置工具 + ! 命令本地微 VM 隔离,保留宿主机认证Node >=23.6.0 + QEMU
Plain Docker整个 Pi 进程简单本地隔离Docker
OpenShell整个 Pi 进程策略控制沙箱OpenShell Gateway

Gondolin(推荐):

Gondolin 是一个本地 Linux 微 VM,通过 Extension 机制将 Pi 的内置工具路由到 VM 中执行,同时保留宿主机上的 Provider API 认证信息。

cp -R packages/coding-agent/examples/extensions/gondolin ~/.pi/agent/extensions/gondolin
cd ~/.pi/agent/extensions/gondolin
npm install --ignore-scripts

# 启动
pi -e ~/.pi/agent/extensions/gondolin

工作区目录自动挂载到 VM 的 /workspace,文件变更双向同步。

Plain Docker:

FROM node:24-bookworm-slim
RUN apt-get update && apt-get install -y bash ca-certificates git ripgrep
RUN npm install -g --ignore-scripts @earendil-works/pi-coding-agent
WORKDIR /workspace
ENTRYPOINT ["pi"]

OpenShell:

基于 NVIDIA OpenShell 的策略控制沙箱,支持文件系统、进程、网络、认证和推理的策略管控:

openshell sandbox create --name pi-sandbox --from pi -- pi

OpenShell 提供远程网关模式,可让沙箱在远端运行而 Provider API Key 保留在本地网关。


循环工程生态(Loop Engineering)

聚焦 SDK 嵌入、RPC 自动化、Session 持久化和分支管理——“我不在时工作如何继续”。

程序化集成(4 种模式)

Pi 提供 4 种集成方式,适应从单次执行到持续循环的不同粒度的嵌入需求。

SDK 模式(Node.js 嵌入)

通过 @earendil-works/pi-agent-core 在 Node.js 应用中直接嵌入 Agent 能力:

import { Agent } from "@earendil-works/pi-agent-core";
import { agentLoop } from "@earendil-works/pi-agent-core/agent-loop";

const agent = new Agent({
  model: "anthropic:claude-sonnet-4-20250514",
  systemPrompt: "你是一个代码助手",
});

// 直接使用底层事件流
for await (const event of agentLoop(agent, [
  { role: "user", content: "解释这段代码" },
])) {
  // 处理流式事件
}

SDK 模式提供对 Agent 的完全控制,包括:

  • 自定义工具注册
  • 状态管理(AgentState)
  • 事件流处理
  • 上下文预处理(transformContext
  • 工具调用前/后钩子(对应 Loop Engineering 中的 Hook 点)

RPC 模式(跨语言 IPC)

RPC 模式通过 stdin/stdout 的 JSONL 协议,让非 Node.js 进程也能集成 Pi:

pi --mode rpc

协议使用 LF 分隔的 JSONL 帧,支持以下请求类型:

  • chat — 发送消息并接收流式响应
  • execute — 执行单次工具调用
  • get_state — 获取当前状态
  • reset — 重置会话

适合 Python、Rust、Go 等语言编写的工具或 IDE 插件集成(对应 Loop Engineering 中的跨语言编排)。

pi -p "列出当前目录的文件"              # 执行后返回结果
pi -p "解释这个函数" --source file.ts   # 附带源文件

适合 CI/CD 脚本、自动化任务中的单次查询场景(对应 Loop Engineering 中的批处理模式)。

JSON Event Stream 模式

pi --mode json -p "重构这个函数"

输出结构化 JSON 事件流,每行一个事件,适合需要精确跟踪 Agent 执行过程的场景(对应 Loop Engineering 中的可观测性)。

Session 管理

Pi 的 Session 系统支持完整的分支和恢复能力,是 Loop Engineering 中持久化和分支管理的基础。

存储格式:

Session 以 JSONL 格式存储在 ~/.pi/agent/sessions/ 目录。每条消息独立一行,包含完整的时间戳和元数据。

消息类型角色说明
user用户用户输入
assistant助手AI 回复
toolResult工具工具执行结果
bashExecutionbashBash 命令执行记录(含退出码、输出截断标记)
custom自定义Extension 自定义消息(含 customType 区分)
branchSummary分支Git 分支切换时的上下文摘要
compactionSummary压缩上下文压缩时的摘要

Session Tree(分支管理):

Session 支持树状分支结构,是 Loop Engineering 中“会话隔离“和“并行探索“的关键能力:

  • Fork:从当前分支的用户消息处创建新的 Session 文件
  • Clone:复制当前完整活动分支为新 Session
  • Tree:通过 /tree 在分支树中导航,可从任意历史点继续
  • Export/Import:通过 /export/import 导出和导入 Session 文件
  • Share:通过 /share 以私有 GitHub Gist 分享 Session

上下文压缩:

Pi 内置自动和手动两种压缩机制:

  • 自动压缩:上下文窗口接近上限时自动触发
  • 手动压缩/compact [prompt] 命令,可附带自定义压缩指令
  • 分支摘要:Git 分支切换时,原分支上下文自动摘要后注入到新分支

扩展集成生态

Extension 体系

Pi 的 Extension 系统是其扩展能力的核心,支持自定义工具、命令和事件处理:

资源地址
Extensions 示例packages/coding-agent/examples/extensions/
Pi Packagesnpm 分发,@earendil-works/pi-coding-agent

Extension 类型:

  • 工具扩展:新增 Agent 可调用的工具
  • 命令扩展:新增 /command 类命令
  • 事件处理:监听 Agent 生命周期事件
  • Hook 扩展:工具调用前/后执行自定义逻辑

详见 → Pi Agent(智能体) 扩展体系详解

跨工具生态对比

维度Pi AgentOpenCodeClaude Code
Provider 数量20+ (324 模型)75+仅 Claude
SDK 集成原生 TypeScript API + RPCPlugin(插件) Hook 系统CLI 调用
容器化方案Gondolin / Docker / OpenShellDockerDocker(官方镜像)
Session 分享GitHub Gist + OSS 社区本地文件
扩展分发Pi Packages (npm)npm Plugin无标准机制
社区规模65K+ Stars, 210 万周下载开源社区Claude Code 用户群
本地模型Ollama / LM Studio / vLLMOllama / vLLM不支持

迁移指南

从其他工具迁移到 Pi Agent 时,需要关注以下关键差异:

从 Claude Code 迁移

  • 模型灵活性:Claude Code 仅支持 Claude 系列模型,Pi 支持 20+ Provider/324 个模型。迁移后可通过 /model 命令随时切换模型,无需配置多套环境
  • 扩展机制:Claude Code 的六层扩展体系(CLAUDE.md + Skills + MCP(模型上下文协议) + Subagent + Hook + Plugin)对应 Pi 的四层体系(Extensions/Skills/Prompt(提示词) Templates/Themes)。自定义工具需按 Pi 的 Extension API 用 TypeScript 重写,而非 Shell 脚本 Hook
  • 安全模型:Claude Code 内置权限审批弹窗,Pi 无内置沙箱——如需安全隔离必须使用 Gondolin/Docker/OpenShell 容器化方案
  • 命令差异:部分 Slash 命令名称不同,如 Pi 的 /compact 行为类似但参数不同,建议查阅 CLI 命令与交互模式参考 逐一确认

从 OpenCode 迁移

  • SDK 差异:OpenCode 使用 REST API(@opencode-ai/sdk)通信,Pi 使用原生 TypeScript API(@earendil-works/pi-agent-core)或 RPC JSONL 协议。需将 HTTP 调用模式替换为直接函数调用或 stdio 消息
  • Plugin → Extension:OpenCode 的 Plugin/Hook 机制在 Pi 中对应 Extension 体系,API 模式不同。已有 Plugin 需按 Pi Agent(智能体) 扩展体系详解 重写
  • Provider 配置:OpenCode 通过 opencode.json 管理 Provider;Pi 通过环境变量或 ~/.pi/config.yaml 配置,迁移时需转换格式
  • Session 模型:OpenCode Session 通过 REST API 创建管理;Pi Session 存储在本地 JSONL 文件,支持 fork/clone/tree 等高级分支操作

通用注意事项

  1. Provider 差异:不同 Provider 的 API 响应格式和 Token 计价方式各异,迁移后需重新评估成本
  2. Extension 信任:Extensions 运行在 Agent 进程中(同一信任边界),安装前需审计代码来源
  3. 工具集覆盖:Pi 内置 4 个核心工具(read/write/edit/bash),其他能力通过 Extension 提供——迁移前检查 workflow 依赖的工具是否都已覆盖

社区精选项目

官方资源

资源地址
官方文档pi.dev/docs/latest
GitHub 仓库github.com/earendil-works/pi
GitHub Issuesgithub.com/earendil-works/pi/issues
npm@earendil-works/pi-coding-agent
OSS Session 分享pi.dev/sessions
Extensions 示例packages/coding-agent/examples/extensions/

Extension 生态列表

类别说明
Gondolin微 VM 沙箱 Extension,推荐的安全隔离方案
自定义工具通过 Extension API 添加新工具
自定义命令通过 Extension API 添加 /command
Pi Packages通过 npm 分发的 Extension 包

推荐学习资源

资源说明
官方文档pi.dev/docs/latest
GitHub 源码github.com/earendil-works/pi
OSS 社区 Sessionpi.dev/sessions

常见反模式

在生产环境中使用 –approve 跳过项目信任检查

--approve 标志用于一次性跳过 Project Trust 确认对话框,方便开发阶段快速测试 Extension。但许多开发者在 CI/CD 脚本和生产部署中也使用 --approve,这会自动加载所有项目级 Extension 和 Skills,即使它们来自不受信任的来源。

生产环境应该显式配置 defaultProjectTrust 策略,而非使用 --approve 临时覆盖。在 CI 中使用 --no-approve-na)确保项目级资源不被加载,除非你在流水线中明确信任了特定的 Extension。信任决策应该通过 trust.json 持久化,而非每次运行时覆盖。

安装过多 Provider 导致认证管理复杂化

Pi 支持 20+ Provider,许多开发者同时配置了 Anthropic、OpenAI、Google、DeepSeek 等多个 Provider 的 API Key。每个 Provider 的认证方式不同(API Key、OAuth、云平台 IAM),Key 的轮换策略和过期时间也不同。维护 5 个以上 Provider 的认证状态会显著增加运维负担。

按实际使用频率分层管理 Provider:主力模型(如 Sonnet)保持常驻配置,备选模型(如 GPT-4o)在需要时临时配置,很少使用的模型不要预先注册。使用 AuthStorage 的加密持久化功能安全存储 API Key,避免在环境变量中暴露明文密钥。

不使用容器化就执行不受信任的 Extension

Pi 没有内置沙箱,Extension 拥有宿主机的完整权限。但许多开发者直接从 npm 或 GitHub 安装第三方 Extension,不审查代码就加载执行。一个恶意 Extension 可以读取所有环境变量(包括 API Key)、修改项目文件、执行任意 Shell 命令。

安装第三方 Extension 前,审查其 TypeScript 源码(通常只有几十到几百行),确认没有可疑的文件操作或网络调用。优先选择 Pi 官方仓库中的 Extension 示例。在生产环境中,使用 Docker 或 Gondolin 容器化运行 Pi,即使 Extension 有问题也被限制在容器内。

适用场景与限制

Pi 不提供内置的 Agent 编排层

Pi 的设计哲学是“极简核心 + 扩展驱动“,它不内置 OpenCode 的 Category 编排系统或 Claude Code 的 Subagent 文件系统。多 Agent 协作需要通过 SDK 多实例或 tmux 手动编排,没有开箱即用的后台 Agent 调度能力。

对于需要复杂 Agent 编排的场景(如多 Agent 并行审查、后台任务调度),Pi 的原生能力不如 OpenCode 或 Claude Code。你需要自行实现调度逻辑,或者使用 tmux 启动多个 Pi 实例并在它们之间手动协调。

Gondolin 沙箱只隔离内置工具

Gondolin 是 Pi 推荐的安全隔离方案,但它只将内置工具(read/write/edit/bash/grep/find/ls)路由到微 VM 中执行。Extension 中注册的自定义工具不经过 Gondolin 沙箱——它们直接在宿主进程中运行。这意味着一个注册了自定义 bash 工具的 Extension 可以绕过 Gondolin 的隔离。

不要假设 Gondolin 提供了完整的进程隔离。对于需要全进程隔离的场景(如执行不受信任的 Extension 代码),使用 Docker 或 OpenShell 将整个 Pi 进程容器化。Gondolin 适合本地开发中隔离内置工具的执行环境。

OSS Session 共享社区的数据安全

Pi 的 OSS Session 分享功能允许用户通过 GitHub Gist 共享对话 Session。这些 Session 可能包含代码片段、API 调用记录、项目结构信息等敏感数据。一旦通过 Gist 共享,数据就在公网上可访问(即使是私有 Gist 也可能被有权访问 GitHub 账户的人看到)。

分享 Session 前审查内容,移除 API Key、密码、内部项目路径等敏感信息。使用 /export 导出前先在编辑器中删除敏感消息。团队内部的 Session 分享应使用私有仓库或内部文件共享,而非 GitHub Gist。

常见失败与陷阱

Provider API Key 在容器化环境中的注入问题

在 Docker 或 Gondolin 中运行 Pi 时,API Key 需要从宿主机传递到容器内部。常见的错误是直接在 Dockerfile 中 ENV ANTHROPIC_API_KEY=xxx,这会将密钥写入镜像层,任何能拉取镜像的人都能提取密钥。

正确的做法是使用 Docker 的 --env--env-file 在运行时注入环境变量,或者使用 Docker Secrets / Kubernetes Secrets 管理敏感信息。docker run -e ANTHROPIC_API_KEY 会将密钥传递给容器但不写入镜像,这是最简单且安全的方式。

Session 文件格式在版本升级后不兼容

Pi 的 Session 以 JSONL 格式存储在 ~/.pi/agent/sessions/ 目录中。当 Pi 版本升级时,消息格式可能发生变化(新增字段、修改字段类型)。旧版本创建的 Session 文件可能无法在新版本中正确加载,导致 /resume 恢复历史会话失败。

定期用 /export 备份重要的 Session 到独立目录。升级 Pi 版本后测试 /resume 功能是否正常。如果恢复失败,使用 /import 导入备份的 Session 文件。对于需要长期保留的对话,导出为纯文本或 Markdown 格式。

Extension 依赖的 npm 包在容器中安装失败

在 Docker 中运行 Pi 时,如果 Extension 依赖第三方 npm 包,需要在容器构建阶段安装这些依赖。常见的错误是只安装了 @earendil-works/pi-coding-agent 而没有安装 Extension 的依赖,导致 Extension 加载时 import 报错。

在 Dockerfile 中先复制 Extension 的 package.json 并运行 npm install,再复制 Extension 源码。或者将 Extension 的依赖打包到 Pi Package 中,通过 pi packages install 一键安装。使用 npm install --omit=dev 确保只安装生产依赖,减小镜像体积。

关联章节

数据来源:Pi Agent 官方文档、GitHub 仓库、npm 统计。数据截止 2026 年 6 月。