Claude Code 每次启动时都会开启一个全新的上下文窗口,之前会话中积累的项目知识、编码偏好、调试经验会随之消失。对于长期维护的项目而言,这意味着每次对话都需要重新向 Claude 解释项目架构、团队规范和各种约定,效率极低。
Memory 机制正是为了解决这个根本性问题而设计的。它让 Claude Code 在会话之间保持对项目的持续理解,无需每次从零开始。
2. Memory机制概述
2.1 核心问题
Claude Code 在设计上存在一个固有限制:每个会话的上下文窗口是独立的,会话结束后,上下文中所有内容(包括你告诉 Claude 的项目架构、你纠正的不良习惯、你反复强调的编码规范)都会彻底消失。这导致:
每次新会话都需要重新建立项目背景
Claude 反复犯同类错误,因为无法记住之前的纠正
团队规范无法自动传递给 Claude ,需要每次手动说明
随着项目复杂度增加,"启动成本"越来越高
2.2 设计原理
Claude Code 通过两套互补的记忆机制解决这个问题,它们都在每次会话开始时自动加载:
CLAUDE.md
Auto
Memory
写入方
开发者手动编写
Claude 自动写入
内容类型
指令与规则
学到的知识与规律
作用域
项目、用户或组织
按工作树区分
加载方式
每次会话完整加载
每次会话加载前 200 行
适用场景
编码规范、工作流、项目架构
构建命令、调试经验、 Claude 发现的偏好
两套机制相辅相成: CLAUDE.md 承载稳定的、你主动定义的规则; Auto Memory 则让 Claude 在与你协作过程中自主积累可复用的知识。
3. CLAUDE.md文件
3.1 基本概念
CLAUDE.md 是纯文本的 Markdown 文件,用于给 Claude 提供跨会话的持久指令。你用普通文本编写, Claude 在每次会话开始时读取它。它不是配置文件,而是给 Claude 的"项目说明书"—— Claude 会努力遵循其中的指令,但理解上仍依赖语言模型的推断能力,而非硬性约束。
可以运行 /init 命令让 Claude 自动分析代码库并生成一份初始 CLAUDE.md 。若文件已存在, /init 会给出改进建议而非覆盖原有内容。
示例 CLAUDE.md 内容:
# Project: my-api-service ## Build & Test - Build: `go build ./...` - Test: `go test ./... -race` - Lint: `golangci-lint run` ## Code Style - Use 2-space indentation for YAML/JSON files - All exported functions must have godoc comments - Error messages should be lowercase without punctuation ## Architecture - API handlers live in `src/api/handlers/` - Business logic stays in `src/service/` - Database queries go in `src/repository/` ## Git Workflow - Commit messages follow Conventional Commits format - Always run tests before committing - Branch naming: `feat/`, `fix/`, `chore/` prefix
3.4 编写有效指令
CLAUDE.md 在每次会话开始时全部加载进上下文窗口,消耗 token 。文件越长, Claude 的遵从度反而可能下降。建议:
# Project Instructions See @README for project overview and @package.json for available npm commands. # Workflow - Git workflow: @docs/git-instructions.md
规则文件可以通过 YAML frontmatter 的 paths 字段将生效范围限定到特定文件路径。这类条件规则只在 Claude 访问匹配的文件时才被加载进上下文:
--- paths: -"src/api/**/*.ts" --- # API Development Rules - All API endpoints must include input validation - Use the standard error response format - Include OpenAPI documentation comments
~/.claude/rules/ ├── preferences.md # Personal coding preferences └── workflows.md # Preferred work habits
用户级规则先于项目规则加载,因此项目规则享有更高优先级(可覆盖用户规则)。
4.5 跨项目共享Rules
.claude/rules/ 目录支持符号链接(symlink),可以将共享规则链接到多个项目中:
# Link a shared rules directory ln-s ~/shared-claude-rules .claude/rules/shared # Link a specific file ln-s ~/company-standards/security.md .claude/rules/security.md
Claude Code 会正常解析并加载符号链接指向的内容,并能检测和处理循环链接。
5. Auto Memory自动记忆
5.1 工作原理
Auto Memory (自动记忆)是让 Claude 在协作过程中自主积累跨会话知识的机制。当 Claude 在工作中发现值得记录的信息——如项目特有的构建命令、反复出现的调试模式、你的代码偏好——它会主动将这些内容写入记忆文件,供未来会话使用。
# Project Overview This is a Go microservice for order management. See @README for full context. ## Dev Commands - Test: `go test ./... -race -count=1` - Build: `make build` - Lint: `golangci-lint run ./...` ## Core Conventions - All errors must be wrapped with context: `fmt.Errorf("operation: %w", err)` - Never commit directly to main; always use feature branches - API response format defined in @docs/api-response-format.md
# Project Overview This is a Go microservice for order management. See @README for full context. ## Dev Commands - Test: `go test ./... -race -count=1` - Build: `make build` - Lint: `golangci-lint run ./...` ## Core Conventions - All errors must be wrapped with context: `fmt.Errorf("operation: %w", err)` - Never commit directly to main; always use feature branches - API response format defined in @docs/api-response-format.md