V2EX 上有个帖子「Claude 是傻逼吗,我写的强制性规范,它能直接不看的吗」,一天多就有 58 条回复。
楼主的情况很典型:规范里写明了要用系统自带的 UI 组件、禁止自己绘制,原型图也给了,Claude 还是自己画了一套,做出来四不像。楼里也有人说 Codex 一样:明明交代了只在关键处改几行,它连函数名都改了。
你写的规范,AI 能稳定遵守吗?有什么办法让它真正守规矩?
V2EX 上有个帖子「Claude 是傻逼吗,我写的强制性规范,它能直接不看的吗」,一天多就有 58 条回复。
楼主的情况很典型:规范里写明了要用系统自带的 UI 组件、禁止自己绘制,原型图也给了,Claude 还是自己画了一套,做出来四不像。楼里也有人说 Codex 一样:明明交代了只在关键处改几行,它连函数名都改了。
你写的规范,AI 能稳定遵守吗?有什么办法让它真正守规矩?
楼主把 V2EX 楼里的做法,和 Claude Code 的官方文档对了一遍。先说结论:写在 CLAUDE.md 里的规范是「建议」,不是「强制」;真正不能违反的,要交给 hooks 或权限规则。
(原帖那位用的是 Claude 桌面版,下面的官方文档讲的是 Claude Code,道理是相通的。)
一、官方怎么说
/compact 之后会从磁盘重新读入;只在对话里说过的要求,压缩后就可能丢了。二、V2EX 楼里的实用做法
Toggle、NavigationSplitView(#24 wisteen)。三、必须做到的事,交给 hooks
hooks 是确定性的。官方文档的原话是:「某些动作一定会发生,而不是靠模型自己选择要不要做」。下面两个是文档里的示例,可以改着用:
.claude/settings.json 里注册一个 PreToolUse hook,每次编辑、写文件之前跑一个脚本。路径命中保护名单,脚本就以退出码 2 拦下,Claude 会收到拦截原因并调整做法。{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh"
}
]
}
]
}
}
脚本 protect-files.sh 的写法见文档里的完整示例,记得 chmod +x。
SessionStart hook 配 compact 匹配器,每次压缩后把规范再注入一次,命令输出的文字会加进 Claude 的上下文。{
"hooks": {
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{
"type": "command",
"command": "echo '提醒:UI 只用系统自带组件,不自己绘制;提交前先跑测试。'"
}
]
}
]
}
}
四、排查清单
/context,看 Memory files 下面有没有你的 CLAUDE.md。没加载,它当然看不到。用 /memory 可以打开、编辑这些文件。以上整理自 V2EX 原帖(楼层号对应原帖)和 Claude Code 官方文档。你还有什么让 AI 守规矩的办法?