Claude Code · Prompt Caching

缓存的前缀
到底指什么

"前缀"= 发给模型的请求里,从第 0 个 token 开始、逐字节连续相同的那一段。一旦遇到第一个不一样的 token,从那里到结尾全部失效、重新计算。这页用真实请求结构 + 可交互动画把它讲透。

命中价 0.1×($0.50/MTok) 写缓存 1.25× 缓存保鲜期(TTL) 默认 5 分钟 你本项目命中率 98.7% 已为你省 ~$1,160

数字均有依据:规则/价格取自 Anthropic 官方文档,命中率与省钱金额来自你本项目 753 次真实请求的会话记录。见第 07–10 节。

01 — 心智模型

一次请求 = 一条线性的 token 序列

很多人以为缓存是"按文件 / 按对话存"。不是。模型每轮收到的是把所有东西首尾拼接成的一长条 token,缓存就在这条线上做前缀匹配:

缓存命中(复用,几乎免费 + 快) 本轮新增(必须全价计算) 前缀被打断后的连带重算
system prompt身份 + 规则You are Claude Code, Anthropic's official CLI…稳定 · 靠前
tools 定义Bash / Edit / Read…[{"name":"Bash",…},{"name":"Edit",…}] 约 50 个工具 schema稳定 · 靠前
CLAUDE.md项目约束# 科技专题服务系统 · Claude Code 工作约束 …稳定 · 靠前
历史消息之前几轮对话用户问题 + 助手回答 + 工具结果…已固化
最新消息你刚输入的"需要更真实具体,最好做个 html…"本轮新增

↑ 越靠前的内容越少变动 → 越容易被缓存。越靠后越易变 → 越要全价算。这就是为什么稳定的 system / 工具定义天然放在最前面。

关键规则 缓存匹配只认"从头开始连续相同"。它不会跳过中间的改动去匹配后面——只要前面断了一个 token,后面即使内容一模一样也得重算。
02 — 地基概念

token 到底是什么

前面反复说"逐 token 匹配"。要真正理解缓存,先得知道 token 不是字符、也不完全是单词,而是模型读文字的最小单位。

模型不读字符,读 token

你输入一句话,模型不会一个字母一个字母地看。它先用一个叫 tokenizer(分词器)的部件,按一套固定的"词汇表"把文字切成一块块的碎片,每块就是一个 token,再把每个 token 换成一个数字编号。模型眼里的世界是一串数字,不是字符串。

一句话定义 token = 分词器按固定词汇表,把文字切出来的一个"子词片段"。常见的词往往是 1 个 token;生僻词、长词会被拆成好几个;中文一个汉字通常要 1 个甚至更多 token。

真实切分长这样

下面用色块表示 token 边界(每个方块 = 1 个 token, 表示空格,空格通常并进它后面的词里)。注意:具体怎么切由分词器版本决定,这里是代表性示例,但"切成多块、空格归属、生僻词被拆碎"这些规律是确定的。

英文常见词 · "I love caching"
I love caching ≈ 3 个 token
生僻 / 长词会被拆碎 · "unbelievable"
unbelievable ≈ 4 个 token(一个词拆成 4 块)
中文更"费 token" · "帮我做登录功能"
≈ 7 个 token(汉字常常一字一块)
数字 / 代码 · "Tenant-Id: 000000"(缓存最容易栽在这种地方)
Tenant-Id: 000000 ≈ 5 个 token

官方经验值(用来估算,不是精确)

内容大致换算
英文4 个字符 = 1 token(≈ 0.75 个单词)
中文一个汉字常 ≈ 1 个甚至更多 token,整体比英文更费
Opus 4.7 / 4.8官方注明换了新分词器,同样文字可能多花最多 35% token(但单价从 $15 降到 $5,整体更便宜)

为什么这和"前缀逐字节相同"是同一件事

缓存比的就是这一串 token 序列。看一个你项目里真会发生的场景——把请求头里的 Tenant-Id: 000000 改成 000001

改之前 …前面几千个 token 完全一样… 000000 …后面所有 token…
改之后 …前面几千个 token 完全一样… 000001 …后面所有 token 连带重算…
结果 前面那段 命中 ✅;变了的那个 token 起 断开 ❌,到结尾全部重算。

你只改了 1 个字符,但它落在 000000 这个 token 上,这个 token 变成了 000001 这个不同的 token → 前缀在这里断开 → 从这个 token 到结尾全部失效。这就是"遇到第一个不一样的 token,从那里到结尾全部重新计算"的字面含义。

三个会"咬人"的细节空格也算进 token:` love` 带前导空格,多删一个空格就可能换一个 token。
同样的字,位置/上下文不同可能切法不同:分词器会把常见组合合并成一个 token。
改 1 个字符 ≠ 只影响 1 个 token:有时会让那一小段整体重新切分。但无论如何,从第一个变化的 token 起,后面全断

想看你自己文字的精确 token 数?

回到主线:token 是模型读文字的最小单位;缓存逐个 token 比对前缀,任何一个 token 不同(哪怕只因改了一个字符),从那里往后就全断。

03 — 动手实验

亲手打断前缀,看缓存怎么塌

下面是一个真实形态的请求。点按钮模拟不同操作,观察哪些段命中(绿)、哪些重算(红/黄)。注意看:改一个靠前的段,会把它后面所有段连带染红。

04 — 两个真实例子

命中 vs 未命中,逐 token 对比

例 A · 连续对话 → 大段命中

第二轮请求和第一轮的开头逐字相同,所以 system + 工具 + CLAUDE.md + 上一轮问答全部复用:

// 第 1 轮发送
[system + tools + CLAUDE.md]   ← 约 22,000 token
[用户问题1]  "帮我看下登录逻辑"

// 第 2 轮发送(模型回答后你又问了一句)
[system + tools + CLAUDE.md]   ✅ 逐字相同 → 命中缓存
[用户问题1]  ✅ 命中
[助手回答1]  ✅ 命中
[用户问题2]  ❌ "再看下登出" — 新内容,从这里开始全价算

前三段是共同前缀,直接读缓存(约便宜 10 倍、首 token 更快),只有最后一段是本轮真实成本。

例 B · 改了开头一个字 → 前缀全废

你在 CLAUDE.md 里加了一句话。它位置靠前,于是它本身和它后面的所有内容缓存全部作废:

[system + tools]               ✅ 还在它前面 → 命中
[CLAUDE.md*]  ❌ 改了一个字 → 从这个 token 起不匹配
[用户问题1]   ❌ 内容没变,但前缀已断 → 也得重算
[助手回答1]   ❌ 连带重算
[用户问题2]   ❌ 连带重算
代价不对称靠后的内容(比如刚输入的新问题)几乎没损失;改靠前的稳定内容(system / 工具 / CLAUDE.md),会把整条线后面全部打回原价。所以频繁改动的东西不要往前放。
05 — 高频误区

"我第二轮说了一模一样的话,是完全命中吗?"

不是。而且——那句重复的话本身根本不命中。这是最容易误解的一点:缓存比的是"位置前缀",不是"这句话我以前见过没有"。

先破除这个想法 缓存不是字典。它不会说"这句'帮我做登录功能'我前面见过,所以免费"。它只认从第 0 个 token 开始连续相同的前缀。同样的字出现在序列的不同位置,前面跟的上下文不一样,就是全新的 token,要重新处理。

看第二轮请求的真实结构

假设第一轮你说"帮我做登录功能",我回答并改了代码;第二轮你又说了一模一样的"帮我做登录功能"。第二轮发出去的请求长这样:

system + tools身份/工具/CLAUDE.md和第一轮逐字相同命中 ✅
第一轮·你的话"帮我做登录功能"已固化进前缀命中 ✅
第一轮·我的回答解释 + 改的代码 + 工具结果已固化进前缀(这通常是最大的一块)命中 ✅
第二轮·你又说的话"帮我做登录功能"(字面一样)挂在最后面,是新位置的新 token不命中 ❌

↑ 命中的是前面那一大段(系统 + 工具 + 整个第一轮对话)不是因为你重复了那句话。那句重复的话位置在最后、前面的上下文变了,所以照样要全价处理(写进缓存,下一轮才变成命中)。

你以为实际
第二轮说一样的话 = 完全命中❌ 永远不是"完全"——末尾总挂着一段新的用户输入
重复的话被认出来、所以免费❌ 那句话本身不命中;免费的是它前面没变的前缀
真正花钱的是哪部分✅ 只有末尾那十几个新 token,几乎可忽略;几万 token 的前缀全命中
那什么才算 100% 完全命中 只有一种:你一字不改地重发完全相同的整个请求(messages 数组完全一样,末尾没多任何一轮)。那是"重试同一次 API 调用",不是"在对话里又问了一遍"。对话里只要多了一轮,末尾就必然有新内容,就不可能 100%

这也解释了你第 09 节真实数据里 new≈2、read 一路涨:你每轮新说的话先以全价/写缓存进去,下一轮就并入前缀变成命中——所以"重复"省的从来不是那句话,而是它前面越积越长的历史。

06 — 时间维度

5 分钟 TTL:算的是"请求间隔",不是任务总时长

先搞清楚:TTL 是什么 TTL = Time To Live,直译"还能活多久",就是一段缓存从建立起、还能被复用多久的倒计时。倒计时归零,这段缓存就被服务端回收、失效,下次请求得从头重新计算并重新建立。
打个比方:TTL 就像缓存的保鲜期。Anthropic 默认保鲜期 5 分钟,而且每取用一次就重新贴一张 5 分钟的新标签;超过 5 分钟没人动它,才会过期变质。

所以——缓存不是永久的。默认每个缓存断点存活 5 分钟,但关键是每命中一次就把 5 分钟清零重计。过期看的是"两次请求之间的空档",跟任务跑了多久无关。下面这个倒计时可以直接点着看:

5:00

缓存新鲜。下一次请求会命中并把计时重置到 5:00。

回答:"任务跑了 20 分钟,结束后缓存是不是都过期了?" 不是。任务执行时模型在不停地 思考→调工具→读结果→再思考,相邻两次请求通常只隔几秒,每次都把 TTL 顶回 5:00。所以跑 20 分钟、跑 2 小时,缓存全程是热的。点上面"任务执行中"看计时条怎么被反复顶满。
真正会过期的是"结束之后的空闲" 任务一停,5 分钟倒计时从最后一次请求开始走。结束后 5 分钟内你追问 → 仍命中 ✅;空闲超过 5 分钟再请求 → 这时才过期 ❌,下一次把整条前缀全价重算一遍,再重新建立缓存。
实务推论 这也是为什么定时任务里不建议睡 300 秒整:刚好卡在 TTL 边缘,醒来大概率缓存已凉。要么睡 <270s 保住缓存,要么干脆睡 1200s+ 一次性接受重算、换更长间隔。
07 — 官方真实价格

三个倍率:写 1.25× · 读 0.1× · 1 小时写 2×

所有数字来自 Anthropic 官方定价页,相对"基准输入价"的倍率是固定的,对所有模型都一样:

缓存操作倍率含义
5 分钟写缓存 cache write1.25×第一次把这段内容存进缓存,比正常输入贵 25%
1 小时写缓存存成存活 1 小时的缓存(需开 1h 选项),贵一倍
缓存命中 / 读 cache read0.1×命中时只花正常输入价的 10%
为什么缓存几乎总是划算 官方原话:写一次是 1.25×、读一次是 0.1×。所以只要这段内容之后被读到 1 次,就已经回本(1.25 + 0.1 < 2×正常价)。在 Claude Code 这种"同一前缀被反复读几十次"的场景里,省的是数量级。

换算成真实美元(你正在用的 Opus 4.8)

把倍率乘上 Opus 4.8 的基准价 $5/百万 token

模型基准输入5m 写缓存缓存命中输出
Opus 4.8(本会话)$5 /MTok$6.25$0.50$25
Opus 4.1(旧)$15$18.75$1.50$75
Sonnet 4.6$3$3.75$0.30$15
Haiku 4.5$1$1.25$0.10$5

数据来源:platform.claude.com/docs · about-claude/pricing(2026 年定价表,含 prompt caching 倍率)。MTok = 百万 token。

命中一次只要 $0.50/百万,相当于正常输入价的零头。一个 7 万 token 的前缀,命中读一次 ≈ $0.035;不缓存读一次 ≈ $0.35。差 10 倍。

08 — 官方硬指标

缓存生效的几条硬规则

这些是"能不能命中"的底层约束,讲给别人听时最容易被问到:

4096
Opus 4.8 的最小可缓存 token 数。不足这个长度即使打了 cache_control 也不会缓存,且不报错(Sonnet 4.6 = 1024,Haiku 4.5 = 4096)
4
每个请求最多 4 个缓存断点。自动缓存会占用其中一个
20
回看窗口 = 20 个块。每个断点最多往前查 20 个位置找可复用的缓存
100%
前缀必须逐字节完全相同(含所有文本和图片),到打标块为止,才算命中

缓存层级:tools → system → messages(级联失效)

官方原话:"缓存前缀按 tools → system → messages 的顺序建立,形成层级,上层变了下层全废"。这正是前面"改靠前的东西最贵"的官方机制:

你改了什么失效范围
工具定义(tools,最靠前)tools + system + messages 全部失效 ❌
system / CLAUDE.mdsystem + messages 失效 ◐
对话消息(messages,最靠后)只有 messages 失效 ✅
容易被忽略的坑:Opus 4.7+ 换了分词器 官方注明:Opus 4.7 及以后用了新分词器,同样的文字可能多花最多 35% 的 token。所以你 token 数比旧模型看起来多是正常的——但单价也从 $15 降到了 $5,整体更便宜。

来源:platform.claude.com/docs · build-with-claude/prompt-caching(最小长度、断点数、20 块回看窗口、100% 前缀匹配、tools→system→messages 层级)。

09 — 你的真实数据

这就是你本次会话每一轮的命中情况

下面不是举例,是直接从你这次对话的会话记录(6c486790…jsonl)里读出来的真实数字。每一行 = 模型被请求一次。read=命中缓存的 token,write=新写入缓存,new=真正全价的未缓存输入,gap=距上一次请求的间隔。

#时刻gapread 命中write 写入new 全价out发生了什么
108:06:3318,5184,96616,0341,613开局:你的长消息+上下文,命中已有的 system/工具缓存
208:10:40247s23,48417,6662535间隔 247s < 300s → 仍命中 ✅
308:10:5717s41,1501,977212,682read 持续涨:前缀在变长
408:13:30153s43,12712,7652631
508:16:52202s55,89269321,386
6–908:184–85s56k→60k~1.1k2连续工具调用,间隔几秒,缓存全热
13–1408:2197/42s66,819~5802read 稳在 66,819 = 完整命中
1508:26:18269s66,81969521,157间隔 269s 仍 < 300s → read 没掉,照样命中 ✅
1608:28:05106s18,61150,4762553read 骤降、write 暴涨:靠前位置内容被改写,只有前 18,611 仍命中,5 万 token 重新写入缓存 ❌
17–1908:286–27s69k→73k1k–4.4k~1–2.8k刚写入的大块立刻又被命中,read 回升

从你这张表能直接讲明白的 4 件事

本会话 vs 你这个项目全部历史

89.6%
本次会话命中率
(read / 总输入 token)
98.7%
本项目 753 次请求累计命中率(4 个会话)
2.589 亿
累计从缓存命中读取的 token 数(read)
省 88.5%
输入侧成本:缓存把它压到了不缓存时的 11.5%
折算成真实美元(Opus 4.8 单价) 你这个项目累计:命中读 2.589 亿 token × $0.5/M ≈ $129;若完全不缓存,这些输入要按 $5/M 算 ≈ $1,312缓存实打实帮你省了约 $1,160(仅输入侧)。单看本次会话也省了约 $4.9。
算法:read×0.1 + write×1.25 + new×1.0,再乘基准输入价 $5/MTok。数据取自本项目 4 个会话记录的 usage 字段。
10 — 全部项目总账

你 10 个项目、95 个会话的缓存全景

这是把 ~/.claude/projects/所有项目的所有会话记录逐条统计出来的结果(按 message id 去重、读 usage 字段累加)。$ 按每个会话真实用的模型单价分别折算(你绝大多数会话是 Opus 4.7/4.8,基准输入 $5/MTok;synthetic 合成消息不计费)。

各项目缓存读取量(条宽 ∝ 命中 token 数)

命中 token 越多 = 这个项目让模型反复"白嫖"前缀越多。点下面每个项目可展开它的逐会话明细。

逐项目 · 逐会话明细(点击展开)

数据:本机 ~/.claude/projects/ 全部 .jsonl,截至打开本页时的最近一次统计。命中率 = read /(read+write+new)。省下$ = 不缓存成本 − 实付成本,仅算输入侧差额。

11 — 自己动手看

怎么在你自己的记录里查命中/不命中

每次模型返回都带一个 usage 对象,三个输入字段加起来才是总输入:

"usage": {
  "cache_read_input_tokens":  66819,   // 命中:这次从缓存读了多少(0.1×)
  "cache_creation_input_tokens": 695,  // 写入:这次新存进缓存多少(1.25×)
  "input_tokens":               2,   // 全价:最后一个断点之后、没缓存的新输入
  "output_tokens":            1157
}
// 官方公式:总输入 = cache_read + cache_creation + input_tokens

Claude Code 里的两种查看方式

方式怎么做
命令行 /cost在 Claude Code 里输入,看本次会话累计 token 和花费(含缓存读写)
原始会话记录会话以 .jsonl 存在 ~/.claude/projects/<项目>/,每条 assistant 消息都带 usage。用 jq 即可逐轮统计
# 把某个会话每轮的命中/写入/全价 token 拉出来
jq -r 'select(.type=="assistant") | .message.usage |
  "read=\(.cache_read_input_tokens) write=\(.cache_creation_input_tokens) new=\(.input_tokens)"' \
  ~/.claude/projects/<你的项目>/<会话id>.jsonl

本页"你的真实数据"那一节,就是用类似命令从你的 6c486790…jsonl 里跑出来的。

12 — 你能控制的

cache_control:手动标"缓存到这里"

调用 Anthropic API 时,可以在某个内容块上打 cache_control 标记,告诉服务端"从开头到这里建一个缓存断点"。Claude Code 已经自动帮你在 system / 工具 / 上下文这些稳定边界打好了断点,理解原理有助于自己写 API 时也用上:

{
  "system": [
    {
      "type": "text",
      "text": "<大段稳定的系统说明 / 工具文档…>",
      "cache_control": { "type": "ephemeral" }  // ← 缓存断点
    }
  ],
  "messages": [
    { "role":"user", "content":"易变的本轮问题,放最后,不打标" }
  ]
}
13 — 委派与并行

subagent / Agent / 团队 / 后台 / Workflow 全解

这几个词最容易混。本节严格按官方文档(code.claude.com)讲清:它们是 Claude Code 里"把活分出去、并行干"的几种不同机制,不是一回事。

先更正一个常见误解 "团队(agent teams)"是 Claude Code 真实存在的功能(实验性,需开开关),不是口语比喻。下面逐个讲,全部以官方为准。

一张总表(官方"并行运行 agent"的五种方式)

机制是什么上下文彼此通信最适合启用方式
subagent
子智能体
单个会话内派出的专职助手各自独立窗口只回报给主 agent,彼此不通信副任务返回摘要默认就有
agent teams
代理团队
多个完整会话:1 队长 + 多队友各自独立窗口队友互相直接发消息要讨论/协作的复杂活实验开关
background agents
后台代理
后台跑的多个完整会话,一屏管理各自独立会话不互相通信多个互不依赖的任务异步跑claude agents
Workflow
动态工作流
用 JS 脚本确定性地编排一群 subagent脚本调度脚本里传数据大规模/可复现的批处理Workflow 工具
worktree
多会话
你自己开多个 Claude Code 会话各自独立不自动协调手动并行git worktree

来源:code.claude.com 的 sub-agents / agent-teams / agent-view 三页。下面把前四种逐个拆开。

① subagent(子智能体)+ Agent 工具

何时用:副任务输出很啰嗦、想限制工具权限、活儿自包含能返回摘要。需要频繁来回/共享大量上下文/快速小改 → 留在主对话。

② agent teams(代理团队)

③ background agents(后台代理 / agent view)

④ Workflow(动态工作流)

怎么选(一句话决策)

你的情况
副任务会刷屏、只要个摘要subagent
几个工人要互相讨论/质疑再汇总agent teams
几个互不相关的任务想异步跑、回头收background agents
大批量、要可复现的结构化流程Workflow
需要频繁来回 / 共享大量上下文 / 快速小改就留在主对话

来源:code.claude.com — sub-agents、agent-teams(CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS、lead/teammate/任务列表/mailbox)、agent-view(claude agents、supervisor)。Task→Agent 改名见 sub-agents 页 v2.1.63 说明。

顺带:Workflow 续跑和 token 缓存是同一个道理

这也是把这节放进缓存教程的原因。Workflow 的断点续跑用的和 token 前缀缓存完全相同的思路——"最长不变前缀":

和 token 前缀匹配一模一样的形状:从头连续匹配,第一个变动点之后一律重做。token 缓存比的是 token 序列,Workflow 续跑比的是 agent() 调用序列——记住这一个"最长不变前缀"模型,两处都通。

14 — 速查

什么命中、什么作废(带真实依据)

操作结果为什么 / 真实依据
继续追问(不改前文)大段命中 ✅开头逐字未变;你本会话 new≈2、read 一路涨就是这个
改工具定义(tools)tools+system+messages 全废 ❌层级最顶层,级联失效(官方)
改 CLAUDE.md / systemsystem+messages 失效 ❌你本会话 #16 就是靠前内容变动,5 万 token 被重写
空闲 > 5 分钟再请求前缀过期 ❌TTL 到期回收,需重新建立
空闲 < 5 分钟(或持续命中)仍命中 ✅每次命中免费刷新 5 分钟;你 #2(247s)/#15(269s) 都还命中
只改最后一条消息几乎无损 ◐messages 在最底层,只失效 messages
内容不足 4096 token(Opus 4.8)根本不缓存 ❌低于最小长度,打标也无效、不报错(官方)
换模型 / 跨组织 / 跨工作区不命中 ❌缓存按组织+工作区隔离,前缀绑定具体内容

规则依据:Anthropic 官方 prompt-caching 与 pricing 文档;命中数据:本项目会话 .jsonl 的 usage 字段实测。

一句话记住

前缀 = 请求开头那段「逐 token 完全没变」的连续序列;命中的就是它,变动点之后一律重算,5 分钟不碰它就过期。把稳定的放前面、易变的放最后,就是省钱省时间的全部诀窍。

模块 · Memory(CLAUDE.md / 记忆)

Memory(CLAUDE.md / 记忆)

Claude Code 的两套跨会话记忆机制:你手写的 CLAUDE.md 指令文件,和 Claude 自己积累的 auto memory 笔记,二者都在每次会话开始时加载进上下文。

是什么

每次 Claude Code 会话都从一个全新的 context window 开始,靠两套机制把知识带过会话边界:CLAUDE.md files(你写的持久化指令/规则)与 Auto memory(Claude 根据你的纠正和偏好自己写的笔记)。两者都在每次对话开始时加载进上下文。注意:它们都被当作 context(上下文),不是强制配置(not enforced configuration)——Claude 会尽力遵守但不保证严格合规;要无条件拦截某个动作必须用 PreToolUse hook。指令越具体、越简洁,Claude 遵守得越一致。

怎么工作

怎么配置

CLAUDE.md 位置(按 load order 从广到窄):Managed policy — macOS /Library/Application Support/ClaudeCode/CLAUDE.md、Linux/WSL /etc/claude-code/CLAUDE.md、Windows C:\Program Files\ClaudeCode\CLAUDE.md;User ~/.claude/CLAUDE.md;Project ./CLAUDE.md 或 ./.claude/CLAUDE.md;Local ./CLAUDE.local.md(加进 .gitignore)。
导入语法:See @README ... and @package.json ...、- git workflow @docs/git-instructions.md、跨 worktree 用 - @~/.claude/my-project-instructions.md。
导入 AGENTS.md:CLAUDE.md 顶部写 @AGENTS.md,或 ln -s AGENTS.md CLAUDE.md(Windows 用 import 因 symlink 需管理员/开发者模式)。
规则目录 .claude/rules/*.md:每文件一个主题(如 testing.md),递归发现;可加 YAML frontmatter 限定路径:
---
paths:
  - "src/api/**/*.ts"
  - "src/**/*.{ts,tsx}"
---
无 paths 的 rule 无条件加载,优先级同 .claude/CLAUDE.md。用户级 ~/.claude/rules/,加载早于 project rules(project 优先级更高)。
命令:/init 生成起始 CLAUDE.md(已存在则给改进建议不覆盖);环境变量 CLAUDE_CODE_NEW_INIT=1 启用交互式多阶段流程。/memory 列出已加载的 CLAUDE.md/CLAUDE.local.md/rules,切换 auto memory 开关,打开 auto memory 文件夹。
Auto memory 配置:autoMemoryEnabled(项目设置,默认 on)、环境变量 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1、autoMemoryDirectory(仅 user settings ~/.claude/settings.json,须绝对路径或 ~/ 开头)。
托管:managed-settings.json 里用 claudeMd 键直接放内容(如 {"claudeMd": "Always run make lint before committing.\nNever push directly to main."});claudeMdExcludes(glob 数组)排除无关 CLAUDE.md,放 .claude/settings.local.json。
额外目录:CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config。

什么时候用

限制 / 坑

硬事实速查(27 条精确事实)
  • CLAUDE.md 四个 scope 与路径:Managed policy(macOS /Library/Application Support/ClaudeCode/CLAUDE.md、Linux/WSL /etc/claude-code/CLAUDE.md、Windows C:\Program Files\ClaudeCode\CLAUDE.md)、User ~/.claude/CLAUDE.md、Project ./CLAUDE.md./.claude/CLAUDE.md、Local ./CLAUDE.local.md
  • Load order 从广到窄:Managed policy → User → Project → Local;跨目录树从 root 往下到 cwd,离启动位置近的后读;同级 CLAUDE.local.md 追加在 CLAUDE.md 之后。
  • cwd 之上层级 CLAUDE.md/CLAUDE.local.md 启动时全量加载;子目录里的按需加载(Claude 读该目录文件时)。
  • import 语法 @path/to/import,相对路径相对于含 import 的文件而非 cwd,支持绝对/相对路径,可递归,maximum depth of four hops(最大 4 hops)。
  • block-level HTML 注释 <!-- --> 注入前被 stripped 不占 token;代码块内注释保留;Read 工具打开时注释可见。
  • Claude Code 只读 CLAUDE.md 不读 AGENTS.md;桥接方式:CLAUDE.md 写 @AGENTS.mdln -s AGENTS.md CLAUDE.md
  • /init 生成起始 CLAUDE.md;已存在则建议改进不覆盖;会读取 AGENTS.md、.cursorrules、.windsurfrules 并整合。
  • CLAUDE_CODE_NEW_INIT=1 启用交互式多阶段 /init(可设置 CLAUDE.md/skills/hooks)。
  • .claude/rules/ 放主题 md 文件,递归发现;无 paths frontmatter 的 rule 启动加载,优先级同 .claude/CLAUDE.md;带 paths YAML frontmatter 做 path-scoped,只在读匹配文件时触发。
  • glob 示例:**/*.ts(任意目录 TS)、src/**/*(src 下全部)、*.md(项目根 markdown)、src/components/*.tsx;支持 brace expansion 如 src/**/*.{ts,tsx}
  • 用户级 rules ~/.claude/rules/,加载早于 project rules,project rules 优先级更高。
  • .claude/rules/ 支持 symlink(解析并正常加载,循环 symlink 会被检测处理)。
  • Auto memory 需 Claude Code v2.1.59 或更高(claude --version 查)。
  • Auto memory 默认 on;关闭:/memory 切换、或项目设置 {"autoMemoryEnabled": false}、或环境变量 CLAUDE_CODE_DISABLE_AUTO_MEMORY=1
  • Auto memory 存储目录 ~/.claude/projects/<project>/memory/,<project> 由 git repo 推导,同 repo 所有 worktree/子目录共享一个目录;非 git repo 用 project root。
  • Auto memory 目录含 MEMORY.md(索引,loaded into every session)+ 可选 topic 文件(如 debugging.md / api-conventions.md,按需读取,启动不加载)。
  • autoMemoryDirectory 只能在 user settings ~/.claude/settings.json 设,须绝对路径或 ~/ 开头;不接受 project/local settings,接受 policy/user 和 --settings。
  • MEMORY.md 启动加载阈值:first 200 lines 或 first 25KB,whichever comes first;只对 MEMORY.md 生效,CLAUDE.md 全量加载。
  • 界面提示 'Writing memory' / 'Recalled memory' 表示 Claude 正在写/读 ~/.claude/projects/<project>/memory/
  • managed-settings.json 的 claudeMd 键可直接内嵌 CLAUDE.md 内容,precedence 同 managed CLAUDE.md(先于 user/project 加载),仅 managed/policy settings 生效。
  • claudeMdExcludes(glob 数组,匹配绝对路径)排除 CLAUDE.md,可配在任意 settings 层,数组跨层合并;managed policy CLAUDE.md 不可被排除。
  • CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir <dir> 加载额外目录的 CLAUDE.md/.claude/CLAUDE.md/.claude/rules/*.md/CLAUDE.local.md;若 --setting-sources 排除 local 则跳过 CLAUDE.local.md。
  • /memory 命令:列出已加载 CLAUDE.md/CLAUDE.local.md/rules、切换 auto memory、提供打开 auto memory 文件夹链接、选文件可在编辑器打开。
  • CLAUDE.md 作为 system prompt 之后的 user message 投递,不是 system prompt 一部分;要 system prompt 级用 --append-system-prompt
  • /compact 后项目根 CLAUDE.md 从磁盘 re-read 并 re-inject;nested 子目录 CLAUDE.md 不自动 re-inject。
  • 调试工具:InstructionsLoaded hook 可记录哪些指令文件被加载、何时、为何。
  • Subagents 可维护自己的 auto memory(见 subagent configuration / enable persistent memory)。

官方出处:https://code.claude.com/docs/en/memory

模块 · Skills(技能)

Skills(技能)

Skills 是用 SKILL.md 文件给 Claude 扩展能力的方式:写一份指令,Claude 在相关时自动调用、或你用 /skill-name 直接触发,且正文只在用到时才加载,几乎不占常驻 context。

是什么

Skills(技能)是扩展 Claude Code 能力的机制。你创建一个 SKILL.md 文件写入指令,Claude 就把它加入自己的工具箱:当对话相关时 Claude 自动调用,或你输入 /skill-name 直接调用。和 CLAUDE.md 不同,技能的正文(body)只在被调用时才加载,因此再长的参考资料在没用到前几乎不消耗 context。Claude Code 的 skills 遵循 Agent Skills 开放标准(agentskills.io),可跨多个 AI 工具使用;Claude Code 在标准之上扩展了 invocation control(调用控制)、subagent execution(子代理执行)、dynamic context injection(动态上下文注入)等特性。官方明确:自定义命令(custom commands)已合并进 skills——.claude/commands/deploy.md.claude/skills/deploy/SKILL.md 都会生成 /deploy 且行为一致,旧的 .claude/commands/ 文件继续可用。

怎么工作

怎么配置

技能存放位置(决定谁能用):Personal ~/.claude/skills/<skill-name>/SKILL.md(所有项目可用);Project .claude/skills/<skill-name>/SKILL.md(仅本项目);Plugin <plugin>/skills/<skill-name>/SKILL.md;Enterprise 通过 managed settings 部署。

最小 SKILL.md:
---
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed...
---

## Current changes
!git diff HEAD

## Instructions
Summarize the changes above in two or three bullet points...

创建示例:mkdir -p ~/.claude/skills/summarize-changes,写入 SKILL.md,然后用 /summarize-changes 或自然语言触发。

常用 frontmatter 字段:name、description、when_to_use、argument-hint、arguments、disable-model-invocation、user-invocable、allowed-tools、disallowed-tools、model、effort、context、agent、hooks、paths、shell。所有字段都可选,仅 description 推荐。

字符串替换:$ARGUMENTS、$ARGUMENTS[N]、$N、$name、${CLAUDE_SESSION_ID}、${CLAUDE_EFFORT}、${CLAUDE_SKILL_DIR}。

子代理执行:frontmatter 加 context: fork + agent: Explore(或 Plan / general-purpose / 自定义)。

多行命令注入用  !  围栏代码块。

settings 相关:skillOverrides(控制可见性,写入 .claude/settings.local.json)、disableSkillShellExecution、skillListingBudgetFraction、maxSkillDescriptionChars。权限:在 /permissions 用 Skill(禁全部)/ Skill(commit)(精确)/ Skill(review-pr *)(前缀)。

什么时候用

限制 / 坑

硬事实速查(28 条精确事实)
  • 技能目录入口文件必须叫 SKILL.md,其他文件(template.md、examples/、scripts/)可选。
  • Personal 路径:~/.claude/skills/<skill-name>/SKILL.md(所有项目)。
  • Project 路径:.claude/skills/<skill-name>/SKILL.md(仅本项目,提交 VCS 即共享)。
  • Plugin 路径:<plugin>/skills/<skill-name>/SKILL.md,命令名加命名空间如 /my-plugin:review
  • 同名覆盖优先级:enterprise > personal > project;skill 与同名 command 冲突 skill 优先。
  • frontmatter 字段全集:name、description、when_to_use、argument-hint、arguments、disable-model-invocation、user-invocable、allowed-tools、disallowed-tools、model、effort、context、agent、hooks、paths、shell。所有字段可选,仅 description 推荐。
  • description 缺省时取 markdown 正文第一段;description+when_to_use 列表中合并截断在 1,536 字符。
  • disable-model-invocation 默认 false;user-invocable 默认 true。
  • effort 选项:low、medium、high、xhigh、max(实际可用取决于模型);${CLAUDE_EFFORT} 还可能返回 ultra(ultracode 的存储值)。
  • context: fork 在 forked 子代理 context 运行;agent 缺省用 general-purpose,可选 Explore、Plan、general-purpose 或 .claude/agents/ 自定义。
  • shell 接受 bash(默认)或 powershell;powershell 需 CLAUDE_CODE_USE_POWERSHELL_TOOL=1
  • paths 用 glob 限制激活时机,格式同 path-specific rules。
  • 字符串替换变量:$ARGUMENTS、$ARGUMENTS[N](0-based)、$N(如 $0、$1)、$name(按 arguments 列表位置映射)、${CLAUDE_SESSION_ID}、${CLAUDE_EFFORT}、${CLAUDE_SKILL_DIR}。
  • 调用带参数但正文无 $ARGUMENTS 时,Claude Code 在正文末尾追加 ARGUMENTS: <your input>
  • 索引参数用 shell 风格引号:/my-skill "hello world" second 使 $0=hello world、$1=second。
  • 动态注入 inline 形式 ` !command :仅当 ! 在行首或紧跟空白时识别;KEY=!cmd 这类被当字面文本不执行。多行用 ``! 围栏块。
  • 替换只对原文件扫描一次,命令输出不被二次扫描。
  • 建议 SKILL.md 控制在 500 行以内,详细参考资料拆到单独文件。
  • 自动压缩后每个技能保留前 5,000 tokens,重新附加技能共享 25,000 tokens 预算。
  • 技能列表预算默认模型 context window 的 1%;用 skillListingBudgetFraction(如 0.02=2%)或 SLASH_COMMAND_TOOL_CHAR_BUDGET(固定字符数)调整;用 maxSkillDescriptionChars 配置 1,536 字符上限。
  • /run、/verify、/run-skill-generator 需 Claude Code v2.1.145 或更高;/run-skill-generator 把启动配方提交为 .claude/skills/run-<name>/
  • skillOverrides 四种值:on(名+描述,列出且在/菜单)、name-only(仅名)、user-invocable-only(对 Claude 隐藏但在/菜单)、off(全隐藏);缺省视为 on;写入 .claude/settings.local.json;plugin 技能不受 skillOverrides 影响(用 /plugin 管理)。
  • 权限语法:Skill(name) 精确匹配,Skill(name *) 前缀匹配;deny 规则加 Skill 可禁全部。
  • Bundled skills 示例:/code-review、/batch、/debug、/loop、/claude-api,每个 session 都可用,在 commands reference 中标记为 Skill。
  • Live change detection:监听 ~/.claude/skills/、项目 .claude/skills/--add-dir 目录内 .claude/skills/ 的增删改,当前会话即时生效;新建顶层目录需重启。
  • monorepo:项目技能从启动目录到仓库根逐级父目录加载,工作于子目录文件时按需发现嵌套 .claude/skills/(如 packages/frontend/.claude/skills/)。
  • CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 用于加载 --add-dir 目录的 CLAUDE.md(默认不加载)。
  • 正文含 ultrathink 可请求更深推理;用 /doctor 诊断技能列表预算溢出。

官方出处:https://code.claude.com/docs/en/skills

模块 · Hooks(钩子)

Hooks(钩子)

Hooks 是在 Claude Code 生命周期的特定事件点自动触发的用户自定义脚本/请求,用于观测、注入上下文或拦截/否决某些操作。

是什么

Hooks 是配置在 settings.json(或插件、Skill/Agent frontmatter)里的处理器,会在 Claude Code 运行过程中的特定事件(如 PreToolUse、UserPromptSubmit、Stop、SessionStart 等)被触发执行。处理器有 5 种类型:command(执行命令)、http(调用 HTTP 端点)、mcp_tool(调用 MCP 工具)、prompt(用小模型评估)、agent(用 agent 评估)。Hook 通过 stdin 收到 JSON 输入,通过 exit code 和 stdout 的 JSON 返回结果,从而能在事件点做日志、注入额外上下文、甚至阻断/否决工具调用与提示处理。

怎么工作

怎么配置

配置位置(优先级从低到高):~/.claude/settings.json(user,全局)< .claude/settings.json(project,可提交)< .claude/settings.local.json(local,gitignore)< Managed policy settings(企业策略,覆盖一切);另有插件 hooks/hooks.json 与 Skill/Agent frontmatter 内联。

JSON 结构:
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          { "type": "command", "command": "${CLAUDE_PROJECT_DIR}/scripts/check.sh", "timeout": 30 }
        ]
      }
    ]
  }
}

command hook 典型:通过 stdin 读 JSON,用 jq 解析,输出 hookSpecificOutput 决定 deny:
COMMAND=$(jq -r '.tool_input.command' < /dev/stdin)
if echo "$COMMAND" | grep -q 'rm -rf'; then
  jq -n '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:"Destructive command blocked"}}'
else exit 0; fi

Skill/Agent frontmatter 内联:
hooks:
  PreToolUse:
    - matcher: "Tool"
      hooks:
        - type: command
          command: "./script.sh"
全局关闭:在 settings 里设 "disableAllHooks": true。运行时输入 /hooks 可打开只读浏览器查看所有事件与处理器(编辑只能改 JSON)。

什么时候用

限制 / 坑

硬事实速查(21 条精确事实)
  • 配置文件:~/.claude/settings.json(user)、.claude/settings.json(project,可提交)、.claude/settings.local.json(local,gitignore)、Managed policy settings(企业,覆盖全部)、插件 hooks/hooks.json、Skill/Agent frontmatter。
  • 优先级:local 覆盖 project 覆盖 user;managed policy 覆盖一切;插件 hook 在插件启用时合并。
  • 处理器类型 type:command、http、mcp_tool、prompt、agent。
  • 默认 timeout(秒):command/http/mcp_tool = 600,prompt = 30,agent = 60;在 UserPromptSubmit 下 command/http/mcp_tool/prompt 默认 30、agent 60。
  • 通用输入字段:session_id、transcript_path、cwd、permission_mode(default|plan|acceptEdits|auto|dontAsk|bypassPermissions)、effort.level(low|medium|high|xhigh|max|ultra)、hook_event_name、agent_id、agent_type。
  • 退出码:0 = 成功并解析 stdout JSON;2 = 阻断错误,stderr 回喂给 Claude;其他非零 = 非阻断错误,显示 stderr 第一行。
  • PreToolUse 决策:hookSpecificOutput.permissionDecision = allow|deny|ask|defer,配 permissionDecisionReason。
  • PermissionRequest 决策:hookSpecificOutput.decision.behavior = allow|deny(可带 updatedInput、appliedRules)。
  • 顶层决策事件(UserPromptSubmit/UserPromptExpansion/PostToolUse/PostToolUseFailure/PostToolBatch/Stop/SubagentStop/ConfigChange/PreCompact)用 decision:"block" + reason。
  • 通用输出字段:continue、stopReason、suppressOutput、systemMessage、terminalSequence、decision、reason、hookSpecificOutput。
  • matcher:'*'/''/省略=全部;纯字母数字+_+|=精确或竖线列表(Bash、Edit|Write);含其他字符=JavaScript 正则。
  • MCP 工具命名格式 mcp__<server>__<tool>,例 mcp__memory__create_entities;matcher 可写 mcp__memory__.* 或 mcp__.*__write.*。
  • 路径占位符:${CLAUDE_PROJECT_DIR}、${CLAUDE_PLUGIN_ROOT}、${CLAUDE_PLUGIN_DATA}。
  • 环境变量:CLAUDE_PROJECT_DIR(所有 hook 进程)、CLAUDE_PLUGIN_ROOT/CLAUDE_PLUGIN_DATA(插件 hook)、CLAUDE_ENV_FILE(SessionStart/Setup/CwdChanged/FileChanged,写 export 持久化到 Bash)、CLAUDE_CODE_REMOTE(web 为 "true",CLI 未设)、CLAUDE_EFFORT(low|medium|high|xhigh|max|ultra)。
  • 输出字符串上限 10,000 字符。
  • 版本要求:terminalSequence 需 v2.1.141+;hook 无 controlling terminal 为 macOS/Linux v2.1.139+。
  • 主要事件:SessionStart、Setup、UserPromptSubmit、UserPromptExpansion、PreToolUse、PermissionRequest、PermissionDenied、PostToolUse、PostToolUseFailure、PostToolBatch、Notification、MessageDisplay、SubagentStart、SubagentStop、TaskCreated、TaskCompleted、Stop、StopFailure、TeammateIdle、InstructionsLoaded、ConfigChange、CwdChanged、FileChanged、WorktreeCreate、WorktreeRemove、PreCompact、PostCompact、Elicitation、ElicitationResult、SessionEnd。
  • SessionStart matcher:startup|resume|clear|compact;PreCompact/PostCompact matcher:manual|auto;SessionEnd 结束原因:clear|resume|logout|prompt_input_exit|bypass_permissions_disabled|other。
  • Exec form(设 args)不经 shell 解释、特殊字符原样传;Shell form(省略 args)走 shell 分词/展开/管道,可用 shell:"powershell" 强制 PowerShell。
  • 去重:command 按 command+args,http 按 URL,其他按相同处理器。
  • 全局开关:"disableAllHooks": true;运行时 /hooks 打开只读浏览器。

官方出处:https://code.claude.com/docs/en/hooks

模块 · MCP(外部工具/数据)

MCP(外部工具/数据)

MCP(Model Context Protocol)是一套开源标准,让 Claude Code 连接外部工具、数据库和 API,直接读取并操作这些系统而不用手动复制粘贴。

是什么

MCP(Model Context Protocol)是一个面向 AI-工具集成的开源标准(modelcontextprotocol.io)。通过连接 MCP server,Claude Code 可以访问你的工具、数据库和 API——例如从 JIRA 读 issue、查 Sentry 错误、查 PostgreSQL 数据库、读 Figma 设计稿。连接方式分三种传输:远程 HTTP(推荐)、远程 SSE(已废弃)、本地 stdio(本地进程)。当你发现自己在反复从别的工具(issue tracker、监控面板)往对话里复制数据时,就该接一个 MCP server。

怎么工作

怎么配置

三种 scope 的存储位置:local 与 user 存在 ~/.claude.json(local 写在该 project 路径下的 mcpServers,user 跨所有 project),project 存在项目根的 .mcp.json(入版本控制、团队共享,首次使用需审批)。

添加命令(所有 options 必须在 server name 之前,再用 -- 分隔传给 server 的命令):
- HTTP: claude mcp add --transport http <name> <url>,加认证头 --header "Authorization: Bearer your-token"
- SSE(已废弃): claude mcp add --transport sse <name> <url>
- stdio: claude mcp add [options] <name> -- <command> [args...],例 claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable -- npx -y airtable-mcp-server
- JSON: claude mcp add-json <name> '<json>'
- 从 Claude Desktop 导入: claude mcp add-from-claude-desktop(仅 macOS / WSL)

scope: --scope local|project|user(local 为默认;旧版 local 叫 project、user 叫 global)。

.mcp.json 标准格式(stdio 例):
{ "mcpServers": { "shared-server": { "command": "/path/to/server", "args": [], "env": {} } } }
HTTP 例(type 可写 http 或别名 streamable-http):
{ "mcpServers": { "api-server": { "type": "http", "url": "${API_BASE_URL:-https://api.example.com}/mcp", "headers": { "Authorization": "Bearer ${API_KEY}" } } } }
env 变量展开支持 ${VAR} 和 ${VAR:-default},可用于 command/args/env/url/headers;必需变量未设且无默认值会导致解析失败。

管理:claude mcp list / claude mcp get <name> / claude mcp remove <name> / 交互内 /mcp(认证、看状态、清除认证)。重置 project 审批:claude mcp reset-project-choices。把 Claude Code 自身当 server:claude mcp serve。

什么时候用

限制 / 坑

硬事实速查(27 条精确事实)
  • 三种 scope 存储:local→~/.claude.json(当前 project),project→项目根 .mcp.json(团队共享、入版本控制),user→~/.claude.json(跨所有 project)。
  • 注意区分:MCP local-scope server 存 ~/.claude.json,而通用 local settings 存 .claude/settings.local.json(不是同一个)。
  • scope 优先级:1 Local 2 Project 3 User 4 Plugin-provided 5 claude.ai connectors。
  • 传输类型:http(推荐,别名 streamable-http)、sse(deprecated)、stdio。
  • 核心命令:claude mcp add / add-json / add-from-claude-desktop / list / get <name> / remove <name> / reset-project-choices / serve。交互内 /mcp 与 /status。
  • --scope 取值:local(默认,旧名 project)/ project(旧名 global 是 user)/ user(旧名 global)。
  • stdio server 环境会被注入 CLAUDE_PROJECT_DIR(=project root);plugin 配置可直接用 ${CLAUDE_PROJECT_DIR},普通 .mcp.json 引用需给默认值如 ${CLAUDE_PROJECT_DIR:-.}。
  • env 展开语法:${VAR} 和 ${VAR:-default};可展开位置:command、args、env、url、headers。
  • 重连:HTTP/SSE 自动重连,指数退避,最多 5 次,初始 1 秒延迟、每次翻倍。stdio 不重连。
  • v2.1.121 起:初连瞬时错误(5xx / connection refused / timeout)最多重试 3 次;认证错误与 not-found 不重试。
  • 超时:MCP_TIMEOUT 控制 server 启动超时(例 MCP_TIMEOUT=10000 = 10 秒);.mcp.json 每 server 加 timeout 字段(毫秒,例 "timeout": 600000 = 10 分钟)覆盖 MCP_TOOL_TIMEOUT;小于 1000 取整为 1 秒;HTTP/SSE 首字节预算有 60 秒下限。
  • 输出:超 10,000 tokens 告警;默认上限 25,000 tokens;用 MAX_MCP_OUTPUT_TOKENS 调整(例 MAX_MCP_OUTPUT_TOKENS=50000)。
  • server 作者可在 tool 的 tools/list 用 _meta["anthropic/maxResultSizeChars"] 提升单 tool 文本阈值,硬上限 500,000 字符;对 image 无效。
  • 认证:401 或 403 触发标记需认证;支持 OAuth 2.0;/mcp 走流程,菜单内 Clear authentication 撤销;client secret 存 macOS keychain 或凭据文件,不进 config。
  • OAuth flag:--callback-port(固定回调端口,格式 http://localhost:PORT/callback)、--client-id、--client-secret(掩码输入),或环境变量 MCP_CLIENT_SECRET;只对 HTTP/SSE 有效。
  • OAuth 高级 .mcp.json oauth 字段:authServerMetadataUrl(需 v2.1.64+,必须 https)、scopes(空格分隔字符串,优先级最高);默认发现链先查 RFC 9728 /.well-known/oauth-protected-resource 再 RFC 8414 /.well-known/oauth-authorization-server。
  • headersHelper:动态生成请求头,命令需向 stdout 输出 JSON 字符串键值对,10 秒超时、无缓存;注入 CLAUDE_CODE_MCP_SERVER_NAME 与 CLAUDE_CODE_MCP_SERVER_URL。
  • Tool Search 默认开启;ENABLE_TOOL_SEARCH 取值:unset(全部延迟)/ true(强制延迟,发 beta header)/ auto(装得下 10% context 就 upfront 否则延迟)/ auto:N(自定义百分比,N 0-100,如 auto:5)/ false(全部 upfront)。可在 settings.json env 设置,或用 permissions.deny ["ToolSearch"] 禁掉。
  • alwaysLoad:.mcp.json server 级字段(需 v2.1.121+,所有 transport 可用)或 tool _meta 内 "anthropic/alwaysLoad": true,让 tool 始终 upfront;设 true 还会阻塞启动直到连上,上限 5 秒连接超时。
  • MCP resources 引用格式:@server:protocol://resource/path,例 @github:issue://123、@docs:file://api/authentication。
  • MCP prompts 作为 command:/mcp__servername__promptname,参数空格分隔,例 /mcp__github__pr_review 456。
  • plugin 内 MCP 用 ${CLAUDE_PLUGIN_ROOT}(bundled 文件)、${CLAUDE_PLUGIN_DATA}(持久化状态)、${CLAUDE_PROJECT_DIR};session 中改了 plugin 启停需 /reload-plugins。
  • 禁用 claude.ai MCP server:ENABLE_CLAUDEAI_MCP_SERVERS=false claude;在 claude.ai/customize/connectors 添加(Team/Enterprise 仅 admin 可加)。
  • scaffold 自己的 server:/plugin install mcp-server-dev@claude-plugins-official,然后 /mcp-server-dev:build-mcp-server。
  • Claude Code 当 server:claude mcp serve,在 claude_desktop_config.json 配 command "claude" args ["mcp","serve"],找路径用 which claude,否则报 spawn claude ENOENT。
  • Elicitation:server 可中途请求结构化输入(Form mode 表单 / URL mode 浏览器),无需配置自动弹窗;可用 Elicitation hook 自动应答。
  • 企业集中管控见 Managed MCP:managed-mcp.json + allowedMcpServers / deniedMcpServers。

官方出处:https://code.claude.com/docs/en/mcp

模块 · Slash Commands(斜杠命令)

Slash Commands(斜杠命令)

在 Claude Code 中用 / 触发的命令;自定义命令已合并进 Skills,由 SKILL.md(或旧的 .claude/commands/*.md)定义,可由你手动触发或让 Claude 自动加载。

是什么

官方文档 https://code.claude.com/docs/en/slash-commands 现已重定向到「Extend Claude with skills」页面,因为 **Custom commands have been merged into skills**(自定义斜杠命令已合并进 Skills)。一个 .claude/commands/deploy.md 文件和一个 .claude/skills/deploy/SKILL.md 都会创建 /deploy,二者行为一致;已有的 .claude/commands/ 文件继续可用。Skills 在此基础上增加了:支持文件目录、控制由你还是 Claude 调用的 frontmatter、以及 Claude 在相关时自动加载的能力。Skills 遵循 Agent Skills 开放标准(agentskills.io),Claude Code 在其上扩展了 invocation control、subagent execution、dynamic context injection。built-in commands(如 /help/compact)和 bundled skills(如 /code-review/batch/debug/loop/claude-api)见 /en/commands 参考页。

怎么工作

怎么配置

文件位置(按优先级 enterprise > personal > project,plugin 用 plugin-name:skill-name 命名空间不冲突):Personal=~/.claude/skills/<skill-name>/SKILL.md(所有项目可用);Project=.claude/skills/<skill-name>/SKILL.md(仅本项目,提交进 VCS 共享);Plugin=<plugin>/skills/<skill-name>/SKILL.md;旧式 Custom command=.claude/commands/<name>.md。SKILL.md 结构:--- 之间是 YAML frontmatter(所有字段可选,仅推荐写 description),其后是 markdown 指令。最小例:---\ndescription: ...\n---\n## Instructions\n...。动态注入例:!git diff HEAD。参数例:Fix GitHub issue $ARGUMENTS 配 /fix-issue 123。fork 例:frontmatter 加 context: fork 和 agent: Explore。权限预批准:allowed-tools: Bash(git add *) Bash(git commit *)。禁止 Claude 自动调用:disable-model-invocation: true。从 / 菜单隐藏:user-invocable: false。设置文件层面覆盖可见性用 .claude/settings.local.json 的 skillOverrides(/skills 菜单里 Space 切换、Enter 保存)。

什么时候用

限制 / 坑

硬事实速查(21 条精确事实)
  • 官方文档 https://code.claude.com/docs/en/slash-commands 现重定向到 skills 页(标题 Extend Claude with skills)。原文:Custom commands have been merged into skills。
  • 路径:Personal ~/.claude/skills/<skill-name>/SKILL.md;Project .claude/skills/<skill-name>/SKILL.md;Plugin <plugin>/skills/<skill-name>/SKILL.md;旧式 .claude/commands/<name>.md
  • 优先级:enterprise 覆盖 personal,personal 覆盖 project;plugin 用 plugin-name:skill-name 命名空间;同名时 skill 优先于 command。
  • 命令名来源:skills 目录名(.claude/skills/deploy-staging → /deploy-staging);commands 去扩展名文件名(.claude/commands/deploy.md → /deploy);plugin skills/ 子目录用目录名并加 plugin 前缀(my-plugin/skills/review → /my-plugin:review);plugin 根 SKILL.md 用 frontmatter name、缺省回退到 plugin 目录名。
  • frontmatter 字段:name、description(recommended)、when_to_use、argument-hint、arguments、disable-model-invocation(默认 false)、user-invocable(默认 true)、allowed-tools、disallowed-tools、model、effort、context、agent、hooks、paths、shell。
  • effort 选项:low / medium / high / xhigh / max(按模型可用)。
  • shell 字段:bash(默认)或 powershell;powershell 需 CLAUDE_CODE_USE_POWERSHELL_TOOL=1
  • 字符串替换变量:$ARGUMENTS$ARGUMENTS[N]$N($0 为第一个)、$name(来自 arguments 列表,按顺序映射)、${CLAUDE_SESSION_ID}${CLAUDE_EFFORT}(low/medium/high/xhigh/max/ultra,ultra 是 ultracode 的存储值)、${CLAUDE_SKILL_DIR}(SKILL.md 所在目录)。
  • 动态注入:行内 ` !<command> ;多行用 ``! 围栏块;在发给 Claude 前执行、输出替换占位符。
  • description+when_to_use 合并文本在 skill 列表中截断于 1,536 characters;可用 maxSkillDescriptionChars 配置。
  • skill 列表预算默认为模型 context window 的 1%,用 skillListingBudgetFraction(如 0.02=2%)或环境变量 SLASH_COMMAND_TOOL_CHAR_BUDGET(固定字符数)调整;用 /doctor 查溢出。
  • compaction:每个重新附加 skill 保留前 5,000 tokens;所有重新附加 skill 共享 25,000 tokens 预算。
  • 建议 SKILL.md 保持 < 500 lines。
  • context: fork 用 agent 字段选 subagent:Explore / Plan / general-purpose 或 .claude/agents/ 自定义;省略则 general-purpose;Explore/Plan 会跳过 CLAUDE.md 和 git status。
  • Skill tool 权限:/permissions 里 deny Skill 禁用全部;Skill(name) 精确匹配、Skill(name *) 前缀匹配;少数 built-in 命令可经 Skill tool 调用,含 /init、/review、/security-review,而 /compact 等不可。
  • skillOverrides 四种状态:on(名+描述,菜单可见)、name-only(仅名,菜单可见)、user-invocable-only(对 Claude 隐藏,菜单可见)、off(全隐藏);缺省视为 on;写入 .claude/settings.local.json
  • Bundled skills:/code-review、/batch、/debug、/loop、/claude-api;/run、/verify、/run-skill-generator 需 Claude Code v2.1.145 或更高,记录的 per-project skill 存于 .claude/skills/run-<name>/
  • disableSkillShellExecution: true(settings)禁用 user/project/plugin/additional-directory 来源的 shell 注入;bundled 与 managed skills 不受影响。
  • 附加目录:.claude/skills/--add-dir//add-dir 目录下会自动加载(例外);permissions.additionalDirectories 不加载 skills;附加目录 CLAUDE.md 默认不加载,需 CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1
  • skill 目录结构:SKILL.md(必需入口)+ 可选 template.md / examples/ / scripts/ 等支持文件。
  • 在 skill 内容任意位置写 ultrathink 可请求更深推理。

官方出处:https://code.claude.com/docs/en/slash-commands

模块 · Plugins(插件)

Plugins(插件)

把 skills/agents/hooks/MCP/LSP/monitors 等自定义能力打包成可版本化、可跨项目复用、可通过 marketplace 分发的扩展单元。

是什么

Plugin 是 Claude Code 的扩展打包机制:一个目录里放一个 .claude-plugin/plugin.json manifest,加上 skills/agents/hooks/.mcp.json.lsp.jsonmonitors/bin/settings.json 等组件目录/文件。相对于直接放在 .claude/ 的 standalone 配置,plugin 的核心区别是:可分享给团队/社区、可版本化更新、可跨多个项目复用、通过 marketplace 安装;代价是 skill 名称被强制加上命名空间前缀(如 /my-plugin:hello)。官方文档把 standalone(.claude/,skill 名形如 /hello)与 plugin(.claude-plugin/plugin.json,skill 名形如 /plugin-name:hello)作为两种并列方式对照。

怎么工作

怎么配置

manifest 路径固定为 <plugin>/.claude-plugin/plugin.json,最小示例:
{
  "name": "my-first-plugin",
  "description": "A greeting plugin to learn the basics",
  "version": "1.0.0",
  "author": { "name": "Your Name" }
}
组件目录全部放 plugin 根(不是 .claude-plugin/ 里面):skills/<name>/SKILL.md、commands/(旧式扁平 md,新 plugin 用 skills/)、agents/、hooks/hooks.json、.mcp.json、.lsp.json、monitors/monitors.json、bin/、settings.json。
SKILL.md frontmatter 示例:description:(决定何时调用)、disable-model-invocation: true(禁止模型自动触发);正文里用 $ARGUMENTS 接收输入。
本地测试:claude --plugin-dir ./my-plugin(可重复多次加载多个;也接受 .zip,需 v2.1.128+);远程 zip:claude --plugin-url https://example.com/my-plugin.zip(可重复或空格分隔)。
marketplace:/plugin marketplace add anthropics/claude-plugins-community 添加社区市场,安装用 /plugin install;提交前本地跑 claude plugin validate。

什么时候用

限制 / 坑

硬事实速查(26 条精确事实)
  • manifest 固定路径:.claude-plugin/plugin.json
  • plugin.json 字段:name(唯一标识 + skill 命名空间)、description(plugin manager 中展示)、version(可选,控制更新)、author(可选,如 {"name": "Your Name"});更多字段如 homepage/repository/license 见 plugins-reference
  • skill 命名规则:skills/<folder>/SKILL.md,名称变为 /<plugin-name>:<folder>,如 /my-first-plugin:hello
  • SKILL.md frontmatter 字段示例:descriptiondisable-model-invocation: true
  • skill 参数占位符:$ARGUMENTS
  • plugin 根目录组件清单:.claude-plugin/(仅放 plugin.json)、skills/commands/agents/hooks/.mcp.json.lsp.jsonmonitors/bin/settings.json
  • commands/ = 扁平 Markdown 文件形式的 skill;新 plugin 应改用 skills/
  • hooks/hooks.json 格式与 .claude/settings.jsonhooks 对象相同;hook command 通过 stdin 收 JSON
  • .lsp.json 字段:每语言 key 下 commandargsextensionToLanguage(如 {".go": "go"});示例 command gopls args ["serve"]
  • monitors/monitors.json 是数组,条目字段含 namecommanddescription;还有 when 触发器和变量替换(见 reference)
  • settings.json 支持的 key:agentsubagentStatusLine
  • bin/ 中可执行文件在 plugin 启用时加入 Bash 工具 PATH
  • 本地加载命令:claude --plugin-dir ./my-first-plugin,可重复指定多次
  • --plugin-dir 接受 .zip 需 Claude Code v2.1.128+
  • 远程加载命令:claude --plugin-url https://example.com/my-plugin.zip,可重复或空格分隔多 URL
  • 热重载命令:/reload-plugins(重载 plugins/skills/agents/hooks/plugin MCP servers/plugin LSP servers)
  • 查看 agent:/agents;查看 skill 列表:/help
  • 官方两个公共 marketplace:claude-plugins-official(Anthropic 策展,每个安装自带)、claude-community(社区,第三方审核后落地)
  • 添加社区市场命令:/plugin marketplace add anthropics/claude-plugins-community,从中安装记作 @claude-community
  • 安装命令:/plugin install
  • 本地校验命令:claude plugin validate(提交前跑,审核管线也跑同样检查)
  • 社区提交表单:Claude.ai claude.ai/settings/plugins/submit、Console platform.claude.com/plugins/submit
  • 审核通过的 plugin 在 anthropics/claude-plugins-community catalog 中被 pin 到特定 commit SHA,CI 随新 commit 自动 bump pin
  • 社区 catalog 路径:anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json,每晚同步
  • 迁移对照:.claude/commands/plugin-name/commands/settings.json 中 hooks → hooks/hooks.json
  • standalone skill 名 /hello vs plugin skill 名 /plugin-name:hello

官方出处:https://code.claude.com/docs/en/plugins

模块 · Permissions(权限)

Permissions(权限)

通过 allow/ask/deny 规则、权限模式和托管策略,细粒度控制 Claude Code 能用哪些工具、能访问哪些文件和域名。

是什么

Permissions 是 Claude Code 的分层权限系统,用来精确指定 agent 被允许做什么、不被允许做什么。规则可以签入版本控制并分发给组织内所有开发者,也能被单个开发者自定义。权限规则由 Claude Code(而非模型)强制执行——prompt 或 CLAUDE.md 只能影响 Claude "想做什么",不能改变 Claude Code "允许什么"。它和 Sandboxing(OS 级隔离)是互补的两层安全。

怎么工作

怎么配置

用 /permissions 命令查看和管理所有规则及其来源 settings.json 文件。规则写在 settings 文件的 permissions 对象下的 allow / ask / deny 数组里,并通过 defaultMode 设置默认权限模式。settings 文件优先级(高到低):Managed settings > 命令行参数 > .claude/settings.local.json > .claude/settings.json > ~/.claude/settings.json。示例:
{
  "permissions": {
    "allow": ["Bash(npm run *)", "Bash(git commit *)", "Bash(git * main)"],
    "deny": ["Bash(git push *)", "Read(.env)", "Agent(Explore)"]
  }
}
扩展工作目录:启动用 --add-dir <path>,session 中用 /add-dir,持久化用 settings 里的 additionalDirectories。CLI 还可用 --allowedTools / --disallowedTools 临时覆盖。

什么时候用

限制 / 坑

硬事实速查(30 条精确事实)
  • 管理命令:/permissions(查看/管理规则,显示来源 settings.json)
  • 三个规则数组:permissions.allow / permissions.ask / permissions.deny
  • 求值顺序:deny -> ask -> allow,第一条匹配生效
  • 规则格式:Tool 或 Tool(specifier);Bash(*) 等价于 Bash
  • 权限模式(defaultMode 取值):default / acceptEdits / plan / auto(research preview)/ dontAsk / bypassPermissions
  • acceptEdits 自动接受文件编辑和常见 fs 命令 mkdir/touch/mv/cp 等(限工作目录或 additionalDirectories 内路径)
  • dontAsk:自动拒绝未经 /permissions 或 permissions.allow 预批准的工具
  • bypassPermissions:跳过所有弹窗,但 rm -rf / 和 rm -rf ~ 仍弹窗;会写 .git/.claude/.vscode/.idea/.husky
  • 禁用模式:permissions.disableBypassPermissionsMode、permissions.disableAutoMode 设为 "disable"
  • Bash 通配符:* 可在任意位置;Bash(ls *) 匹配 ls -la 不匹配 lsof;Bash(ls*) 两者都匹配;:* 后缀等价结尾 ' *'
  • Bash 复合命令分隔符:&& || ; | |& & 和换行;单条复合命令最多存 5 条规则
  • 剥离的进程包装器(内置不可配置):timeout、time、nice、nohup、stdbuf,以及无 flag 的 xargs
  • 始终弹窗的 exec 包装器:watch、setsid、ionice、flock;find -exec / -delete 也不被 Bash(find *) 覆盖
  • 内置只读 Bash 命令:ls cat echo pwd head tail grep find wc which diff stat du cd 及只读形式 git(不可配置)
  • Read/Edit 四种 gitignore 锚点://path 绝对、~/path 家目录、/path 项目根相对、path 或 ./path 当前目录相对
  • 示例:Read(//Users/alice/secrets/**)、Read(~/Documents/*.pdf)、Edit(/src/**/*.ts)、Read(*.env)
  • Read(.env) 等价 Read(**/.env);* 匹配单层、** 递归
  • Windows 路径归一化为 POSIX:C:\Users\alice -> /c/Users/alice,跨盘用 //**/.env
  • WebFetch 规则:WebFetch(domain:example.com)
  • MCP 规则:mcp__puppeteer(整个 server)、mcp__puppeteer__*(通配全部工具)、mcp__puppeteer__puppeteer_navigate(单个工具)
  • Agent 规则:Agent(Explore)、Agent(Plan)、Agent(my-custom-agent);可用 --disallowedTools 禁用
  • PowerShell 规则:与 Bash 同形,PowerShell(Get-ChildItem *)、:* 后缀等价;别名 gci/ls/dir 会被规范化匹配;大小写不敏感;7+ 支持 && ||
  • 工作目录扩展:--add-dir <path>(启动)、/add-dir(session)、additionalDirectories(持久化 settings)
  • settings 优先级(高到低):Managed settings > 命令行参数 > .claude/settings.local.json > .claude/settings.json > ~/.claude/settings.json
  • CLI 标志:--allowedTools、--disallowedTools
  • Managed-only 设置示例:allowManagedPermissionRulesOnly、allowManagedMcpServersOnly、allowManagedHooksOnly、strictPluginOnlyCustomization、disableBypassPermissionsMode、forceRemoteSettingsRefresh
  • env 变量:CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1(让 --add-dir 目录加载 CLAUDE.md)
  • sandbox 默认 autoAllowBashIfSandboxed: true,沙箱内 Bash 即使有 ask: Bash(*) 也不弹窗,但 deny 和 rm 关键路径仍生效
  • 符号链接检查 symlink 路径与解析目标两条路径;allow 需双匹配,deny 任一匹配即拦
  • PreToolUse hook:exit code 2 阻塞优先于 allow;hook 不能绕过 deny/ask

官方出处:https://code.claude.com/docs/en/permissions

模块 · Settings(设置)

Settings(设置)

Claude Code 通过分层的 settings.json 文件统一管理权限、模型、环境变量、hooks、MCP、UI 等几乎所有可配置行为,并按 Managed → 命令行 → Local → Project → User 的优先级合并。

是什么

Settings 是 Claude Code 的核心配置系统,主体是 JSON 格式的 settings.json 文件,分布在四个 scope:Managed(IT 部署、不可覆盖)、User(~/.claude/settings.json)、Project(.claude/settings.json,提交到 git)、Local(.claude/settings.local.json,被 gitignore)。同一个 key 出现在多个 scope 时按固定优先级合并。文档原话:「settings.json supports a number of options」。除 settings.json 外,还有一批存放在 ~/.claude.json 的全局/UI 类配置,以及对应的环境变量、/config 命令交互界面。

怎么工作

怎么配置

主配置文件路径(按 scope):User=~/.claude/settings.json;Project=.claude/settings.json(提交 git);Local=.claude/settings.local.json(gitignore);Managed=系统级 managed-settings.json。Windows 上 ~/.claude 解析为 %USERPROFILE%\.claude。

典型 permissions 配置:
"permissions": {
  "allow": ["Bash(npm run lint)", "Bash(npm run test *)", "Read(~/.zshrc)"],
  "deny": ["Bash(curl *)", "Read(./.env)", "Read(./.env.*)", "Read(./secrets/**)"],
  "ask": ["Bash(git push *)"],
  "additionalDirectories": ["../docs/"],
  "defaultMode": "acceptEdits",
  "disableBypassPermissionsMode": "disable"
}

建议加 $schema 获得编辑器自动补全与校验:
{ "$schema": "https://json.schemastore.org/claude-code-settings.json" }

另一批 UI/全局配置存在 ~/.claude.json(如 editorMode、autoScrollEnabled、showTurnDuration、teammateMode、autoConnectIde)。交互式修改用 /config 命令(含状态查看、模型/主题/effort/memory 等切换)。

什么时候用

限制 / 坑

硬事实速查(24 条精确事实)
  • 四个 scope 文件路径:User=~/.claude/settings.json;Project=.claude/settings.json(committed to git);Local=.claude/settings.local.json(gitignored);Managed=system managed-settings.json。
  • 优先级(高→低):1 Managed 2 Command line arguments 3 Local 4 Project 5 User。
  • Windows:~/.claude 解析为 %USERPROFILE%\.claude。
  • 其他配置文件位置:Subagents 在 ~/.claude/agents/ 或 .claude/agents/;MCP servers 在 ~/.claude.json 与 .mcp.json;CLAUDE.md 在 ~/.claude/CLAUDE.md、CLAUDE.md 或 .claude/CLAUDE.md、CLAUDE.local.md。
  • API/认证 key:apiKeyHelper(/bin/sh 脚本,生成 X-Api-Key 与 Authorization: Bearer 头)、forceLoginMethod("claudeai" 或 "console")、forceLoginOrgUUID(UUID 字符串或数组)。
  • 模型类 key:model、availableModels(如 ["sonnet","haiku"])、modelOverrides(映射到 Bedrock ARN 等)、alwaysThinkingEnabled、effortLevel("low"/"medium"/"high"/"xhigh")。
  • env:注入每个 session 及子进程的环境变量;v2.1.143 起 NO_COLOR/FORCE_COLOR 传子进程但不改 CLI 颜色。
  • permissions 子字段:allow、deny、ask、additionalDirectories、defaultMode、disableBypassPermissionsMode、skipDangerousModePermissionPrompt。
  • 权限规则语法:Tool 匹配全部;Tool(specifier) 如 Bash(npm run *)、Read(./.env)、WebFetch(domain:example.com)。求值顺序 deny → ask → allow,first match wins。
  • permission modes:default(每次询问)、acceptEdits(自动批准编辑)、plan(先展示计划)、auto(AI 分类器,project/local 设置时被忽略,as of v2.1.142)、dontAsk、bypassPermissions(跳过全部权限检查)。
  • memory 类:autoMemoryEnabled(默认 true,可用 /memory 或 env CLAUDE_CODE_DISABLE_AUTO_MEMORY 切换)、autoMemoryDirectory、claudeMd(Managed only)、claudeMdExcludes、cleanupPeriodDays(默认 30,最小 1)。
  • MCP 类:enableAllProjectMcpServers、enabledMcpjsonServers(如 ["memory","github"])、disabledMcpjsonServers、allowedMcpServers/deniedMcpServers/allowManagedMcpServersOnly(Managed)。
  • hooks 类:hooks、disableAllHooks、allowManagedHooksOnly(Managed)、allowedHttpHookUrls(支持 * 通配)、httpHookAllowedEnvVars、statusLine(如 {"type":"command","command":"~/.claude/statusline.sh"})。
  • 凭据集成:awsAuthRefresh、awsCredentialExport(输出 JSON)、gcpAuthRefresh、otelHeadersHelper。
  • Git/署名:attribution({"commit":...,"pr":...})、includeCoAuthoredBy(已 Deprecated,默认 true)、includeGitInstructions、prUrlTemplate(占位符 {host}{owner}{repo}{number}{url})。
  • UI/UX:spinnerTipsEnabled(默认 true)、outputStyle(如 "Explanatory",/clear 或重启重建)、language、viewMode、showThinkingSummaries(默认 false)、autoUpdatesChannel("stable"/"latest")、minimumVersion。
  • 存于 ~/.claude.json 的全局/UI 配置:editorMode("normal"/"vim")、autoScrollEnabled、showTurnDuration、terminalProgressBarEnabled、teammateMode、autoConnectIde、autoInstallIdeExtension、externalEditorContext、teammateDefaultModel。
  • Skills 类:skillOverrides("on"/"name-only"/"user-invocable-only"/"off",v2.1.129)、maxSkillDescriptionChars(默认 1536,v2.1.105)、skillListingBudgetFraction(默认 0.01=1%,v2.1.105)、disableWorkflows、disableSkillShellExecution。
  • 关键环境变量:ANTHROPIC_MODEL、CLAUDE_CODE_EFFORT_LEVEL、CLAUDE_CODE_DISABLE_THINKING=1、CLAUDE_CODE_ENABLE_TELEMETRY(默认 1)、CLAUDE_CODE_DISABLE_AUTO_MEMORY、CLAUDE_CODE_USE_POWERSHELL_TOOL=1、CLAUDE_CODE_API_KEY_HELPER_TTL_MS、DISABLE_AUTOUPDATER、OTEL_METRICS_EXPORTER、CLAUDE_CODE_NO_FLICKER。
  • Managed 下发路径:macOS managed preferences domain com.anthropic.claudecode;Windows 注册表 HKLM\SOFTWARE\Policies\ClaudeCode(user 级 HKCU 最低优先级);macOS /Library/Application Support/ClaudeCode/;Linux/WSL /etc/claude-code/;Windows C:\Program Files\ClaudeCode\(C:\ProgramData\ClaudeCode\ 自 v2.1.75 不再支持);drop-in 目录 managed-settings.d/ 下 *.json 按字母序合并。
  • live reload 生效项:permissions、hooks、apiKeyHelper、credential helpers,并对每个变化触发 ConfigChange hook;需重启/特定动作项:model(用 /model)、outputStyle(/clear 或重启)。
  • $schema 校验地址:https://json.schemastore.org/claude-code-settings.json
  • worktree 配置:baseRef("fresh"/"head")、symlinkDirectories、sparsePaths、bgIsolation("worktree"/"none",v2.1.143+)。
  • sandbox 配置含 enabled、failIfUnavailable、excludedCommands,及 filesystem(allowWrite/denyWrite/denyRead/allowRead)与 network(allowedDomains/deniedDomains/allowLocalBinding 等)子块。

官方出处:https://code.claude.com/docs/en/settings