返回

Everything Claude Code 教程 7:Rules 与 Memory - 持久化你的开发规范

本文详解 Everything Claude Code 的 Rules 和 Memory 系统,包含持久化开发规范、会话恢复和持续学习机制。

教程概述

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 自动积累经验

系列导航