日期:2026-09-13 · 主题:
/output-style切换 / Bash 改文件出 diff / Workflow 并发上限 / 遥测打仓库标签 / 权限否定规则作用域收紧 第 29 课讲的是 v2.1.267 / v2.1.268。v2.1.269(09-11)是近期体量最大的一次发布,值得单独一课。 注:本次同时发布的claude plugin eval已在第 26 课(评测驱动开发)详细讲过,这里不重复。
技巧 1(入门):/output-style —— 不退出会话就换掉 Claude 的「说话方式」
是什么:第 20 课讲过 Output Styles(输出风格),但当时只能在配置里指定。v2.1.269 加了 /output-style [name] 斜杠命令,可以列出所有可用风格并当场切换——而且这个命令在 Remote Control、云端会话、headless 会话里都能用。
为什么有用:同一个会话里,前半段你想要「简洁只给结论」,后半段做 code review 时你想要「逐条列出理由」。以前得开新会话,现在一行搞定,上下文完整保留。
# 列出当前可用的所有 output style
/output-style
# 切换到指定风格
/output-style explanatory
# 换回默认
/output-style default
自定义风格仍然放在 ~/.claude/output-styles/ 或项目的 .claude/output-styles/ 下,一个 Markdown 文件一个风格:
---
name: terse-reviewer
description: 只列问题,不写客套话,每条带文件名和行号
---
回答时遵守:
- 不写「好的」「我来看看」这类开场白
- 每个问题一行:`文件:行号 — 问题 — 建议`
- 没问题就只回一个字:通过
存好后 /output-style terse-reviewer 立刻生效。
📖 Output styles 官方文档 · v2.1.269 changelog
技巧 2(实用):让 Bash 改文件时把 diff 吐出来
是什么:Claude 有时会绕开 Edit 工具,直接用 Bash 跑 sed -i、tee、脚本来批量改文件。以前这种改动在会话里是黑箱——你只看到「命令执行成功」,不知道具体改了什么。v2.1.269 新增 bashEditDiffEnabled:当 Bash 工具处理文件编辑时,把改动的 diff 一并放进工具结果。
为什么有用:这是「防漂移」(第 8 课)缺的最后一块。Claude 自己也能看到 diff,于是下一轮它知道刚才到底改成了什么样,而不是靠猜。
在 ~/.claude/settings.json 或项目 .claude/settings.json 里打开:
{
"bashEditDiffEnabled": true
}
配套的一条安全修复也值得知道:同版本收紧了 Bash(tee:*) ——Edit() 的 deny 规则和写路径检查现在也会作用于 tee 写的目标文件,Bash(tee:*) 的 allow 规则不再覆盖工作目录之外的写入位置。如果你之前靠 tee 绕过写限制做过什么,升级后会失效,这是预期行为。
技巧 3(进阶):把 Workflow 的并发上限推到 256
是什么:Workflow 工具原来对「一次运行里同时跑几个 agent」有个固定上限。v2.1.269 加了环境变量 CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS(取值 1–256),专门给 inference-bound 的扇出任务松绑。
关键判断:什么叫 inference-bound?你的 20 个子任务各自只是「读一段代码 → 判断 → 回一段结论」,瓶颈在模型推理而不是本地 CPU/IO——这种可以大胆调高。反过来,如果每个子 agent 都要跑测试、编译、起容器,那瓶颈在机器,调高只会把机器压垮,还会把 token 账单一起放大。
# 一次性生效(适合跑一批大扇出的分析任务)
CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS=32 claude
# headless 场景:批量给 80 个文件写单测大纲
CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS=48 \
claude -p "对 src/ 下每个 .ts 文件,列出缺失的单测用例,输出 JSON" \
--output-format json > test-gaps.json
写进项目配置的话:
{
"env": {
"CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS": "24"
}
}
⚠️ 调之前先看第 15 课(成本控制):并发数直接乘在 token 消耗上。建议先用 8 → 16 → 32 阶梯试,每档观察 /cost。
技巧 4(团队向):给遥测打上仓库标签,让看板能按 repo 切分
是什么:第 27 课讲了怎么把 Claude Code 的 OpenTelemetry 指标接进看板。当时有个痛点——所有团队的数据混在一起,分不清哪个 repo 花了多少。v2.1.269 加了 OTEL_METRICS_INCLUDE_REPOSITORY:打开后,指标和事件会带上 vcs.* 仓库属性;如果同时开了 OTEL_LOG_TOOL_DETAILS,commit 事件还会带 vcs.ref.head.*。
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector.internal:4317
export OTEL_METRICS_INCLUDE_REPOSITORY=1
export OTEL_LOG_TOOL_DETAILS=1
claude
托管设置里下发给全团队(managed-settings.json):
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_METRICS_INCLUDE_REPOSITORY": "1"
}
}
打开后在看板里就能做这些查询:哪个 repo 的每任务成本最高、哪个 repo 的工具拒绝率异常、某次重构期间哪个分支的 token 曲线陡增。
同期还有一条权限相关的行为变更,做团队配置的人必须知道:以 ! 开头的 deny / ask 权限规则,现在只在写它的那个 settings 源内部生效,不再溢出到其他源;而孤零零的一个 ! 否定会被直接忽略。也就是说,你在项目 .claude/settings.json 里写的 ! 规则,不会再意外影响用户级或托管级的规则集了——如果你之前依赖这种跨源否定,升级后需要在每个源里各写一份。
📖 遥测监控文档 · IAM / 权限文档
顺带一提:v2.1.270(09-12)
只有一条,但如果你昨天升级后觉得「怎么 git status 又开始问我要权限」,就是它:
修复了长时间运行的会话中,只读 git 命令在 Bash 里意外请求权限的问题(2.1.269 引入的回归)。
升级命令:
claude update
claude --version # 应该 >= 2.1.270
一句话总结
这一课的四条其实是一条线:/output-style 让你在会话中途调整 Claude 怎么说,bashEditDiffEnabled 让你看清它到底改了什么,CLAUDE_CODE_WORKFLOW_MAX_CONCURRENT_AGENTS 让你决定它同时开几路,OTEL_METRICS_INCLUDE_REPOSITORY 让你事后按 repo 算清这一切花了多少。说、看、跑、算——v2.1.269 把这四个旋钮各拧紧了一格。
来源
主页