Claude Code 的核心是可扩展性——不是"我们做好一切",而是"我们提供框架,你扩它"。 4 月在三个方向都做了重要打磨。
把外部工具/服务接入 Claude 的开放协议。 你能让 Claude 操作你的数据库、Jira、内部 API、向量库——任何能写成 MCP server 的东西。
预打包的工作流——比如 init 项目骨架、运行 security review、跑 ESLint 修复。 类似"宏 + 提示词模板"的组合。
在工具调用前/后、用户提交前、模型响应后等关键事件上挂自定义逻辑。 配置驱动、不写代码也能用。
这三者的关系:MCP 提供工具 → Skills 把工具组合成能力 → Hooks 在能力执行的关键节点插入控制。 下面三页各看一面。
过去 MCP 工具是 lazy load——首次使用时延迟加载,可能几秒卡顿。
alwaysLoad: true 让指定 server 启动就加载,避免延迟。
代价:启动稍慢,但运行时无感。对生产可靠性敏感的工作流推荐。
本地 MCP server + claude.ai MCP server 现在并发连接。 老实现是串行——5 个 server 配下来启动等好几秒。 新实现:所有 server 同时握手,启动时间几乎只决定于最慢的那个。
type: "mcp_tool" 让 hook 能拦截 MCP 工具调用——
可以用来强制审批、记日志、改写参数、阻止特定操作。
典型用例:所有 production 数据库写操作必须二次确认。
修复一系列长期 OAuth 问题:① token 没 expires_in 时不再每小时重认证; ② 步进式授权能在已有 scope 时弹出新意图; ③ token 被撤销时自愈刷新;④ macOS 钥匙串竞态修了。 这些 4 月之前是社区抱怨的高频项。
MCP HTTP OAuth 现在符合 RFC 9728 (Protected Resource Metadata)—— 提升与外部系统对接的标准合规性。修复 OAuth 发现返回非 JSON 时连接失败。
当手动添加的 server 与 claude.ai 内置连接器同名时, /mcp 现在能告诉你"哪个被覆盖了"——避免"为啥我配了没生效"的迷惑。
~/.claude/mcp.json { "servers": { "postgres": { "command": "mcp-postgres", "args": ["--readonly"], "alwaysLoad": true, # 启动即加载 "env": { "DATABASE_URL": "$PG_URL" } }, "jira": { "command": "mcp-jira", "oauth": { "clientId": "...", "scope": ["read:jira-work"] }, "headersHelper": "./jira-auth.sh" } } }
~/.claude/hooks.json { "PreToolUse": [{ "matcher": { "type": "mcp_tool", "name": "postgres.execute_*" }, "if": "environment == 'production'", "command": "./scripts/require-approval.sh" }] }
↑ 生产环境下任何 postgres 写操作都先经过 approval 脚本。
Skills 是 Claude Code 的"小程序生态"——你或团队可以打包一个特定能力(含提示词、工具调用顺序、配置), 分发给整个项目使用。4 月围绕 Skills 做了几件事:
按 t 切换排序——让你看到哪些 skill 上下文成本高。
对本身就是 prompt 的 skill 来说,token 数是真实成本。
新增搜索框,可按类型 / 关键词过滤——长 skill 列表不用滚到底。
这是一个内置 skill——扫描你最近的会话,识别频繁出现的 read-only Bash / MCP 调用, 提议加到 allowlist 减少授权弹窗。是"减少摩擦"的体现。
引入 /powerup——新用户的交互式 onboarding。 比 docs 更主动,让首次用户在几分钟内体验关键功能。
Skills 现在能调用内置 slash 命令——意味着 skill 能用 /resume、/effort 等核心能力组合自己的工作流。
Skill 内可以引用当前努力级别——同一个 skill 在不同 effort 下行为不同(比如 low effort 跳过深度检查)。
.claude/skills/setup-feature-flag.md
---
name: setup-feature-flag
description: Wire up a new GrowthBook flag
type: development
trigger: "add a feature flag"
---
You are setting up a feature flag in this codebase.
Steps:
1. Read .growthbook/flags.yaml to see existing flags
2. Add the new flag with $${KEY} as the user provided
3. Update server-side gate in src/flags/index.ts
4. Add a test in src/flags/index.test.ts
5. Open a PR draft
If $${CLAUDE_EFFORT} is xhigh, also:
- Add a kill-switch hook
- Document rollout plan
- Schedule a /loop check in 2 weeks
Skills 默认放在 .claude/skills/——和代码一起 git commit,
团队成员自动同步。不是"装在我电脑上的 plugin",是"项目内的能力"。
Skill 是 markdown,不是 JS——任何团队成员都能读、能改、能 review。 技术门槛极低。
Hooks 让你在事件点插入自定义脚本——不写代码(指 JS / Python),只配 JSON。 4 月的 Hook 升级让它从"小修补"变成"可信赖的策略层"。
| UserPromptSubmit | 用户按回车前——可拦截/改写 prompt |
| PreToolUse | 工具调用前——可强制审批/改参数/拒绝 |
| PostToolUse | 工具调用后——可改输出(v2.1.121 新) |
| SessionStart | 新会话开始 |
| Stop | Claude 停止响应(写日志/触发后续) |
# if 字段使用权限规则语法过滤执行 { "PreToolUse": [{ "matcher": {"type": "Bash"}, "if": "command =~ '^rm -rf'", "command": "./scripts/double-confirm.sh" }] }
scripts/redact-secrets.sh #!/bin/bash # 接收 tool 的原始输出 from stdin # 通过 hookSpecificOutput.updatedToolOutput 替换 INPUT=$(cat) REDACTED=$(echo "$INPUT" | sed -E 's/sk-[A-Za-z0-9]+/[REDACTED]/g') cat <<EOF { "hookSpecificOutput": { "updatedToolOutput": "$REDACTED" } } EOF
↑ 在 Claude 看到工具输出之前自动 redact 密钥—— 是"对 prompt injection 防御"的具体落地。
Anthropic 把"扩展性"做得这么厚,本身就是哲学的体现: 不替用户决定什么是好工具,而是把控制权下放到用户手里。
"Claude Code 不假设它知道你的项目长什么样、你的合规要求是什么、你的预算上限有多少—— 所以它给你 MCP 接你的工具、给你 Skills 表达你的工作流、给你 Hooks 定义你的策略。"
| MCP alwaysLoad / 并发 | Helpful | 消除摩擦——让"接外部工具"成本接近零。 |
| OAuth 全链修复 | Honest | 承认 OAuth 的复杂性——做扎实而不是回避。 |
| Skills · 团队级 markdown | 用户自主 | 把"工作流"做成代码资产——团队拥有,团队改。 |
| /less-permission-prompts | 理解意图 | 主动观察用户重复行为,提议优化——是"理解"的进阶版。 |
| Hooks 条件 if 字段 | 用户自主 | 策略可精确表达,不是"all or nothing"。 |
| PostToolUse 改写输出 | Harmless | 用户能在 Claude 看到工具输出前 redact 敏感信息——防 prompt injection。 |
下一页:主题 / Vim / UI 改进——开发者每天都会感受到的体验提升。