开发者发布 Senzu:给 Claude Code 和 Codex 加上会拦截违规操作的 hooks 与 skills 合集
Le puse muros a mi agente de IA (y ahora rompe la web, pero porque se lo pido)
作者 Peterson 发布 Senzu,一个面向 Claude Code 和 Codex 的西班牙语规则包,把 CLAUDE.md 里的建议式规则改成会直接拦截的 hooks(muros),共 16 个,如 guard 禁止未经批准的 git push 和 rm -rf,stop-guard 要求通过 build、lint、测试并写 devlog 后才能结束任务。
作者把反复口头约束 Agent 的经验做成可执行 hooks 和 skills 包,给出了从建议式规则到强制拦截的具体做法,可迁移到自己的 Claude Code 或 Codex 工作流。
我开始用 Codex 配合 AI 智能体做我的项目,后来 Claude Code 也来了。没过多久我就发现,一个项目接一个项目,我总是在对智能体重复同样的话。不要在 main 上提交。在认定完成之前先在移动端检查。把做了什么、为什么这么做写下来。设计之前先定好配色和字体,而不是做到一半组件时才决定。
再加上我陆续找到的别人的库和 skills:有一个做界面设计特别好,一个用 GSAP 做动画,还有一个做 3D……每一个单独用都没问题,但它们彼此不认识。我就是那个胶水,把指令从一个项目复制粘贴到另一个项目。
于是我决定把所有东西整合成一个合集,让各个部分互相帮助。我叫它 dev-standards,因为它字面上就是这个意思:我的工作标准。现在它叫 Senzu。
而这一路上,类似这样的事还在不断发生,全都集中在同一周:
- Prettier 用它默认的配置,往一个不使用分号的项目文件里塞了 204 个分号。智能体却认为没问题。
- 我自己那套规范的安装程序清空了一个 Laravel 项目的
.mcp.json,还顺带干掉了一个已经配置好的 MCP 服务器。 - 智能体跟我说它已经在移动端验证过网站了。截图确实存在:在一个我永远不会打开的临时文件夹里。
- 一个 loader 和一条“居中”的加载条。肉眼看着是居中的。量一下,不是。
- 还有我最喜欢的:我一直以为 Codex 不执行 hooks。它执行的。问题在于我的 hooks 看不懂 Codex 是怎么描述一次编辑的,所以什么都不说就全放行了。
这些事单独看都不严重。合在一起,就是能不能信任智能体、还是得逐行审查的区别。
CLAUDE.md 里的规则只是建议
这就是根本问题所在。你可以在 CLAUDE.md 或 AGENTS.md 里写上不要在 main 上提交、关闭任务前要在移动端验证、不要动 .env。智能体会读。而且几乎总是会遵守。
当这是一个真正的项目时,“几乎总是”是不够的。
所以这个合集没有停留在堆砌指令上:凡是能执行的,我就把它变成真正会执行的东西,而不是靠阅读。至于名字:如果你小时候看过《龙珠》,你就知道为什么叫 Senzu。一颗仙豆,项目就恢复了。
Senzu 是什么
一个面向 Claude Code 和 Codex 的包,用西班牙语写的,包含三个协同工作的部分:
- Skills:我自己的和其他项目的(附带作者和许可证),上面加了一层西班牙语。智能体只加载该加载的那个:界面设计、代码质量、DDD、动画、部署……一个路由器根据你的请求决定读哪个、按什么顺序:先决定设计,再选择效果,而不是反过来。这样上下文就不会被无关的东西塞满。
- 墙(hooks):它们不劝告,它们阻止。如果智能体试图做不该做的事,动作就不会执行,并且会向它解释原因。
-
命令:
/plan、/verificar、/brief、/propuestas……是我在每个项目里重复用到的流程的快捷方式。
这是墙触发时的样子:
[BLOQUEADO por Senzu] No se commitea en 'main'. Crea una rama
(git switch -c feat/...) y commitea ahí.
前几天它拦住了那个正在帮我发布 Senzu 最新版本的智能体本身,当时它试图在不该提交的地方提交。这时候你就知道它管用了。
救过我最多的那些墙
一共十六道,但有几道每周都在证明自己的价值:
-
guard:没有我当时的批准,不能做任何git push,不能rm -rf,不能删除数据库,也不能随便部署到生产环境。要绕过这一点,需要一个显式变量和我的批准,而且规则是把它记录在 devlog 里。 -
secrets-guard和protect-files:智能体不会在代码里写入真实密钥(AWS、Stripe、OpenAI 等的密钥可以通过其形式识别),也不会碰.env、已应用的迁移或自动生成的文件。 -
stop-guard:这是我最喜欢的。如果智能体编辑了代码却没有通过 build、lint 和测试,如果改动了界面却没有在移动端验证,或者没有写下当天的 devlog,就不能把任务视为完成。没有证据就说「已经好了」的日子结束了。 -
backend-guard:阻止一次性删除或重命名列的迁移(先添加新内容,再移除旧内容)以及写入日志中的个人数据。 -
code-hygiene:清除测试中遗留的console.log、dd()和.only。还有更多内容,我在设计里讲。 -
conventions-guard:在已有项目中,/adoptar会分析代码实际是怎么写的,我们商定并封存。从那时起,偏离这些规则的代码就不能进入。项目约定说了算,而不是智能体的约定。
还有一个不阻塞但我每天都感激的:保存时格式化 不强制风格。如果项目没有格式化器配置,就不格式化;如果格式化改动的行数超过智能体所改的行数,就撤销并提醒。204 个分号那件事再也没发生过。
我最常用的 skills
有四十多个,但智能体每个任务几乎从不加载超过一两个。最常干活的是:
- ui-ux-pro-max(来自 Next Level Builder):所有视觉内容的入口。在写一行界面代码之前,它会根据业务和技术栈决定风格、调色板、字体和模式,并保存到项目的 design system 中。此外还带有我的层:Laravel 配 Inertia、Next、Astro 和 Vue 的配置,以及我下面讲的设计指南。
- front-activation:效果目录。九十多个,每个都有按技术栈的配方、其「减少动态效果」版本以及在移动端的开销。你要「一个 logo 跑马灯」,智能体就只打开那个配方,而不是整本手册。
-
code-quality:按语言的最佳实践,以及一个
verify-build,它能理解 monorepo 并对你改动的内容运行 lint、类型检查、测试和 build。 -
project-planner:
/plan把一个功能拆成阶段和小任务,每个任务都带有对应的 skill 以及如何验证。然后/siguiente逐个执行。 - backend-audit:用真正的工具审计后端,每个发现都带有证据:命令输出、文件和行号,或者一个失败的测试。没有「架构可以改进」这种话。
对于动画和 3D(GSAP、Three.js、React Three Fiber……),我用 Claude Design Skills 的那些,同样带有西班牙语层。
不依赖智能体记性的记忆
每个项目都有一个 devlog(做了什么、为什么以及如何验证)和一个简短的记忆文件,记录当前生效的决策:D-012 · Esto se decidió así · ver entrada 063。一个 hook 会在每次会话开始时注入它。如果智能体要违背某个决策,它必须引用该决策并问我。
对于不在记忆中的内容,有一个基于 devlog 的搜索器,它能理解词根、拼写错误和同义词。看起来微不足道。但这就是解释两次为什么我们不用某个库,与永远不必再解释之间的区别。
如何设计
这里最能看出各个部分彼此了解。
1. 先提问。如果没有 brief 或设计系统,第一次尝试触碰界面就会被阻止。智能体必须先问:业务是做什么的,访客需要做什么,有没有品牌,以及两三个你喜欢的网站。访谈用平实的语言进行(/brief),不用「hero」或「CTA」这样的词,因为不是所有人都这么说话。
2. 结构先于美学。据此写出一份蓝图:页面的各个区块配上真实文案,并在每个区块中说明在移动端有什么变化。在你批准之前,什么都不设计。
3. 两个可以打开的模型稿。/propuestas 生成两个真正相反的方向,用双击即可打开的 HTML。每个决定都带一个标签(A·T1 是模型稿 A 的字体,B·B2 是 B 的按钮……)和一个「你的意见」面板,可以逐件投赞成或反对,并复制到聊天中。
4. 轮次。/ronda 进行下一轮:你喜欢的在所有模型稿中固定下来,你不喜欢的消失,每个模型稿都带来一些新东西。在你看到之前,一个验证器会检查所有这些是否都得到了遵守。
5. 否决会被执行。你说不喜欢的内容会进入一个 gustos.md 文件。这时 code-hygiene 又回来了:如果你否决了某个颜色或轮播图,智能体就不能再写它。同样还有一份黑名单,列出那些暴露网站是 AI 做的东西,比如「可用」徽章、「01 / 02 / 03」编号区块、灰色 logo 的「trusted by」或编造的指标。它们默认被屏蔽。
6. 逐区块构建,每完成一个区块就展示,然后再进行下一个。当 logo 已经选定后,它的最终文件会被保护起来,智能体不会去做没人要求的草图。
最后,验证。
验证是测量,不是看
这部分源于那个没对齐的 loader。「应该看起来不错」不算验证,所以界面验证器现在以像素为单位测量:如果某个被其容器居中的东西偏离中心 4 px,它会告诉你,并给出可能的原因(比如多了一个 margin-left: 8px)。
我用真实网站对它进行了校准,以免它变成一台误报机器。它一开始每页给出 33 到 41 条提示,我把它降到了 0-2 条。顺带它还发现了真东西:在 vuejs.org 上,一个播放图标在自己的 SVG 内偏离中心 3 px。
在移动端,它做我手动做的事:真正打开菜单。按下它,测量链接是否能用手指点到,测试它能否用 Escape 关闭,并给你一张截图,每个提示都编号标在其元素上方。数字和图像,在一起。
有趣的部分
不全是墙。Senzu 还带来一个效果目录,附有按技术栈(Astro、Next、Vue 配 Inertia)的配方,最近我向它提了一个具体要求:让网站看起来正常,然后突然像玻璃一样碎裂。
真正碎裂的是页面本身,而不是覆盖在上面的一张图片。每一块都是用 clip-path 按玻璃形状裁剪出来的 DOM 副本。因此你看到的是真实、清晰的文字,一边旋转着在 3D 中坠落。没有截图,也没有依赖任何库。
而且是有规则的,因为这样的效果一不小心就会变成一场闹剧:只触发一次且是有意为之,按 Escape 可以跳过,开启了「减少动态效果」的人只会看到一个淡出,结束后 DOM 里什么都不留。它和其余所有东西一样,在真实浏览器里有自动化测试。
如何试用
在 Claude Code 中:
/plugin marketplace add petersonsenadevs/senzu
/plugin install senzu-all@senzu
在 Codex 中,从应用里添加同一个 marketplace。然后,在你的项目里打开一个会话并输入 /instalar:它会检测技术栈,询问你想要什么(全部、按类别或定制),然后帮你配置好。
它不是什么
它是有主见的:这是我的工作规范,不是所有人的。你可以调整它(墙可以按项目关闭,权限也可以改),但它有一部分就是我的工作方式。
它是西班牙语的,这是有意为之。面向 agent 的资料英文的非常多,而几乎没有什么是为用西班牙语工作的人设计的。
而且它并不能让 agent 不再犯错。它还是会犯错。区别在于,现在它比我先知道。
它是 MIT 许可。它使用了其他项目的 skills,每一个都在 CREDITOS.md 里标注了作者和许可证。它每周检查这些项目是否有变化,并给我开一个 PR 让我审阅。
如果你试了,我很想知道你会给你的 agent 设一道什么样的墙。肯定有一些是我没想到的。
来源:Google AI:DEV 作者专属(RSS) · dev.to
