前述

我把主力 Coding Agent 从 Claude Code 切到 pi 已经三周多,最直观的感受并不是 Pi 有多厉害,而是可以搭一套属于自己的 Harness,效率高了不止一点

Pi 的缓存命中经常跑到 98% 以上,连续对话确实快👇(CH == cache hit)

但这只是结果。真正拉开差距的是,我终于能自己决定 Agent 怎么工作:哪些规则常驻、哪些能力按需加载、哪些任务丢给子 Agent、什么情况下必须停下来问我

Claude Code 很好用,开箱即用。但用久了会发现,它不好调。上下文和验证跟着产品走,子 Agent 怎么分工也不透明,任务一复杂就看不清它为什么这么拆、结果又被谁用掉了。还有就是,A\ 会夹带私货,为了限制第三方 API 设了不少关卡(太阴了)

而且最近 Pi 的热度可谓是火爆,我相信大家已经受够了重重的 Harness ,所以不妨和我一起来搭建属于自己的 Pi 吧

我想要的 Coding Agent 其实就几件事:读改代码、跑 Shell、加载项目规则、按需叫 SubAgent、改完能验证。pi 刚好把核心做得很小,其他都交给你自己拼。门槛是高了一点点🤏,但也让我第一次把 Harness 搭成了自己想要的样子

我的 Harness 分为三层

不是装得越多越强,我现在就分三层。

第一层是 AGENTS.md,管纪律。 全局一份,项目级一份,写的都是不怎么变的东西:改前先看结构和调用路径,只做必要改动,不顺手重构,需求模糊先提问,改完跑最相关的测试,最后看 diff。不确定就说假设。Agent 启动就拿到,不用每轮重写进 Prompt。

第二层是 Skills,管能力,按需加载。 我常驻的就几个:tdd、diagnosing-bugs、code-review、research,再加上一个自己写的管并行的 parallel-agent。一个 Skill 只管一种活,需要时再展开。堆多了反而容易路由错,不常用的,我就用 skillful 直接隐藏掉,这样子上下文十分干净

第三层是 Packages,管控制面。 这层也是我想重点聊的。我现在全局装了 10 个,挑几个常用的说说

1️⃣ pi-subagents 整个并行调度的底座。所有多 Agent 都走 workflowScript,runs.all 跑独立 lanes,

runs.run

跑串行阶段,fresh 隔离上下文,父 Agent 负责汇总和拍板。没有它,其他都是散的。

2️⃣ pi-skillful 管 Skills 的发现和加载。支持从仓库外层继续发现 .agents/skills/,支持 $ 显式展开,也支持把不常用的 Skill 隐藏,避免全部塞进系统提示词。我现在就隐藏了 10 个简历和 PPT 相关 Skill,需要时再切出来。

3️⃣

eko24ive/pi-ask

在歧义处停下来。目标文件、改原文还是新建、验收标准不明确时,用结构化的 ask_user 先问清选项。听起来不像效率功能,但它少一次推倒重写就赚回来了。

4️⃣ pi-simplify 只盯最近改动。扫重复和不必要的复杂度,不借 review 名义重构整个项目。

5️⃣

zigai/pi-mention-skill

把 Skill 调用从 / 改成 $。输入 $ 就能模糊搜 Skill 并展开到当前 Prompt,Skills 不用常驻也能随用随取。

6️⃣

tavily/pi-extension

给 researcher 加联网能力。web_search 先找,web_fetch 再抽正文,查资料和改代码分在不同 Agent 里,错误更好定位。

7️⃣

narumitw/pi-goal

管长目标的 /goal。给 session 一个显式目标,跑到完成、阻塞或等待外部事件才停,有 goal_complete / goal_blocked / goal_wait 三把闸,不让循环空转。

8️⃣ pi-context-usage 看 Context 烧到哪了。/context 给点阵图,/context details 展开 system prompt、工具和对话轮次的占比,快满了我会先做 compaction 或换 lane。

9️⃣

narumitw/pi-btw

开侧边线程。/btw 问临时问题,不污染主对话,答案只在需要时带回主线程。调 API 命名、查一段报错时很好用。

🔟

ff

-labs/pi-fff 换掉 find / grep。基于 Rust 的 FFF,常驻索引、frecency 排序、git 感知,不用每次起子进程。找文件和扫代码的体感是最明显的,可以看我这一篇介绍 👇

你的 pi 正在用 grep 往 Context 里塞垃圾,我实测了一下午终于换掉了… pi 内置的 grep 其实就是 rg –json 套壳,limit 100 + 截断 50KB + 默认带 –hidden,搜一次 TODO 这种高频词,直接30 多条平铺甩进上下文。Token 烧了,关键文件还被埋在后面 这个问题 Codex 早就用优化过的 rg 解决,pi

显示更多

来自 pi.dev

全局的 AGENTS.md 里的话我固定了一条 Coding Loop,保证每一步可验证:

确认目标和验收 → 读代码和规则 → 最小改动 → 跑最相关的测试或检查 → 看 diff → 需要时让 fresh reviewer 再看一遍。没有证据就不说完成

工作流怎么跑:先问清,再侦察,最后才改

有了分层,流程反而变简单了。我现在的默认路径是:

有歧义就先用 ask_user 问清,再让 scout 只读侦察,确认入口、调用链和风险;确认后再让 worker 去改;改完起全新的 reviewer 并行看 diff、测试和边界,父 Agent 汇总后再修一轮。

关键约束只有一条:同一个目录同一时间只留一个 writer。reviewer 可以并行,因为只读。多 writer 同时改一个目录,谁先落盘都不代表谁对。真需要并行实现,就上 managed worktree,最后由父 Agent 合并。

并行也不是把同一句话复制给两个 Agent。一个看本地,一个看外部,这样才有意义。

小任务别强行套全流程。一个 Agent 能解决的,就别为了并行而并行

我踩过的坑

最早我装过 pi-todo,以为长任务一定要待办列表。实际跑下来,coding 任务要追的是子 Agent 状态、产物和验证证据,不是 checkbox。pi-subagents 的 workflow 和 artifact 已经够用,我就移除了。

还有一个教训是别堆 Skill 和 Package。之前几十个全放开,路由更差,管理成本也高。现在策略是:默认只留常用的,需要时再用 $ 拉出来。第三方 Package 能跑任意代码,装之前看一眼源码和权限就行。

pi-fff 这种带索引的,进大仓库会有一小段预热时间,这是正常滴

不用照搬我的配置,照这个思路拼就行

不用跟我装得一模一样,pi 的好处就是你可以按自己习惯拼。给你一个最小可用的思路:

1. 先定纪律。 在 ~/.pi/agent/AGENTS.md 写清楚你的边界,比如:简单优先、最小改动、需求模糊先问、改完必跑测试必看 diff。项目级再补一条该项目的特殊约束就够

2. 再挑能力。 Skills 别全装,就留你每周都会用的 4 到 6 个,其他隐藏掉,User 级别和 Repo 级别分开管。Packages 也是,先把 pi-subagents 和 pi-skillful 装上,再按痛点加两三个,比如需要经常问你就加 pi-ask,找文件慢就加 pi-fff

pi install npm:pi-subagents npm:pi-skillful npm:

eko24ive/pi-ask

小技巧:直接跟 Pi 说你想要什么,它会自己去搜插件库给你推荐。或者还可以自己写插件呢

最后

Pi 给我带来的效率提升,说白了就是模糊的地方少了,上下文也干净了,流程也更可控了

AGENTS.md 管边界,Skills 按需给能力,pi-ask 在歧义处刹车,pi-subagents 负责跑和汇总,最后能不能交付,还是看测试和 review

最后多提醒一句,Pi 默认就是最高权限,没有沙箱,记得提防 AI 执行危险指令

传送门:

Pi Coding Agent

/

pi-subagents

/

pi-skillful