ARTICLE DETAIL

资讯详情

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

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

Claude Code配置实战:settings.json、CLAUDE.md与memory用法解析 1. 配置体系的设计逻辑为什么偏偏是这三件套我第一次接触 Claude Code 的时候跟大多数人一样先找安装教程装完就急着让它写代码。跑通第一个 demo 之后第二个念头才是“这玩意儿到底怎么调教”。这时候你会遇到一个绕不开的问题同一个 Claude Code为什么别人用起来像资深结对编程搭档我用起来像刚入职还老忘事的实习生答案几乎都在配置里。Claude Code 的配置体系主要分成三块settings.json、CLAUDE.md和memory。光看名字很多人会以为settings.json是配置文件CLAUDE.md是项目文档memory是聊天记录然后各配各的就完事了。实际上这三者的分工完全不在一个维度上。1.1 三者的分工参数、规则与记忆一句话概括就是settings.json管“你能给 AI 什么”CLAUDE.md管“你应该告诉 AI 什么”memory管“AI 应该记住什么”。具体拆开看settings.json是行为和权限的开关。它决定 Claude Code 用什么模型、允不允许自己执行某类命令、要不要带环境变量、hook 怎么挂。这部分对应的是“工具层”配置不依赖具体项目。CLAUDE.md是项目语义的载体。它告诉 Claude Code“这个项目是干什么的”“代码规范是什么”“构建命令怎么跑”“有哪些不能碰的目录”。这部分对应的是“项目层”配置每个仓库应该有一份。memory是跨会话的长期记忆。它保存那些“你上次已经说过、这次不用再重复”的信息。比如你习惯用 pnpm 不用 npm比如你上次告诉它“这个服务的部署脚本别动”这些内容在下次新开会话时还能生效。三者之间的关系像一个公司的三层架构settings.json是行政制度规定谁能进哪个办公室、能用什么设备CLAUDE.md是岗位说明书说清楚这个项目该怎么干活memory是工作笔记记录你平时口头交代过的事情。缺了任何一层AI 要么没法干活要么不知道正确干法要么反复问你同样的问题。1.2 配置分层的核心优势为什么不是一个万能文件有人会问为什么不搞一个巨大的配置文件把所有东西都塞进去答案很简单配置的“上下文”不同决定了它们必须分层。settings.json如果塞进项目文档那么换一个项目就要重写一遍CLAUDE.md如果写进全局配置那么这个 AI 在每一个项目里都会用同一套规则遇到风格迥异的仓库就乱套memory 如果全塞进CLAUDE.md那文档会越来越长最后超过上下文窗口反而拖垮模型的理解能力。我见过一个很典型的反面案例有人把团队 coding style 巨细无遗地写进了全局的CLAUDE.md然后所有项目共享。结果 A 项目用的是相对路径引入模块B 项目强制绝对路径AI 拿到全局规则后在 B 项目里依然坚持 A 的写法。原因就是全局规则优先级覆盖了项目规则这类冲突就是分层不清造成的。所以这套三层设计本质上是把“环境变量、项目规则、临时交代”这三个生命周期完全不同的信息分开管理。该全局的全局该项目的项目该记住的记住该忘记的忘记这才是配置体系的正确打开方式。2. settings.json 实操把全局行为捏在手心聊完设计逻辑先从最基础的settings.json讲起。这是 Claude Code 的全局配置入口位置一般在用户目录下的.claude文件夹里文件名就叫settings.json。如果你不知道它在哪里直接在终端里运行claude之后用/config命令就能看到当前生效的配置路径。2.1 settings.json 都管些什么先看一个比较典型的示例文件{ model: claude-sonnet-4-20250514, forceLogin: false, permissions: { allow: [ Bash(npm run dev), Bash(git status), Read(README.md) ], deny: [ Write(credentials.json), Bash(rm -rf *) ] }, env: { MY_CUSTOM_ENV: some-value }, hooks: { PostToolUse: [ { matcher: Read, hooks: [ { type: command, command: echo 文件被读取了 /tmp/read_log.txt } ] } ] } }逐项看一下model指定默认模型。不是所有人都需要这一项因为官方一般会自动选择最合适的模型。但如果你有明确偏好比如某些任务希望用更快更便宜的模型来跑这一项就很有用。有些版本还支持model用环境变量的方式去指定方便做多环境切换。permissions是大多数人最容易忽略、却最重要的一项。默认情况下Claude Code 执行命令前会弹确认框。如果你信任它跑某些低频安全命令可以放进allow列表里省掉确认环节像删除操作、敏感文件读取这类危险动作建议写进deny从根上拦住。这里的规则支持 prefix 匹配、正则等多种写法我在实际使用中最常用的是Bash(git ...)这种带命令前缀的写法既放行了常见的 git 操作又不至于把整个 Bash 都放开。env是环境变量注入。做 AI 编程工具接入第三方模型的时候经常会用到ANTHROPIC_BASE_URL、ANTHROPIC_API_KEY这类变量与其每次在终端里 export不如写进settings.json让 Claude Code 每次启动自动带好。hooks是事件钩子。比如在 AI 读取某个文件、执行某条命令后触发一段脚本做日志、通知或者格式检查。这个属于进阶玩法普通人前期不一定要配但知道有它后面做自动化审计时会很顺手。2.2 一个能直接抄的团队级配置给一套我自己的配置逻辑供参考先用/config打开配置文件确认当前生效路径。把常见且安全的命令放进allowgit status、git diff、git log、npm run dev、npm test这类避免频繁打断。把高风险命令全部denyrm -rf、git push --force、直接写云服务器密钥文件等。在env里配置项目需要的环境变量。如果团队用统一模型那model字段也建议锁死避免有人用自己账号的模型导致结果不一致。这套配置最大的价值是减少 AI 干活时的确认打断同时保证底线安全。我实测下来配好permissions之后AI 跑常规任务的顺畅度明显提升基本不用坐在旁边一直点“允许”。2.3 改配置容易踩的坑最先要提的坑就是热词里反复出现的报错auto-update failed: no write permission to npm prefix。这个问题基本都出在 npm 全局目录权限不对上。Claude Code 默认倾向自动更新但如果 npm 的全局目录被安装在系统保护区域或者你用了 nvm 但权限配置不当更新时就会卡住。我的解决办法很直接把 npm 的全局目录改到用户目录下然后重新安装 Claude Code 并设置环境变量。npm config set prefix ~/.npm-global export PATH~/.npm-global/bin:$PATH npm install -g anthropic-ai/claude-code改完后再测试一次更新如果还不行检查一下当前用户对~/.npm-global是否有写权限。另外要注意settings 是分层的常见的层级有全局层、项目层、本地层。项目目录下也可以放.claude/settings.json它的优先级比全局高适合做团队级项目规范覆盖。这个特性特别适合 monorepo 这种多团队协作场景父目录配基础规则、子项目覆盖偏差规则。3. CLAUDE.md项目的“使用说明书”如果说settings.json是让 AI 跑起来那CLAUDE.md就是让 AI 跑对方向。它是整个配置体系里工作量最大、收益也最明显的一块。3.1 为什么项目级配置最值得投入CLAUDE.md解决的是语境缺失问题。把 AI 丢进一个陌生的代码仓库它就像一个第一天入职的工程师不知道项目结构、不知道构建命令、不知道代码风格、不知道哪些目录是生成产物不能碰。你可以在每次对话开头用自然语言把背景讲一遍但会话一长、上下文一多它就忘了。更现实的是每个新会话都要重讲一遍效率极低。而CLAUDE.md是一份固化下来的项目说明Claude Code 每次启动会话时会自动读取。这相当于把“入职培训手册”写成了文件AI 每次开工前先读一遍天然就带着项目语境。我在团队里推行的经验是一个仓库至少有一份根目录的CLAUDE.md里面写清楚“3 分钟上手”级别的关键信息。3.2 自动载入机制与文档组织这里要澄清一个常见误区CLAUDE.md不只是放到根目录就有用关键在于理解和利用它的自动载入范围。Claude Code 在启动时会自动读取项目根目录、当前目录以及某些特定子目录下的CLAUDE.md。这意味着根目录的CLAUDE.md适合写全局规范项目介绍、构建命令、目录结构、约定。子目录的CLAUDE.md适合写局部说明比如src/api/CLAUDE.md专门讲 API 层的规范scripts/CLAUDE.md专门讲脚本使用方式。用户目录下的~/.claude/CLAUDE.md则相当于个人偏好设置适合作者的通用习惯比如输出语言偏好、常用工具链偏好等。这套层级跟 CSS 的优先级有点像离当前目录越近的CLAUDE.md优先级越高。所以我建议团队把通用规范放根目录把局部规范放子目录不要把所有内容堆到一个文件里。文件一长AI 读起来会花更多 token还会稀释重点。3.3 一份合格的 CLAUDE.md 应该包含什么直接给个结构模板# 项目名 ## 项目简介 - 一句话说清楚这个项目是干嘛的 ## 常用命令 - 开发: npm run dev - 测试: npm test - 构建: npm run build - 类型检查: npx tsc --noEmit ## 目录结构 - src/ 源码 - dist/ 构建产物不要手动改 - scripts/ 辅助脚本 ## 代码规范 - 使用 TypeScript禁止 any - 组件命名用 PascalCase - 业务逻辑写在 services/ 下不要在组件里写 ## 重要约定 - 不要修改 database/migrations 下已发布的迁移文件 - 提交前必须跑 lint - 新功能默认走 feature branch PR ## 常见问题 - 端口被占用怎么办先 lsof -i :3000 找到进程再处理写CLAUDE.md有个原则只写“AI 不读会导致做错事”的内容。废话和常识不要写比如“代码要清晰可读”这种写了反而稀释重点。我见过有人把几十页架构文档整本塞进去结果 AI 抓不住重点连最基本的构建命令都要重新摸索。另一个技巧是遇到 AI 做错事先问自己“它缺什么信息”然后把缺失信息补进CLAUDE.md。比如某次它把构建产物提交到了 git我就在文档里加了句“dist/ 是生成目录禁止提交构建命令是 npm run build”。之后再也没有犯过同类错误。这就是把CLAUDE.md当成一个不断迭代的“AI 防错手册”来维护。3.4 命令行快速操作技巧日常使用中不一定每次都要手动编辑文件。Claude Code 内置的/init命令可以自动生成一份基础CLAUDE.md——它扫描项目结构、读取关键配置后会生成初版文档。但注意/init生成的版本通常比较粗糙只能作为起点还是要人工补充项目特有的约定和禁忌。另外对话过程中如果临时想补充规则不用跳出会话去改文件可以直接用/memory或让 AI 在对话里记住之后再统一同步到CLAUDE.md。这样该更新的规则不会漏最终维护在文档里也能沉淀下来。4. memory让 AI 记住该记住的memory这个关键词可能是三个配置里听起来最玄乎的。很多人以为 Claude Code 会像人一样自动记住所有历史对话其实不是。这里的 memory 本质是一套可读写、可管理的持久化上下文把它理解成 AI 的“备忘录”更准确。4.1 memory 到底是啥Claude Code 的 memory 主要由两部分构成一是CLAUDE.md中的# Memory区块二是/memory命令管理的临时记忆条目。前者是静态、持久的文件记忆后者是动态、灵活的会话记录。日常使用中“把某件事记住”通常是往 memory 里加一条下次会话自动生效。举个例子你在一个项目里告诉它“部署窗口是每周二上午十点其他时间不要执行发布命令”。如果这句话只写在当前会话里下次新会话它就忘了。但如果把它写进项目的CLAUDE.md的 memory 区块或者用/memory存下来下次它会自动带着这个信息进入工作状态。# Memory - 部署窗口固定为每周二 10:00-12:00其他时间禁止执行发布命令 - 本项目使用 pnpm 而非 npm - 线上数据库凭据存放在 ~/.secrets/prod.env不要读取其他位置 ## 2025-05-20 - 用户决定放弃旧的 utils/legacy.js新代码禁止引用它这里有个细节memory 里加日期是为了让 AI 知道哪些记忆是“临时的、可能过期的”。比如部署窗口这种可能变更的信息加个日期后过期后手动更新或删除就一目了然。4.2 记忆的边界怎么划用 memory 时最容易犯的错是把它和CLAUDE.md搞重了。我自己的划分标准是永久事实项目用什么包管理器、禁止修改哪类文件、团队规范这些放CLAUDE.md正文。近期临时决定某次讨论后定下的方案、某次踩坑后得出的结论、某条还没固化到文档的约定这些放 memory。纯聊天记录既不重要也不影响工作直接不存。这么说吧CLAUDE.md是“公司章程”memory 是“周例会纪要”。纪要攒多了重要的要沉淀进章程不重要的就删掉。很多用户一听说有 memory 功能就疯狂往里面塞指令到了最后记忆条目上百条AI 反而被互相矛盾的旧记忆干扰。我的建议是定期给 memory 做减法每月花十分钟清一遍过期条目。4.3 记忆的局限与坑记忆不是万能的。它受上下文窗口限制理论上单个会话内能携带的记忆量有上限塞太多低价值信息反而会挤占真正重要的项目上下文。另一个我实际踩过的坑是memory 和CLAUDE.md内容冲突时AI 可能以临时记忆为准导致行为不一致。比如CLAUDE.md写“提交前跑 lint”但某次在 memory 里加了一句“这个项目 lint 很慢跳过”后面 AI 就一直跳过 lint直到你发现提交记录里全是格式问题。所以修改 memory 时要检查它有没有跟既有规则冲突如果冲突了先改文档、再同步删掉临时记忆。5. 常见报错与排查实录配置体系讲完了最后把热词里高频出现的报错和疑难场景汇总一下。这些都是新手最容易撞上的墙我按排查顺序整理成速查表。5.1 经典报错auto-update failed / npm prefix 无权限这个在 2.3 里已经说过原因和方案这里补充一个排查顺序先跑which claude看安装位置然后npm config get prefix看 npm 全局目录。如果 prefix 指向系统目录比如/usr/local按上文方法改到用户目录。如果已经改到用户目录还报错检查目录所有者ls -ld ~/.npm-global。在 nvm 环境下也可以试试退出 nvm 后直接用系统 node 重新安装。注意不要用sudo npm install -g强行提权。这样虽然能装上但后续每次更新都会遇到权限问题而且会留下安全隐患。5.2 WSL 下安装与模型接入的问题很多开发者在 Windows 下用 WSL 跑 Claude Code。WSL 环境里最常见的坑是路径映射和 Node 环境混乱。我的建议是在 WSL 内部完整安装一套 Node 工具链不要在 Windows 侧装完再去 WSL 里调用因为路径隔离容易出怪问题。# 在 WSL 里安装 nvm 后 nvm install --lts npm install -g anthropic-ai/claude-code claude --version模型接入这块被问得最多的是“Claude Code 能不能用别的模型”。答案是能但要看具体版本的支持情况。通用做法是通过环境变量指定 API 的 base URL 和 keyexport ANTHROPIC_BASE_URLhttps://your-endpoint.example.com export ANTHROPIC_API_KEYyour-key claude这些变量也可以写进settings.json的env里避免每次手动 export。接第三方兼容模型时建议先确认它兼容 Anthropic API 协议否则连上了也可能行为异常。另外用非官方模型时很多工具链特性比如部分 hooks、permission 规则可能不完全兼容遇到问题记得优先怀疑模型层。5.3 配置不生效的排查清单配置写了不少AI 好像没按我说的做这是新手第二高频的困惑。大部分时候问题出在以下四点现象可能原因排查动作改了 settings.json 没反应改错层级项目配置覆盖了全局用/config查看当前生效路径CLAUDE.md 写了不生效文件放的位置不对确认根目录文件名首字母大写且拼写正确memory 指令被忽略记忆条目过多或与文档冲突清理过期记忆统一到 CLAUDE.mdpermission 规则没拦截住规则写法匹配不到实际命令用 prefix 或正则多测几个变体一个值得记住的习惯是改完配置后重启 Claude Code 会话再验证。有些配置是在启动时加载的不重启就跟没改一样。5.4 排查思路先分层、后看日志如果真的遇到疑难杂症别急着卸载重装。按“分层排查”思路走先看是不是系统环境问题Node 版本、npm 权限、网络连通性再看是不是配置层问题路径、优先级、语法最后才怀疑程序本身。遇到程序异常时可以用claude --debug跑一个复现操作查看日志输出大部分问题都能从日志里找到线索。我也建议把claude升级到最新版很多诡异的 bug 其实在新版本里早就修了。结尾配置这套东西本质上是在给 AI 写使用说明书。你花半小时把settings.json、CLAUDE.md、memory三者搭建好后期节省的是无数个重复解释、踩坑纠正的会话时间。我个人在实操中的体会是一开始不用追求“一步到位”。先搭一个最小可用的组合——settings.json配好权限和模型CLAUDE.md写好命令和目录约定memory 遇到问题再追加。用着用着每次 AI 犯错都是在提示你“这里还缺一条规则”补进去就是一次迭代。这才是配置体系真正发挥价值的方式。最后送大家一个小技巧每次你发现 AI 反复问同一个问题或者反复犯同一个错误技不如人就该去更新配置了。把它当成一个信号而不是抱怨的理由。用不了几轮你的 Claude Code 就会从“能干活的工具”变成“懂你项目的搭档”。
返回列表