Week 19(5 月 4–8 日)以开发者体验细节改善为主:插件支持直接从 URL 安装 ZIP 包、Ctrl+R 历史搜索恢复全局行为、auto mode 新增 hard_deny 强制拒绝规则、Hooks 获得努力等级信息、Sub-agent 缓存命中提升 3 倍。
核心功能
1. 插件支持 ZIP 包和 URL 直接安装
之前:安装插件只能从目录加载,或通过 Marketplace 安装。
现在:
# 从本地 ZIP 文件加载插件(当前会话)
claude --plugin-dir my-plugin.zip
# 从 URL 直接获取插件(当前会话,v2.1.129 新增)
claude --plugin-url https://example.com/my-plugin.zip使用场景:
- 试用某个插件,不想正式安装(会话结束后自动消失)
- 公司内部插件从 Artifact Store(S3、Artifactory)分发
- 开发插件时快速测试
# 开发模式:从本地 ZIP 测试(不污染正式安装)
claude --plugin-url file:///path/to/my-plugin.zip
# 或从 CI 产物链接测试
claude --plugin-url https://ci.internal.example.com/artifacts/my-plugin-v0.3.zip2. Ctrl+R 历史搜索恢复全局行为
之前(v2.1.124 引入的变更,现在回滚):Ctrl+R 只搜索当前项目/会话的历史。
现在:Ctrl+R 默认搜索所有项目的全部历史(恢复 v2.1.124 之前的行为)。
在搜索时按 Ctrl+S:缩小到当前项目或当前会话的历史。
Ctrl+R → 全局搜索(跨所有项目)
→ 在全局结果里按 Ctrl+S → 缩小到当前项目
→ 再按 Ctrl+S → 缩小到当前会话
使用场景:记得上周在另一个 Repo 里跑过某个复杂命令,现在需要在这个项目里用。
3. auto mode 新增 hard_deny 规则
在 Auto Mode 下,之前的拒绝规则(deny)可以被 allow 例外覆盖。现在新增 hard_deny,即使有更宽泛的允许规则,也会无条件拒绝。
// .claude/settings.json
{
"autoMode": {
"hard_deny": [
"Bash(rm -rf /)",
"Bash(curl * | bash)",
"Bash(wget * -O- | sh)",
"Write(.env.production)",
"Write(secrets/**)"
]
}
}hard_deny vs deny 的区别:
| 规则类型 | 可被 allow 例外覆盖 | 典型用途 |
|---|---|---|
deny | ✅ | 默认拒绝,但特定情况可允许 |
hard_deny | ❌ 永不覆盖 | 绝对禁止,无论任何情况 |
适合放入 hard_deny 的操作:
- 灾难性删除(
rm -rf /) - 从外部 URL 直接执行代码(
curl | bash) - 修改生产配置文件
- 访问密钥存储
- 强制推送到 main 分支
4. Hooks 获得努力等级信息
Hooks 现在可以读取当前的努力等级:
通过 JSON 输入(effort.level 字段):
#!/bin/bash
# .claude/hooks/effort-aware-check.sh
EFFORT=$(echo "$CLAUDE_HOOK_INPUT" | python3 -c "
import json,sys
data = json.load(sys.stdin)
print(data.get('effort', {}).get('level', 'medium'))
")
if [ "$EFFORT" = "xhigh" ] || [ "$EFFORT" = "max" ]; then
echo "High effort mode: running comprehensive checks"
./scripts/comprehensive-check.sh
else
echo "Standard mode: running quick checks"
./scripts/quick-check.sh
fi通过环境变量($CLAUDE_EFFORT):
#!/bin/bash
echo "Current effort level: $CLAUDE_EFFORT"Bash 工具子进程也可以读取:
# 在 Claude 执行的 Bash 命令里也能读到
echo "Claude effort: $CLAUDE_EFFORT"5. Worktree 分支基准配置
新的 worktree.baseRef 设置控制创建 worktree 时的分支起点:
{
"worktree": {
"baseRef": "fresh" // 默认:从远端默认分支创建(unpushed commits 不带入)
}
}两个选项:
fresh(默认):从远端默认分支创建,本地未推送的 commit 不会带入新 worktreehead:从本地 HEAD 创建,本地未推送的 commit 会带入
受影响的操作:--worktree 标志、EnterWorktree 工具、Agent 隔离 worktree。
性能和可靠性改进
Sub-agent 缓存命中提升 3 倍
之前:Sub-agent 的进度摘要不利用 prompt cache,每次都重新计算。
现在:Sub-agent 进度摘要命中 prompt cache,cache_creation Token 成本降低约 3 倍。
对有大量 Sub-agent 任务的工作流影响显著:使用 /batch 跑 20 个并行 Subagent,之前每个 Subagent 的摘要都产生 cache_creation 费用,现在大幅下降。
OTEL_* 环境变量不再泄漏给子进程
# 之前
OTEL_ENDPOINT=https://my-otel.example.com claude
# Claude Code 自己的 OTEL 配置会被注入到 Bash 工具、MCP 服务器等
# 可能导致 OTEL-instrumented 应用意外向 Claude 的 OTEL 端点发送数据现在:Bash、hooks、MCP、LSP 子进程不再继承 OTEL_* 环境变量。你自己程序的 OTEL 配置不会和 Claude Code 的混淆。
OAuth 认证可靠性修复
修复了多个并发情况下的认证问题:
- 多个并行会话在 refresh token 竞争时不再出现 401 死循环
- MCP 服务器并发刷新 OAuth token 时,refresh token 不再丢失
- 并发凭证写入导致的偶发登出问题修复
CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN
export CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1
claude禁用全屏交替渲染,对话内容保留在终端的原生滚动历史里。适合:
- tmux/screen 滚动异常
- 截图录制终端内容
- 需要 cat 查看 Claude 输出的场景
其他新增功能
| 功能 | 说明 |
|---|---|
CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE | Homebrew/WinGet 安装版本在后台自动更新 |
CLAUDE_CODE_SESSION_ID | Bash 子进程环境里可以读取当前会话 ID |
/mcp 显示工具数 | 每个服务器旁边显示工具数量,0 个工具的服务器标红 |
--channels 支持 API Key 认证 | 之前只支持 OAuth 账户 |
parentSettingsBehavior | 管理员新配置键,控制 SDK managedSettings 的策略合并 |
版本信息
对应版本:v2.1.128–v2.1.136
来源:Claude Code 官方文档 - Week 19 | 整理:ClaudeEagle