news 2026/10/6 18:13:43

Claude Code配置指南:settings.json、CLAUDE.md与memory实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Claude Code配置指南:settings.json、CLAUDE.md与memory实战解析

装好 Claude Code 的那一刻,大多数人会干两件事:先跑一条命令看它动没动,然后打开配置文件想改点什么。真正决定这个工具好不好用的,往往不是模型本身多聪明,而是三个东西的搭配:settings.json、CLAUDE.md和 memory(记忆)。它们一个管权限与行为,一个管项目规则,一个管跨会话记忆,但新手特别容易混在一起——有人把整个团队的约定塞进全局配置,有人把所有项目背景写进一条提示词,有人干脆不知道 memory 该放哪,结果每次开会话,Claude Code 都像第一次见你的代码库。这篇文章就把这三套配置拆开讲清楚,顺便带上安装、VS Code 接入、第三方 API 和本地模型调用,以及我踩过的一些高频报错。适合刚接触 Claude Code 的人,也适合已经用了很久但配置全靠感觉的朋友。

1. 先把三份配置的角色分清

要配置好 Claude Code,第一步不是急着写规则,而是搞清楚这三样东西各自是干什么的。很多人的 settings.json 越改越乱,就是因为把项目说明、权限规则、长期记忆全部堆在同一个文件里,最后谁也说不清哪条规则为什么存在。

1.1 settings.json:控制“能做什么”

settings.json 解决的是“行为边界”问题。它在 Claude Code 里对应权限列表、默认模式、模型选择、环境变量注入、输出协作信息等。说白了,它管的是这个工具能不能跑某条命令、能不能改某个文件、以什么姿态运行。

这个文件是 JSON 格式,可以带注释,核心内容通常长这样:一个permissions字段放允许和拒绝的规则,一个defaultMode设置默认的权限模式,很多团队还会在里面统一指定模型和环境变量。它的好处是稳定、可复制、能被 git 管理,坏处是如果你把项目知识也写进这里,它很快就会变成一堆互相矛盾的注释。

1.2 CLAUDE.md:控制“按什么规则做”

CLAUDE.md 是给模型看的项目说明书。你可以把它理解为“新人入职手册”:“这个项目用 pnpm 不用 npm”“后端禁止直接写 SQL”“跑测试要用这条命令”。它解决的是“质量”和“一致性”问题,而不是“能不能执行”的问题。

CLAUDE.md 可以存在于多个层级:用户级、项目根目录、子目录。每个目录下都可以有自己的 CLAUDE.md,Claude Code 在进入对应目录时会自动把相关规则加载进上下文。它和 settings.json 最大的区别是:settings.json 管“手脚”,CLAUDE.md 管“脑子”。手脚不能越界,脑子需要知道规则。

1.3 memory:跨会话的“事实沉淀”

memory 解决的是“长期记忆”问题。Claude Code 本身是一个无状态工具,每次开会话默认不会记得你昨天让它怎么处理某个模块。你要是有过“上周刚交代过不要动这个文件,这周它又去动了”的经历,就是 memory 没配好。

在 Claude Code 里,memory 本质上依然是 Markdown 文件,不是数据库,也不是向量检索。它通常表现为用户级 CLAUDE.md、项目级 CLAUDE.md,以及/memory命令维护的独立记忆文件。区别在于,CLAUDE.md 偏“规则”,memory 偏“事实”。比如“代码风格是函数式”是规则,“我们已经把支付模块从 v1 迁到了 v2”是事实,前者适合放 CLAUDE.md,后者更适合沉淀为 memory。

维度settings.jsonCLAUDE.mdmemory
管什么权限和行为边界项目规则和协作规范跨会话的事实与结论
典型内容allow/deny 规则、模型、env常用命令、架构约束、风格约定迁移状态、历史决策、已知坑位
改动频率低,稳定为主中,随项目演进高,随时沉淀与清理
适合所有人共享吗适合适合需要区分,别把个人偏好全塞进团队文件

这个三角关系理清之后,后面的配置才有意义。否则你往 settings.json 里写一长串项目历史,或往 CLAUDE.md 里写一堆权限规则,只会让 Claude Code 变得又慢又笨。

2. settings.json 实战配置

settings.json 是三套体系里最容易被误解的一个。它看起来像普通 JSON,实际上一旦本地、项目、用户三个文件同时存在,生效规则就变复杂了。我见过不少人改了半天无效,最后发现是优先级没搞对。

2.1 文件位置和合并顺序

settings.json 会在这几个位置寻找:用户级~/.claude/settings.json、项目级.claude/settings.json、本地级.claude/settings.local.json。此外有些环境会把配置放到 XDG 目录或自定义路径,日常使用不必纠结,认准这三处足够。

生效顺序大致是:项目级配置和本地配置合并,本地配置覆盖项目配置,用户级配置再覆盖上面的结果。简单说就是越“私人”的配置优先级越高,越“公共”的配置越容易被覆盖。我自己的习惯是:.claude/settings.json只放团队通用规则,提交到 git;.claude/settings.local.json放个人差异,比如自己的 API 端点、实验性模型,写入.gitignore;~/.claude/settings.json放跨项目的行为偏好。

这里有个常见误区:改了 settings.json 之后不会立刻生效——所有新配置要等新开会话或重启 Claude Code 才被完整加载。你如果开着旧会话继续聊,它依然沿用旧配置。这不是 bug,是设计。

2.2 权限规则要从小白兔开始写

权限是 settings.json 里最值得花时间的部分。Claude Code 默认会拦截很多敏感操作,比如删除文件、安装依赖、执行未知命令。你可以在 settings.json 里声明允许和拒绝的工具调用,常见格式是Bash(...)、Read(...)、Edit(...)、WebFetch(...)。

我推荐一开始用最小权限白名单,而不是图省事开bypassPermissions。举个例子,允许运行测试的命令可以写成这样:

{ "permissions": { "allow": [ "Bash(npm test)", "Bash(git status)", "Read(./docs/**)", "Edit(src/**)" ], "deny": [ "Bash(rm -rf *)", "Bash(git push --force)" ] }, "defaultMode": "plan" }

defaultMode设置成plan的意思是:默认只让模型读代码、查资料、给方案,不擅自改文件。当我确认方案可行后,再手动切到acceptEdits或允许执行。这套流程看着繁琐,实际用起来反而省心,因为 Claude Code 乱改文件造成的返工成本,远比多按一次确认键高。

还有一个细节:deny 规则优先于 allow 规则。也就是说即使你允许了Bash(git *),只要 deny 里有Bash(git push --force),这条命令仍然会被拒绝。我建议把高危命令写进 deny,把日常命令写进 allow,而不是反过来。

2.3 模型、环境变量和输出风格

settings.json 里还经常放model和env字段。model用来指定默认模型标识,env用来注入环境变量,比如密钥、私有源地址等。很多人喜欢把所有环境变量塞进 shell 的.zshrc,但这样 Claude Code 的子进程不一定都能读到;在 settings.json 的env里显式声明,反而更可控。

另外还有一个小选项includeCoAuthoredBy,它会自动在提交信息附上类似Co-authored-by的名片,对团队协作和开源项目都有用,按个人偏好开启即可。还有一个经验是:临时参数尽量不写进 settings.json,直接用命令行或会话里的/model切换就好;settings.json 里只放那些你确定“下个月还用得上”的配置,否则它很快会变成垃圾场。

3. CLAUDE.md 的正确写法

CLAUDE.md 是让 Claude Code 从“能用”变成“好用”的关键。很多人写这个文件最大的问题不是不会写,而是什么都往里装,最后模型读上下文的时间比干活的时间还长。这个文件本质上是一条压缩过的规则集,必须考虑信息密度和加载成本。

3.1 分层部署,别把所有规则放在一个文件

建议把规则拆到三层:用户级、项目级、子目录级。用户级~/.claude/CLAUDE.md只放你跨项目的通用偏好,比如“回复用中文”“优先建议标准库方案”“代码要带注释”。项目根目录的CLAUDE.md放这个仓库的整体规范,比如技术栈、目录结构、测试命令、禁止事项。某个子目录下的 CLAUDE.md 只覆盖该目录特有逻辑,例如backend/CLAUDE.md写 API 设计约束,frontend/CLAUDE.md写组件规范。

这样分布的好处是:Claude Code 在子目录里工作时,加载的规则更精准,不会被无关内容干扰。如果你只有一个项目级 CLAUDE.md,却把上面三层的规则全部塞进去,模型每次都会从头到尾读一遍,浪费 token 不说,还会让它把无关规则也当成约束。

3.2 我总结的一套 CLAUDE.md 模板

直接贴一个我项目里用得比较顺的结构:

# 项目规范 ## 常用命令 - 安装依赖:pnpm install - 本地测试:pnpm vitest - 类型检查:pnpm typecheck ## 架构约束 - 新的业务逻辑放到 src/modules 下,按领域划分目录 - 数据访问必须通过 repository 层,禁止在 service 拼接 SQL - 所有枚举命名使用大写蛇形 ## 代码风格 - TypeScript 严格模式 - 组件使用函数式,不用类组件 - 异步错误统一走 Result 模式,不抛裸 Error ## 验证方式 - 提交前必须过 typecheck 和单元测试 - 修改公共接口时需要同步更新对应文档

模板不一定完全适用,但思路是固定的:让模型知道“用什么命令验证修改”“哪些事绝对不能干”“改完代码后怎样才算完”。尤其验证方式这块,很多人会忽略,导致 Claude Code 改完代码不跑测试就直接交差。你只要在 CLAUDE.md 里明确写上“每次修改代码后必须运行 pnpm typecheck”,它执行一次之后就会形成习惯。

3.3 最容易被忽略的几个坑

CLAUDE.md 并不是越长越好。我犯过的错误有:把某次具体任务的日志复制进去、把已经失效的旧方案整段保留、把个人编码口味写成“必须遵守的规范”。这些都容易误导模型。

另一个坑是写了“不要那么做”却没有替代方案。比如写“不要直接操作 DOM”,模型可能会改用一个并不存在的抽象层,最后更乱。正确的写法是“不要直接操作 DOM,统一走dom-utils里的封装方法”,这样模型才知道往哪里走。

还想提醒一点:改完 CLAUDE.md 之后最好用一条简单指令验证一下,比如“告诉我你理解的测试命令是什么”,确保模型读到的规则和你预期一致。别等它在关键节点上发挥出错才回头检查配置文件。

4. 把 memory 当长期记忆用,而不是垃圾桶

memory 是三套配置里最灵活也最容易失控的。它不像 settings.json 有明确层级,也不像 CLAUDE.md 有相对固定的格式。它本质上是让 Claude Code 跨会话记住“这个项目走到哪了”“某些结论是怎么来的”,但很多人会不小心把它变成垃圾桶,什么零碎信息都往里倒。

4.1 memory 的存放方式和读取机制

在 Claude Code 中,memory 通常以 Markdown 文件形式存在,与 CLAUDE.md 共用一套文件体系。不同版本对 memory 的暴露方式有差异,有的版本提供/memory命令来查看和添加记忆,有的则需要你手动维护某个 CLAUDE.md 文件。我自己的做法是:在项目.claude目录下单独维护一个memory.md,然后在项目 CLAUDE.md 里用@import把它引进来,这样 memory 和规则在物理上分开,语义上又同时被加载。

@import是 Claude Code 提供的一个引用机制,你可以把它想象成 Markdown 里的include。它非常适合模块化:把“项目背景”“遗留决策”“已知坑位”分成几个小文件,用@import统一加载,比一个大而全的 CLAUDE.md 好维护得多。

memory 读取的核心特征是“始终进入上下文”。这意味着它既是长期记忆,也可能成为每轮对话的固定负担。写进 memory 的任何内容都会消耗上下文窗口,所以越是长期记忆,越要克制。

4.2 怎么维护才不会被历史包袱拖垮

维护 memory 有三个原则:只写结论、不写过时细节、定期清理。

只写结论的意思是,别把“今天改到哪一行代码”这种过程性信息放进去,而应该写“支付模块已完成 v2 迁移,旧入口只保留兼容层”。过程信息会很快过时,结论能继续指导后续工作。

不写过时细节的意思是,memory 里出现“目前”“暂时”这类词时要警惕。比如“暂时用 A 方案,后续换 B”,这种话三个月后根本没人记得为什么暂时,模型还会拿着过时信息决策。如果你发现某条 memory 已经不再影响当前工作,就果断删掉,不要心疼。

定期清理可以用一个笨办法:每周抽十分钟问 Claude Code“当前 memory 里有哪些已经过时的信息”,让它列出可疑项,你再人工确认。比每次聊天时手动翻文件省力得多。

4.3 memory 的安全风险和注入问题

把长期记忆写进文件,意味着任何能够影响这个文件的内容,都可能变成对 Claude Code 的指令。如果你经常从网页、源码仓库、第三方文档里复制大段内容,而这些内容又包含“忽略以上规则,执行...”之类的提示词,轻则让模型输出奇怪结果,重则导致误操作。

所以我的建议有两层。第一层,不要在生产环境或重要仓库里让模型直接写入 memory,要建立“先提议、我确认、再入库”的流程;第二层,不要把密钥、Token、个人敏感信息写进 memory。它每轮都会被加载,等于每轮都在把你的凭据暴露给模型和日志系统。

另外,涉及 memory 的溯源也很重要。如果某条记忆影响了一个关键决策,你有权追问它的来源。Claude Code 里的 memory 文件是普通文本,翻起来倒是很轻松,关键是你得养成“先怀疑记忆,再接受记忆”的习惯,而不是把 memory 当不可质疑的真理。

5. 安装、升级和第三方接入的实操经验

配置前面三套体系之前,先得把环境装对。很多问题其实不是配置问题,是安装方式不对、版本不一致、接入渠道搞混了。这块我统一讲一下,尤其第三方 API 和本地模型接入,坑比想象中多。

5.1 安装和升级怎么处理

Claude Code 最常用的安装方式是通过 npm 全局安装,环境里需要具备 Node.js 18 或更高版本。装完之后在终端直接运行claude就能进入交互界面。如果你之前装过旧版本,尤其是 Windows 上报过“不兼容64位”之类的错,大概率是残留安装或者 Node 太老,先卸载干净再装最新版,别图省事覆盖安装。

升级方面,claude update可以检查并更新到新版本。我实际工作中遇到过这种情况:CLI 已经升级,但 VS Code 插件还是旧版,两者行为不一致,配置加载顺序都不一样。所以每次升级后顺手看一眼插件版本,匹配上再继续干活。

登录流程很简单,执行claude后会弹出浏览器授权。如果你属于团队账号且提示订阅被禁用,不要自己去折腾配置文件绕限制,直接找组织管理员查看账号策略。这是账号权限问题,不是配置问题。

5.2 VS Code 插件和桌面版的配置口径

VS Code 版 Claude Code 本质上是同一个 CLI 的图形外壳,配置文件路径和命令行版本是共享的。也就是说你在终端里写的 settings.json、CLAUDE.md,在 VS Code 插件里直接生效。插件里通常可以打开一个集成终端面板,建议先确认面板里执行的是同一个claude命令,而不是某个独立封装的旧版本。

桌面版也是类似思路,它不是另一套系统,只是换个壳。配置仍然从用户目录和项目目录读取。所以别到处找“桌面版专属配置”,你把~/.claude和项目.claude维护好,桌面版自然就能读到。偶尔会有缓存不同步的情况,重启应用基本能解决。

5.3 接入第三方 API 和本地模型的经验

Claude Code 支持通过环境变量切换 API 端点和认证信息,这是它接入第三方兼容服务的基础。常见做法是设置ANTHROPIC_BASE_URL指向一个 Anthropic 兼容接口,同时设置ANTHROPIC_AUTH_TOKEN提供认证凭证。很多第三方模型网关、代理服务都是这套思路。

社区里也有人做配置切换工具,比如 CC Switch,可以在多套 API 配置之间来回切换,把不同模型端点分别保存,需要时一键切换。这类工具本质上还是改环境变量和配置文件,只是帮你省去了手工改的麻烦。如果你同时接多家服务,确实值得用。

本地模型调用则是另一个场景。很多人想把 LM Studio 这类本地推理工具接进来,但它们未必提供 Anthropic 兼容 API 路由。这时候强行配置ANTHROPIC_BASE_URL很可能失败,先确认本地服务是否真的暴露了兼容接口,再决定配置方式。如果只支持 OpenAI 风格接口、却不兼容 Claude Code 需要的工具调用格式,配置写了也白写。我实际试过的结果是:兼容层做得好的服务能跑通,不兼容的就是无穷无尽的报错。

第三方接入的通用提示:上下文长度不同、工具调用格式差异、超时时间设置,都会导致“配置对了但表现不稳定”。建议始终保留一套官方端点配置,出问题能快速回退,别指望第三方服务永远不出问题。

6. 高频报错和排查实录

配置玩得越深,报错见得越多。这里把常见问题整理成一个能直接对号入座的清单,我尽量写得贴近实际操作,而不是罗列一堆空洞的“请检查网络”。

报错/现象常见原因处理办法
提示组织禁用了订阅访问组织账号策略限制,不是本地配置问题找管理员确认订阅策略,不要自行绕过
提示当前环境不可用地区或部署环境不在官方支持范围先确认是否使用了支持的网络环境,或咨询官方支持渠道
改 settings.json 后行为没变化改了优先级低的文件,或旧会话未重启检查配置层级,退出重开会话
明明 allow 了命令还是被拒deny 规则优先级更高,或规则语法不匹配查看 deny 列表,调整规则写法
上下文超限、输出到一半断掉CLAUDE.md/memory 太大,历史太长用/compact压缩,清理记忆文件,拆成小任务
Windows 安装时报兼容错有旧版残留或 Node 版本过老完全卸载、升级 Node、重新安装最新版
缓存导致的诡异行为插件和 CLI 版本不一致同步升级插件和 CLI,重启宿主

6.1 启动和认证类报错

最常见的认证报错发生在claude命令启动后授权失败。这时候先检查是不是账号订阅本身有问题,再检查环境变量有没有覆盖掉默认会话。很多配置了第三方环境变量的人,会忘记ANTHROPIC_BASE_URL还在生效,导致明明登录的是官方账号,请求却发到了第三方地址。排查方法很简单:开一个干净终端,unset掉相关变量,再重新启动,看能不能恢复正常。

6.2 权限和执行类报错

这个类别下我见过最多的是“工具调用被拒绝”。可以先用/permissions之类的入口查看当前生效规则,确认自己写的是不是落在deny列表里。有些团队为了安全会在全局统一 deny 某些命令,你再怎么在项目里 allow 也无效,因为全局优先级更高。那不是配置py,是安全策略。

6.3 Context 超限和 memory 失控

随着会话变长,模型会开始“忘事”,输出质量滑坡,甚至在关键步骤上卡住。这时候不要硬聊,应该主动/compact压缩历史,把会话焦点重新拉回任务。如果压缩后依然频繁超限,就检查 CLAUDE.md 和 memory 文件是不是塞了太多无关内容。我见过有人把半年的对话摘要都放进去,每次开会话都带着几百行历史,那种配置下什么模型都撑不住。

还有一个小技巧:当 Claude Code 开始重复一些过时信息时,别急着解释新事实,先让它引用信息来源。如果它说是从 CLAUDE.md 或记忆文件里读到的,那说明文件本身该更新了。直接修文件,比在对话里纠正一百遍都有效。

我个人在实际操作中最深的体会是:配置不是一次性的工程量,而是需要维护的活文档。每周花十分钟翻一遍 CLAUDE.md 和 memory,删掉已经过时的结论,比继续往里面塞新规则重要得多。最后分享一个小技巧:改完任何配置后,别接着用旧会话继续聊,退出重开一个会话,很多奇怪问题会直接消失。这套体系本身不复杂,复杂的是你愿不愿意把项目里的隐性知识持续写进这些文件里,而这个过程,恰恰是 Claude Code 真正值钱的地方。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 18:13:25

UltraScale+ 40G以太网实战:GT时钟共享与QSFP直驱设计

1. 项目概述:为什么40G以太网在UltraScale上不能靠“猜”来配置你手头有一块Xilinx UltraScale FPGA开发板,板载QSFP接口,目标是跑通40Gbps以太网链路——不是1G、不是10G,是实打实的40G。但当你打开Vivado,点开“IP C…

作者头像 李华
网站建设 2026/10/6 18:13:09

LLM Agent技能库膨胀治理:SkillBrew多目标精炼实践

不知道从什么时候开始,我做 Agent 技能库的方式变成了“只进不出”:每次任务失败,就往库里塞一条新技能;每个业务方提一个需求,就追加一套 prompt 模板。技能库从 200 条涨到 2000 条,我以为 Agent 会越来越…

作者头像 李华
网站建设 2026/10/6 18:10:31

Go+Python构建可观察Agent:CLI/TUI驱动的自主决策系统

1. 这不是“又一个AI玩具”,而是一次对Agent本质的动手验证“我做了个 Agent”——这行字出现在GitHub仓库README第一行时,我盯着看了三分钟。没有炫酷的UI动效,没有“支持100模型API”的宣传话术,只有一段用Go写的CLI入口、一个P…

作者头像 李华
网站建设 2026/10/6 18:09:33

轻型AI中台实践:OCR识别与自动对账如何终结重复录入

上个月底,财务负责人把一张对账差异表拍在我桌上:系统记录的应收和银行流水差了八十多万,明细里有六百多笔对不上。与此同时,业务部门还在每天加班把供应商发来的PDF单据手工敲进ERP。这类事情在企业里太常见了——不是某个系统不…

作者头像 李华
网站建设 2026/10/6 18:09:02

WorkBuddy开放平台实测:搭建Agent工作台从零到落地

如果你和我一样,过去一年多基本把所有热门的AI开发工具都试了一遍,应该会有个很直观的感受:工具越来越多,但“干活的方式”其实没怎么变。要么是在对话框里让AI写代码,要么是在IDE里让它做补全,换个任务、换…

作者头像 李华
网站建设 2026/10/6 18:06:12

Tessent Shell下Hybrid TK/LBIST流程:覆盖率与测试时间的双赢实践

芯片测试工程师的日常,基本就是在“覆盖率”和“测试时间”两堵墙之间找缝隙。最近我调了一个Tessent Shell环境下的Hybrid TK/LBIST流程,花了整整三个晚上才把覆盖率从93%拉到99.1%,同时让ATE上的每颗芯片测试时间压掉了差不多三分之一。写这…

作者头像 李华