你有没有想过,怎么让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.mdHooks
提供信息/规范适合不适合
修改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有所帮助。觉得有收获的话,欢迎点赞转发。关注梦兽编程,咱们下篇见。