📄 一句话概括
Hook 不是配置里的某一行——搜遍 1259 行配置树和 28977 行 schema,hook 命中 0;它的落地形态是一族规则类插件,只改【工具被调用时的规则】,不改工具本身。
📝 本节和前面几节的关系
Skill 加的是【怎么做事的经验】,Tool 加的是【能做事的手】,这一节讲第三层:不动手,改规矩。
一、先给一个反直觉的实测结论
在 1259 行的配置树里搜 hook,命中 0 次;在 28977 行的 schema 里搜,也是 0 次。
所以 Hook 不是配置里的某一行,也不是某个插件名。它是 Cordis 的机制——插件在管线的某个位置插一脚,而插的那一脚,通常由专门的规则类插件承担。
搜不到不等于不存在,而是它换了个名字出现在配置里。
二、规则类插件一览(实测 8 件)
sandbox-policy——沙箱范围怎么给。user-approval——这次要不要问人。permission-presets——权限档位表。fs-observation-policy——文件变更怎么观察。tool-call-timeout-policy——工具调用超时多久。repeat-tool-reminder——反复调同一个工具时提醒。spill-policy——大结果往哪儿溢出。session-checkpoint-policy——会话检查点何时打。
它们的共同特征一句话:不改工具本身,只改工具被调用时的规则。
三、三层扩展,各改什么
- Skill(4.1):加一份经验,不用写代码——最轻。
- Tool(4.2):加一个包,要写代码、要挂好几端——最重。
- Hook(4.3):加一条规则,不改能力、改行为——最巧。
顺序上也是从轻到重:先问能不能用技能解决,不行再写工具,要改的是规矩就写规则。
四、为什么把规则单独抽一层
如果规则和工具写在一起,就会变成:想换个沙箱范围,得改工具代码。
抽出来之后:工具是工具、规矩是规矩——同一批工具(183 条插件行)换一套规则,能力一个不动(4.7 实测)。
这也解释了为什么【规则插件】普遍带 -policy 后缀:它们本来就是冲着【可替换】去的。
五、动手 Demo:Hook 在配置树里的真身
搜不到 hook,但能找到一族规则类插件:
policies = [
("sandbox-policy", "沙箱范围怎么给"),
("user-approval", "这次要不要问人"),
("permission-presets", "权限档位表"),
("fs-observation-policy", "文件变更怎么观察"),
("tool-call-timeout-policy", "工具调用超时多久"),
("repeat-tool-reminder", "反复调同一个工具时提醒"),
("spill-policy", "大结果往哪儿溢出"),
("session-checkpoint-policy", "会话检查点何时打"),
]
for a, b in policies:
print(" %-26s %s" % (a, b))
print()
print(" 配置树里搜 hook: 0 处 —— 机制,不是插件名")
实跑输出:
--------------------------------------------------------------------
Hook 在配置树里的真身
--------------------------------------------------------------------
先说实测结论:在 1259 行的配置树里搜 hook,命中 0 次;
在 28977 行的 schema 里搜 hook,也是 0 次。
【Hook】不是配置里的某一行,也不是某个插件名。
它是 Cordis 的机制——插件在管线的某个位置插一脚。
那它的落地形态是什么?是一族规则类插件:
插件(省略前缀) 管什么
-----------------------------------------------------
sandbox-policy 沙箱范围怎么给
user-approval 这次要不要问人
permission-presets 权限档位表
fs-observation-policy 文件变更怎么观察
tool-call-timeout-policy 工具调用超时多久
repeat-tool-reminder 反复调同一个工具时提醒
spill-policy 大结果往哪儿溢出
session-checkpoint-policy 会话检查点何时打
-----------------------------------------------------
一共 8 件。它们的共同特征一句话:
【不改工具本身,只改工具被调用时的规则。】
搜不到 hook 不是坏事:机制藏在管线里,规则落在这一族插件上。 8 件里有 4 件直接关系到【能不能随便动手】——下一节整节讲它们怎么排队。 判断一个插件属不属于这一层,看一句话:它改的是能力,还是规矩?
30 秒实验
- 在 dump 出的配置里搜
policy,把命中的插件名列出来。 - 解释:为什么【改规矩】比【改工具】更值得单独抽一层?
- 想一个你想要的规矩(比如【改文件前先备份】),说说它该做成哪种插件。
常见误区
- 错误:配置里搜不到 hook,说明 DSH 没有 Hook。——纠正:它是机制不是配置项,落地成 8 件规则类插件。
- 错误:Hook 就是拦截函数调用。——纠正:它改的是执行规则——能不能动手、要不要问人、多久算超时。
- 错误:规则写进工具里更方便。——纠正:那会变成【换规则就要改工具代码】;抽出来才能整批替换。
自测三问(点开对答案)
1. 为什么配置树里搜不到 hook? —— 因为 Hook 是 Cordis 的机制(在管线里插一脚),**不是配置里的插件名**;它的落地形态是规则类插件。 2. 规则类插件有几件?举三件。 —— 8 件;例如 sandbox-policy、user-approval、permission-presets。 3. 三层扩展各改什么? —— Skill 加经验(不写代码)、Tool 加能力(写代码挂多端)、**Hook 改规矩**(不动能力)。- ☐ 下一节(4.4 Tool Execution Pipeline:一次工具调用究竟要经历哪些阶段)
相关笔记
- 为什么这不只是【多加几个 Tool】 —— 四种改动粒度的上一层视角
- 不要把 Tool 看成一个函数 —— 规则挂在管线的哪一端
- 当心那些使用方便的工具中存在的漏洞 —— 规则层是开关,也是护栏
- 🐳 DeepSeek Harness · 索引