教程概述
Rules 和 Memory 是让 Claude “记住"你的偏好的关键系统。通过正确配置,Claude 可以在每次会话中自动遵循你的开发规范。
你将学到
- ✅ Rules 文件夹 vs CLAUDE.md 的区别
- ✅ Rules 模块化组织方法
- ✅ 内存持久化 Hooks 配置
- ✅ Dynamic System Prompt Injection
- ✅ continuous-learning skill 使用
Rules 文件夹 vs CLAUDE.md
两种方式对比
flowchart TD
subgraph CLAUDE.md 方式
A[单个文件] --> B[所有规则集中]
B --> C[管理简单]
C --> D[可能过长]
end
subgraph Rules 文件夹方式
E[多个文件] --> F[按模块拆分]
F --> G[灵活组合]
G --> H[维护复杂]
end
对比表格
| 特性 | CLAUDE.md | Rules 文件夹 |
|---|---|---|
| 文件结构 | 单文件 | 多文件目录 |
| 作用范围 | 用户级或项目级 | 项目级 |
| 灵活性 | 低(全有或全无) | 高(可选择性加载) |
| 维护难度 | 简单 | 中等 |
| 推荐场景 | 个人项目、快速原型 | 团队项目、复杂规范 |
CLAUDE.md 方式
位置:
- 用户级:
~/.claude/CLAUDE.md - 项目级:项目根目录
CLAUDE.md
示例:
# 开发规范
## 代码风格
- 使用 TypeScript 严格模式
- 函数命名使用 camelCase
- 组件命名使用 PascalCase
- 禁止使用 var,使用 const/let
## 测试要求
- 单元测试覆盖率 ≥ 80%
- 使用 pytest 运行测试
- 测试文件命名为 `test_*.py`
## Git 规范
- 提交信息遵循 Conventional Commits
- 分支命名:feature/*, fix/*, refactor/*
## 禁止事项
- 不要使用 emoji
- 不要在代码中保留 console.log
- 不要提交 .env 文件
Rules 文件夹方式
目录结构:
~/.claude/rules/
├── security.md # 安全规范
├── coding-style.md # 编码风格
├── testing.md # 测试要求
├── git-workflow.md # Git 工作流
├── agents.md # 子代理使用规则
├── performance.md # 性能优化
├── patterns.md # 设计模式
└── hooks.md # Hook 文档
Rules 模块化组织
目录结构图
flowchart TD
A[rules/] --> B[security.md]
A --> C[coding-style.md]
A --> D[testing.md]
A --> E[git-workflow.md]
A --> F[agents.md]
A --> G[performance.md]
B --> B1["- 无硬编码密钥<br/>- 验证所有输入<br/>- 参数化查询"]
C --> C1["- TypeScript 严格模式<br/>- camelCase 函数<br/>- PascalCase 组件"]
D --> D1["- 覆盖率 ≥80%<br/>- pytest 运行<br/>- test_*.py 命名"]
示例 1:security.md
# 安全规范
## 强制要求
### 1. 无硬编码密钥
永远不要在代码中硬编码 API 密钥、密码或令牌。
使用环境变量或安全的密钥管理服务。
### 2. 输入验证
所有用户输入必须经过验证和清理。
不要信任来自客户端的任何数据。
### 3. SQL 注入防护
使用参数化查询,不要拼接 SQL 字符串。
```python
# ❌ 错误
query = f"SELECT * FROM users WHERE id = {user_id}"
# ✅ 正确
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
4. XSS 防护
所有输出到 HTML 的内容必须经过转义。
5. 敏感数据
- 不在日志中记录密码
- 不在 URL 中传递敏感参数
- 使用 HTTPS 传输敏感数据
### 示例 2:coding-style.md
```markdown
# 编码风格
## TypeScript/JavaScript
### 命名约定
- 变量和函数:camelCase
- 类和组件:PascalCase
- 常量:UPPER_SNAKE_CASE
- 文件名:kebab-case
### 类型系统
- 启用 strict 模式
- 避免使用 any,使用 unknown 替代
- 为所有公共 API 提供类型定义
### 代码组织
- 单个文件 ≤ 300 行
- 单个函数 ≤ 50 行
- 嵌套深度 ≤ 3 层
## Python
### 命名约定
- 变量和函数:snake_case
- 类:PascalCase
- 常量:UPPER_SNAKE_CASE
### 类型注解
- 为所有公共函数添加类型注解
- 使用 typing 模块的类型
### 文档
- 使用 docstring 文档化公共 API
- 遵循 Google 或 NumPy 文档风格
示例 3:testing.md
# 测试要求
## 单元测试
### 覆盖率
- 最低覆盖率:80%
- 目标覆盖率:90%
- 关键模块:95%+
### 测试框架
- Python:pytest
- TypeScript:Vitest 或 Jest
### 测试命名
```python
# 测试文件
test_user_service.py
# 测试函数
def test_create_user_success():
def test_create_user_with_invalid_email_raises_error():
测试组织
class TestUserService:
def test_create_user(self):
...
def test_delete_user(self):
...
内存持久化 Hooks
工作原理
sequenceDiagram
participant C as Claude 会话
participant H as Memory Hooks
participant S as 存储
Note over C: 会话开始
C->>H: SessionStart Hook
H->>S: 加载上次状态
Note over C: 会话进行中
C->>H: PreCompact Hook
H->>S: 保存关键状态
Note over C: 会话结束
C->>H: Stop Hook
H->>S: 持久化学习
Hook 配置
SessionStart:加载上次状态
{
"UserPromptSubmit": [
{
"matcher": "true",
"hooks": [
{
"type": "command",
"command": "cat ~/.claude/.tmp/session-state.md 2>/dev/null || echo '新会话开始'"
}
]
}
]
}
PreCompact:压缩前保存状态
{
"PreCompact": [
{
"matcher": "true",
"hooks": [
{
"type": "command",
"command": "cat > ~/.claude/.tmp/pre-compact-state.md << 'EOF'\n# 压缩前状态\n\n## 当前进度\n- [记录当前任务进度]\n\n## 关键决策\n- [记录重要决策]\n\n## 待办事项\n- [列出未完成项]\nEOF"
}
]
}
]
}
Stop:会话结束持久化
{
"Stop": [
{
"matcher": "true",
"hooks": [
{
"type": "command",
"command": "echo \"## 会话摘要 ($DATE)\n- 完成的任务: ...\n- 学到的模式: ...\n\" >> ~/.claude/sessions/log.md"
}
]
}
]
}
会话状态文件格式
# 会话状态
## 项目上下文
- 项目名称: my-project
- 技术栈: TypeScript, React, PostgreSQL
## 当前任务
- 实现用户认证功能
- 进度: 70%
- 下一步: 添加密码重置
## 关键决策
1. 使用 JWT 进行认证
2. 密码使用 bcrypt 加密
3. Session 存储在 Redis
## 未解决的问题
- CORS 配置需要调整
## 学到的模式
- 在这个项目中,API 响应格式为 { data, error }
Dynamic System Prompt Injection
使用 CLI 标志动态注入上下文:
配置别名
# ~/.bashrc 或 ~/.zshrc
# 日常开发模式
alias claude-dev='claude --system-prompt "$(cat ~/.claude/contexts/dev.md)"'
# PR 审查模式
alias claude-review='claude --system-prompt "$(cat ~/.claude/contexts/review.md)"'
# 研究探索模式
alias claude-research='claude --system-prompt "$(cat ~/.claude/contexts/research.md)"'
上下文文件示例
dev.md:
你现在处于开发模式。
## 当前项目
- 名称: my-api
- 框架: FastAPI
- 数据库: PostgreSQL
## 开发偏好
- 使用 TDD 开发
- 代码必须有类型注解
- 每个函数需要 docstring
review.md:
你现在处于代码审查模式。
## 审查重点
1. 安全漏洞
2. 性能问题
3. 代码重复
4. 测试覆盖
## 输出格式
按严重程度排序问题列表
continuous-learning Skill
为什么需要持续学习?
问题:重复遇到相同问题
→ 浪费 tokens
→ 浪费时间
→ 用户体验差
解决:自动提取模式
→ 保存为新 Skill
→ 下次自动应用
工作流程
flowchart TD
A[会话结束] --> B[Stop Hook 触发]
B --> C{发现重复模式?}
C -->|是| D[提取为 Skill]
D --> E[保存到 skills/]
E --> F[下次自动加载]
C -->|否| G[记录到日志]
配置
在 ~/.claude/skills/continuous-learning/README.md:
# 持续学习 Skill
## 触发条件
会话结束时自动触发(通过 Stop Hook)
## 学习规则
### 什么值得保存?
1. 重复出现的调试技巧
2. 项目特定的配置模式
3. 发现的 bug 和解决方案
4. 性能优化技巧
### 什么不值得保存?
1. 一次性问题
2. 过于通用的知识
3. 已有文档的内容
## 输出格式
创建新文件 `~/.claude/skills/learned/YYYY-MM-DD-topic.md`
最佳实践
1. 分层组织 Rules
全局 Rules (用户级)
↓ 覆盖
项目 Rules (项目级)
↓ 覆盖
会话上下文 (动态注入)
2. 定期更新 Rules
# 每月检查一次 Rules 是否需要更新
ls ~/.claude/rules/
# 删除过时的规则
# 添加新的模式
3. 版本控制项目 Rules
# 将项目 Rules 纳入 Git 管理
git add .claude/rules/
git commit -m "docs: update coding standards"
4. 团队共享
# 团队共享 Rules
# 放在项目的 .claude/rules/ 目录下
# 个人偏好
# 放在 ~/.claude/rules/ 目录下
小结
关键要点
- ✅ CLAUDE.md 适合简单场景,Rules 文件夹适合复杂规范
- ✅ 模块化组织 Rules,便于维护
- ✅ Memory Hooks 实现跨会话持久化
- ✅ Dynamic System Prompt Injection 提供灵活上下文
- ✅ continuous-learning 自动积累经验
系列导航:
- ← 上一篇:教程 6:MCP 配置与上下文管理
- → 下一篇:教程 8:Plugins - 扩展 Claude Code 能力
- 返回:教程系列索引