Claude Code 把规则藏对了:9 成 AI 框架全交给了模型
你给 AI 写的规则,AI 自己读得到吗?
多数情况下答案是:能。9 成开源 agent 框架把限制写在 system prompt、policies/、tool descriptions 里——全是模型可读的位置。
Claude Code 不是这种结构。
监工和犯人睡同一间牢房
把错的结构画下来——最外层是沙箱,里面是模型,模型旁边是工具、调度循环、权限策略、审批 hook、审查规则。沙箱画得很大,里面是模型加它的监工。
监工的工作日志贴在墙上。
模型不需要越狱、不需要攻击——它合规读了规则,转身找一条规则没禁的等价路径。每一步都在规则之内,每一步又都在你不希望的方向上。
你以为你设计的是边界,模型看到的是地图。
<figure><img src=“images/01-harness-position.png” alt=“harness 位置对比”></figure>
Claude Code 怎么做的
hook 配置在 settings.json:
{
"hooks": {
"PreToolUse": [
{ "matcher": "Bash(rm.*)", "hooks": [...] }
]
}
}
文件在 harness 进程里,模型读不到。模型发出 bash rm -rf /tmp/foo,要么被允许、要么被打断、要么被改写——它能观察到的只是结果,不是机制。
凭证一样。API 密钥、OAuth token、数据库密码——放在沙箱里,模型可以用一个看起来合理的工具读出来;放在外面,模型连读的对象都没有。任何 prompt injection 都偷不到不存在的东西。
这事 web 开发者 20 年前就懂
每一次 ChatGPT 越狱的核心动作都是 Ignore previous instructions——之所以能 ignore,是因为系统指令对模型可见。规则只要进了 prompt 上下文就是一段文本,文本可以被改写。
LangChain、ReAct 类框架更直接——把 tool descriptions 作为 prompt 一部分发给 LLM,包括 “this tool is restricted” 这种描述。LLM 读到一张地图,知道哪些路被堵,然后在允许的路里找等价。
这套错所有 web 工程师都做对过:前端 JS 校验只是 UX,真正的校验在后端,用户够不到的代码才算 enforcement。把 enforcement 留在客户端 = 没有 enforcement。
Web 工程 20 年前就懂的事,AI 工程在 2024 年还在重走。
day 1 不是写 prompt,是画一条线
这不是 hook 该不该外置的技术细节,是任何 agent 系统的第一性问题——你画的那条沙箱边界,分的到底是什么?
分的是「信任内核」和「工作面」。内核是绝对相信、模型永远看不到的那层:策略、密钥、审批逻辑、validation 代码、日志。工作面是让模型干活的那层:素材、工具调用、上下文。两层物理隔开,模型在工作面里再聪明,也猜不到内核里写了什么。
写 prompt 是 day 2 的事。day 1 是画分界线。多数项目跳过 day 1 直接做 day 2,所以从架构图起步就有洞——洞不是写错了,是这一笔根本没画。
模型能力还在涨,沙箱边界还在被试探。能撑住的不是更复杂的 prompt,是更早画的那条线。
钥匙不能留在笼子里。Claude Code 把它藏对了,9 成 AI 框架在帮模型保管。
出处
- The agent harness belongs outside the sandbox (https://www.mendral.com/blog/agent-harness-belongs-outside-sandbox)
- Claude Code v2.1.126 release (https://github.com/anthropics/claude-code/releases/tag/v2.1.126)
- Claude Code v2.1.122 release (https://github.com/anthropics/claude-code/releases/tag/v2.1.122)