Pi Coding Agent:一个可以被你改造的 AI 编程底座
Pi Coding Agent:一个可以被你改造的极简编程 Agent
这两年,编程 Agent 已经不稀奇了。
从 Claude Code、Codex CLI,到各种 IDE 插件,大多数工具的产品逻辑都差不多:给你一个已经包装好的智能体,你在它允许的范围里使用它。
但 Pi Coding Agent 的思路有点不一样。
它不是一个封闭的“AI 编程产品”,而是一个极简 Agent Harness。换句话说,它更像是一个可以运行在终端里的 Agent 操作系统:核心保持很小,把工作流、工具、技能、提示词、扩展、模型供应商都留给用户自己定制。
官方对它的定位很直接:
Change the harness, not your workflow.
改造 Agent 底座,而不是被 Agent 工作流反过来改造。
这正是 Pi 最有意思的地方。
一、Pi 是什么?
Pi Coding Agent 是一个运行在终端里的本地编程 Agent。
它默认提供最基础的能力:
读取文件
写入文件
编辑文件
执行 shell 命令
搜索文件
维护会话历史
切换模型
加载项目上下文
使用 Skills / Extensions / Prompt Templates 扩展能力
但它并不追求把所有功能都内置进去。
官方甚至明确说:Pi 默认不内置 sub-agent、plan mode、MCP、权限弹窗、后台 bash 等功能。
这听起来像缺点,但其实是 Pi 的设计哲学:
Pi 提供原语,而不是提供封死的功能。
如果你需要计划模式,可以自己做一个 plan-mode extension。
如果你需要子代理,可以装 sub-agent extension。
如果你需要权限控制,可以写 permission gate。
如果你需要路径保护,可以加 protected-paths。
如果你需要 SSH 执行、沙箱、状态栏、交互式 UI,也都可以通过扩展完成。
它更像是“给工程师用的 Agent 框架”,不是“给普通用户用的 AI 编程盒子”。
二、安装 Pi
Pi 以 npm 包形式发布。
官方推荐安装方式:
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
其中 --ignore-scripts 是为了禁用 npm 依赖安装时的 lifecycle scripts。Pi 正常安装不依赖这些脚本,安全性更好。
Linux / macOS 也可以使用官方安装脚本:
curl -fsSL https://pi.dev/install.sh | sh
安装完成后,进入项目目录:
cd /path/to/project pi
第一次启动后,可以通过 /login 登录订阅类模型服务,也可以通过环境变量配置 API Key。
例如:
export ANTHROPIC_API_KEY=*** pi
Pi 支持的模型供应商很多,包括 Anthropic、OpenAI、Google、Azure、Bedrock、Mistral、Groq、Cerebras、xAI、Hugging Face、Kimi For Coding、MiniMax、OpenRouter、Ollama、小米 MiMo 等。
三、Pi 的基本使用方法
启动 Pi 后,它会进入一个终端 TUI 界面。
你可以直接输入任务:
Summarize this repository and tell me how to run its checks.
Pi 会读取项目文件,分析仓库结构,然后给出运行方式、检查命令、可能的改动建议。
1. 引用文件
在输入框里输入 @,可以模糊搜索并引用项目文件。
也可以在命令行中直接传入文件:
pi @README.md "Summarize this" pi @src/app.ts @src/app.test.ts "Review these together"
这对代码审查、重构、测试分析很方便。
2. 执行 shell 命令
交互模式里可以用:
!npm run lint
命令输出会进入模型上下文,Agent 可以基于结果继续分析。
如果你想执行命令,但不想把输出喂给模型,可以用:
!!npm run lint
这适合一些输出很长、但只需要你自己看的命令。
3. 切换模型
Pi 支持运行中切换模型:
/model
也可以用快捷键:
Ctrl + L:选择模型Ctrl + P:在常用模型之间循环Shift + Tab:切换 thinking level
这点对工程使用很实用:简单任务用便宜模型,复杂重构切高推理模型。
4. 一次性命令模式
Pi 不一定要进入交互界面,也可以当作命令行工具用。
例如:
pi -p "Summarize this codebase"
管道输入:
cat README.md | pi -p "Summarize this text"
指定图片:
pi -p @screenshot.png "What's in this image?"
这意味着 Pi 可以被嵌入 shell 脚本、CI 流水线、代码审查流程中,不只是一个 TUI 聊天工具。
四、项目上下文:AGENTS.md 是 Pi 的工作说明书
Pi 会自动读取项目里的上下文文件。
包括:
~/.pi/agent/AGENTS.md当前项目及父目录里的
AGENTS.md当前项目及父目录里的
CLAUDE.md
你可以在项目根目录写一个 AGENTS.md:
# Project Instructions - Run `npm run check` after code changes. - Do not run production migrations locally. - Keep responses concise. - Use TypeScript strict mode.
这样 Pi 每次进入项目都会自动知道项目约定。
这对长期项目非常重要。否则每次都要重新告诉 Agent:
项目怎么启动
哪些目录不能动
测试命令是什么
数据库迁移能不能跑
代码风格是什么
交付前必须检查什么
Pi 的思路是:把项目规则写进文件,而不是写进临时对话。
这点和 OpenClaw / Claude Code / Codex 的 AGENTS.md 体系是一致的。
五、Pi 最值得注意的能力:会话是树,不是线
很多 Agent 工具的会话是线性的。
你问一句,它答一句。
中间如果走错了,要么撤销,要么新开会话。
Pi 的会话是树结构。
它会把 session 保存到:
~/.pi/agent/sessions/
每个 session 是 JSONL 文件,并且内部是树状结构。
你可以用:
/tree
跳回任意一个历史节点,从那里继续走另一条分支。
这对编程任务特别有用。
比如你让 Pi 重构一个模块:
分支 A:用最小改动方式修
分支 B:顺手重构架构
分支 C:先写测试再改代码
分支 D:完全换一种实现
传统 Agent 对话里,这些尝试很容易混在一起。
Pi 的 /tree 可以把这些探索路径留在同一个 session 文件里,而且可以随时切换、打标签、继续分叉。
这非常适合:
技术方案对比
Bug 修复路径探索
重构前后对照
Prompt 实验
模型输出对比
复杂任务的决策留痕
我认为这是 Pi 和很多 CLI Agent 相比非常有区分度的功能。
六、Pi 的真正杀手锏:Extensions
Pi 的扩展是 TypeScript 模块,可以直接改变 Pi 的行为。
它可以做很多事:
注册自定义工具
注册自定义 slash command
拦截工具调用
修改模型请求
注入动态上下文
自定义压缩逻辑
加权限确认
加路径保护
加状态栏
加交互式 UI
管理长期状态
接外部系统,比如 CI、Webhook、数据库、SSH
扩展放置位置:
~/.pi/agent/extensions/
或者项目本地:
.pi/extensions/
一个最小扩展示例:
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; import { Type } from "typebox"; export default function (pi: ExtensionAPI) { pi.on("session_start", async (_event, ctx) => { ctx.ui.notify("Extension loaded!", "info"); }); pi.registerTool({ name: "greet", label: "Greet", description: "Greet someone by name", parameters: Type.Object({ name: Type.String({ description: "Name to greet" }), }), async execute(toolCallId, params) { return { content: [{ type: "text", text: `Hello, ${params.name}!` }], details: {}, }; }, }); pi.registerCommand("hello", { description: "Say hello", handler: async (args, ctx) => { ctx.ui.notify(`Hello ${args || "world"}!`, "info"); }, }); }
启动时加载:
pi -e ./my-extension.ts
如果放在自动发现目录中,运行:
/reload
就可以热重载。
这就是 Pi 的核心价值:它不是只让 Agent 写业务代码,它允许 Agent 改造自己。
你可以对 Pi 说:
帮我写一个 extension:所有 bash 命令里如果出现 rm -rf、sudo、docker prune,就先弹确认框。
Pi 可以直接给自己加一个 permission gate。
或者:
帮我写一个 extension:每次改代码前自动 git diff,改完后自动运行 npm test,并把结果放到底部状态栏。
这就变成了你自己的编程工作流。
七、Skills:让能力按需加载
Pi 支持 Agent Skills 标准。
Skill 是一个自包含能力包,通常结构如下:
my-skill/ ├── SKILL.md ├── scripts/ │ └── process.sh ├── references/ │ └── api-reference.md └── assets/ └── template.json
SKILL.md 里写清楚技能名称、描述、使用场景、操作步骤。
Pi 启动时只把 skill 的名称和描述放进上下文;当任务匹配时,再读取完整 SKILL.md。
这叫 progressive disclosure:能力很多,但上下文不爆炸。
你也可以手动调用:
/skill:brave-search /skill:pdf-tools extract
这套机制很适合把高频流程沉淀下来,例如:
PDF 处理
API 文档查询
项目发布流程
数据库巡检
模型部署流程
Docker 故障排查
周报生成
公众号排版
视频脚本生成
对工程团队来说,Skills 的意义不是“让 AI 更聪明”,而是把团队里的操作经验变成可复用资产。
八、Prompt Templates:把常用提示词变成命令
Pi 支持 prompt templates。
你可以把常用提示词写成 Markdown 文件,然后在 Pi 里通过 slash command 展开。
例如你可以做一个:
/review
用于代码审查。
一个:
/release-check
用于发布前检查。
一个:
/refactor-plan
用于生成重构计划。
这比每次复制粘贴长 Prompt 更稳定,也更容易团队共享。
九、Pi Packages:把扩展、技能、提示词打包分享
Pi 还支持 package 机制。
一个 Pi package 可以包含:
extensions
skills
prompt templates
themes
可以通过 npm 或 git 安装:
pi install npm:@foo/pi-tools pi install git:github.com/user/repo@v1
也可以项目级安装:
pi install -l git:github.com/team/project-pi-tools
项目级 package 会写入 .pi/settings.json,团队成员进入项目后,Pi 可以加载同一套工作流。
这意味着你可以为一个项目定制完整的 Agent 工作环境:
.pi/ ├── settings.json ├── extensions/ ├── skills/ ├── prompts/ └── themes/
这对团队工程化很有价值。
不是每个人各自调 Prompt,而是把 Agent 能力版本化、仓库化、可审查化。
十、Pi 的几个妙用场景
1. 把 Pi 当成“可改造的 Claude Code”
如果只是日常写代码,可以这样用:
cd your-project pi
然后让它:
阅读这个项目,告诉我如何启动、如何测试、主要模块是什么。
再让它:
帮我修复这个 failing test,改动前先说明原因,改动后运行测试。
这种用法和其他 coding agent 类似。
但 Pi 更进一步:当你发现默认行为不顺手时,可以直接让它改自己。
比如:
以后每次修改代码前,先自动创建 git checkpoint。帮我写一个 extension。
这就是 Pi 的强项。
2. 做“项目级 AI 工程规范”
在项目根目录写:
AGENTS.md .pi/settings.json .pi/prompts/ .pi/skills/
把项目的启动方式、测试方式、发布规则、安全限制、代码规范都沉淀进去。
这样任何人进入项目后运行:
pi
拿到的是同一套 Agent 行为。
这比口头约定强得多。
3. 做代码审查机器人
用只读工具启动:
pi --tools read,grep,find,ls -p "Review this repository and identify risky code paths."
这样 Pi 只能读,不能写,也不能跑命令。
适合:
PR 审查
安全审查
依赖风险分析
老项目摸底
接手新项目
4. 做 CI 辅助分析器
Pi 的 print 模式适合脚本化。
例如:
npm test 2>&1 | pi -p "Analyze this test failure and suggest the likely fix."
或者:
cat build.log | pi -p "Summarize this build failure in Chinese."
这可以接到 CI 里,自动生成失败原因说明。
5. 做“可分叉的技术方案实验台”
复杂重构时,最怕 Agent 一条路走到黑。
Pi 的 /tree 很适合探索多个方案。
例如:
方案 A:最小改动修复。 方案 B:重构 service 层。 方案 C:引入状态机。
每个方案可以在同一个 session 树里保留。最后你可以比较差异,再决定采用哪条路径。
这对架构设计、重构试验、Prompt 评估都很有用。
6. 做团队内部 Agent 平台的原型底座
Pi 支持四种模式:
Interactive:终端交互
Print / JSON:命令行一次性调用或事件流
RPC:stdin/stdout JSON 协议
SDK:嵌入 Node.js 应用
这说明 Pi 不只是一个终端工具,也可以作为上层系统的 Agent runtime。
例如:
接到内部 DevOps 平台
接到代码评审系统
接到企业知识库
接到自研 UI
接到 OpenClaw 这类多 Agent 编排系统
官方首页也提到 OpenClaw 是一个真实集成案例。
对想做内部 AI 工程平台的人来说,Pi 的 RPC / SDK 模式值得重点关注。
十一、安全边界:Pi 没有内置沙箱
这一点必须讲清楚。
Pi 是本地 Agent,它以启动它的用户权限运行。
它可以:
读文件
写文件
改文件
执行 shell 命令
加载 extensions
安装 packages
官方明确说:Pi 没有内置 sandbox。
项目 trust 机制只是控制 Pi 是否加载项目里的 .pi/settings.json、.pi/extensions、.pi/skills 等资源。它不是安全沙箱,也不会限制 Agent 后续工具调用。
所以不要把 Pi 直接扔到不可信仓库里放开跑。
建议:
不可信项目用容器或 VM
最小化挂载目录
不挂载敏感凭据
API Key 用短期凭证
高风险任务用只读工具
重要改动前先 git commit 或 checkpoint
安装第三方 package / extension 前审代码
Pi 的安全哲学很工程化:它不假装自己有强沙箱,而是把隔离交给操作系统、容器、虚拟机。
这个判断是对的。
十二、Pi 适合什么人?
Pi 不一定适合所有人。
如果你只想要一个开箱即用、UI 漂亮、什么都不用管的 AI 编程助手,Pi 可能不是第一选择。
但如果你是下面几类用户,Pi 很值得研究:
喜欢终端工作流的工程师
想把 Agent 接入自己工具链的人
想沉淀团队 AI 编程规范的人
需要自定义模型供应商的人
想做内部 Agent 平台的人
需要把 Agent 行为版本化、工程化的人
对 prompt、context、tools、memory 有控制欲的人
Pi 的价值不是“替你写代码”,而是让你拥有一个可以被改造、被扩展、被集成的 Agent 底座。
十三、我的判断
现在很多 AI 编程工具的路线是:产品越做越厚,把用户锁进一套固定工作流。
Pi 走的是相反方向:核心尽量薄,把可编程接口留出来。
这类工具早期看起来会“不够完整”,但对工程师很有吸引力。因为真正复杂的开发流程,从来不是一个通用产品能完全覆盖的。
不同团队有不同的目录结构、发布流程、代码规范、权限边界、模型偏好、安全策略和上下文管理方式。
Pi 的回答是:
不要等产品经理给你加功能。
你可以直接让 Agent 改造 Agent 自己。
这就是 Pi Coding Agent 最妙的地方。
它不是一个封闭的 AI 编程工具,而是一个可以长成你自己工作流形状的 Agent Harness。
附:快速操作清单
安装
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
进入项目
cd /path/to/project pi
登录模型供应商
/login
或使用环境变量:
export ANTHROPIC_API_KEY=*** pi
引用文件
pi @README.md "Summarize this"
一次性任务
pi -p "Summarize this codebase"
管道输入
cat README.md | pi -p "Summarize this text"
只读审查
pi --tools read,grep,find,ls -p "Review this repository."
切换模型
/model
继续最近会话
pi -c
浏览历史会话
pi -r
查看会话树
/tree
导出会话
/export output.html
安装 Pi package
pi install npm:@foo/pi-tools pi install git:github.com/user/repo@v1
资料来源
Pi 官网:https://pi.dev/[1]
Pi 官方文档:https://pi.dev/docs/latest[2]
Quickstart:https://pi.dev/docs/latest/quickstart[3]
Using Pi:https://pi.dev/docs/latest/usage[4]
Providers:https://pi.dev/docs/latest/providers[5]
Extensions:https://pi.dev/docs/latest/extensions[6]
引用链接
[3]https://pi.dev/docs/latest/quickstart
[4]https://pi.dev/docs/latest/usage
[5]https://pi.dev/docs/latest/providers
[6]https://pi.dev/docs/latest/extensions
[7]https://pi.dev/docs/latest/skills
[8]https://pi.dev/docs/latest/sessions