ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code三大配置体系:settings.json、CLAUDE.md与memory实战指南

Claude Code三大配置体系:settings.json、CLAUDE.md与memory实战指南 最近不少搞 AI 编程的朋友都在折腾 Claude Code但很多人装完跑通一个 demo 之后就开始迷茫——同样一个工具别人用来写需求、改 bug、做重构效率高得离谱自己用起来却总觉得它“智商掉线”动不动就误解意图、乱改代码、忘记上下文。其实问题大多不在模型能力而在于这三个核心配置体系你根本没吃透settings.json、CLAUDE.md、memory。这篇就把这三套配置系统从结构、原理到实操彻底捋一遍顺便把我踩过的坑和实测下来的优化方案一并交代清楚。无论你是刚跟着教程装完 Claude Code、想接入 DeepSeek/Qwen/GLM 等第三方模型还是已经用了几天但感觉不顺手的老手这篇应该都能让你少走不少弯路。1. 三大配置体系的分工与边界1.1 到底是什么让 Claude Code 变得“好用”很多人把 Claude Code 当成一个“封装好的终端版 Claude”但其实它更像一个高度可编程的 Agent 运行时。它真正强大的地方是允许你通过配置文件给它设定一套完整的“工作习惯”——从能不能执行某个命令、使用哪个模型、上下文长度多少到项目背景、编码规范、规避事项再到跨会话的记忆沉淀全都可以预先定义好。这三套配置系统就是我标题里写的三大体系settings.json管的是“权限和运行时参数”CLAUDE.md管的是“人格、规范和执行指引”memory则管的是“记忆的持久化和召回”。三者各管一摊又互相配合任意一个没配好体验都会打折扣。我用一个生活化的类比帮你理解settings.json是遥控器控制当前设备能用哪些功能、音量多大、要不要开节能模式CLAUDE.md是说明书和作业指导书告诉你应该按什么流程做事、有哪些禁忌memory则是便利贴和项目笔记让你今天记住的事情明天重新打开项目时它还能想起来。1.2 三份配置的功能对比为了方便后面展开我先把它们的核心差异列出来你在配置的时候可以对照着心里有个数配置项文件位置示例作用范围核心职责加载时机settings.json~/.claude/settings.json用户级、.claude/settings.json项目级当前用户 / 当前项目权限规则、模型参数、环境变量、输出行为每次会话启动时静态加载CLAUDE.md./CLAUDE.md项目级、~/.claude/CLAUDE.md用户级当前项目 / 所有项目项目背景、编码规范、命令约定、执行指南每次请求时动态注入到上下文memory~/.claude/CLAUDE.md内的memory区域及项目级.claude/CLAUDE.md的对应区域全局 / 当前项目跨会话记忆、经验沉淀、约定记录根据相关性选择加载最近多条这里有个容易忽略的点memory在底层存储上往往依附于CLAUDE.md文件里的特定标记区域但在加载逻辑上又是一套独立机制。所以千万不要把“手动写进 CLAUDE.md 的内容”直接等同于“会被自动记住的 memory”。前者是静态规则后者是动态积累各有各的读取策略。2. settings.json控制权限与运行时的“开关面板”2.1 配置文件放哪里层级与加载规则先说最基本的问题——文件放哪。settings.json分散在两个层级用户级~/.claude/settings.json影响你在这台机器上所有项目里的 Claude Code 行为项目级.claude/settings.json只作用于当前项目目录覆盖用户级里的同名配置项。两者的关系是“后者覆盖前者”的合并逻辑。比如你在用户级里设置了model: opus但项目级里设了model: sonnet那么这个项目里实际生效的就是 sonnet。我个人习惯是用户级只放通用内容比如默认模型、少量全局权限、网络代理参数项目级再放针对当前仓库的权限和专用环境变量。这样换项目时不会把一堆无关的权限带过去减少出错概率。还有一个容易踩的坑如果你用 VSCode 插件的方式接入 Claude Code插件有自己的一套配置入口但它本质上读写的是同一份settings.json。不要同时在两处改同一个参数我遇到过插件配置和手改文件互相覆盖最终跑起来完全不是预期行为的情况。2.2 核心配置项权限、环境变量、模型参数settings.json里最常用的就是permissions、env、model这三大块。权限控制permissions是决定 Claude Code 能不能帮你“干活”的关键。默认情况下工具会要求你逐条确认 bash 命令、文件读写等敏感操作你可以通过allow、deny、ask三个列表来精确控制{ permissions: { allow: [ Bash(npm run build), Read(.env), Write(.gitignore) ], deny: [ Read(~/.ssh/id_rsa), Bash(git push --force) ], ask: [ Bash(rm:*), Write(src/**) ] } }解释一下逻辑allow里的规则直接放行deny里的规则直接拒绝ask里的规则每次都要弹确认。Bash(npm run build)这种写法是“精确匹配”能匹配完整的命令字符串你也可以用Bash(git:*)这类通配符匹配某个命令族。我要特别提醒deny不是摆设。Claude Code 在帮你处理问题时有可能会尝试读取它觉得“有用”的文件比如本机 SSH 私钥、云厂商凭证。这些敏感文件必须在 deny 里明确禁止读取。我在实际使用中就算项目要求它读取配置也会用环境变量替代尽量不让私钥类文件直接暴露给 agent。环境变量env这块主要用于让 Claude Code 使用第三方的兼容 API。这里把社区里最常用的配置方式直接给你{ env: { ANTHROPIC_BASE_URL: https://api.deepseek.com/anthropic, ANTHROPIC_AUTH_TOKEN: 你的token, ANTHROPIC_MODEL: deepseek-chat, ANTHROPIC_SMALL_FAST_MODEL: deepseek-chat } }如果你接入的是支持 Anthropic 协议格式的第三方网关很多模型服务商现在都提供这种兼容端点这个配置基本通用。网上流传的“claude code接入deepseek/qwen/glm”教程其底层就是通过改这几个环境变量实现的。注意ANTHROPIC_MODEL控制主模型ANTHROPIC_SMALL_FAST_MODEL控制后台快速任务比如生成标题、摘要等用的轻量模型。两个最好都设置否则一些后台小任务仍会请求默认模型导致报错。模型参数model除了环境变量也可以在settings.json里直接指定{ model: sonnet, maxTokens: 8192 }maxTokens控制单次回复的最大 token 数会影响长代码生成和长文档输出的质量。我实测下来写长文件时把它调高一些比默认值更不容易出现“写到一半就断掉”的情况。当然也有代价——响应更慢、消耗更大需要自己权衡。2.3 三种编辑姿势命令、手改文件、VSCode 插件配置settings.json有三种姿势各有适用场景命令行claude config适合快速修改个别参数。它会引导式地让你选择修改范围用户级还是项目级和参数项不用记文件路径。适合改模型、改权限这类高频操作。手改 JSON 文件适合批量修改和精确控制。我一般直接把整个文件拖到编辑器里改改完保存后重开一个 Claude Code 会话即可生效。注意 JSON 格式很容易出错少个逗号就整个不加载建议改完用编辑器的格式化功能检查一遍。VSCode 插件配置面板适合不熟悉 JSON 的读者。插件会在设置界面提供可视化选项但本质上还是写回同一个文件。用面板改完再去手写文件容易遇到互相覆盖我个人主推手改文件。有一点要说清楚修改settings.json后新会话会立即生效但当前已打开的会话不一定会热加载。我在实践中最稳妥的做法是改完配置直接退出当前会话重开避免“明明改了怎么没生效”的困惑。3. CLAUDE.md给 Claude Code 立规矩的核心3.1 CLAUDE.md 到底是什么为什么它比提示词更关键如果你的 Claude Code 用起来像“每次都在和一个新同事聊天”那是因为它每次新的会话开始时都不会记得上一个会话里你交代过的事情——除非你把规则写进了CLAUDE.md。这个文件可以理解为“给 Agent 的入职手册”每次对话启动时Claude Code 都会把相关范围的CLAUDE.md内容注入上下文相当于让 AI 先“读一遍你的团队文档再开始工作”。它有三级作用范围用户级~/.claude/CLAUDE.md适用于你这台机器上所有项目适合放个人编码偏好、通用工具链说明项目级./CLAUDE.md适用于当前仓库放项目架构、启动命令、测试约定、代码风格目录级./子目录/CLAUDE.md适用于某个子目录适合放模块级说明比如某个服务的接口约定。我见过不少人的 Claude Code 表现不稳定一会儿好使一会儿不好使查了半天发现就是项目里根本没有CLAUDE.md所有背景全靠每次对话临时敲。你想想每次新会话里 AI 对你的项目一无所知你还要重新组织语言解释背景它理解得能准吗3.2 一份好的 CLAUDE.md 应该写什么很多人以为CLAUDE.md就是写“你是我的 AI 助手请帮我写代码”——这是最大的误解。它不是一段空泛的人设提示词而是项目运行手册。我的推荐结构是这样的项目概览这个项目是干什么的、主要技术栈、目录结构大致划分常用命令启动、测试、构建、格式化的具体命令以及包管理器选择npm/yarn/pnpm 别混用架构约定核心模块划分、数据流方向、关键设计决策代码风格缩进、命名、组件写法、注释习惯禁止事项某些操作严禁执行比如不要直接改数据库数据、某些目录不能动常见任务清单标注“如果要做 X请按 Y 步骤执行”。一个实际的例子# 项目电商后台管理系统 ## 技术栈 - 前端Vue 3 TypeScript Vite - 后端Node.js Express PostgreSQL - 包管理pnpm不要使用 npm 或 yarn ## 常用命令 - 开发启动pnpm dev - 构建pnpm build - 测试pnpm test - 数据库迁移pnpm db:migrate ## 目录结构 - src/api接口调用层禁止直接写业务逻辑 - src/views页面组件只做组合与展示 - src/store状态管理只有这里可以修改全局状态 ## 风格约定 - 组件命名使用 PascalCase - 接口函数使用 camelCase统一 axios 实例 - 所有用户输入必须做 schema 校验禁止直接信任前端数据 ## 禁止事项 - 禁止执行 pnpm db:reset会清空生产数据库 - 禁止修改 migrations 目录中已执行过的迁移文件写清楚这些Claude Code 在帮你加功能、改 bug 时就不会出现“用了 npm 装包导致 lockfile 错乱”“把业务逻辑写进了 api 层”“直接 SQL 改生产库”这类低级但破坏力极大的事故。3.3 写 CLAUDE.md 的三条铁律基于我的实际经验写 CLAUDE.md 有几个容易翻车的地方必须注意第一别写太长控制在 1~2 屏能看完。项目级 CLAUDE.md 如果事无巨细会把宝贵的上下文窗口吃掉一大块。AI 每次请求都要携带这份文件内容越臃肿响应越慢理解准确率反而越低。我见过有人把项目里所有文件都列进去写得像目录树结果 AI 反而抓不住重点。记住只写“必须知道”的不写“知道也行”的。第二重要内容放最前面。Claude Code 对 CLAUDE.md 的注入顺序有讲究越靠前的内容在注意力机制里权重越高。禁止事项、核心命令、架构红线放最前面补充说明、参考信息放后面。第三一份文件只服务一个目的。用户级和项目级别混写。比如你项目里要用 pnpm但用户级 CLAUDE.md 里写了“所有项目统一用 npm”项目级就会被覆盖掉导致 AI 行为不符合预期。越具体的规则优先级越高层级越低越具体。4. memory 体系跨会话记忆的机制与坑4.1 memory 到底存在哪里加载和写入怎么运作聊完静态的 CLAUDE.md再来说说动态的 memory 体系。这是很多人最没搞懂的一部分也是决定 Claude Code“有没有记性”的关键。Claude Code 的 memory 机制本质上是在CLAUDE.md文件中划出一块区域专门用来存放“随着使用自动沉淀的经验和约定”。具体来说你打开~/.claude/CLAUDE.md会看到里面可能有这样的结构# Claude Code 用户级规则 你手写的通用规则…… memory - 2025-06-12: 用户偏好用 pnpm 管理依赖 - 2025-06-15: 用户的项目中统一使用 dayjs 而非 moment /memory这里的memory区域就是自动记忆的存储位置。Claude Code 在会话进行中如果发现某些信息值得长期保留比如你纠正过它的某个处理方式、某个项目的技术栈偏好、某个明确的操作禁忌它会在合适的时机把内容追加到这个区域。在读取方面Claude Code 不是把所有 memory 一次性全注入上下文而是根据相关性召回每次构建请求时它会从 memory 里挑出最相关的若干条连同 CLAUDE.md 的常规规则一起塞给模型。项目级和用户级分别有自己的 memory 区域所以跨项目不会互相污染。4.2 自动记忆的隐患记错、记旧、记岔既然是“自动”的就必然有不可控的时候。我实际用下来自动 memory 最大的三个问题记错、记旧、记岔。记错AI 有时会把推理过程中的某个假设当成既定事实写进 memory。比如你在调试时随口说“这个模块以后可能不用了”它可能记成“这个模块已废弃不要使用”。下次处理相关任务时它就会基于这个错误记忆做出错误判断。这其实就是网上那篇讨论agentpoison / memory poisoning的论文里说的情况——记忆一旦被污染后续智能体的行为就会系统地偏离正确方向。放在实际场景里你不需要等论文里的攻击者一个错误的自动记忆就足够让你的项目乱套。记旧项目演进很快今天的约定可能下周就变了。但 memory 里旧条目不会自动失效于是 AI 可能固执地用你已经淘汰的技术方案。我遇到过最典型的一次项目已经从前端直连数据库迁移到引入 API 层但 memory 里还留着“所有页面都可以直接查询数据库”的旧规则导致 AI 一顿操作猛如虎生成了一堆已经被架构上禁止的代码。记岔如果你同时开着多个项目项目级 memory 理论上不会串但用户级 memory 是共享的。用户级 memory 里如果记录了某个特定项目的命令习惯在其他项目里也可能被不恰当地应用。4.3 memory 的治理方案禁用、清理、人工审计知道了这些隐患治理方案就很清晰了。如果你不想让它自动记直接禁用即可在settings.json里设置{ autoMemory: { enabled: false } }禁用后Claude Code 不会再自动往memory区域追加内容你仍然可以手动在 CLAUDE.md 里写规则。这个开关适合那些已经重度依赖 CLAUDE.md 手动管理、且不希望 AI“自作主张”的用户。我自己的做法是默认开启但每周五下班前做一次 memory 清理打开~/.claude/CLAUDE.md和项目.claude/CLAUDE.md人工过一遍 memory 区域删掉过时的修正模糊的补上这个星期里反复纠正过 AI 的新规则。这个“每周 memory 审计”的习惯算是我用 Claude Code 半年多来控制体验下坠最有效的办法。你要是已经用了一段时间感觉 AI“开始犯低级错误”先去翻 memory多半能找到错误或不合适的记忆条目。删掉之后它的表现立刻会恢复。5. 高频问题与避坑实录5.1 安装与启动阶段的讲究装 Claude Code 本身不难核心就两步装 Node.js要求较新版本建议 LTS 以上然后执行npm install -g anthropic-ai/claude-code或通过官方脚本安装。但我在 macOS 和 Ubuntu 上都遇到过一个老坑claude命令安装完提示找不到往往是 npm 全局 bin 目录没加到 PATH。解决办法是在终端执行npm bin -g查看全局目录如果是像~/.npm-global/bin这种自定义路径把它 export 到 PATH 里再重开终端即可。另一个 macOS 上特有的坑从 App Store 或网上下载的“桌面版”其实只是套壳包装核心功能全在命令行工具里。你装的插件和命令行工具必须版本匹配我之前 VSCode 插件升级了但命令行工具还是老版本就出现过功能列表对不上、部分命令无法执行的情况。建议保持两边同时升级命令行用claude update插件在扩展商店更新。启动阶段如果提示“note: claude code might not be available in your country”属于服务商对特定地区访问限制的问题那就不展开了请确保你的使用方式符合相关服务条款和当地法规合规使用。5.2 第三方模型接入怎么配才稳很多人不想订阅官方服务想接入 DeepSeek、Qwen、GLM 这些模型。除了前面提到的环境变量方案社区里常用的还有cc-switch这类可视化切换工具它本质上也是改写settings.json里的env参数只是把多套配置做成配置模板一键切换。我实测下来有几点必须提醒API 兼容格式要选对不是所有第三方服务都直接支持 Anthropic 的/v1/messages接口。有些服务商提供 Anthropic 兼容端点可以直接用ANTHROPIC_BASE_URL指过去有些不兼容的只能通过中转层转换协议绕来绕去很容易出问题。配置前先确认服务商文档里写的是不是“Anthropic API compatible”。ANTHROPIC_AUTH_TOKEN别写到公开项目里它就是你的密钥一旦提交到 git等于裸奔。我建议把这块单独放到用户级settings.json里并且通过chmod 600限制文件读取权限。模型能力差异会影响体验第三方模型的指令遵循能力、长上下文处理能力和 Anthropic 自家模型有差异同样的 CLAUDE.md 和 memory 配置在第三方模型上未必有同样好的表现。这不是配置问题是模型本身能力问题别指望配置补能力。5.3 终端命令权限为什么它动不动就问你 y/nClaude Code 在要执行 bash 命令、读写文件时会根据permissions配置决定是放行、拒绝还是询问。新用户最常遇到的困惑是“它什么都要问效率太低”。与其每条都选允许不如在settings.json里把高频且安全的命令直接 allow 掉。比如我常配的{ permissions: { allow: [ Bash(git:*), Bash(npm:*), Bash(pnpm:*), Bash(cat:*), Bash(ls:*), Bash(grep:*), Read(**) ], deny: [ Bash(curl:*), Bash(wget:*), Bash(rm:*), Bash(sudo:*) ] } }注意Read(**)会把所有文件读取都放行需要你对项目的敏感文件有清醒认识。deny 里的 curl、wget、rm、sudo 是我从安全角度考虑设置的底线——AI 执行网络请求和危险删除操作时至少让我知道它在干嘛。还有一个细节如果你在 VSCode 插件里用 Claude Code插件的权限行为和终端里并不完全一致比如某些 GUI 操作不会走同样的权限提示。配置前建议先在终端测一遍。5.4 VSCode 联动与模型输出上限的问题VSCode 接入 Claude Code 本质是在集成终端里跑这个工具理论上配置文件完全通用。但插件会额外提供一些 GUI 能力比如文件 diff、直接查看生成的代码变更。这里有两个常见坑插件版本的配置入口可能滞后插件设置页面显示的可配置项可能不是最新版本的全部项。如果你需要配置最新特性直接编辑settings.json更可靠。maxTokens 在编辑器里表现更敏感VSCode 里长输出的渲染开销更大如果你设置过低的 maxTokens生成长篇代码时会频繁截断被误认为“AI 能力不行”。我一般至少设到 8192 以上。另外一个容易忽略的Claude Code 的“在线升级”和“插件升级”是两条线。当你发现某个命令或行为跟之前不一样时先查版本。claude --version一看便知CLI 和插件版本差距太大就一起升级到最新版。5.5 memory 异常处理速查表最后把 memory 相关的常见症状和对应解决办法整理成一张速查表症状可能原因处理方式AI 开始反复用你早就废弃的方案memory 旧条目未清理打开~/.claude/CLAUDE.md删除过时memory条目AI 对你项目的事实描述明显错误memory 写入了错误推断人工核对 memory 内容修正或删除相关条目memory 区域疯狂膨胀上下文被占满自动记忆过于积极在settings.json设autoMemory.enabled: false改为手动维护换了项目但用户级规则干扰新项目用户级 memory 污染将项目相关内容从用户级 memory 移到项目级 memory手动写了 CLAUDE.md 但完全不生效文件位置放错 / 格式问题检查文件名是否为CLAUDE.md路径是否在项目根目录编码是否为 UTF-8配置了 env 但第三方模型没生效环境变量名拼写错误核对待接入服务商文档中的变量名常见是ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL三件套写在最后配置体系是根模型是枝叶我在实际操作里最大的体会是Claude Code 的体验上限并不是由模型单方面决定的。模型就像一颗种子而settings.json、CLAUDE.md、memory这三套配置体系则是决定它能长多高的土壤、支架和肥料。有人换更强的模型后依然觉得“不过如此”也有人靠一套精心维护的配置把开源模型用得风生水起差别就在这些看似不起眼的配置文件里。给你三个我最想强调的建议第一CLAUDE.md永远不要写得像教科书要写得像项目经理的叮嘱第二memory区每周至少人工清理一次不要迷信“AI 自己会管理记忆”第三settings.json里的权限不是越宽越好安全底线要在配置阶段就想清楚而不是等出了问题才去补。把这三大体系打通你才算真正“配置好”了 Claude Code。
返回列表