Mingyu's Library主页
2026年10月13日

第 39 课:新功能速用 —— v2.1.292 ~ v2.1.295(plugin 直装、hooks 失败即拦截、子 agent effort、MCP 协议协商)

📅 2026-10-13 场景还原:你给团队写了一个"提交 prompt 前检查敏感词"的 hook,结果脚本路径写错、启动失败——Claude 照常继续,检查形同虚设;或者你想让一个只做审查的子 agent 认真想,主会话却用的是省钱档。这周(10-06 至 10-09)的几个小版本刚好补了这些缺口。 前置:第 3 课(Subagents)、第 4 课(Hooks)、第 11 课(MCP)、第 17 课(插件与 Marketplace)。 来源:v2.1.292 解读 · v2.1.294–295 解读 · Havoptic 10 月版本表 说明:以下细节来自第三方版本解读(Classmethod 实测),官方 changelog 未在本次检索中逐条核对;用之前请先 claude --version 并以 /help、官方文档为准。


技巧 1(基础):claude plugin install --marketplace 一步装插件

解决的问题:以前要先 marketplace add 再 install 两步;现在可以一条命令完成。

# <source> 可以是 owner/repo、git/https URL 或本地路径
claude plugin install <plugin-name> --marketplace <owner>/<repo>
# 例:从你们团队的内部市场装
claude plugin install review-kit --marketplace my-org/claude-plugins

要点:尚未添加的 marketplace 会被加入用户级设置,并走与 claude plugin marketplace add 相同的策略检查(受管环境下仍可能被拒)。装完用 /plugin list 核对。 📖 第三方解读 · 官方:Plugins

技巧 2(进阶):hooks 的 onFailure: "block"——失败就拦,别放行

解决的问题:hook 启动失败/超时/退出码异常时,默认可能"放行继续",安全类检查因此形同虚设。

{
  "hooks": {
    "UserPromptSubmit": [
      { "hooks": [
        { "type": "command", "command": "./check-policy.sh", "onFailure": "block" }
      ] }
    ]
  }
}

实测提醒(来自解读文章):被拦截的那次运行进程退出码仍是 0,所以在脚本/CI 里别只看退出码,要检查输出。该文只验证了"意外退出码"场景;启动失败和超时按发布说明同样会被拦,但未单独实测。 📖 v2.1.294–295 解读 · 官方:Hooks

技巧 3(进阶):给子 agent 指定 effort

解决的问题:主会话省着用,但"审查/找 bug"类子 agent 需要想得更深。

v2.1.292 起 Agent 工具接受 effort 参数;据解读,官方文档称子 agent frontmatter 也有 effort 字段(文章未给示例,需自行查官方 subagents 文档确认写法)。

# 实测调用形态(来自解读文章)
Agent tool: subagent_type=general-purpose, effort=max, prompt="..."

实测结果:max 生效;ultra 报 InputValidationError;low/medium 被接受但子 agent 自述不明显。工具说明还提醒:仅当用户或 CLAUDE.md/skill 明确要求时才设置。所以把规则写进 CLAUDE.md:

## 子 agent 规则
- 代码审查类子 agent 使用 effort=max;检索/格式化类不要设置。

📖 官方:Subagents · 解读

技巧 4(高阶):stdio MCP 默认协商 2026-07-28 协议 + 过载重试调参

解决的问题:升级后本地 MCP server 行为变了/连不上;529 过载时重试太急。

# 1) 本地(stdio)MCP 现在默认协商 2026-07-28 协议;出问题先退回旧协商排查
MCP_PROTOCOL_NEGOTIATION=legacy claude

# 2) 529 过载重试的基础退避(毫秒,具体取值请按需试;文章未给格式示例)
export CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS=2000

# 3) 无人值守重试模式下,429/529 的最长等待(v2.1.295)
export CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS=600000

注意:MCP_PROTOCOL_NEGOTIATION 据官方文档只在 v2 MCP 客户端运行时生效;协商到新协议的 channel server 无法投递 channel 消息,因此不会注册为 channel;不响应版本查询的 server 会被记住 7 天后走旧方式。新协议背景见 MCP 迁移指南(RC 阶段文本)。


今日实操(15 分钟)

  1. 给你项目里最关键的一个 hook(如危险命令检查)加上 "onFailure": "block"。
  2. 故意把脚本路径写错,提交一个 prompt。
  3. 验收:操作被拦截而不是放行;改回正确路径后恢复正常。再顺手跑一次 MCP_PROTOCOL_NEGOTIATION=legacy claude,对比你的 MCP server 在 /mcp 里的连接状态有无差异。