乐于分享
好东西不私藏

Pi Agent深入浅出:OpenClaw底下那层,极简四工具是怎么跑起来的

Pi Agent深入浅出:OpenClaw底下那层,极简四工具是怎么跑起来的

你跟终端里的 Agent 说一句:「登录页点提交没反应,帮我查。」

屏幕上开始刷文件路径、diff、命令输出。很多人以为中间是魔法。其实没有魔法。

模型在想。本地在干活。结果再塞回模型。想不动了就停。

Pi 把这件事做得特别干脆:默认只交给模型四样工具——readwriteeditbash。OpenClaw 火的时候,很多人追小龙虾外壳;底下转工具、调模型、撑会话的那层,常常就是这套循环。

这篇不写产品简介。写清楚一件事:这四个工具,在一轮任务里到底怎么跑起来。

先把「跑起来」画成一张图

忘掉「Agent 很聪明」这种空话。Pi 里真正转的是这个环:

你输入一句话    ↓系统提示 + 历史消息 + 四个工具的说明书  →  发给模型    ↓模型回一条助手消息,里面可能是:  · 纯文字(讲完了)  · 一个或多个 toolCall(要干活)    ↓本地运行时按名字找到工具 → 校验参数 → 真正执行    ↓把结果写成 toolResult,追加进上下文    ↓再发给模型……直到 stopReason 不是「还要调工具」

三层分工,记这张就够:

包(现名)干啥
说话
pi-ai
统一多家模型的流式接口;文本 / 思考 / toolCall 事件归一
转圈
pi-agent-core
Agent Loop:调模型 → 执行工具 → 回写结果 → 再调
干活
pi-coding-agent
默认挂上 read/write/edit/bash,会话、压缩、扩展、TUI

OpenClaw 之类产品,多半是在最外层再包聊天频道、权限、记忆。心脏仍是:模型提调用,本地执行,结果回灌。

模型从不直接摸你的磁盘。它只是在消息里写:我要 read,path 是某某。真正 fs.readFile / spawn 的是你机器上的 Node 进程。

这就是「四工具怎么跑」的第一句话:跑的是循环,不是某一个按钮。

用一个假任务,把四工具串一遍

假设你说:

登录按钮点了没反应。先定位,再修,再跑相关测试。

下面是机制上常见的一串调用(真实顺序会因模型而异,但形状差不多):

第 1 轮:摸清战场

1. bashls / rg "onSubmit|login" 缩小范围
2. read:打开可疑组件,必要时带 offset / limit 只读一段
3. 模型看到 toolResult:哦,提交函数里少了 await,或者校验提前 return 了

第 2 轮:动刀

4. edit:用精确字符串替换改那一小段(不是整文件重写)
5. 若文件不存在或要新建:write 一把写完
6. bashnpm test -- login 或项目里真实的测试命令

第 3 轮:收口

7. 测试挂了 → 再 read 失败输出 → 再 edit
8. 测过了 → 模型输出一段人话总结,stopReason 变成正常结束

你会发现:没有「调试工具」「测试工具」「搜索工具」这些专名,也能走完。因为:

•  ≈ bash(rg/grep)或扩展里的 grep/find(只读工具集里有,默认四件套之外可开)
•  ≈ read
•  ≈ edit(小改)或 write(大改/新建)
•  ≈ bash

Pi 的极简,不是能力残缺,是:把专名压成组合。 组合靠模型编排,执行靠本地四个(加可选只读)原语。

四个工具分别在干什么(深入,但不玄乎)

1read:把文件「喂」进上下文

参数大致是:path,可选 offset(从第几行)、limit(读多少行)。

关键细节:

• 文本和常见图片都能读;图会进附件(可自动缩小)  
• 默认会截断:大约 2000 行或 50KB 量级——防止一次 read 撑爆窗口
• 大文件靠 offset/limit 分页读,而不是假装「全文件永远塞得下」

模型侧的正确用法是:先缩小范围,再精读。乱读全仓库,循环还没修好,上下文先死。

2write:新建或整文件覆盖

参数:path + content

• 父目录不存在会先建  
• 覆盖已有文件——所以它是「重写/落盘」,不是外科手术

适合:新文件、模板生成、内容几乎全换。 不适合:只改三行却 write 整文件——又贵又容易无声丢改动。

3edit:精确替换(这是手感的核心)

参数:patholdStringnewString,可选 replaceAll

硬规则(官方工具行为):

• 精确字符串匹配,不是正则
• 找不到 oldString → 失败
• 找到多处且没开 replaceAll → 失败
• 成功时往往带 unified diff,方便人眼核对

为什么故意这么「笨」?因为笨才可控。模糊匹配一错,半个文件被改歪,循环后几轮全在擦屁股。

edit 逼模型先 read 出真实片段,再原样抄进 oldString。这是 Agent 改代码里最朴素、也最稳的纪律。

4bash:把终端变成万能接口

参数:command,可选描述。

关键细节:

• 在工作目录的持久 shell 里跑(环境变量能延续)
• 输出可流式回传  
• 同样截断:大约末 2000 行或 50KB;太长时完整输出可能落临时文件,上下文里只留尾巴

所以:测试、安装、git、rg、curl,全是 bash。Pi 默认不内置「后台 bash」——长任务官方态度更偏向 tmux 这类你看得见的会话,而不是黑盒挂起。

循环里还有三件「看不见但要命」的事

1工具结果必须回写给模型

执行成功或失败,都应该变成 toolResult 消息进上下文。 文件找不到、参数校验挂、被 hook 拦住——更好的做法是 isError: true 写回去,让模型改计划,而不是进程直接炸。

UI 上你看到的「红字」,和模型下一轮看到的「错误结果」,最好是同一件事。只展示给人不回写模型,循环就瞎了。

2并行可以,副作用要串

一条助手消息里可以有多个 toolCall。只读的 read / 搜索类,常可并行;带写盘、带依赖的,要串行。

Pi 的实现味道是:能并行就并行,但 toolResult 回写仍按原始调用顺序,避免模型看到乱序上下文。

3截断是特性,不是 bug

read 和 bash 都截断。因为 Agent 死法第一名永远是:工具输出把窗口灌满,后面几轮开始遗忘目标。

极简四工具能撑住 OpenClaw 级用法,有一半功劳在这:结果管道自带节流。

会话树和压缩:循环跑久了怎么不塌

只讲四工具不够。循环一长,还有两样配套:

会话是树,不是一条直线。你可以 /tree 回到之前节点再分叉:旁支去修坏掉的工具或试另一条路,修好再回主线。旁支用摘要接回来,主上下文少掺垃圾。

上下文会压缩(compaction)。接近窗口上限时,旧消息可自动摘要。扩展还能自定义「按主题压」「换模型摘要」。这是薄 harness 能跑长任务的另一半。

再加一句交互:Agent 跑着时,Enter 是转向(steer,当前工具结束后插入,后面排队工具可跳过);Alt+Enter 是跟进(follow-up,等这轮自然结束再问)。你不是只能干等到结束。

装上,只为验证你看懂了循环

npm install -g --ignore-scripts @earendil-works/pi-coding-agent# 或:curl -fsSL https://pi.dev/install.sh | shcd /path/to/repopi

/login 或环境变量 API Key → 丢一句:

Summarize this repository and tell me how to run its checks.

盯屏幕:有没有 bash/read,有没有截断后的长输出,最后有没有人话收束。 那就是循环在跑。项目约定放 AGENTS.md(也认 CLAUDE.md)。

安全: 默认权限≈启动它的用户,没有细粒度弹窗。真要边界,上 Docker / 文档里的沙箱方案。

和 Cursor / Claude Code:比的是「谁在转圈」

CursorClaude CodePi
你主要看见
编辑器里改代码
厚 CLI/产品能力
薄循环 + 四工具
工具哲学
IDE 工作流
内置很多能力
原语组合 + 扩展
模型
多,但产品意见强
Claude 为主
15+ 厂商,会话中可换
适合
日更业务
开箱强、少拧螺丝
看懂循环、控成本、嵌 SDK

选型人话:

• 要 GUI 手感 → Cursor  
• 要 Claude 成品车 → Claude Code  
• 要看清「模型怎么调工具」、要自建外壳(OpenClaw 那类)→ Pi

多数人该并存,不该宗教站队。

我的判断

第一,懂 Pi,是懂所有 Coding Agent 的捷径。换皮不换骨:都是「模型发 toolCall,本地执行,结果回灌」。Pi 把皮剥到只剩四根骨头,适合当教具,也适合当底盘。

第二,四工具够不够,取决于你会不会组合。不会组合的人觉得残缺;会组合的人觉得清爽。缺的能力,用扩展 / Skill / pi install 补,或让 Pi 当场给自己写扩展再 /reload——这是它和「功能清单越来越长」的产品最大的差别。

第三,别被「极简」骗去生产机裸奔。薄 harness = 你承担更多边界责任。先侧项目、先便宜模型、先看截断和错误回写,再谈主力迁移。

参考链接

• Pi 官网:https://pi.dev/
• Quickstart:https://pi.dev/docs/latest/quickstart
• 仓库 earendil-works/pihttps://github.com/earendil-works/pi
• 内置工具 API(read/write/edit/bash):https://badlogic-pi-mono.mintlify.app/api/coding-agent/tools
• Armin Ronacher — Pi 与 OpenClaw:https://lucumr.pocoo.org/2026/1/31/pi/
• 原理拆解教程(Agent Loop / 工具):https://how-pi-agent-works.vercel.app/
• Nader — 用 PI 包分层搭 Agent:https://nader.substack.com/p/how-to-build-a-custom-agent-framework

-END-

更多 Cursor、Codex、Claude Code、Skills、MCP 相关的教程、配置和踩坑记录,持续更新中。
关注公众号 未来的回响,看深度解读与版本追踪。加入知识星球 AI工具实战派,获取精校版文章 + 完整命令、配置文件与扩展案例。

【限时开放】欢迎加入AI工具实战派交流群一起学习进步~

AI编程、AI运营、工具资料分享请加入知识星球

-推荐阅读-

【AI编程】

【AI设计】

【AI工具