CLAUDE.md与Hooks——打造你的专属AI管家

你有没有想过,怎么让Claude Code"记住"你项目的特殊规则?比如:
- “我们项目用Tab而不是空格”
- “提交前一定要跑测试”
- “不要动那个遗留代码文件”
每次都要提醒AI很麻烦。CLAUDE.md就是解决这个问题的——像给管家写一本"家规手册",让它自动遵守。
今天咱们就聊聊怎么打造你的专属AI管家。
图:CLAUDE.md像给AI管家的家规手册
CLAUDE.md是什么
CLAUDE.md是放在项目根目录的一个Markdown文件,内容是给Claude Code的"项目级说明书"。
当Claude Code启动时,会自动读取这个文件(如果存在),把内容合并到系统提示词中。
简单说:系统提示词是"公司规章制度",CLAUDE.md是"部门特殊规定"。
CLAUDE.md能写什么
CLAUDE.md的内容会被原样插入系统提示词,所以你可以写:
项目背景:
# 项目说明
这是XXX后端服务,使用Go + Gin框架。
数据库使用PostgreSQL,ORM使用GORM。
编码规范:
## 编码规范
- 使用Tab缩进,不是空格
- 函数名使用驼峰命名
- 错误处理必须返回error,不要panic
- 所有导出函数必须有文档注释
特殊规则:
## 注意事项
- /legacy/目录下的代码是遗留系统,不要修改
- 修改数据库schema前必须询问
- 提交前必须跑`make test`
- 不要提交.env文件
常用命令:
## 常用命令
- 运行测试:`make test`
- 构建:`make build`
- 启动服务:`make run`
- 数据库迁移:`make migrate`
工具偏好:
## 工具使用偏好
- 搜索代码用GrepTool,不要用Bash的grep
- 读取配置文件优先用FileReadTool
- 执行命令前确认是否必要
图:CLAUDE.md的典型结构
CLAUDE.md的工作原理
CLAUDE.md的内容在系统提示词中的位置:
[系统提示词 - 身份模块]
[系统提示词 - 工具模块]
[系统提示词 - 格式模块]
[CLAUDE.md内容] ← 插入在这里
[系统提示词 - 安全模块]
[历史对话]
[当前输入]
为什么插在这里?因为:
- 在工具模块之后:可以引用工具,覆盖工具描述
- 在安全模块之前:CLAUDE.md的安全规则可以被系统安全模块强化
- 在历史对话之前:作为"上下文"的一部分
CLAUDE.md的内容会被缓存(见第8篇),所以不会影响缓存命中率。
Hooks:自定义拦截点
Hooks是Claude Code的另一个强大功能——在特定时刻执行自定义逻辑。
可以把它理解为"自动触发器":当X发生时,自动做Y。
Hooks的生命周期:
用户输入 → [beforeQuery] → 模型处理 → [beforeTool] → 工具执行 → [afterTool] → 模型继续 → [afterQuery] → 响应用户
Hook类型
beforeQuery:收到用户输入后,模型处理前。
用途:
- 预处理输入
- 检查权限
- 记录日志
// .claude/hooks/beforeQuery.js
export default function beforeQuery(input) {
// 记录查询日志
logQuery(input);
// 检查敏感词
if (containsSensitiveWords(input)) {
return { action: 'warn', message: '输入包含敏感内容' };
}
return { action: 'continue' };
}
beforeTool:模型决定调用工具后,实际执行前。
用途:
- 检查工具参数
- 自动修改参数
- 拦截危险操作
export default function beforeTool(tool, input) {
// Bash命令安全检查
if (tool === 'BashTool') {
if (input.command.includes('rm -rf /')) {
return { action: 'block', reason: '禁止删除根目录' };
}
// 自动添加确认标志
if (input.command.includes('git push')) {
return {
action: 'modify',
newInput: { ...input, confirm: true }
};
}
}
return { action: 'continue' };
}
afterTool:工具执行完成后,结果返回给模型前。
用途:
- 处理工具结果
- 格式化输出
- 记录执行历史
export default function afterTool(tool, input, result) {
// 记录工具执行
logToolExecution(tool, input, result);
// 格式化Bash输出
if (tool === 'BashTool' && result.stdout) {
return {
action: 'modify',
newResult: { ...result, stdout: truncate(result.stdout, 1000) }
};
}
return { action: 'continue' };
}
afterQuery:整个查询处理完成后,返回给用户前。
用途:
- 记录完整对话
- 触发后续操作
- 更新状态
图:Hooks的生命周期和触发点
实战:自定义工作流
看看 Hooks 和 CLAUDE.md 如何打造专属工作流。
案例1:自动代码格式化
CLAUDE.md:
## 代码规范
- 使用gofmt格式化Go代码
- 使用prettier格式化JS代码
beforeTool Hook:
export default function beforeTool(tool, input) {
// 文件写入前自动格式化
if (tool === 'FileWriteTool' || tool === 'FileEditTool') {
if (input.path.endsWith('.go')) {
input.content = formatGo(input.content);
} else if (input.path.endsWith('.js')) {
input.content = formatJS(input.content);
}
}
return { action: 'continue' };
}
案例2:提交前检查
afterTool Hook:
export default function afterTool(tool, input, result) {
// git commit后自动跑测试
if (tool === 'BashTool' && input.command.includes('git commit')) {
// 在后台跑测试
runTests();
// 添加到结果
result.message += '\n[已触发测试]';
}
return { action: 'continue' };
}
案例3:敏感文件保护
beforeTool Hook:
const SENSITIVE_FILES = ['.env', '.ssh/id_rsa', 'secrets.yaml'];
export default function beforeTool(tool, input) {
if (tool === 'FileReadTool' || tool === 'FileEditTool') {
if (SENSITIVE_FILES.some(f => input.path.includes(f))) {
return {
action: 'block',
reason: '这是敏感文件,需要额外确认'
};
}
}
return { action: 'continue' };
}
图:Hooks实现的自定义工作流
CLAUDE.md vs Hooks:什么时候用什么
两者都能自定义AI行为,但用途不同:
| 场景 | CLAUDE.md | Hooks |
|---|---|---|
| 提供信息/规范 | 适合 | 不适合 |
| 修改AI行为 | 间接 | 直接 |
| 自动化操作 | 不适合 | 适合 |
| 拦截/检查 | 不适合 | 适合 |
| 格式化/处理 | 不适合 | 适合 |
| 记录/审计 | 不适合 | 适合 |
简单说:
- CLAUDE.md:告诉AI"应该怎么做"
- Hooks:强制AI"必须这样做"
最佳实践
CLAUDE.md:
- 简洁明了,不要太长(建议<500字)
- 突出重点,不要罗列所有规则
- 及时更新,保持与项目同步
- 用Markdown格式,便于阅读
Hooks:
- 保持轻量,不要阻塞太久
- 错误处理,避免Hook崩溃影响主流程
- 日志记录,便于调试
- 版本控制,像代码一样管理
这对使用Claude Code的启示
理解CLAUDE.md和Hooks,能让你:
打造专属AI:根据项目特点定制AI行为。
自动化重复工作:格式化、检查、记录等自动执行。
强化安全控制:敏感操作拦截、权限检查。
团队协作:共享CLAUDE.md,统一AI使用规范。
总结
CLAUDE.md和Hooks是Claude Code的"自定义层":
- CLAUDE.md像"家规手册",告诉AI项目特殊规则
- Hooks像"自动触发器",在特定时刻执行自定义逻辑
两者配合,能打造真正专属的AI管家。
下一篇,咱们聊聊技能系统——让AI学会你的"独门绝技"。
文章写到这儿,希望对你理解CLAUDE.md和Hooks有所帮助。觉得有收获的话,欢迎点赞转发。关注梦兽编程,咱们下篇见。
