Claude Code v2.1.178 发布 —— 参数级权限锁,嵌套目录自治

最重磅更新:Tool(param:value) 参数级权限规则
这是本次最有实质意义的改动。在此之前,Claude Code 的权限规则只能按工具名匹配——你可以允许或禁止 Read、Write、Agent 等工具,但没法说「允许 Agent 但只允许用 Sonnet」。粒度停留在工具层面。
新语法 Tool(param:value) 把规则推进到参数级别:
Agent(model:opus) → 阻止 subagent 调用 Opus 模型
Agent(model:sonnet) → 只允许 Sonnet 子 agent
Read(path:src/**) → 只允许读取 src/ 下的文件
支持 * 通配符,所以 Agent(model:claude-3-5-*) 这类范围匹配也可以写。这对于团队协作和企业合规来说是一次颗粒度的提升——管理员可以把「允许做什么」和「允许用什么做」拆成两层控制,而不是一刀切地禁掉整把工具。
一个典型场景:CI/CD 流水线里用一个 agent 做代码检查,你想确保它永远不调用 Opus(贵),但允许它自主使用 Sonnet。以前的做法是在外部脚本里拦截模型选择的逻辑,现在一行权限声明就能搞定。
第二亮点:嵌套 .claude/ 目录——就近覆盖
如果你维护过一个多模块仓库(monorepo),你一定遇到过这个问题:根目录的 .claude/skills 定义了全仓库的通用 skill,但后端子目录需要一套完全不同的 agent 行为。
之前只能把全部 skill 放在根目录,靠 skill 名称的命名约定来区分。现在,嵌套目录可以有自己的 .claude/skills、.claude/workflows/ 和输出样式配置,Claude Code 在工作时会选择「离当前文件最近」的那一份。
命名冲突时,嵌套 skill 以 <dir>:<name> 的形式出现——比如你在 frontend/.claude/skills/ 里定义了一个叫 react-lint 的 skill,又想在 backend/.claude/skills/ 里定义同名 skill,它们不会互相覆盖,而是分别注册为 frontend:react-lint 和 backend:react-lint。
这个设计思路是从「一个仓库一套配置」转向「按目录层级自治」——像一个文件系统权限模型里的 umask 继承逻辑,越近的规则优先级越高,但上层规则仍然存在,不会丢失。
子 agent 不再「绕行」:auto mode 的防御闭环
另一个值得单独说的改动:auto mode 下,subagent 的 spawn 请求现在由分类器先评估,再决定是否放行。之前存在一个缺口——subagent 可以在父 agent 未经过 permission review 的情况下发起一个 blocked 操作(比如读一个不在白名单里的目录)。现在所有 subagent 的 spawn 都要经过分类器防火墙,把这条旁路堵死了。
如果你用过 auto mode 处理敏感目录结构,这个修复在安全意义上比看起来重得多——它补的不是一个 bug,而是一个攻击面。
其他改进
/doctor UI 改版:统一的扁平树布局,不再有缩进不一致的 section;状态图标更醒目;命令名用高亮标注。排错时的信息密度和可读性都有提升。
Workflow 触发词优化:之前任何提到「workflow」这个单词的上下文都可能触发 prompt keyword 高亮。现在只匹配「run a workflow」或「workflow:」这类显式短语,配色也换成了紫色 shimmer 效果——减少了误触,也降低了视觉噪声。
Remote Control 错误信息改进:连接失败现在会在终端底部显示持久的红色 /rc failed 指示器,而不是在日志里埋一条不显眼的错误。而「not yet enabled」的报错现在会区分到底是 gate 未开启、检查失败、entitlement 过期,还是组织策略限制——之前你只能看到一句话「未启用」,不知道问题出在哪一端。
/bug 改进:提交前必须填写描述,不再用模型拒答文本作为 GitHub issue 标题。如果 Claude 拒绝了一个请求,它不会再把这个拒绝内容直接贴到 issue title 里——这个小改动对反馈质量影响挺大。
🔧 修复与优化(合并概述)
- OOM 崩溃:CLI 从父进程继承了过期的 websocket/OAuth(开放授权协议)文件描述符环境变量,触发内存溢出。已修复
- Chrome OAuth 跨账号静默失败:Chrome 登录账号与 Claude Code 登录账号不一致时连接会无声失败,现在会明确报错
- 嵌套 skill 权限阻断:非交互运行下,目录限定名的嵌套 skill 会被 permission prompt 阻断,无法正常加载
- 子 agent 多个修复:transcript 现在能显示工具结果和实时进度;在子 agent 完成回合期间发送的消息不再丢失;用 ctrl+b 将子 agent 放入后台不再从零重启
- daemon 401 认证失败:通过
ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN环境变量配置自定义 API 网关时,claude agentsworkers 报 401 错误——网关认证缓存未正确传递 - compaction fallback 模型:compaction 在模型过载或不可用时没有走
--fallback-model配置的降级链,现在补上了 - 认证刷新缓存:session 外的凭据刷新后,由于缓存的请求配置已过期,模型请求继续报 auth 错误
- 背景 session 状态滞留:用
/bg或←←创建的背景 session 在任务完成后仍然显示 "Working"——误导用户以为还有任务在执行 - MCP(Model Context Protocol,AI 工具通信协议)server 级
disallowedTools被忽略:在 subagent 的disallowedTools中配置mcp__server、mcp__server__*、mcp__*规则,之前不会生效——subagent 依然能调用这些工具 - vim 模式 undo 合并问题:
u把快速连续的命令合并成一步撤销,无法逐命令回退——现在每个 NORMAL/VISUAL 模式命令独立为一个 undo 步 - 自定义 URI scheme 链接:statusline 上点按
vscode://这类自定义协议链接,在claude agents中不会打开 - CJK(中日韩文字)IME(输入法编辑器)冲突:[VSCode] 按 Esc 关闭中文输入法候选窗时,会同时取消正在运行的 Claude 任务——两个操作共享同一个 Esc 快捷键
📌 行为变更
- Workflow prompt keyword 现在只匹配显式触发短语(「run a workflow」「workflow:」),不再对普通对话中出现的「workflow」一词高亮
- Skill 列表截断警告现在会显示受影响的 skill 描述数量,而不是一句模糊的「部分 skill 描述被截断」
升级方式
已安装用户:
claude update
新安装(三种方式任选):
# macOS/Linux(推荐)
curl -fsSL https://claude.ai/install.sh | bash
# Homebrew(macOS/Linux)
brew install --cask claude-code
# Windows(推荐)
powershell -ExecutionPolicy ByPass -c "irm https://claude.ai/install.ps1 | iex"
# WinGet(Windows)
winget install Anthropic.ClaudeCode
完整更新日志:GitHub Release
📢 关注我,获取最新开源更新日志和开发者工具动态。
#ClaudeCode #Claude #AI编程 #权限管理 #安全