番外一 · 记忆系统(下):持久记忆与 CLAUDE.md
前两篇讲的是单次会话内的记忆机制——Session Memory 在后台提取笔记,Compaction 在上下文耗尽时用笔记或 API 总结来恢复空间。但这些都随会话结束而消失。
本篇讲的是跨会话的记忆机制:如何让下一次新会话记住上一次学到的东西?以及静态指令(CLAUDE.md)是如何始终生效的?
A1.6 持久记忆:跨会话的大脑
文件系统即数据库
Claude Code 不用任何数据库——所有记忆都是文件系统中的 Markdown 文件:
~/.claude/
└── projects/
└── {project-slug}/
└── memory/
├── MEMORY.md ← 索引文件(始终加载到系统提示词)
├── user_role.md ← 独立记忆文件
├── feedback_testing.md
├── project_deadline.md
└── reference_linear.md
这个设计的好处:零依赖、人类可读、可用 git 管理、可在任何编辑器中直接修改。
四类记忆
记忆被严格限定为四类——且有一个核心原则:只记录不可从当前代码状态推导出的信息。代码风格、架构决策、文件结构这些都不应该被记住,因为它们可以通过 grep、git log、CLAUDE.md 获取。
src/memdir/memoryTypes.ts
export const MEMORY_TYPES = ['user', 'feedback', 'project', 'reference'] as const
- user(用户)
- feedback(反馈)
- project(项目)
- reference(引用)
记什么: 用户的角色、偏好、知识背景。
为什么重要: 与高级工程师协作和教初学者写代码,需要完全不同的沟通方式。
---
name: 用户背景
description: 10年 Go 经验,首次接触 React
type: user
---
用户是有 10 年经验的 Go 后端工程师,首次接触 React。
解释前端概念时用后端类比(如 useEffect ≈ goroutine 的 defer)。
记什么: 用户的纠正("不要这样做")和确认("对,就这样")。
关键洞察: 如果只记录纠正,模型会变得过 于保守——它知道什么不能做,但不知道什么该坚持做。
---
name: 测试不要用 mock
description: 集成测试必须连真实数据库
type: feedback
---
集成测试必须连真实数据库,不用 mock。
**Why:** 上个季度 mock 测试全过但 prod migration 失败了。
**How to apply:** 写测试时如果涉及数据库操作,始终连接测试库。
每条 feedback 要求 Why(为什么)和 How to apply(何时应用),让模型能在边缘情况下做判断。
记什么: 正在进行的工作、截止日期、动机——这些从代码和 git 中看不出来的项目上下文。
---
name: Auth 重写动机
description: auth 中间件重写是法务合规驱动的
type: project
---
auth 中间件重写是法务/合规要求——session token 存储不符合新规。
这不是技术债务清理。范围决策应优先考虑合规性而非开发便利。
**Why:** 法务在 Q1 安全审计中标记了这个问题。
**How to apply:** 涉及 auth 相关决策时,合规优先于 DX。
记什么: 外部系统的位置指针——让模型知道去哪里找信息。
---
name: 值班告警看板
description: Grafana API 延迟面板
type: reference
---
grafana.internal/d/api-latency 是值班盯的延迟面板。
改请求路径相关代码时要注意这个。