我受够了 Claude Code 的黑箱,所以自己造了一个
Mario Zechner 受够了 Claude Code 的黑箱,自己造了一个只有 4 个工具、900 token 的极简 agent。核心主张:你以为你在做 context engineering,但你连 context 里有什么都不知道。
RAFA · 2026.03.23
Harness系列: AI早知道 · 第四篇
Mario Zechner 在 DOS 时代长大。
那时候的程序,你能看到所有东西。Doom 的安装程序,Borland 的开发工具,每一行输出都暴露在你眼前,没有黑箱,没有后台进程,没有"正在处理,请稍候"。
三十年后,他在用 Claude Code。
他开始注意到一件事:Claude Code 的后台进程没有任何可见性。子 agent 在做什么,你看不到。系统提示在每个版本之间悄悄改变,没有 changelog,没有说明。工具在你背后往上下文里注入东西,你不知道注入了什么,也不知道有多少。
对很多用户来说,这也许不是问题。对 Mario 来说,这是不可接受的。
于是他花了几个月,自己造了一个。
先算一笔账
在解释 Mario 的解法之前,先来算一笔他觉得大多数人没有认真算过的账。
你在用 Playwright MCP 吗?它是现成的 MCP 工具,让 agent 能控制浏览器、做自动化测试、截图验证 UI。非常方便。
但它有 21 个工具,工具描述加起来占用 13,700 个 token。
这意味着:在你和 agent 说第一句话之前,你的 context 窗口已经消耗了 9%。
不只是 Playwright。Chrome DevTools MCP 有 26 个工具,18,000 token。很多人会同时装五六个 MCP 服务。算下来,agent 还没开始工作,一大块上下文就已经不见了。
"你以为你在做 context engineering,但你连 context 里有什么都不知道。"
这是 Mario 决定不支持 MCP 的原因。他的替代方案是:用 CLI 工具 + README 文件。需要浏览器自动化?写一个 CLI 脚本,附上一份 README 说明怎么用。agent 在需要的时候读 README,按需加载,只有真正用到的工具才消耗 context。这叫渐进式披露,而不是一次性倾倒。
4 个工具,900 token
Mario 的 agent 叫 pi。它的核心工具集是:
read — 读文件
write — 写文件
edit — 精准修改文件的某段文字
bash — 执行命令
就这四个。
系统提示加上工具描述,加起来不到 1000 token。
对比 Claude Code 的系统提示(几万 token)、opencode(清晰地复制了 Claude Code 的 prompt 结构)——差了几十倍。
你可能会想:工具这么少,系统提示这么短,能用吗?
Mario 把 pi 拿去跑了 Terminal-Bench 2.0,这是一个评测 coding agent 能力的公开 benchmark。结果:pi 和 Claude Code、Codex、Cursor、Windsurf 几乎不相上下,甚至在某些任务上更好。
他的解释很直接:2026 年的前沿模型,已经被 RL 训练到"天生懂 coding agent"了。 你不需要用 10,000 token 的操作手册来告诉它怎么用 bash、怎么读文件、写代码的时候应该注意什么。模型已经知道了。你喂它的那些额外的 prompt,在大多数情况下,只是在浪费 context。
这个结论很刺耳,但 benchmark 数据放在那里。
文件是唯一诚实的状态
Mario 砍掉的不只是工具。他还砍掉了两个几乎所有 coding agent 都有的内置功能:Plan Mode 和内置 Todo 列表。
砍掉 Plan Mode 的理由:
Claude Code 的 Plan Mode,本质上是一个只读分析模式——agent 在规划阶段不修改文件,只是"想"。问题是,你对 agent 在想什么完全没有可见性。它看了哪些文件、漏掉了哪些、做出了什么假设——你不知道。等它说"好了,我规划完了",你拿到的是一个结论,不是一个过程。
Mario 的替代方案:让 agent 把规划写进 PLAN.md。你能实时看到它在写什么,能随时介入修改,规划文件可以在不同 session 之间传递,可以用 git 追踪变更。
砍掉内置 Todo 的理由更简单:内置 Todo 是 agent 需要额外维护的状态。状态越多,出错的地方越多。
替代方案:写一个 TODO.md 文件。
# TODO.md
- [x] 实现用户认证
- [x] 添加数据库迁移
- [ ] 编写 API 文档
- [ ] 添加限流agent 直接读这个文件,改完一条就更新 [x],所有人——包括你——都能看到最新状态。
这不是偷懒,是一个更深的判断:文件是唯一同时满足"agent 可读"、"人类可读"、"跨 session 持久"、"可版本控制"这四个条件的状态载体。 任何把状态放在内存里、放在 UI 组件里、放在 agent 内部表示里的做法,都在为自己创造隐患。
后台进程的解法叫 tmux
Claude Code 有一个内置的后台 bash 功能,可以启动开发服务器、在后台跑测试。
Mario 不支持这个。他的理由是:后台进程管理是可见性的天敌。
早期版本的 Claude Code 里,agent 会把它启动的后台进程忘掉——context compaction 之后,它不记得自己开了哪些进程,也没有工具去查询。你必须手动 kill。
Mario 的解法是:用 tmux。
tmux 是一个终端复用工具,不是 AI 产品,它 1987 年就存在了。但它天然解决了所有可见性问题:你能看到 agent 在另一个窗格里运行的命令,能看到输出,能介入,甚至能和 agent 在同一个 LLDB 调试会话里协作。
"Claude Code 也可以用 tmux,你懂吧。bash 就够了。"
子 agent 是被误用最多的功能
Mario 最强烈的反对意见,来自对子 agent 的使用方式。
Claude Code 的子 agent 功能,让主 agent 可以在处理复杂任务时派生一个新 agent 来处理其中一部分。很多用户觉得这很方便:并行开多个子 agent 同时实现不同功能,速度快,看起来很强大。
Mario 的判断:这是一个反模式。
原因有两个。
第一是可见性。子 agent 在做什么,主 agent 不清楚,你更不清楚。主 agent 决定给子 agent 什么初始上下文,你没有控制权。子 agent 出了问题,调试起来非常痛苦——你看不到完整的对话过程。
第二是更根本的问题:多数人在 session 中途开子 agent,是因为没有提前规划好上下文。
他的建议是:如果你需要收集上下文,先单独跑一个 session 专门做这件事,产出一个结构化的 artifact。然后在一个新的 fresh session 里,把这个 artifact 作为输入,开始真正的实现工作。
这比 mid-session 开子 agent 更干净:上下文更完整、可见性更好、artifact 下次还能复用、整个过程你都能看到。
他说得很直白:"人们以为子 agent 省了 context,其实是你没有把工作规划好的信号。"
对安全机制诚实
最后一个 Mario 的设计决定,也是最有争议的:pi 默认运行在完全 YOLO 模式下。
没有文件操作的权限确认,没有命令执行的安全检查,没有 Haiku 预审 bash 命令是否恶意,完整的文件系统访问权,可以以你的用户权限运行任何命令。
他给出的理由不是"这很方便",而是一个更直接的工程判断:
coding agent 的安全护栏,本质上是安全剧场。
一旦你给了 agent 写代码和运行代码的能力,游戏就结束了。如果 agent 能读取数据、运行代码、还有网络访问——你在打地鼠。Claude Code 检查每一个命令,询问你是否确认,然后照样能访问你的文件系统,照样能 curl 外部地址。这些确认弹窗的存在,更多是让用户感到"系统在保护我",不是真的在保护。
"大家都在跑 YOLO 模式来做任何有效率的工作,那为什么不干脆把它设为默认,而且是唯一选项?"
这句话很刺,但逻辑是清晰的。比起假装有护栏,他选择告诉你:这个工具有完整权限,请在你了解风险的前提下使用。
Mario 真正在说什么
表面上,这篇文章是一个工程师嫌弃现有工具太复杂、自己重造了一遍的故事。
但 Mario 真正在说的东西,值得认真对待:
可见性不是锦上添花,而是 harness 的基本条件。
你看不见的,对你来说就不存在——这不只是 Mario 的个人偏好,而是一个关于工程实践的根本判断。如果 agent 在后台注入了你不知道的 context,你的 context engineering 就是在盲人摸象。如果子 agent 的行为对你是黑箱,你对整个系统行为的理解就是有缺陷的。如果安全机制是表演,你对风险的认知就是扭曲的。
前几篇讲的是 Anthropic 和 OpenAI 如何用复杂的多 agent 结构突破能力天花板。Mario 讲的是另一面:在你真正需要那些复杂度之前,你首先需要对 agent 的行为有清晰的掌控感。 没有掌控感的复杂系统,不是 harness,是噩梦。
他的工具只有 4 个,系统提示不到 1000 token,benchmark 跑分和顶级工具不相上下。这不是因为他偷了懒,而是因为他一直在做减法——减掉每一个不能给他提供真实价值、或者损害可见性的组件。
剩下的,才是他真正信任的东西。
下一篇:OpenClaw 怎么做 Harness?本土独立开发者的实践方案