Mingyu's Library主页
2026年9月5日

第 25 课:新功能速用 —— v2.1.260 / v2.1.261

日期:2026-09-05 · 版本:v2.1.260(9/3)、v2.1.261(9/4) 前置:第 8 课(上下文管理)、第 15 课(成本控制)、第 19 课(Skills)、第 3 课(subagents)。 本课主线:这两版把「以前只能靠感觉」的三件事变成了可读的数字 —— 我改了什么、缓存为什么没命中、skill 到底吃了多少上下文。四条技巧由浅入深。


技巧 1(入门):/diff —— 让「Claude 改了哪些地方」一直摆在眼前

v2.1.260 新增了一个 diff 面板:全屏模式下它开在对话旁边,实时显示你工作区里的未提交变更,随 Claude 编辑同步刷新。

# 先进全屏(如果还没有)
/fullscreen

# 打开 / 关闭 diff 面板
/diff

为什么值得改习惯:以前想知道 Claude 到底动了什么,要么信它的自述,要么自己另开一个终端 git diff。前者会漏(它常常只说「主要改动」),后者会断(切窗口就丢上下文)。diff 面板把「审阅」从一个事后动作变成了一个持续动作——你在读它的解释的同时,右边就是真实的 diff。

配合用:让 Claude 开工前先 git add -A && git stash 或至少确保工作区干净,这样面板里出现的每一行都是本次会话的产物,没有噪音。

参考:Claude Code changelog v2.1.260


技巧 2(进阶):给缓存未命中「验尸」—— /cost 与状态栏的 prompt_cache

第 15 课讲成本控制时,prompt 缓存是最大的一根杠杆,但当时只能看到命中率高低,看不到为什么掉了。v2.1.260 给 /cost 和状态栏的 prompt_cache 字段加上了未命中的可能原因,典型的两类是:

# 会话里随时查
/cost

如果想让缓存状态常驻视野,把它挂进状态栏:

// ~/.claude/settings.json
{
  "statusLine": {
    "type": "command",
    "command": "echo \"$(jq -r '.model.display_name') | cache: $(jq -r '.cost.prompt_cache // \"-\"')\""
  }
}

怎么用这条信息:看到「工具定义变了」反复出现,说明你在会话中途反复增删 MCP server 或 skill —— 每动一次都在把前缀打碎。正确做法是在会话开始前把工具集定好,中途尽量别动。看到「闲置超 TTL」多,说明你的工作节奏是「问一句走开半小时」,那就别指望缓存,改用更少轮次、更大批量的提问方式。

同期还有一条相关修复:v2.1.260 修好了 Fable 5.1 上「工具结果之后附加的上下文没被缓存覆盖」的问题——此前每个工具调用轮次都会把这部分当未缓存输入重发一遍。用 Fable 5.1 的话,升级本身就是省钱。


技巧 3(核心):/skill-doctor —— 给你装的一堆 skill 做体检

v2.1.261 新增 /skill-doctor,列出哪些已加载的 skill 从头到尾没被用到,以及它们各自占了多少上下文,让你据此裁剪。

/skill-doctor

为什么这条最值得停下来看:第 19 课讲 Skills 的时候,鼓励的方向是「把工作流封装起来」;装到十几个之后,副作用开始显形——每个 skill 的 name + description 都要进 system prompt,而 system prompt 是缓存前缀里最靠前的一段。装了不用的 skill 是双重浪费:占 token,还稀释了模型对真正该触发的那个 skill 的注意力。

一个务实的循环:

# 1. 干完一天的活,别急着关会话
/skill-doctor

# 2. 把「零触发 + 占用大」的 skill 从项目级配置里摘掉
#    项目级:.claude/settings.json 的 enabledPlugins / skill 目录
#    用户级:~/.claude/skills/ 下直接移走

# 3. 真正常用的留在用户级,场景专属的下沉到项目级

判断标准:一个 skill 如果连续一周 /skill-doctor 都显示零触发,它要么该删,要么 description 写得没法触发——后者更常见。回去改 description(第 19 课讲过:description 里要写清楚用户会怎么说,而不是这个 skill 做什么)。

参考:Claude Code changelog v2.1.261


技巧 4(实战):把「输出被截断」和「subagent prompt 太长」这两个老坑一次填上

两个新配置项,解决的是同一类问题——默认上限挡住了正常工作。

4a. 抬高内联输出上限

以前跑一个大测试套件或长日志命令,输出超过阈值就被存成文件,Claude 只看到一个路径,得再读一次(多一轮、多一次缓存打断)。v2.1.261 让你自己定这个阈值,最高 128K 字符:

// ~/.claude/settings.json 或 .claude/settings.json
{
  "bashOutputMaxChars": 60000,
  "taskOutputMaxChars": 60000
}

别直接拉满:128K 字符约等于 30K+ token,一次刷进去会把上下文吃掉一大截。经验值是先设 40K–60K,覆盖住「典型的一次 test run」即可;真正的巨型日志,还是让它落盘、让 Claude 用 grep 去捞更划算。

4b. 把 subagent 的 system prompt 从命令行里拿出来

# 旧写法:prompt 长了就撞命令行长度上限,而且没法版本管理
claude -p "..." --append-subagent-system-prompt "你是一个只做代码审查的 agent,规则如下……"

# 新写法(v2.1.261)
claude -p "审查这个 PR" \
  --append-subagent-system-prompt-file ./.claude/prompts/reviewer.md

这条为什么重要:第 3 课讲 subagent 分工、第 24 课讲代码审查工作流,两者的落地阻力都在同一处——给 subagent 的角色约束一旦超过几百字,就只能塞进命令行,既难读也难 review。改成文件之后,这些 prompt 进了 git,可以像代码一样 diff、review、回滚,CI 里也能直接引用同一个文件,保证本地和流水线上跑的是同一套规则。


顺手一提:auto mode 的一处收紧(v2.1.261)

auto mode 现在会把「把内容打包进公开图表渲染器 URL 的链接」当作向该站点上传数据来处理 —— 除非你明确要求,否则不再自动批准。

这是一个很典型的「渲染即外传」漏洞面:Mermaid/PlantUML 这类在线渲染服务,是把图的源码 base64 编码进 URL 的。Claude 顺手给你生成一个「预览链接」,你的架构图源码就已经过去了。如果你的项目有保密要求,值得顺手补一条硬规则:

// .claude/settings.json
{
  "permissions": {
    "deny": ["WebFetch(domain:mermaid.ink)", "WebFetch(domain:kroki.io)"]
  }
}

(这与今日精选主题「爆炸半径工程」是同一个思路:允许清单是能力授予,不是目的地过滤 —— 允许一个域名,就等于允许那个域名上所有可达的功能。)


本课小结

技巧 命令 / 配置 解决什么
1 /diff 实时看未提交变更,审阅从事后变持续
2 /cost、状态栏 prompt_cache 知道缓存为什么没命中,而不只是没命中
3 /skill-doctor 找出零触发 skill 与其上下文成本,定期裁剪
4 bashOutputMaxChars / taskOutputMaxChars / --append-subagent-system-prompt-file 长输出不被截断;subagent prompt 进 git

升级:claude update,claude --version 确认到 2.1.261 或更高。


来源:Claude Code changelog(v2.1.260 · 2026-09-03,v2.1.261 · 2026-09-04)