一、Pi Agent 是什么?

Pi Agent 是一个极简主义的开源 AI 编程 Agent 框架,由 Mario Zechner(libGDX 作者)创建,现由 Earendil Works(Armin Ronacher 所在组织)维护。它的核心哲学可以用一句话概括:

“An autonomous agent is just an LLM + tools + a loop.”

这句话看似简单,但 Pi 把它做到了极致——整个核心运行时只有 5 个文件、约 1500 行 TypeScript 代码,系统提示词不到 1000 token,内置工具只有 4 个。

但 Pi 并不是"简陋"。它设计了一套扩展优先的架构,让社区通过 TypeScript 扩展来按需加载任何能力。你可以把它理解为 Agent 世界的"Vim 哲学"——核心极简,能力由插件定义。

# 安装 Pi
npm install -g @earendil-works/pi-coding-agent

# 进入项目目录启动
cd your-project
pi

# 或者一句话执行
pi -m "重构 src/utils.ts,把回调改成 async/await"

二、核心架构:四层积木设计

Pi 是一个 TypeScript monorepo,由四个独立包组成,每一层都可以单独使用:

┌─────────────────────────────────────┐
│        pi-coding-agent              │  ← CLI/TUI 交互层
│    (产品层:会话管理、扩展系统)        │
├─────────────────────────────────────┤
│        pi-agent-core                │  ← Agent 运行时核心
│  (Agent Loop、工具调用、状态管理)     │
├─────────────────────────────────────┤
│        pi-ai                        │  ← 统一 LLM API 层
│  (屏蔽 OpenAI/Anthropic/Google 差异) │
├─────────────────────────────────────┤
│        pi-tui                       │  ← 终端 UI 库
│        (差量渲染)                    │
└─────────────────────────────────────┘

关键设计边界:

  1. LLM 边界pi-ai 层统一了 30+ 供应商的 API,切换模型不需要改业务代码
  2. 副作用边界:模型只能提议工具调用,实际执行在本地发生,可以被扩展拦截/修改/阻止

这种分层使得每一层可以独立测试——pi-ai 可以不依赖 Agent 循环测试,pi-agent-core 可以不依赖 UI 测试。


三、Pi vs Claude Code vs Codex CLI:核心设计差异

下面是三者在架构哲学层面的根本差异:

维度Pi AgentClaude CodeCodex CLI
设计哲学极简核心 + 扩展优先全面内置 + 信任自主沙箱安全 + 可验证性
系统提示词~1,000 tokens~8,000-10,000 tokens中等
内置工具数4 个20+ 个10+ 个
核心代码量~1,500 行大型 Node.js 项目Rust 项目
语言TypeScript (MIT)Node.js (闭源)Rust (Apache 2.0)
模型绑定30+ 供应商,任意切换仅 Claude 系列仅 GPT 系列
Plan Mode❌ 无(通过扩展实现)✅ 内置✅ 内置
Sub-Agent❌ 无(通过扩展实现)✅ 内置 Task 工具✅ 内置多 Agent
MCP 支持❌ 无(通过扩展实现)✅ 内置✅ 内置
安全模型Guardrails 拦截三级权限体系内核级沙箱
会话模型树状分支线性 + 恢复线性 + Thread
扩展机制TypeScript 扩展(核心)Hooks + PluginsHooks + MCP
自托管✅ 原生支持⚠️ 有限✅ 开源

3.1 设计哲学的根本分歧

Claude Code:内置一切,开箱即用

Claude Code 的设计思路是"把能给你的都给你"。它内置了 20+ 工具、Plan Mode、子 Agent、MCP、权限系统、Hook 系统、Skill 系统、插件系统。你打开终端就能用,不需要装任何扩展。代价是系统提示词膨胀到 ~10,000 tokens,每次对话都要消耗大量上下文。

Claude Code 六层架构:
Input → Knowledge → Execution → Integration → Multi-agent → Observability

Codex CLI:沙箱优先,安全至上

Codex CLI 的核心差异点是内核级沙箱。它在 macOS 上使用 Seatbelt、Linux 上使用 Landlock、Windows 上使用 DACL 来隔离 Agent 的执行环境。它还在 Rust 中实现了一套双向 JSON-RPC App Server 协议,让 CLI、VS Code 插件、Web UI 共享同一个 Agent 运行时。

Codex CLI 架构:
TUI (Rust) → Agent Runtime → Tool Layer → OpenAI API (GPT-5.5)

Pi Agent:给你原语,而不是功能

Pi 的核心理念是 “Primitives, not features”(提供原语,而非功能)。它只给你 4 个工具,然后说:“你需要什么功能,自己搭。搭不了?让我帮你搭。”

这就是 Pi 最独特的能力——它可以自己改造自己。你让 Pi 构建一个子 Agent 系统,它写完代码后 /reload 立刻生效,Pi 就有了子 Agent 能力。


四、Pi Agent 的 4 个核心工具

Pi 的内置工具只有 4 个,但覆盖了编码 Agent 的所有核心需求:

// Pi 的全部内置工具
read    // 读取文件内容
write   // 创建或覆盖文件
edit    // 精确文本替换(类似 sed)
bash    // 执行 Shell 命令

对比 Claude Code 的内置工具:Read、Edit、Write、Bash、Grep、Glob、TodoWrite、Task、WebFetch、WebSearch、NotebookEdit…

Pi 的思路是: bash 可以替代大部分专用工具。你需要搜索代码?grep 在 bash 里。你需要管理 Todo?写个文件就行。你需要子 Agent?pi -m "xxx" 在 bash 里自我调用。

这就是 Pi 的"减法哲学"——不是不给你功能,而是用更通用的原语来表达同样的能力。


五、扩展系统:Pi 的真正杀手锏

Pi 的扩展系统才是它区别于 Claude Code 和 Codex CLI 的核心。它提供了四种扩展类型:

类型说明类比
Extension⭐ TypeScript 代码,可拦截 Agent 任何行为VSCode 插件
Skill按需加载的能力包(SKILL.md 格式)Claude Code Skill
Template提示词模板,/name 展开代码片段
Theme终端主题换肤

5.1 写一个扩展有多简单?

// ~/.pi/agent/extensions/security-guard.ts
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";

export default function (pi: ExtensionAPI) {
  // 拦截危险的 bash 命令
  pi.on("tool_call", async (event, ctx) => {
    if (
      event.toolName === "bash" &&
      event.input.command?.includes("rm -rf")
    ) {
      const ok = await ctx.ui.confirm(
        "⚠️ 危险操作",
        "确认执行 rm -rf?"
      );
      if (!ok) {
        return { block: true, reason: "用户取消" };
      }
    }
  });

  // 注册自定义工具
  pi.registerTool({
    name: "get_timestamp",
    label: "获取时间戳",
    description: "返回当前 ISO 时间戳",
    parameters: {},  // 无需参数
    async execute(id, params, sig, upd, ctx) {
      return {
        content: [{
          type: "text",
          text: `当前时间: ${new Date().toISOString()}`
        }],
        details: {}
      };
    }
  });
}

放到目录 → /reload → 生效。30 行代码,不需要等官方更新。

5.2 热门社区扩展

扩展功能
pi-subagents子 Agent 任务委派,支持链式/并行执行
pi-mcp-adapterMCP 协议适配器,连接任意 MCP Server
pi-web-accessWeb 搜索、URL 抓取、GitHub 探索
pi-hermes-memory跨会话持久记忆
pi-lens实时代码反馈:LSP、linter、类型检查
pi-simplify代码质量守门员,自动审查变更
context-mode节省 98% 上下文窗口,沙盒执行 + FTS5 知识库

关键洞察: Claude Code 的子 Agent、MCP、Plan Mode 都是内置的,你想要就全给你,不管你用不用。Pi 把这些全部放到扩展层——你装 pi-subagents 才有子 Agent,装 pi-mcp-adapter 才有 MCP。不用的功能不消耗上下文。


六、实战:用 Pi 搭建一个 Java 后端开发工作流

6.1 基础配置

# 配置模型(支持多供应商)
mkdir -p ~/.pi/agent

# ~/.pi/agent/models.json
{
  "providers": {
    "claude": {
      "apiKey": "${ANTHROPIC_API_KEY}",
      "models": ["claude-sonnet-4-20250514"]
    },
    "deepseek": {
      "apiKey": "${DEEPSEEK_API_KEY}",
      "baseURL": "https://api.deepseek.com/v1",
      "models": ["deepseek-chat"]
    }
  }
}

6.2 创建 Java 项目级 AGENTS.md

# ~/projects/my-java-app/AGENTS.md

## 项目技术栈
- Java 21 + Spring Boot 3.4
- MyBatis-Plus + MySQL 8.0
- Redis + Redisson
- JUnit 5 + Testcontainers

## 编码规范
- 所有公开方法必须有 Javadoc
- Service 层方法加 @Transactional
- 异常统一用 GlobalExceptionHandler 处理
- 日志用 Slf4j,不要 System.out

## 测试要求
- Service 层覆盖率 > 80%
- 数据库测试用 Testcontainers
- Mock 外部 API 调用

6.3 实战场景一:重构一个 Service

cd ~/projects/my-java-app
pi

# 在 Pi 的 TUI 中:
> 把 UserService 的 getUserById 方法改成 Optional<User> 返回,
> 所有调用处同步修改,Compile 通过后运行单元测试

Pi 会:

  1. read 读取 UserService.java 和相关调用处
  2. edit 修改返回类型为 Optional<User>
  3. bash 执行 mvn compile
  4. 根据编译错误继续 edit 修改调用处
  5. bash 执行 mvn test
  6. 根据测试结果修复

6.4 实战场景二:多模型切换

# 先用便宜的模型做初步分析
/model deepseek-chat
> 分析这个项目的整体架构,输出到 docs/architecture.md

# 遇到复杂逻辑,切到 Claude
/model claude-sonnet-4-20250514
> 刚才的架构分析中,把 Redis 缓存策略的并发安全问题补充进去

同一个会话,无需重启,随时切换模型。 这是 Claude Code 和 Codex CLI 都做不到的——它们被绑定在自家模型上。

6.5 实战场景三:树状会话探索

# 方案 A:用 WebFlux 重构
> 把 UserController 改成 WebFlux 响应式

# 不满意,回到分叉点
/fork

# 方案 B:保持 MVC,加虚拟线程
> 保持 Spring MVC,用 Virtual Threads 优化并发

Pi 的会话是树状结构,不是线性列表。你可以从任何历史节点分叉,探索不同方案后随时回溯,就像游戏的存档系统。


七、Pi 的独特优势与局限

优势

  1. 上下文效率极高:系统提示词 < 1000 tokens,几乎全部上下文都留给你的代码
  2. 模型自由:30+ 供应商,同会话内随时切换,不受单一厂商绑定
  3. 完全透明:所有输入模型的内容都可以被开发者精确查看与修改,没有隐式 Prompt 注入
  4. 自扩展:你可以让 Pi 自己写扩展来增强 Pi 的能力
  5. 开源可控:MIT 协议,1500 行核心代码,一眼能看到头
  6. 树状会话:从任意节点分叉探索,这在 Claude Code 和 Codex CLI 中都没有

局限

  1. 开箱体验不如 Claude Code:需要自己装扩展来获得子 Agent、MCP、Web 搜索等能力
  2. 没有 GUI:纯终端 TUI,对习惯 IDE 的开发者不够友好
  3. 生态仍在早期:虽然增长很快,但插件生态不如 Claude Code 的 MCP 生态成熟
  4. 没有内置沙箱:沙箱能力需要扩展或自己配置,不像 Codex CLI 有内核级隔离
  5. 对企业级功能支持有限:没有 Claude Code 那样的权限体系、审计日志、团队管理

八、选型建议

你的需求推荐
开箱即用、不想折腾Claude Code
安全第一、需要沙箱隔离Codex CLI
想要完全控制、自定义工作流Pi Agent
多模型切换、成本敏感Pi Agent
想把 Agent 嵌入自己的产品Pi Agent(SDK 模式)
企业级权限和审计Claude Code
学习 Agent 架构Pi Agent(1500 行源码是最好的教材)

九、总结

Pi Agent 代表了一种与 Claude Code 和 Codex CLI 截然不同的设计哲学:

  • Claude Code 说:“我给你一切,你直接用。”
  • Codex CLI 说:“我给你安全,你随便试。”
  • Pi Agent 说:“我给你原语,你自己搭。搭不了,我帮你搭。”

这三种哲学没有绝对的对错,它们对应了不同阶段、不同场景的需求。但 Pi 的崛起——55,000 Star、驱动 OpenClaw 成为 GitHub 史上增长最快的项目——说明了一个趋势:开发者正在从"给我更多功能"转向"给我更多控制权"。

对 Java 后端开发者来说,Pi 的扩展系统特别有吸引力。你可以为 Spring Boot 项目定制专属的扩展:自动检测 N+1 查询、校验事务边界、生成符合团队规范的代码模板。这些能力在 Claude Code 里需要等 Anthropic 更新,在 Pi 里只需要写 30 行 TypeScript。

最后,Pi 最打动我的一点:它让 Agent 从"产品"变成了"构建块"。 你不是在用一个别人定义好的工具,而是在组装属于你自己的 Agent 工作流。这可能就是下一代 AI 编程工具的方向。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐