Claude Code 进阶自动化:用 Memory + Hook 把重复操作变成全自动

前面十篇文章讲了从安装配置到 Skills 和 MCP 的各种技巧。本文是两个"自动挡"功能:Memory (让 Claude 记住你的偏好,不用说第二次)和 Hook(特定事件触发自动执行脚本,不用手动跑)。配完之后很多重复操作就自动化了。


Memory:三层记忆

Claude Code 有三层记忆结构,每层的作用不一样:

第一层:CLAUDE.md(项目规范)

放在项目根目录,每次对话启动时自动读取。记录技术栈、编码规范、常用命令。

这个文件是所有配置里投入产出比最高的。花一小时写一份好的 CLAUDE.md,之后每次对话 Claude 生成的代码自动遵守规范------不用再反复纠正"别用 @Autowired""用 LocalDateTime 别用 Date"。

第二层:Memory 文件(个人偏好)

存放在 ~/.claude/projects/<项目名>/memory/ 下,跨对话持久化。

使用方式特别简单------直接在对话里说人话:

markdown 复制代码
> 记住:我不喜欢在代码里写注释,除非逻辑特别复杂。
> 记住:这个项目正在做用户中心改造,下月上线,不要做大范围重构。

Claude Code 会自动把偏好保存到 memory 文件,之后的对话都会自动遵守。

Memory 有四种类型:

  • user:关于你。比如你是 Java 后端开发、偏好简洁回复。
  • project:项目背景。比如"正在做用户中心改造,下月上线"。
  • feedback:你对 Claude 的反馈。比如"不要写注释""不用 @Autowired"。
  • reference:外部资源。比如"接口文档在 Confluence 某个页面"。

用 /memory 命令可以查看和管理所有记忆。

第三层:对话上下文(会话级)

当前对话的所有历史,退出就没了。超过 50 轮后回复质量会下降,该 /clear 就清。


我对 Memory 的真实评价

说实话,Memory 不像 CLAUDE.md 那样"必须配置"------它是锦上添花。

刚用 Claude Code 的时候你不需要配 Memory。用了一个月之后,如果你发现自己经常在对话里纠正同一个偏好(比如"别写注释""回复简洁点"),那就可以把这个偏好记到 Memory 里------以后就不用每次都纠正了。

我自己目前大概有 5-6 条 Memory,都是用了几个月积累下来的小偏好。不多,但每一条都确实省了不少重复的口头纠正。


Hook:事件驱动的自动化

Hook 比 Memory 更进一步------它不是在对话里生效,而是在特定事件发生时自动执行脚本。

六个可以挂 Hook 的事件

事件 什么时候触发 能干什么
PreToolUse 工具调用之前 拦截危险命令、commit 前强制跑测试
PostToolUse 工具调用之后 改完 Java 文件自动格式化
Stop Claude 回复完成时 自动跑测试、发通知
SessionStart 会话开始时 加载环境变量
SessionEnd 会话结束时 清理临时文件
PreCompact 上下文压缩前 保存完整对话记录

最实用的是前两个------PreToolUse 和 PostToolUse。


实用 Hook 一:改完代码自动格式化

每次 Claude 改完 Java 文件,自动用 maven spotless 格式化:

json 复制代码
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit(*.java)",
        "hooks": [{
          "type": "command",
          "command": "mvn spotless:apply -q 2>/dev/null || true"
        }]
      }
    ]
  }
}

原来是:Claude 改代码 → 你可能忘记格式化 → 提交时 Checkstyle 报错 → 回头再改。现在是:Claude 改代码 → 自动格式化 → 完事。

|| true 这个后缀是有意加的------如果项目没有配 spotless,这个 Hook 静默跳过,不影响正常使用。

实用 Hook 二:commit 前强制跑测试

在执行 git commit 之前先跑测试,失败了不让提交:

json 复制代码
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash(git commit *)",
        "hooks": [{
          "type": "command",
          "command": "mvn test -q && echo 'Tests passed' || (echo 'Tests failed!'; exit 1)"
        }]
      }
    ]
  }
}

这个 Hook 相当于给你的 Git 加了一道自动检查------测试不通过就不让 commit。以前可能会忘了跑测试直接提交,现在有它做守门员。


Hook 可用的环境变量

Hook 脚本里能用这些变量来获取上下文:

  • CLAUDE_TOOL_NAME:触发了哪个工具
  • CLAUDE_TOOL_INPUT_FILE_PATH:操作了哪个文件
  • CLAUDE_SESSION_ID:当前会话 ID

Hook 和 Permissions 怎么区分

第 7 篇讲了权限系统,也能拦截危险操作。这里容易搞混------两个都能管操作,区别在哪?

  • Permissions (权限):做 Yes/No 判断------"允不允许"。比如说 Bash(rm -rf *): Deny,就是一刀切地拒绝。
  • Hook:做自动化------"操作前后自动执行"。比如说"commit 前跑测试"、"改完代码自动格式化"。

简单记:只是不让做某件事 → Permissions。要在操作前后自动做事 → Hook。Permissions 先于 Hook 执行,被 Deny 的操作压根不会走到 Hook。


配置放哪

  • 项目级 :.claude/settings.json(可随 Git 提交,团队共享)
  • 用户级 :~/.claude/settings.json(所有项目生效)
  • 项目级优先级高于用户级

我建议:跟编码规范相关的 Hook(比如自动格式化、commit 前跑测试)放在项目级,随代码提交,团队成员都能受益。跟个人偏好相关的(比如 Memory)放在用户级。


总结

  1. CLAUDE.md = 项目规范,最重要,每个项目第一时间写好
  2. Memory = 个人偏好,用久了慢慢积累,不用一开始就配
  3. Hook = 事件自动化,配一次长期生效
  4. 最实用的两个 Hook:改完代码自动格式化 + commit 前自动跑测试
  5. 跟团队规范相关的 Hook 放项目级 .claude/settings.json,随 Git 提交共享

这两个功能都是"配置十分钟,受益好几个月"的类型。不复杂,但确实能让日常开发少做很多重复操作。


下一篇讲 /plan 计划模式、验证循环和常见故障排除,也是这个系列的收尾篇。有用的话欢迎点赞收藏。

相关推荐
captain3762 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
IT_陈寒3 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
泡海椒3 小时前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go3 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥43093 小时前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端
岩钧3 小时前
New API 源码解析:一个生产级 AI 网关的架构与实现
后端
学到老活到老3 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
用户360055579003 小时前
Kestrel_VLLM - 25 · 全注意力层设备化、整层对拍与访存粒度
后端
yliucherish3 小时前
从零实现一个 SQL 注入检测引擎:报错注入与布尔盲注的误报控制
后端
bigbread3 小时前
状态模式-住院患者状态管理
后端