二、Claude Code 核心配置详解:settings.json 与三层记忆体系
前言
当你安装好 Claude Code,兴冲冲地打开它开始编程,可能会遇到这些问题:
- 每次新会话都要重新交代项目背景,AI 像失忆了一样
- AI 总是试图执行你不希望的操作,比如删除文件、安装依赖
- 不同项目的规则混在一起,写 React 项目时它用 Python 风格
这些问题的根源是:你还没有配置 Claude Code。
Anthropic 官方反复强调一个观点:模型能力是地板,配置质量才是天花板。花时间把配置做好,比追最新模型版本更有实际收益。
本文将深入讲解 Claude Code 的两大核心配置机制:settings.json 权限配置和三层记忆体系,帮你把 Claude Code 从"能用"变成"好用"。
1. settings.json — Claude Code 的"控制面板"
1.1 什么是 settings.json?
settings.json是 Claude Code 的核心配置文件,控制着 AI 的行为边界、权限范围和功能开关。你可以把它理解为给 AI 定的"规矩"——哪些事情可以直接做,哪些事情需要问你,哪些事情绝对禁止。
1.2 配置文件的三个层级
Claude Code 设计了三级配置文件体系,从全局到项目级,层层覆盖:
↓ 优先级递增,后者覆盖前者同名配置
💡最佳实践:通用的安全规则放在全局配置中,项目特定的配置放在项目级配置中。个人偏好(如你本地的测试环境地址)放在
.local.json中。
1.3 核心配置项详解
一个典型的settings.json长这样:
{"permissions":{"allow":["Read","Write","Bash(npm *)","Bash(git *)","Bash(node *)","Bash(python *)","Bash(npx *)"],"deny":["Bash(rm -rf *)","Bash(git push --force *)","Bash(sudo *)"]},"model":"sonnet","autoCompactThreshold":80}1.3.1 权限控制(permissions)
这是最重要的配置,决定了 AI 在执行操作时是否需要问你确认:
| 权限配置 | 说明 | 示例 |
|---|---|---|
allow | 白名单,AI 可直接执行,不再弹窗确认 | "Read"— 读取文件 |
deny | 黑名单,AI 绝对禁止执行 | "Bash(rm -rf *)"— 禁止递归删除 |
| 未配置的 | 每次执行前都会弹窗询问用户 | 默认行为 |
推荐的安全配置:
{"permissions":{"allow":["Read","Write","Edit","Bash(npm *)","Bash(npx *)","Bash(git status)","Bash(git diff *)","Bash(git log *)","Bash(git add *)","Bash(git commit *)","Bash(ls *)","Bash(cat *)","Bash(find *)","Bash(grep *)"],"deny":["Bash(rm -rf *)","Bash(git push --force *)","Bash(git reset --hard *)","Bash(sudo *)","Bash(curl * | sh)","Bash(wget * | sh)"]}}⚠️安全提醒:初学者建议保持默认设置(所有操作都需确认),等熟悉了 Claude Code 的行为模式后再逐步放开白名单。
1.3.2 模型选择(model)
{"model":"sonnet"}Claude Code 支持通过别名或具体模型名切换模型:
| 模型别名 | 适用场景 | 特点 |
|---|---|---|
haiku | 简单补全、格式化、小修改 | 速度极快,成本最低 |
sonnet | 日常开发、功能实现(默认推荐) | 速度与质量最佳平衡 |
opus | 复杂架构设计、疑难 Bug、算法难题 | 推理能力最强,成本较高 |
模型选择的四种方式(优先级从高到低):
1. claude --model opus ← 启动参数(临时) 2. export ANTHROPIC_MODEL=opus ← 环境变量 3. settings.json → "model": "opus" ← 配置文件(推荐) 4. 会话中 /model 命令 ← 运行时切换1.3.3 上下文压缩阈值(autoCompactThreshold)
{"autoCompactThreshold":80}当上下文使用量达到该百分比时,Claude Code 会自动压缩对话历史为摘要,腾出空间。默认值通常为 80,意味着上下文使用 80% 时自动压缩。
💡 建议设置为 60~70,避免等到上下文快满了才压缩——那时 AI 已经开始"遗忘"早期内容,回答质量下降。
1.3.4 其他常用配置
{"env":{"ANTHROPIC_BASE_URL":"https://api.example.com","ANTHROPIC_AUTH_TOKEN":"your-api-key","HTTP_PROXY":"http://127.0.0.1:7890","HTTPS_PROXY":"http://127.0.0.1:7890","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC":"1"},"cleanupPeriodDays":30,"autoMemoryEnabled":true}| 配置项 | 说明 |
|---|---|
ANTHROPIC_BASE_URL | API 代理地址(使用第三方服务时需要) |
ANTHROPIC_AUTH_TOKEN | API 密钥 |
HTTP_PROXY/HTTPS_PROXY | 网络代理(国内用户通常需要) |
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC | 设为"1"禁用自动更新、遥测等非必要流量 |
cleanupPeriodDays | 会话记录保留天数,默认 30 天 |
autoMemoryEnabled | 自动记忆开关,默认true |
2. 三层记忆体系 — 让 AI 越用越懂你
Claude Code 的每个会话默认从全新的上下文窗口开始。为了实现跨会话的知识传递,官方设计了三层记忆体系,每一层解决不同层次的问题:
2.1 第一层:CLAUDE.md — 项目的"入职手册"
CLAUDE.md 是 Claude Code 中最重要的配置文件。它就像你给新来的实习生写的"项目入职手册"——告诉 AI 这个项目的背景、技术栈、编码规范和当前进度。
没有 CLAUDE.md:AI 每次开始工作都要花时间"重新认识"你的项目。
有了 CLAUDE.md:AI 一启动就知道项目的全部背景,效率大幅提升。
2.1.1 CLAUDE.md 的三级位置
Claude Code 为 CLAUDE.md 设计了三个层级,同时生效、不冲突:
┌─────────────────────────────────────────────────────────────┐ │ 全局级 ~/.claude/CLAUDE.md │ │ → 所有项目都会读取 │ │ → 适合写:个人偏好、回复语言、身份信息 │ │ 例如:"永远用中文回答"、"我是后端工程师" │ ├─────────────────────────────────────────────────────────────┤ │ 项目级 项目根目录/CLAUDE.md │ │ → 仅当前项目生效 │ │ → 适合写:技术栈、架构、编码规范、进度(提交 Git 团队共享) │ ├─────────────────────────────────────────────────────────────┤ │ 文件夹级 子目录/CLAUDE.md │ │ → 仅该子目录生效 │ │ → 适合写:模块专属约定 │ │ 例如:src/payment/CLAUDE.md 写支付模块踩过的坑 │ └─────────────────────────────────────────────────────────────┘ 优先级:文件夹级 > 项目级 > 全局级💡 还有两个特殊位置:
CLAUDE.local.md(项目根目录):个人项目偏好,不提交 Git- 组织级策略文件(
/Library/Application Support/ClaudeCode/CLAUDE.md):由 IT 统一管理,无法被个人排除
2.1.2 编写 CLAUDE.md
快速生成:在项目目录启动 Claude Code,输入/init,AI 会自动扫描项目并生成一份 CLAUDE.md 初稿。
手动编写模板:
# 项目名称 ## 项目概述 一句话描述这个项目做什么。 ## 技术栈 - 前端:Next.js 14 + TypeScript + Tailwind CSS - 后端:Next.js API Routes - 数据库:Prisma + PostgreSQL - 部署:Vercel ## 项目结构 src/ ├── app/ # Next.js App Router 页面 ├── components/ # React 组件 │ ├── ui/ # 通用 UI 组件 │ └── features/ # 业务组件 ├── lib/ # 工具函数 ├── prisma/ # 数据库 Schema └── types/ # TypeScript 类型定义 ## 编码规范 - 使用函数式组件 + React Hooks - 组件文件使用 PascalCase(如 UserCard.tsx) - 工具函数使用 camelCase - 所有数据库操作通过 Prisma Client - API 返回统一格式:{ success, data?, error? } ## 构建与测试 - 安装依赖:npm install - 开发模式:npm run dev - 构建:npm run build - 测试:npm test - 类型检查:npx tsc --noEmit ## 当前状态 - 用户认证模块已完成 - 商品列表 API 开发中 - 搜索功能待开发 ## 注意事项 - .env 文件包含敏感信息,不要提交到 Git - prisma/dev.db 是本地数据库,不提交 - 所有新功能先创建 Git 分支再开发编写原则:
| 原则 | 说明 |
|---|---|
| 保持简洁 | 控制在 200 行以内,过长会消耗过多上下文 |
| 足够具体 | 写"使用 2 空格缩进"而不是"正确格式化代码" |
| 写明禁忌 | 把"不要做什么"也写清楚 |
| 保持更新 | 项目加了功能、踩了坑,及时同步更新 |
| 避免冲突 | 不同文件中的规则不要互相矛盾 |
进阶用法 — 导入外部文件:
CLAUDE.md 支持@path/to/file语法导入其他文件:
有关项目概述,请参阅 @README.md 有关可用命令,请参阅 @package.json ## 额外规范 - Git 工作流参见 @docs/git-workflow.md - API 设计参见 @docs/api-design.md2.1.3 使用 .claude/rules/ 组织规则
对于大型项目,可以将指令拆分为多个独立文件:
项目根目录/ └── .claude/ └── rules/ ├── testing.md # 测试规范 ├── api-design.md # API 设计规范 ├── security.md # 安全规范 └── frontend/ ├── components.md # 组件开发规范 └── styling.md # 样式规范路径范围规则(按需加载,节省上下文):
---paths:-"src/api/**/*.ts"---# API 开发规则-所有 API 端点必须包括输入验证-使用标准错误响应格式-包含 OpenAPI 文档注释这样配置的规则,只有在 Claude 处理src/api/下的 TypeScript 文件时才会加载。
2.2 第二层:Auto Memory — AI 的"工作笔记本"
如果说 CLAUDE.md 是你主动立下的规矩,那 Auto Memory 就是AI 在干活过程中默默记下的设计笔记。
2.2.1 工作原理
Auto Memory 让 Claude 从日常交互中自动积累知识,无需手动配置:
你与 Claude Code 对话 │ ▼ ┌──────────────────┐ │ 后台分析对话内容 │ │ 提取有价值的信息 │ └────────┬─────────┘ │ ▼ ┌─────────────────────────────────────┐ │ 自动记忆存储 │ │ │ │ ~/.claude/projects/<project>/ │ │ memory/ │ │ ├── MEMORY.md ← 核心索引 │ │ ├── debugging.md ← 调试笔记 │ │ ├── api-conventions.md ← API 决策 │ │ └── ... │ └─────────────────────────────────────┘加载机制:
- 每次会话启动时,先加载
MEMORY.md的前 200 行(或 25KB)作为索引 - 遇到具体问题时,AI 按需读取对应的子文件获取详细信息
- 不会把所有记忆一次性全部塞进上下文
2.2.2 自动记忆记录什么?
| 类型 | 含义 | 示例 |
|---|---|---|
user | 关于你的信息 | 你是 Go 专家但不熟悉 React |
feedback | 你给过的工作指导 | “不要 mock 数据库”、“回复要简洁” |
project | 项目相关信息 | 进度、决策、技术选型 |
reference | 外部资源索引 | “设计文档在 docs/design.md” |
2.2.3 启用与管理
# 在 Claude Code 会话中输入/memory# 在菜单中选择"启用 Auto Memory"也可以通过配置文件控制:
{"autoMemoryEnabled":true}管理技巧:
- 用
Ctrl+O查看当前被加载的记忆内容 - 记错了直接跟 AI 说"忘掉刚才说的 XX",它会删除
- 用
/memory打开记忆文件夹,手动编辑或删除记忆文件 - 主动说"记住 XX",AI 会写入自动记忆
2.3 第三层:自建参考文档 — 专项知识按需加载
某些知识不适合全塞进 CLAUDE.md(太长、太专业),但 AI 需要时必须能查到。这就是第三层记忆的作用。
2.3.1 典型场景
docs/ ├── brand-visual.md # 品牌视觉规范:颜色、字体、间距 ├── copywriting-style.md # 产品文本风格:语调、术语表 └── api-conventions.md # API 约定:请求响应格式、错误码在 CLAUDE.md 中加上指引:
## 外部参考文档 - 修改前端视觉、调颜色、调间距时 → 必读 `docs/brand-visual.md` - 写产品文案、按钮文字、提示语时 → 必读 `docs/copywriting-style.md` - 写 API、定义返回格式时 → 必读 `docs/api-conventions.md`这样 AI 只在"需要的时候"才去读完整文档,既保证准确性,又不占多余上下文。
2.3.2 与 .claude/rules/ 的区别
| 特性 | 自建参考文档 | .claude/rules/ |
|---|---|---|
| 存放位置 | 项目任意目录 | .claude/rules/固定目录 |
| 加载方式 | 通过 CLAUDE.md 中的指引按需读取 | 可通过paths字段自动按需加载 |
| 适用场景 | 专项知识(设计规范、业务规则) | 编码规范、测试规范等技术规则 |
| 维护方式 | 手动维护 | 手动维护 |
3. 三层记忆的协作关系
三层记忆不是孤立的,它们在每次会话中协同工作:
┌─────────────────────────────────────────────────────────────┐ │ 会话启动 │ │ │ │ │ ┌────────────┼────────────────┐ │ │ ▼ ▼ ▼ │ │ 加载 CLAUDE.md 加载 MEMORY.md 等待按需调用 │ │ (全量注入) (前200行索引) (参考文档) │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌──────────────────────────────────────────┐ │ │ │ 合并到系统上下文 │ │ │ │ CLAUDE.md(明规则)+ 记忆索引(隐规则) │ │ │ └──────────────────────┬───────────────────┘ │ │ │ │ │ ▼ │ │ 开始会话交互 │ │ │ │ │ ┌───────────┼───────────┐ │ │ ▼ ▼ ▼ │ │ AI 执行任务 遇到专项知识 需要详细记忆 │ │ │ → 读参考文档 → 读记忆子文件 │ │ │ │ │ │ │ └───────────┼───────────┘ │ │ │ │ │ ▼ │ │ 会话结束 │ │ │ │ │ ▼ │ │ ┌───────────────────────┐ │ │ │ 后台分析本次对话 │ │ │ │ 提取有价值信息 │ │ │ │ 写入 Auto Memory │ │ │ └───────────────────────┘ │ └───────────────────────────────────────────────────────────────┘一句话总结:
- 第一层 CLAUDE.md:你主动写的"明规则",全量加载,优先级最高
- 第二层 Auto Memory:AI 自己记的"隐规则",按需读取,越用越懂你
- 第三层参考文档:手动维护的专项知识,AI 遇到对应任务才读
本质认知:Agent 的所有"记忆",本质上都是在合适的时候向大模型注入压缩过的上下文。三层记忆是组织这些上下文的分层策略,核心目标是在有限的上下文窗口中,最大化注入有价值的信息。
4. 实战配置清单
4.1 新手起步配置
// ~/.claude/settings.json{"permissions":{"allow":["Read"],"deny":["Bash(rm -rf *)","Bash(sudo *)"]},"model":"sonnet"}先保持最小权限,所有写操作和命令执行都需确认,逐步熟悉后再放开。
4.2 团队项目推荐配置
// 项目/.claude/settings.json{"permissions":{"allow":["Read","Write","Edit","Bash(npm *)","Bash(git status)","Bash(git diff *)","Bash(git add *)","Bash(git commit *)","Bash(npx tsc --noEmit)","Bash(npm test)"],"deny":["Bash(rm -rf *)","Bash(git push --force *)","Bash(git reset --hard *)","Bash(sudo *)"]},"model":"sonnet","autoCompactThreshold":70}4.3 快速配置流程
1. 安装 Claude Code npm install -g @anthropic-ai/claude-code 2. 全局配置 vim ~/.claude/settings.json ← 设置基础权限和模型 3. 进入项目目录 cd your-project 4. 生成项目说明 claude > /init ← 自动生成 CLAUDE.md 5. 开启自动记忆 > /memory ← 选择"启用 Auto Memory" 6. 编辑全局偏好 > /memory ← 选择"全局 CLAUDE.md" 写入个人偏好(如"永远用中文回答") 7. 开始使用 直接描述需求即可5. 常见问题
CLAUDE.md 写了但 AI 不遵守?
- 运行
/memory确认文件已被正确加载 - 检查文件是否在正确位置
- 指令写得更具体:“使用 2 空格缩进” 而非 “正确格式化”
- 检查是否有跨文件的冲突规则
上下文用完了怎么办?
| 命令 | 效果 | 适用时机 |
|---|---|---|
/compact | 压缩历史为摘要,保留关键决策 | 同一任务对话过长,还要继续 |
/clear | 彻底清空,等于重开 | 一个任务结束,开始全新任务 |
/context | 查看上下文占比和各部分占用 | 诊断什么在消耗上下文 |
💡 心法:宁可多
/clear几次重新介绍背景,也不要一直聊下去。每次/clear都是给 AI 一次重新聚焦的机会。
自动记忆记错了怎么办?
直接告诉 AI “忘掉 XX”,或者用/memory打开记忆文件夹手动删除。所有记忆文件都是纯文本 Markdown,可以直接编辑。
6. 总结
Claude Code 的配置体系可以概括为两个核心机制:
| 机制 | 解决的问题 | 核心文件 |
|---|---|---|
| settings.json | “AI 能做什么、不能做什么” | ~/.claude/settings.json |
| 三层记忆 | “AI 知道什么、该记住什么” | CLAUDE.md+ Auto Memory + 参考文档 |
settings.json控制行为边界——权限白名单让日常操作更顺畅,权限黑名单防止危险操作,模型选择平衡性能与成本。
三层记忆管理知识传递——第一层 CLAUDE.md 是全量注入的明规则,第二层 Auto Memory 是按需读取的隐规则,第三层参考文档是专项知识的按需加载。三者配合,让 AI 越用越懂你。
配置不是一次性的工作,而是持续优化的过程。随着你对 Claude Code 的使用越来越深入,不断调整权限、完善 CLAUDE.md、校准自动记忆,AI 会逐渐从一个"聪明的陌生人"变成"真正懂你的搭档"。
参考资源
官方文档
| 资源 | 链接 | 说明 |
|---|---|---|
| Claude Code 官方文档 | docs.anthropic.com/en/docs/claude-code | 完整使用文档 |
| Claude Code 记忆系统 | docs.anthropic.com/en/docs/claude-code/memory | 记忆系统官方指南 |
| Claude Code 权限管理 | docs.anthropic.com/en/docs/claude-code/permissions | 权限与安全配置 |
| Anthropic API 文档 | docs.anthropic.com | API 参考与模型说明 |
社区资源
| 资源 | 链接 | 说明 |
|---|---|---|
| Karpathy 的 Claude Skills | github.com/multica-ai/andrej-karpathy-skills | Karpathy 分享的几百行通用规则 |