资讯动态

Claude Code配置体系全解析:settings.json、CLAUDE.md与memory协同指南

发布时间:2026/10/8 16:32:49 来源:尧图企业网站定制
很多朋友装上 Claude Code 之后第一反应是“这不就是个能跑终端的聊天框吗”用两天就开始嫌弃它“记不住事”“总得重复交代”“动不动就乱改代码”。其实 Claude Code 本身的能力边界远不止对话关键差别就在三套配置上settings.json、CLAUDE.md和memory。这三样东西各管一摊配合好了Claude 就是一个真正“懂你项目”的老同事配不好它就是个记忆力只有几轮对话的临时工。这篇文章我就把这三大配置体系彻底拆开从职责边界到落地写法再到调试排错一次讲清楚。这篇内容适合所有已经在用或准备用 Claude Code 做实际项目开发的人不管你是刚装好的新手还是已经被权限弹窗烦到不行的老手都应该花十分钟把配置体系捋一遍。我自己在几个不同规模的项目里反复调过这些配置踩过不少坑下面这些都是实测经验和逐步排查的思路可以直接照着抄。1. 配置体系的全局视图settings.json、CLAUDE.md、memory 各管哪一块先说结论settings.json管的是“Claude Code 这个程序怎么运行”CLAUDE.md管的是“Claude 在某个项目里该遵守什么规则”memory管的是“Claude 跨会话该记住哪些关于这个项目的事”。三个东西职责边界清晰但很多人一开始都会搞混最常见的问题是往CLAUDE.md里塞环境变量或者往settings.json里写项目背景说明——配置完 Claude 根本不买账。1.1 为什么需要三套配置而不是一套Claude Code 的工作场景其实是分层的。第一层是工具本身的运行环境比如用哪个模型、API 密钥怎么读、哪些操作需要弹窗确认这些属于“运行时”问题跟项目内容无关。第二层是项目背景比如这个仓库的技术栈、代码规范、目录结构、常用命令这些是“项目知识”换个项目就完全不一样。第三层是会话之间的短期项目状态比如“昨天刚把登录模块重构完下一步是写单元测试”“数据库迁移脚本还没跑”这些是“动态记忆”既不属于全局配置也不适合写进固定的规则文档。三套配置对应这三个层次settings.json管运行CLAUDE.md管规则memory管状态。理解了这个分层后面所有配置决策都清晰了。凡是跟“程序行为”有关的去settings.json凡是跟“这个项目是什么样的”有关的去CLAUDE.md凡是“最近改到哪了、下一步干什么”的交给memory。1.2 三套配置的加载方式与优先级不同配置的加载时机和优先级直接影响你能不能“覆盖”某些行为。settings.json是分层合并的有用户级~/.claude/settings.json和项目级项目根目录.claude/settings.json项目级会覆盖用户级的同名配置但数组类配置比如permissions.allow会做合并而不是替换。CLAUDE.md也是分层的Claude Code 启动时会自动读取项目根目录的CLAUDE.md以及~/.claude/CLAUDE.md用户级规则还有子目录级CLAUDE.md会在进入对应目录时被追加加载。memory则不同它是通过工具调用写入磁盘的Claude 可以主动读取和更新更像是一个动态数据库。这个加载机制有一个很实用的推论全局规则写在~/.claude/CLAUDE.md比如“所有代码提交信息用英文写”“不要主动修改 package-lock.json”普通项目直接继承特殊项目在根目录CLAUDE.md里覆盖或补充。settings.json同理全局的禁止项放用户级某台机器、某个项目的特殊权限放项目级。1.3 配置文件的存放位置与命名规则很多人找不到配置文件是因为不知道路径。settings.json不会自动生成需要手动创建。用户级目录是~/.claude/项目级目录是项目根目录下的.claude/两个目录结构一样都是放settings.json。CLAUDE.md则直接放在项目根目录以及~/.claude/下作为全局规则不需要建.claude目录。memory相关文件一般在~/.claude/下的内存目录中或者项目内.claude/下的 memory 子目录具体路径不同版本略有差异但基本遵循“项目级优先、用户级兜底”的原则。我建议第一次配置时把三个文件的位置先确认好用ls -la看一眼你的项目根目录和用户目录心里有数再动手别凭空猜路径。2. settings.json从权限开关到模型路由的“运行时中枢”settings.json是整个 Claude Code 里最容易被忽视但影响最大的一份配置。它不决定 Claude“知道什么”而是决定 Claude“能做什么、怎么做”。用得好它可以帮你省掉 90% 的确认弹窗配得不好你会在授权提示上点到手抽筋或者反过来让 Claude 在关键操作上失控。2.1 权限系统allow、deny、ask 三张名单的逻辑settings.json里最核心的就是permissions字段它决定了哪些操作不需要问、哪些直接禁止、哪些要弹窗确认。我的建议是把那些高频且安全的操作写进allow比如读写文件、运行npm run lint把有副作用或不可逆的操作写进ask比如删除文件、执行数据库变更把绝对不允许的操作写进deny比如推送生产分支。下面是一个经过实战调整的示例{ permissions: { allow: [ Read, Glob, Grep, Write, Edit, RunTerminalCommand, LS, WebFetch ], ask: [ Bash(npm run lint), Bash(rm -rf node_modules), Bash(git push origin main), Bash(npx prisma migrate deploy) ], deny: [ Bash(git push origin production), Bash(sudo *) ] }, model: sonnet, env: { ANTHROPIC_API_KEY: your-key-here } }注意一个细节allow里我写的是Read、Write这种抽象操作名而ask和deny里写的是Bash(具体命令)这是 Claude Code 权限匹配的两种粒度。抽象工具名适合放allow因为它们本身是安全的命令级别的规则适合放ask和deny因为你需要对具体高危操作做约束。2.2 模型路由default、sonnet、opus 的选择与切换model字段控制 Claude Code 默认使用哪个模型。不同模型在速度和代码质量上有明显差异日常文件读写、重构、写测试用sonnet性价比最高复杂架构推演、跨文件大范围改动可以切到opus轻量问答或简单脚本用haiku也够。实际使用中我习惯把默认设成sonnet遇到特别烧脑的任务再用Claude Code里的模型切换命令临时调成opus不在配置文件里写死。另外很多人在热搜词里关心“接入 DeepSeek 或其他第三方模型”这确实可以通过settings.json的env或者环境变量来配置 API 端点。做法是把ANTHROPIC_BASE_URL指向第三方兼容网关然后把 API key 换成第三方服务的 key。不同版本对第三方模型的支持程度不一样注意两点一是确认你用的 Claude Code 版本支持自定义 base URL二是确认第三方服务的是 Anthropic 兼容接口否则请求格式对不上会直接报错。2.3 hooks 与状态栏把流程自动化写进配置settings.json还有一个容易被忽略的高级功能hooks。它可以监听 Claude Code 的生命周期事件比如会话开始、每次工具调用前、AI 回复完成后然后执行外部脚本。这个能力特别适合做工程化落地比如每次工具调用前自动拉取最新代码、每次回复后自动跑一遍类型检查。我见过一个团队用hooks把所有确认弹窗都接入了企业审批流高危命令全部走内部工单系统这个玩法比单纯在终端里弹确认要正规得多。状态栏statusLine则用来定制终端底部那条状态信息可以写脚本把分支名、待办数量、最近错误输出来用起来非常舒服。问题排查时最重要的手段是用命令查当前生效的配置。启动 Claude Code 后直接输入配置查看命令或者直接打开文件看原始内容。要区分“用户级生效了但项目级覆盖了”“JSON 格式写错导致整个文件没被加载”“数组配置合并还是替换”这几种情况。我排查的时候第一件事永远是看 JSON 有没有尾逗号这个错误能吃掉一整份配置而且不会报错特别隐蔽。3. CLAUDE.md让 Claude 真正理解项目的“规则书”如果你只打算配一个文件那就配CLAUDE.md。它相当于给 Claude 的项目私人说明书Claude 会在每次会话开始时主动读取它并按照里面的规则行事。很多人跟我说“Claude 不懂我的项目”八成是根目录下根本没有CLAUDE.md或者写得太空。3.1 CLAUDE.md 的自动读取机制与层级Claude Code 启动后会自动读取多个层级的CLAUDE.md用户级~/.claude/CLAUDE.md提供全局规则项目根目录的CLAUDE.md提供项目主规则子目录里的CLAUDE.md会在 Claude 进入对应子目录时被追加加载。这个设计很优雅它允许你把通用约定放上层把模块专属约定放下层。比如根目录CLAUDE.md写“单元测试用 vitest”packages/auth/CLAUDE.md写“这个包的测试需要 mock 外部 API”各管各的互不干扰。需要注意的是虽然调用时 Claude Code 会把这些文件内容作为上下文注入但CLAUDE.md本身不会“实时监控”代码变化。它是静态规则适合写不变的内容动态进度不要往里放。3.2 一份高质量 CLAUDE.md 应该包含什么我的经验是一份能真正提升效率的CLAUDE.md至少要覆盖五块内容项目概述、技术栈与架构、常用命令、代码规范、关键注意事项。项目概述一两句话讲清这个项目是干嘛的Claude 遇到模糊需求时有个判断基准技术栈部分直接列框架、语言、包管理器避免 Claude 用错工具链常用命令给全测试、构建、lint、迁移代码规范是 Claude 代码风格的重要来源关键注意事项则是踩坑警告比如“这个仓库禁止直接改生成器产物”“上传文件必须校验 MIME 类型”。下面是我某个后端项目的真实CLAUDE.md节选# Project: Order API Service ## 项目概述 订单服务负责订单创建、支付回调、超时取消。依赖 Redis 与 PostgreSQL消息队列用的是 RabbitMQ。 ## 技术栈 - Node.js 20 TypeScript - NestJS 10 - Prisma ORM - PostgreSQL 15 - Redis 7 ## 常用命令 - 启动开发服务: npm run start:dev - 测试: npm test - 覆盖率: npm run test:cov - 数据库迁移: npm run migrate - 代码规范检查: npm run lint ## 代码规范 - 目录按 feature 组织禁止按 type 组织 - 控制器层只做参数校验和响应转换业务逻辑必须放 service - 异步操作一律使用 async/await禁止裸 promise.then - 注释不用解释“做了什么”要解释“为什么这么做” ## 关键注意事项 - 支付回调接口必须做幂等key 用 orderId eventType - 禁止直接修改 Prisma schema 产物改 schema 后必须跑迁移 - 连接数据库的密码永远不要写进代码用环境变量注入 - 测试数据库与开发数据库分离测试跑完后必须清理数据这样的文件一放Claude 在生成代码时的行为立刻会收敛很多。它不会再用fs.promises.writeFile去写一些莫名其妙的路径也不会给你生成一个按 type 组织的目录结构。3.3 写作 CLAUDE.md 的常见错误与正确姿势最容易犯的错是“什么都往里塞”。有人把整个项目的 API 文档、数据库表结构、几百行说明全丢进CLAUDE.md结果 Claude 的上下文窗口被大量占满反而忽略了真正重要的规则。CLAUDE.md应该短而精核心信息放最前面详细文档用链接给出而不是全文复制。第二个常见错误是只写“不要做什么”。Claude 是需要正反馈的单纯一堆否定句会让它畏首畏尾。适当用肯定句告诉它优先方案比如“遇到图片处理优先用 sharp不要自己手写缩放算法”比只写“不要用 jimp”要管用得多。第三个坑是写完不验证。很多人在项目里复制了一份模板就当完成任务根本没检查 Claude 是否真的理解。判断方法很简单新开一个会话问 Claude “我们这个项目用什么做数据库迁移”如果它答得干净利落说明CLAUDE.md生效了如果它开始瞎猜回去检查文件方向、层级和内容。4. memory 机制跨会话记得住的“项目便签”memory是 Claude Code 里最像人脑记忆的部分。它让 Claude 能把当前会话中获取到的重要信息比如“用户说这个仓库马上要迁移到 pnpm”或“支付模块的回调地址已变”持久化到磁盘下一次会话里再读出来。没有这套机制Claude 每次都是“第一天的实习生”有了它Claude 才真正开始积累项目上下文。4.1 memory 的存储位置与实际工作方式不同版本的 Claude Code 对 memory 的目录命名略有差异但工作逻辑一致Claude 通过工具调用将关键信息整理后写入一个文本文件路径通常在用户级目录或项目目录的.claude/下文件名可能是memory.md或按日期/主题划分的多个文件。如果版本支持目录化记忆Claude 会在需要时读取对应文件并在会话过程中更新其中的条目。这种设计的妙处在于memory 是“增量写入”的。Claude 不会在每次会话时把整份记忆全部加载进来而是根据需要读某个具体文件比如你正在改支付模块它就去读memory/payment-context.md不会把登录模块的记忆也一起念一遍上下文效率要高很多。4.2 哪些信息应该进入 memory判断信息值不值得进 memory标准很简单如果下次会话你希望 Claude 不用你开口就知道这件事那就值得写进去。比如项目当前处于哪个阶段、最近一次大改动的结论、待办清单、用户偏好“测试时用 mock 数据别连真实支付网关”、团队特有的约定“提交信息必须带 JIRA 单号”。我建议保持每个 memory 文件的短小控制在二三十行内持续增长时按主题拆文件。如果某个文件越来越像日志说明该做整理了。用表格对照一下三类信息的归属信息类型示例应该放哪里全局行为偏好“回复尽量用中文”“不要主动改 lock 文件”~/.claude/CLAUDE.md项目静态规则技术栈、目录规范、测试命令项目根目录CLAUDE.md项目动态状态“用户模块重构到一半下一轮做鉴权”memory 目录4.3 memory 与 CLAUDE.md 的分工与联动CLAUDE.md是“宪法”memory是“工作日志”。宪法不容易改写进去的是长期有效的规则工作日志可以天天更新记录的是短期状态。把动态进度写进CLAUDE.md是很多人常犯的错文件里塞了一大堆“某某功能已完成”“某 Bug 已修复”之类的过期信息既不更新也不清理最后 Claude 全靠猜哪个是当前的。联动的方式是建立一个更新 memory 的机制在关键节点把 CLAUDE.md 中可能需要变更的规则同步过去。比如项目从 npm 切到 pnpm 后这条偏好在工作日志里出现几次确认稳定后升级进CLAUDE.md再把工作日志里的对应条目删掉。这个“临时记忆转长期规则”的过程逻辑上和人类实习生转正挺像的。5. 三大配置协同真实项目落地顺序与验证方法看完单个配置的细节下一步就是把它们串联起来。这里我直接给一个可复制的落地顺序和验证清单适合新项目开荒或老项目改造。5.1 从零到一的推荐配置顺序不要一上来就写一堆配置。我的顺序是先settings.json建运行环境再CLAUDE.md定规则最后memory跑起来自然沉淀。具体步骤先创建用户级目录和项目级目录在项目级settings.json里设置model和权限然后在项目根目录写一份精简的CLAUDE.md只包含技术栈、常用命令、代码规范三块启动一个会话让 Claude 先跑一遍项目测试确认它能正确执行命令再让它读代码总结模块结构把心得写进 memory。这个顺序的核心思路是先让工具稳定再让规则生效最后让记忆闭环。一上来就把几十条规则压在 Claude 身上反而容易让它判断“哪条更重要”。5.2 多分支多任务场景下的上下文管理实际工作中你不会只有一条任务线。这边修着 Bug那边要加功能Claude 的记忆如果只有一个文件很容易前后矛盾。我的做法是按特性分支或功能模块拆 memory 文件比如memory/login-refactor.md、memory/payment-fix.md每次只在工作目录里指明当前焦点。对应地在CLAUDE.md里增加一条规则“项目当前有多个进行中的任务时先查 memory 目录确认最相关上下文”。如果用的是支持子目录独立 Claude Code 实例的工作流每个子任务开一个会话并在那个目录里配置自己的CLAUDE.md和 memory效果会更好。但这也要控制粒度开太多会话会让维护成本陡增。5.3 验证配置是否生效的三个快速检查配置完别急着写代码花两分钟做三个检查。第一新开会话直接问“这个项目的测试命令是什么”如果你在CLAUDE.md里写过它答不上来就说明配置没被加载。第二故意问“当前登录模块的进度怎么样”看它答的是凭空瞎猜还是引用 memory 里的实际内容。第三触发一个属于deny的高危命令确认 Claude 会拒绝而不是直接执行。这三步能兜住 90% 的配置错误。另外一个偷懒但有效的技巧在大改配置后输入 Claude Code 的诊断或配置检查命令把输出和预期对比一下比读文档快得多。6. 常见配置坑与逐步排查链路配置体系的坑多数不是不会写而是“写了但没生效”“生效了但不是预期的效果”。我按踩坑频率排个序给出一套排查链路。6.1 配置不生效的排查链路最典型的场景是我在CLAUDE.md里明明写了“禁止使用 console.log 提交代码”但 Claude 还是生成了一堆console.log。第一步先检查文件位置。项目根目录的CLAUDE.md必须和.git同级放错文件夹就不会被读到。第二步检查是不是被覆盖了。如果子目录也有CLAUDE.md且内容与根目录冲突子目录会追加加载但如果有“更新”类指令后加载的规则可能改变 Claude 的判断。第三步检查内容格式。CLAUDE.md里不要用特殊标记用普通 Markdown 的大标题和小节就够了。第四步新开会话验证老会话不会实时重新加载文件。第五步查是否被用户级或项目级规则里的更高优先级项覆盖。6.2 权限误判与“授权风暴”权限配置太激进时Claude 每做一步都在弹窗这就是“授权风暴”。原因通常是allow列表太短或deny列表里误伤了正常命令。我见过有人把Bash(npm *)全 deny 了结果连npm test都跑不了只能手动放行。排查方法是打开权限日志或观察弹窗看高频拦截的操作是什么然后把确有必要的加进allow。反过来如果某个命令被静默拒绝先看是不是被deny规则匹配了并且确认匹配的是否是精确模式。6.3 与 VS Code 插件、第三方模型接口的组合坑Claude Code 官方有 VS Code 插件很多人装完之后在编辑器里配置结果发现有些配置在插件环境下和终端环境下行为不同。插件通常会复用同一个用户级settings.json但项目级配置和终端的工作目录有关系如果编辑器打开的是项目子目录加载的settings.json和CLAUDE.md就可能是子目录那一份。接入第三方模型时的坑更多。换ANTHROPIC_BASE_URL后如果第三方网关不完全兼容 Anthropic 协议Claude Code 可能会在流式输出、工具调用上出一些奇怪的问题表现为“能聊天但不会执行工具”。排查时先不接第三方确认原生配置能工作再逐步换 API 地址一步一验。还有一个每个人都该知道的原则改完配置后不要复用旧会话测试。Claude Code 的会话一旦启动配置文件变化不一定能实时同步所有配置验证都请新开会话。另外每次升级 Claude Code 版本后建议把重点配置检查一遍特别是权限字段和 hooks 相关配置因为新版本偶尔会引入兼容性变化。尤其是那些通过自主升级功能自动跳到新版的情况更容易踩中“配置变了但没想到”的坑。我自己实际操作的体会是配置体系的建立不是一次性的项目而是一个持续演进的过程。每次被 Claude 的行为惊到第一反应不应该是抱怨模型笨而是去查是不是规则没写到、记忆没更新或者权限没给对。当你把settings.json的权限、CLAUDE.md的规则、memory的动态状态都理清之后Claude Code 才算是真正从一个“能聊天的终端”变成了一个“能干活的项目成员”。最后再分享一个小技巧定期清理 memory 文件里的过期条目和清理自己的桌面一样效率提升肉眼可见。配置系统不怕小就怕乱控制在能维护的规模内比什么都强。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑