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 计划模式、验证循环和常见故障排除,也是这个系列的收尾篇。有用的话欢迎点赞收藏。

相关推荐
AI视觉监控工程师1 小时前
视频分析平台高并发告警架构实战:从"识别到告警"的工程化落地
后端
小蒜学长1 小时前
基于SpringBoot+Vue的租房管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·租房管理
洋就在江州1 小时前
gitlab-cicd 离线集成——springboot-cicd (非docker形式,shell形式)
java·spring boot·后端·ci/cd·gitlab·gitlab-runner
用户9479135811621 小时前
Jev 是什么,能做什么?和 Agent 的区别,其实是一个「判断」和「执行」的分工问题
后端
air_link1 小时前
陪伴型 AI 最容易出的六个问题,像人还是像心理健康的人。
后端
根目录下的猫1 小时前
虚拟机复制过来运行时:“虚拟机使用的此版本,VMware Workstation 不支持的硬件版本。”错误解决办法,亲测可用
linux·运维·服务器·后端
蜗牛互联网2 小时前
Java Agent 工具调用的 allowlist、参数校验与调用预算
java·开发语言·人工智能·后端·oracle
用户813267933252 小时前
行情数据晚到几秒,会让量化策略失去优势吗?从信号时间到回测偏差
后端·github·api
九零HTTP2 小时前
一次 TCP 连接的一生:从三次握手到四次挥手
后端