Claude Code、Codex 与 Pi 对比
Pi 不是唯一的终端编码 Agent。Claude Code、Codex 和 Pi 面对同一个问题给出了三种不同的答案:要不要内置安全边界,以及把扩展能力交给谁。 理解这些差异,比记住任何单一工具的命令都重要。
校对基线:Claude Code
2.1.274、Codex CLI0.154.0、Pi0.82.1(本手册基线0.83.0)。三者更新都很快,涉及具体命令与安全开关时请核对各自官方文档。
一句话定位
| 工具 | 厂商 | 一句话定位 | 核心思路 |
|---|---|---|---|
| Claude Code | Anthropic | 功能齐全的成品编码 Agent | 把权限确认、子代理、计划模式、MCP 都内置,开箱即用 |
| Codex | OpenAI | 开源、沙箱优先的编码 Agent | 用操作系统级沙箱和审批模式做默认安全边界,另有云端形态 |
| Pi | Earendil Works | 极简可扩展的 Agent Harness | 刻意不内置权限弹窗、子代理、计划模式,交给 Skills 与 Extensions |
三者的共同点是:都在终端里跑,都用"读文件、改文件、跑命令"来完成任务,都用 Markdown 记忆文件和 Agent Skills。差异集中在安全模型、扩展机制,以及"开箱即用 vs 自己组装"的取舍上。
事实基线
| 维度 | Claude Code | Codex | Pi |
|---|---|---|---|
| 许可 | 专有(非开源) | 开源(Apache-2.0) | 开源(MIT) |
| 实现语言 | TypeScript(提供原生二进制构建) | Rust | TypeScript / Node.js |
| 安装 | npm i -g @anthropic-ai/claude-code 或官方脚本 | npm i -g @openai/codex 或 brew install codex | npm i -g --ignore-scripts @earendil-works/pi-coding-agent |
| 配置格式 | JSON(~/.claude/settings.json) | TOML(~/.codex/config.toml) | JSON(~/.pi/agent/settings.json) |
| 记忆文件 | CLAUDE.md(新版也读 AGENTS.md) | AGENTS.md | AGENTS.md 与 CLAUDE.md 都加载 |
认证与模型
| 维度 | Claude Code | Codex | Pi |
|---|---|---|---|
| 登录方式 | Anthropic 订阅或 API Key | ChatGPT 登录或 API Key | 订阅或 API Key |
| 供应商范围 | Anthropic 为中心(Claude 系列),可接 Bedrock / Vertex | OpenAI 为中心,支持开源/本地(--oss、--local-provider) | 多供应商中立:Claude、ChatGPT、Copilot 订阅 + 大量 API Key 提供商 + llama.cpp 本地模型 |
| 模型切换 | --model(如 opus、sonnet) | -m/--model | /model 或 Ctrl+L,支持多模型循环 |
Pi 的"供应商中立"是它作为 Harness 的定位使然:它不绑定任何一家模型,本地模型也能跑。Claude Code 和 Codex 分别绑定各自厂商,但也都留了接其他后端的口子。
权限与安全:三种不同的答案
这是三者最本质的分歧。面对同一条"改文件并跑命令"的请求,三个工具的态度完全不同。
1. Claude Code:人在回路的权限确认
Claude Code 默认对 Bash、文件写入等敏感操作弹权限提示,由人逐条批准。通过 --permission-mode 控制:
manual:敏感操作逐条询问acceptEdits:自动接受文件编辑,命令仍需确认plan:计划模式,只读分析不执行bypassPermissions:跳过一切确认(仅限可信环境)
配套还有 --allowedTools / --disallowedTools 工具白名单,以及 --restricted 受限模式(移除命令执行类工具、把文件工具限制在工作目录内)。
代价:安全,但慢。每次确认都是一次打断,这也是"Claude Code 用起来有点啰嗦"的来源。
2. Codex:审批 + 操作系统级沙箱
Codex CLI 把安全做在操作系统层,而不是靠对话框。模型生成的命令在 OS 沙箱里执行(macOS 用 seatbelt,Linux 用 Landlock),沙箱策略三档:
read-only:只读workspace-write:只写工作区danger-full-access:完全访问(危险)
审批策略由 --ask-for-approval 控制(on-request 让模型决定何时问人、never 从不问),另有 --dangerously-bypass-approvals-and-sandbox 一步关掉所有保护的极端开关。
代价:安全边界更硬,但沙箱会限制部分真实场景操作——装系统依赖、访问工作区外路径时需要额外授权或 --add-dir。
3. Pi:无权限弹窗,只有项目信任
Pi 的官方哲学明确写着 "No permission popups"。它不做逐条确认,也没有内置沙箱,直接继承启动用户的全部权限——你在终端能做什么,Pi 就能做什么。
Pi 唯一的安全相关机制是项目信任(project trust):当项目里出现 .pi/ 资源(设置、扩展、技能、系统提示)时询问是否加载。它回答的问题是"这个仓库能否改变 Pi 的启动配置",不是"Pi 能否修改这个仓库"。
代价:最快、最顺手,但安全责任完全外置。处理不可信代码或无人值守任务时,必须自己套容器 / VM / 微型 VM。
安全模型对比
| 机制 | Claude Code | Codex | Pi |
|---|---|---|---|
| 权限提示 | 默认逐条确认 | 有(可配置频率) | 无 |
| 权限/审批模式 | --permission-mode | --ask-for-approval + 沙箱模式 | 无(无弹窗哲学) |
| 操作系统沙箱 | 受限模式 --restricted(非完整沙箱) | 内置(seatbelt / Landlock) | 无内置 |
| 项目信任 | 工作区信任对话 | 无等价提示(靠沙箱) | 项目信任(输入加载守卫) |
| 工具白名单 | --allowedTools / --tools | 沙箱 + 审批 | --tools / --exclude-tools |
| 一键全放开 | --dangerously-skip-permissions | --dangerously-bypass-approvals-and-sandbox | 默认即全放开 |
Claude Code 用"问"保护你,Codex 用"沙箱"保护你,Pi 无权限弹窗,只有项目信任。
可扩展性:成品 vs 组装
| 能力 | Claude Code | Codex | Pi |
|---|---|---|---|
| MCP | 内置,claude mcp | 内置,codex mcp | 无内置(哲学:用 Skill 或写 Extension 接入) |
| Agent Skills | 内置,~/.claude/skills | 支持,~/.codex/skills | 完整实现标准,并可挂载前两者的 skills 目录 |
| 子代理 | 内置 Task 子代理 | 云端形态支持并行任务 | 无内置(哲学:自己 spawn 或写 Extension) |
| 计划模式 | 内置 plan 模式 | 无内置 | 无内置(哲学:写文件或 Extension) |
| Hooks | 内置生命周期钩子 | 有钩子(带信任机制) | 通过 Extension 事件实现 |
| 插件/扩展 | Plugins(claude plugin) | Plugins(codex plugin) | Extensions(TypeScript,可替换内置工具) |
| 主题/外观 | 内置主题与样式 | 有限 | 内置 + 自定义主题(热重载) |
关键区别:Claude Code 和 Codex 把 MCP、子代理、计划模式做成内置开关;Pi 把它们做成可写代码实现的空白。Pi 的 Extension 能注册自定义工具、替换内置工具、加权限门禁、做 UI——甚至"把 Pi 打扮成 Claude Code"。这种"极简核心 + 任意扩展"是 Pi 与另外两者最大的产品哲学差异。
会话管理
| 维度 | Claude Code | Codex | Pi |
|---|---|---|---|
| 存储 | JSONL,按项目存 ~/.claude/projects/ | 本地线程历史(可分页) | JSONL 树结构,~/.pi/agent/sessions/ |
| 继续会话 | --continue / --resume | codex resume | -c / -r / --session |
| 分支 | --fork-session | codex fork | /tree 就地分支、/fork、/clone |
| 回滚 | Checkpoints / rewind(基于 git) | codex apply(应用 diff) | 无内置(用 git 自己管) |
| 上下文压缩 | --autocompact | 有 | /compact + 自动压缩 |
Pi 的独特之处是会话树:所有历史保存在单个 JSONL 文件里,用 id / parentId 组织成树,可以在任意历史点就地分叉、切换分支,不需要复制文件。
无头与程序集成
| 维度 | Claude Code | Codex | Pi |
|---|---|---|---|
| 非交互 | -p / --print | codex exec(别名 e) | -p / --print |
| 读 stdin | 支持 | 支持(- 或管道) | 支持 |
| 结构化输出 | --output-format json / stream-json、--json-schema | --json(JSONL)、--output-schema、-o 写最后消息 | --mode json、--mode rpc |
| SDK | Claude Agent SDK(TS / Python) | exec-server / app-server(实验) | SDK(createAgentSession 等,TS) |
| 进程集成 | stream-json 双向流 | exec-server | RPC 模式(LF 分隔 JSONL) |
Print、JSON、RPC、SDK 四类集成方式 Pi 都齐备;Claude Code 的 stream-json 双向流适合做长期驻留进程;Codex 的 exec-server / app-server 仍标为实验性。
后台与多 Agent
| 能力 | Claude Code | Codex | Pi |
|---|---|---|---|
| 后台会话 | --bg + claude agents / attach / stop | codex agents + app-server 守护进程 | 无内置(哲学:用 tmux) |
| 云端执行 | --cloud、ultrareview | codex cloud(实验) | 无(本地为主) |
| 多实例 | 原生支持 | 原生支持 | 可 spawn 多个 pi 实例 |
三方正在靠拢
尽管哲学不同,三者在可移植性上明显收敛,这对用户是好事:
- Agent Skills:Claude Code 提出的标准,Pi 完整实现,Codex 也在跟进。同一个 Skill 目录理论上可以跨工具复用——Pi 甚至能直接读取
~/.claude/skills和~/.codex/skills。 - AGENTS.md:Codex 的记忆文件格式,Claude Code 和 Pi 都支持加载(Pi 同时兼容
CLAUDE.md)。 - MCP:Claude Code 和 Codex 都内置;Pi 不内置,但可用 Skill 包装 CLI 或写 Extension 接入。
这意味着知识沉淀(记忆文件 + Skills)比工具绑定更保值:把规范写进 AGENTS.md,把流程做成 Skill,换工具时成本最低。
如何选择
| 你的情况 | 建议 |
|---|---|
| 想要开箱即用,愿意用逐条确认换安全感 | Claude Code |
| 想要开源、硬核 OS 沙箱,或重度依赖 OpenAI 模型 | Codex CLI |
| 想最快速度干活,能自己控制安全边界(容器 / VM) | Pi |
| 需要把 Agent 嵌进自己的程序 | 三者都可,Pi 的 RPC/SDK 与 Claude 的 stream-json 最成熟 |
| 已有大量 CLAUDE.md / AGENTS.md / Skills 沉淀 | 迁移成本最低的是 Pi(同时兼容三者的记忆文件与 skills 目录) |
小结
- Claude Code = 成品。安全靠"问",功能靠"内置"。
- Codex = 开源 + 沙箱。安全靠"隔离",边界最硬。
- Pi = 极简 Harness。安全靠"你自己",功能靠"组装"。
三者没有绝对优劣,只有取舍:要安全就接受打断(Claude Code),要硬隔离就接受沙箱限制(Codex),要速度与自由就自己背安全责任(Pi)。 选择取决于你更愿意把复杂度交给工具,还是握在自己手里。
继续阅读: