我把 Claude Code 的「大脑」移植到了 Pi Agent 里

Claude Code 是现在最强的 coding agent 之一,它的 system prompt 是最值得学习的 agent 资源之一。我把它移植到了开源框架 Pi Agent 里。


Claude Code 的 system prompt 并没有官方开源,但是https://cchistory.mariozechner.at/ 可以看到所有的版本迭代记录。

这是一份精雕细琢的「行为说明书」,几百行英文,精确地定义了 Agent 应该怎么写代码、怎么和人协作、怎么评估风险。

我最近一直在使用 Pi Agent, 它的 system prompt 很简单,核心部分只有几行,我就在想如果 Claude Code 的 system prompt 放到Pi Agent 里,Pi 是不是就能拥有 Claude Code 级别的行为质量?

想要移植这个 system prompt 不是直接复制过来就行,有很多地方需要注意。

将 Claude Code 的大脑移植到 Pi Agent

Pi 目前还比不上 Codex 或 Claude Code。对大多数人来说没必要折腾它,除非你和我一样,因为某些限制不能用 Codex 或 Claude Code。但如果你恰好在这个处境里,或者单纯对 Agent 的设计感兴趣,这篇文章可能会对你有帮助。


一、不是换个 Prompt 就行

Claude Code 的 behavior prompt 大概可以分成两部分。

一部分是通用行为规范。比如「优先编辑已有文件而不是新建」「bug 修复不需要顺带重构周边代码」「默认不写注释,除非逻辑本身反直觉」。这些规则和框架无关,可以直接复制。

另一部分是工具使用指令。这些指令引用的工具 Pi 没有,就需要进行改造。

所以要移植的不只是 prompt,还有 prompt 依赖的工具。


二、危险操作确认:让 Agent 在动手前获取用户的同意

这是 Claude Code 用的安全机制之一。Agent 在执行命令之前需要获取用户的同意(现在也有 auto mode),但是无论如何,都不是可以随意执行的。

Pi 本身是没有任何权限控制的,但是Pi 的扩展系统允许注册自定义工具。
我注册了一个叫 confirm_dangerous_action 的工具。它的工作方式很简单:Agent 判断某个操作可能危险 → 调用这个工具 → 工具弹出终端选择框 → 用户选择批准或拒绝 → 结果返回给 Agent。

但只注册工具不够。实际使用中会遇到两个意外情况。

第一种:Agent 把确认请求和危险命令打包在一起发送。 它一边问「我能删这个文件吗」,一边已经把删除命令发出去了。我用了一个事件拦截器:如果检测到当前消息里同时存在确认工具和其他工具,就直接阻止后者,强制 Agent 先等待用户反馈。

第二种:Agent 根本不调用工具,直接在文本里写「我能继续吗?」。 我写了一个消息监听器,用正则匹配中英文的确认请求模式(比如「我能继续吗」「Shall I proceed」),命中后自动弹出选择框,把用户的选择作为消息注入对话。

这个地方更好的做法应该是优化 system prompt, 使其总是能够调用 UI 弹窗让用户确认,而不是采用这种「工具调用 + 文本兜底」混杂的机制,但是由于我只能调用特定的模型,调试了几次 system prompt 都不稳定,就暂时采用这个方法了。

三层机制叠在一起——正门(工具调用)、侧门(捆绑拦截)、后门(文本兜底)——确保危险操作在任何情况下都会被拦下来。

一个尝试性的设计:我没有在代码里写一份「哪些命令是危险的」清单。危险判断交给 Pi Agent。System prompt 里写清楚了危险操作的定义和范围,LLM 自己判断当前操作是否属于危险操作。

从保险的角度来看,应该使用白名单机制,只有用户明确允许的命令才可以执行,但是在我过往使用 claude code 和 codex 的经验中,感觉这样过于死板,

confirm_dangerous_action 三层防御机制

▲ confirm_dangerous_action 的三层防御:工具调用(正门)、捆绑拦截(侧门)、文本兜底(后门)


三、Plan 模式:动手之前先列计划

Claude Code 的另一个实用功能是 EnterPlanMode——用户提一个复杂需求,Agent 不直接改代码,而是进入只读模式分析项目结构,输出一份实现计划,用户确认后再动手。

Pi 有一个很低调但很强的能力:自定义 Agent。你可以定义一个新的 Agent,指定它只能使用哪些工具、使用什么模型、遵循什么行为规则。

我定义了一个叫 plan 的 Agent,它只有四个工具:读取文件、搜索代码、查找文件、列出目录。全是只读操作——这个 Agent 物理上没有修改文件或执行命令的能力。

然后给它写了一份 system prompt,核心就一句话:「你是一个计划专家,你的职责是分析问题、设计方案,禁止做任何修改。」

最后通过 Pi 的斜杠命令功能,给它配了一个入口 /plan。用户输入 /plan 重构认证模块,Pi 就会启动 plan agent,以只读模式分析代码库,输出结构化的实现计划。

不需要写一行代码。两个 Markdown 文件就搞定了。

Plan 模式架构


四、环境注入

Claude Code 会在每轮对话前注入运行环境信息——操作系统、Shell、Git 状态、当前日期——避免 Agent 犯低级错误(比如在 macOS 上用 Linux 命令)。Pi 的对话启动事件钩子让我用 60 行代码实现了同样的效果。


五、总结

回头看这四件事,它们其实在同一个方向上:移植 Claude Code 的行为质量

Claude Code 特性 Pi 中的实现 用了什么能力
行为规范 Prompt APPEND_SYSTEM.md Pi 的 prompt 追加机制
危险操作确认 confirm_dangerous_action 工具 自定义工具 + 事件拦截
EnterPlanMode /plan 斜杠命令 自定义 Agent + 命令注册
环境信息注入 environment-banner 扩展 对话启动事件

Claude Code 特性到 Pi 实现的映射

所有的改动都通过 Pi 的扩展系统完成,没有动 Pi 的一行源码。