我一直在用四五个 coding agent 干活:同一个仓库,有时用 Claude Code,有时用 Codex,赶时间就换 OpenCode。麻烦不在于切换工具,在于每个工具里「我是谁、按什么规矩干活」这段设定各写一遍,改一次要改五处,改漏一处就开始出现两种风格的输出。
agent-purge 解决的就是这件事:一份 Markdown,喂给多个 agent。它现在的版本是 0.2.9,874 星,MIT,零依赖,Node ≥ 20。
它把入口统一成三件事
每家 agent 读系统提示词的位置都不一样:有的认启动参数,有的认配置文件,有的只能靠插件改运行时对象。这个工具把这些入口归成三个通道:
| 通道 | 机制 | 生效范围 |
|---|---|---|
| install | 写入该 harness 的托管配置块(Markdown / hooks / 插件) | 常驻,别人启动也生效 |
| shim | 往 PATH 前置同名小壳,转发给 agent-purge <h> | 裸敲命令也接管 |
| slash | 会话内 /purge on\|off\|status | 热切换,不动磁盘 |
三层写的是同一份 personas/<id>.md 的正文。这一点很关键:不是三套配置同步,是一个源三种投递方式,所以不存在「A 工具生效、B 工具还是旧的」这种漂移。
四种模式,后果差别很大
replace:人设替换掉宿主 system 里报名字的那些句子,工具说明保留。strict:整段换成你的人设,工具说明也一起没了。append:人设挂在最前,宿主 system 原样保留。off:什么都不做。
第一次用 strict 我有点意外。作者在 README 里把实测数字直接摆出来了——本地假 provider 抓真实请求体,不是估算:
| harness | 实测版本 | 默认 system 字符数 | 注入后 |
|---|---|---|---|
| codex | 0.163.0 | 21,026 | 24 |
| claude | 2.1.304 | 6,379 | 156 |
| grok | 1.0.62 | 5,146 | 21 |
| omp | 17.4.2 | 34,511 | 10,106 |
| hermes | 0.21.5 | 8,139 | 7,554 |
| zcode | 0.16.9 | 9,359 | 9,359 |
| opencode | 1.19.3 | 19,332 | 112 |
| dsh | 0.2.1-rc.2 | 5,713 | 68 |
Codex 那行最能说明问题:21,026 字符的默认 system,注入后只剩 24。那 2 万多字里包含的不只是「你是谁」,还有输出格式约定、安全约束、工具使用规范。全换掉之后 agent 确实完全听你的,但它也失去了原本被调好的行为——变笨不是错觉,是把说明书一起扔了。
坑一 · 人设写得太短,等于把说明书也扔了
我第一版人设只有三百多字,写完还觉得自己简洁。实际效果是 agent 开始乱编工具参数、忘记输出格式。
原因就是上面那张表。strict 模式下你写多少,system 就剩多少。replace 稍微温和一些,但如果你的人设里没有覆盖工具说明相关的部分,也可能被连带删掉。
处置:日常用 append 或 replace,只在做「提示词鲁棒性评测」这类明确需要干净基线的场景用 strict,并且人设里必须补齐工具与格式约束。
dsh 是唯一有多个形态的目标
绝大多数 harness 只有一个位置要改,dsh 不是:desktop、web、headless 三个形态共用一套 cordis 插件,装在各自 profile 的 node_modules/agent-purge/,并在 cordis.patch.yml 里以 - insert 挂上,不改 app.asar。装完重启一次,之后热生效;三个形态还能在 Web 面板里分别勾选。
这一点在实践里很有用:我在 desktop 里写代码、在 web 里跑长任务,人设是同一个,切换工具不用切脑子。
可逆性是这套东西的前提
改系统提示词属于「改别人家的行为」,如果不可逆,我不敢用。
这个工具在设计上把可逆写进了每一条路径:agent-purge uninstall <h> 按字节还原;disarm 和 --mode off 同样能撤回;明确写了「不做文件夹级人设隔离」——技术上做得到,但那样会打破「一份人设、所有入口、一起切换」,而且卸载不再是字节还原。
状态只存本机,不上传任何数据。默认落在 ~/.agent-purge/(Windows 是 C:\Users\<你>\.agent-purge\),里面一个 state.json 加一个 personas/ 目录;要换位置就设 AGENT_PURGE_HOME。旧版 0.1.x 把数据放在包目录里,首次运行会自动搬到新家、原文件不动。
运行期真值优先于静态能力表
它自带一份 matrix.json 记每个 harness 的静态能力,但 agent-purge ls 和 Web 控制台显示的是运行期真值:这个 harness 有没有装、版本多少、注入层是 SYS 还是 USER、三个通道各自可用不可用。
两者冲突时以运行期为准。这条规则看起来是细节,实际省掉很多误判——能力表写「支持」,不代表你这台机器上那个版本还支持。
顺带一个诚实的边界:qoder 和 workbuddy 明确不支持,因为提示词在服务端。工具遇到这类目标会打印原因、原样启动,不假装生效。闭源桌面端同理。
支持面比想象中宽,但别指望全覆盖
现在的实测列表覆盖 codex、claude、grok、omp、hermes、zcode、opencode、opencode2、dsh、pi、antigravity、codebuddy。其中 opencode 与 opencode2 是两个不同的 npm 包(opencode-ai 1.x 与 @opencode/cli 2.x),插件接口完全不同,各自独立支持——按一个包名去配另一个,等于没配。
另外 claude 那条路带二进制补丁(清掉残留的身份句),antigravity 是等长替换二进制里的身份句。这两条在版本升级后最可能漂,升级完记得跑一次 agent-purge ls 看运行期状态。
一份人设的真实收益
用了两周,最大的变化不是「输出更像我了」,而是改一次规矩只需要改一个文件。以前给五个工具各改一句「不要自动提交」,改四次漏一次;现在改 personas/<id>.md,下一个请求就生效。
第二个变化是可回退。之前改系统提示词最怕的是「改坏了不知道原来是什么」,现在 --mode off 一句话回到原样,比手工记备份靠谱。
总结
它真正解决的不是「多平台适配」这种工程问题,而是「规矩只能有一个版本」这件协作问题;如果你也在多套 agent 之间来回切,可以先在这个站点 看看同类插件的中文清单,再决定要不要引入。
适合与不适合
适合:同时在三个以上 coding agent 之间切换的人;需要给团队统一输出风格、又不想逐家写配置的人;做提示词评测、需要干净基线的场景;在意「随时能退回原样」的人。
不适合:只用一家 agent 且从没改过系统提示词的人——收益接近零,多一层注入反而增加变量;依赖服务端提示词的宿主(qoder、workbuddy)用户,它明确不支持;想要「按项目切换不同人设」的人,作者明确不做文件夹级隔离。
标签:agent-purge、DeepSeek Harness、系统提示词、多人设、可逆配置
本文由 DeepSeek Harness Hub 自动整理,数据来源于插件详情页。