26.1 Claude Code 的扩展面:今天能做什么
模型: claude-opus-4-6 (anthropic/claude-opus-4-6) 生成日期: 2026-04-01 书名: Claude Code VS OpenCode:架构、设计与未来 章节: 第26章 — 设计“Oh-My-Claude-Code“ Token 消耗: ~6,200 输入 + ~1,100 输出
在讨论如何为 Claude Code 构建一个多智能体编排层之前,必须先清点它今天实际暴露了哪些扩展接口。一个系统的可扩展性不取决于它有多少功能,而取决于它把哪些功能的控制权交给了外部开发者。
26.1.1 五个核心扩展面
钩子系统(Hooks)
Claude Code 提供了 5 个生命周期钩子点:
| 钩子 | 触发时机 | 典型用途 |
|---|---|---|
PreToolUse | 工具调用前 | 安全拦截、参数校验 |
PostToolUse | 工具调用后 | 结果审计、日志采集 |
Notification | 通知触发时 | 外部告警集成 |
Stop | 智能体停止时 | 清理工作、状态持久化 |
SubagentStop | 子智能体停止时 | 子任务结果汇总 |
这些钩子通过 .claude/settings.json 配置,以 shell 命令形式执行。它们的设计哲学明确偏向可观测性与安全防护——你可以看到发生了什么,可以在危险操作前拦截,但你不能改变对话本身的内容流。
衍生解释:生命周期钩子(Lifecycle Hook)——这个概念源自框架设计,指的是在系统运行的关键节点(如初始化、执行前、执行后、销毁)预留的回调插槽。开发者可以在不修改框架源代码的情况下,在这些节点注入自定义逻辑。React 的
useEffect、Vue 的onMounted、Kubernetes 的preStop都是同一思想的体现。
自定义智能体(Custom Agents)
通过 .claude/agents/ 目录,用户可以用 Markdown 文件定义专门化的智能体。每个 .md 文件就是一个智能体的系统提示词,可以在对话中通过 /agent 命令调用,或被 AgentTool 以子智能体方式派遣。
这是 Claude Code 扩展面中最灵活的部分——因为系统提示词几乎可以编码任意行为逻辑。Oh-My-OpenCode 的“Sisyphus 提示“方法,本质上就是把完整的编排规则写进系统提示词。
MCP 服务器
通过 .claude/mcp.json 配置外部 MCP 服务器,为智能体动态增加工具。MCP(Model Context Protocol,模型上下文协议)是 Anthropic 主导的开放标准,充当 LLM 与外部服务之间的“USB-C 接口“。
MCP 是三个系统共有的扩展机制,但对 Claude Code 而言尤其关键——因为它是唯一一种不需要修改 Claude Code 源码就能新增工具的方式。OpenCode 和 Oh-My-OpenCode 可以通过插件系统的 tool 钩子直接注册原生工具,Claude Code 目前没有等价能力。
插件系统(Plugins)
Claude Code 的插件目录 .claude/plugins/ 支持注册自定义命令、工具和技能。但需要注意,这里的“插件“与 OpenCode 的插件系统在架构深度上有本质区别。OpenCode 的插件拥有 8 个生命周期钩子点的完整控制权,能够拦截消息流、变换上下文、注入配置。Claude Code 的插件更接近“预打包的命令集合“——它扩展了交互界面,但没有深入对话引擎的内部。
记忆系统(CLAUDE.md)
CLAUDE.md 文件及其层级结构(全局 ~/.claude/CLAUDE.md、项目根目录 CLAUDE.md、子目录 CLAUDE.md)构成了 Claude Code 的持久化记忆。智能体在每次会话开始时自动加载这些文件,将其内容注入系统提示词的上下文中。
26.1.2 暴露了什么 vs 锁定了什么
理解 Claude Code 的扩展边界,关键在于区分“暴露“与“锁定“:
已暴露(可外部控制):
- 工具调用的前后拦截(通过钩子)
- 新工具的注入(通过 MCP)
- 智能体行为的定制(通过自定义智能体提示词)
- 持久化上下文(通过 CLAUDE.md)
- 会话停止时的清理逻辑(通过 Stop 钩子)
已锁定(无法从外部控制):
- 用户消息到达 LLM 之前的拦截与变换
- 对话历史的动态修改或注入
- 模型选择(不同智能体不能使用不同模型)
- 工具注册的编程式 API(必须通过 MCP 协议)
- 上下文压缩策略的定制
- 子智能体的并发调度与会话延续
这个暴露/锁定的划分揭示了一个清晰的设计意图:Claude Code 把安全性和可观测性放在了扩展优先级的最高位,而把对话引擎的控制权牢牢握在自己手中。这种取舍在商业产品中完全合理——它保证了用户体验的一致性和安全底线。但对于想要构建深度编排层的开发者来说,这意味着很多在 OpenCode 上轻而易举的事情,在 Claude Code 上需要绕行甚至根本做不到。
26.1.3 小结
Claude Code 今天的扩展面足以支撑相当丰富的定制场景:你可以定义专门化智能体、接入外部工具、在关键节点插入安全检查、维护跨会话的项目记忆。但如果你的目标是像 Oh-My-OpenCode 那样构建一个完整的多智能体编排层——包括消息变换、上下文注入、工具执行拦截、智能体级模型路由——那么当前的扩展面还不够。
下一节,我们将精确对比这些差距。