写在开头
前两天翻到一篇工程博客,Tessl 的人写的,核心话题是怎么用手里已有的几类文件,把编码智能体给管起来。
他拿 Claude Code 举例。四种文件都躺在 .claude 目录下面,各管一摊,互不越界。
我最早也用它写稿,后来换成了 WorkBuddy,一个桌面 Agent。现在每天的稿子都是在这儿磨出来的。
哪些词该禁、口吻怎么收、结构长什么样,早就写进记忆里了。可写出来还是照犯不误。
那篇文章说的东西,正好能对上我这个毛病。
看完之后想法很直接:四种文件,搬过去试试。
一、那篇文章给了一个最简单的数法
文章里说,能用来管 AI 编程助手的文件,一共就四种。
第一种是说明书,CLAUDE.md 这类,告诉它这个项目要注意什么。
第二种是规则文件,写清楚什么不许做。
第三种是能力,技能、命令、子代理,给它装新的本事。
第四种是钩子,每次动手之前自动跑一遍检查,不合格直接拒绝。
前三种都是文本,它每次都读。第四种不是文本,是代码,它读不到,也绕不过去。
作者在这里给了一个区分,我觉得是全文最值钱的一句:能被读到的,都能被争辩。它读到一行禁词,会给自己找个理由,说这次情况特殊。读不到的钩子不争辩,它直接拒绝。
所以他说,你最不想被打破的那条规矩,要放在拒绝的那一层。
他还给了一个更省事的自查办法:在自己仓库里跑一遍 ls -R .claude/,数数翻出来几个文件,就知道自己交付了几个杠杆。
这四种是围着 Claude Code 的目录长出来的。我干活用的是另一个工具,直接搬过去,也不知道能不能用。
二、四种文件搬过去,三种有位置,第四种没有
说明书这层它有。每个项目一份记忆文件,开新会话自动读进去,位置跟 CLAUDE.md 一样。
规则这层也有地方放。我让它把规则写进写稿那个技能的正文,调用的时候整篇读一遍。
技能是它原生的,但目录有讲究:放在项目里它不认,得放到用户目录才能直接调。
第四种,没有。
钩子靠的是工具在动手之前先跑一段脚本,把不该写的拦回去。这个工具,不跑这一段。
一开始我不信,让它配一个挂上去试试。脚本照规范写好,先拿模拟输入测,九组用例全过,该拦的都拦住了,拦截理由一条不差地打出来。然后它写了一个真文件,里面塞一个明令禁止的词,保存。
文件躺在磁盘上,钩子一声没吭。
它把文档、全局配置、权限设置翻了一遍,三处指向同一件事:文档里没有"钩子"这个词,全局配置里没有这个键,权限只认路径不认内容。这套协议它不执行,挂上去也是挂着。
所以这个钩子在 WorkBuddy 里压根没生效。怪不得呢,早前从 Codex 迁过来的技能,有的钩子也一直没动静。
三、扫完五十九篇旧稿,禁的那四个词一次都没出现
现在钩子这条路是走不通了,我就想看看前三种(说明书、规则文件、能力)能不能迁移过来。能迁过来的话,对我的写作 Agent 也算一种强化。
之前为了压一压稿子里的 AI 味,我写过不少禁用词,比如"发生了 xxx""而我没有 xxx"这类。于是我让 AI 分析了一遍过去发过的五十九篇稿子,一共十一万七千字。
我想知道的就一件事:除了钩子之外,前三种功能里立过的那几条禁用词,到底有没有再出现过?比如下面这几个:
说白了 / 本质上 / 换句话说 / 值得注意的是
AI 扫完之后,这几个词一次都没出现。
可我最早那十七篇,一条规则都没立,也照样零次。这说明什么?它们本来就不在我的稿子里,禁了等于没禁。
四、钩子搬不过来,我把它挪进了流程
所以问题压根不在它听不听话。我立的那几条是空的,它遵不遵守结果都一样。真想管住点什么,得有个每次都会验一遍的地方。
钩子那层干的就是这个:动手之前先跑一遍,不合格直接拒。这一层补不上,最硬的那道闸门就没了。
只能换个地方放。把"写完自己再看一遍"这件事从脑子里挪出来,落成交付之前必跑的一步。不跑,就不算写完。
检查这一环,我让它做成了脚本。两个,都跑得起来。
一个管用词。硬禁的那几个词一出现直接拦死,退出码 1,不许交付。加戏的副词和禁用的标点只报警告,一条条列出来,自己看。
一个管口吻。口吻列不成清单,只能量。段长、单句段的比例、"我"出现的次数、"我"开头的句数,四个数一起看。
让它拿这一篇跑一遍,输出是这样的:
[lint] ✅ 无硬禁词。
[lint] ⚠️ 软警告 2 条(建议改,不拦截):
· 加戏副词「本来」× 1
· 加戏副词「照样」× 1
段数 43 均段 38.7 最长 152 单句段 23(53%) 我 27次 密度 16.2‰ 我开头 4
跳过就是违规。这一条不需要钩子拦得住,它自己就成立。
以前这些检查全在我脑子里。写的时候想不起来,写完也不想再回头看。
现在跑一遍,输出摆在眼前。改不改是另一回事,至少不会忘掉。
写在结尾
今天这篇就写到这儿吧。说起来就三件事:
把那套四层框架往自己的工具上搬,三层有地方放,钩子那层配上去没反应。翻文档、翻配置查了半天,确认这工具不支持钩子。
翻自己发过的五十九篇旧稿,看立过的禁词还犯不犯。结果这几个词我一次都没写过,不立这条也不会犯,白禁了。
把"写完再看一遍"从脑子里挪出来,做成两个脚本,每次交付前跑一次,输出直接摆在眼前。
所以搬完就这个结果:三样进了工具,一样搬不动,挪进了流程。
如果你也在优化写作 Agent,不妨先做一件事:打开你干活的工具,数数这四层,看空了几层。空的那层,就是你接下来要补的。类似的踩坑和工具分享,在 云栈社区 也常有人聊。