8.0
热点
AI SCORE
编程提效2026-11-13 16:27
把 Claude 编码硬约束落实到钩子
dev.to · AI#Claude Code#钩子#工程规范
Editor brief · 编辑速览
CLAUDE.md 属于模型上下文,无法保证每次都执行其中的规则。文章以禁止修改既有数据库迁移为例,讨论何时应把文字要求改成脚本、钩子或权限限制。
文章思维导图
Knowledge map
AI brief
原文暂未完整获取,基于公开信息的快读
在 CLAUDE.md 里写下「禁止修改已有数据库迁移」,Claude Code 仍可能漏掉。dev.to 的这篇文章讨论了一个工程问题:哪些要求可以交给模型判断,哪些固定流程该写成脚本,哪些硬约束需要钩子或权限限制来执行。
目前能确认什么
按原文节选的解释,CLAUDE.md 是模型上下文,不是强制配置。把规则加粗、补上 IMPORTANT,都不能保证每次执行。
作者给出了三类处理方式:
- 有例外的偏好,例如优先使用命名导出,留在 CLAUDE.md。
- 步骤明确的流程,例如依次执行 lint、类型检查和测试,收进统一脚本。
- 不能违反的要求,例如禁止修改已有迁移,交给钩子拦截。
数据库迁移记录着结构变更。修改已经执行过的迁移文件,可能让文件描述与数据库实际状态不一致,因此通常需要新增迁移来继续变更。
节选展示了一个 PreToolUse 钩子:检查目标是否为已存在的迁移文件,命中后以退出码 2 阻止调用,并反馈「新增迁移」的提示。配置匹配的是 Edit 和 Write。
我的判断
把流程写成脚本,解决的是执行步骤一致;让脚本必定被调用,还需要执行约束。
只在 CLAUDE.md 留一句「完成前运行检查」,依然依赖模型记住它。对团队而言,统一脚本的直接价值是让开发者、CI 和钩子共用同一套检查。
示例也有需要核对的边界:它只匹配 Edit 和 Write,节选没有展示通过 shell 修改文件时如何拦截,不能据此认定迁移文件已受到完整保护。另外,脚本用「文件是否存在」判断是否受保护,新建迁移后继续编辑也可能被拦住。
原文后续尚未完整读取,测试结果也没有展示完。是否区分历史迁移与本次新增文件、如何覆盖其他写入路径,需要等完整实现确认。