Skip to content
雲里
里雾

03 扩展体系总览——从使用到定制

claude code guide AI 更新于 2026/3/26

原文:Extend Claude Code

六层扩展架构

Claude Code 的扩展体系可以从”始终加载”到”完全外部”排列:

┌─────────────────────────────────────────────┐
│  CLAUDE.md      始终加载的上下文(每次会话) │
├─────────────────────────────────────────────┤
│  Skill          按需加载的知识和工作流       │
├─────────────────────────────────────────────┤
│  SubAgent       独立上下文的隔离执行者       │
├─────────────────────────────────────────────┤
│  Agent Teams    跨会话的多代理协作           │
├─────────────────────────────────────────────┤
│  MCP            连接外部服务的协议           │
├─────────────────────────────────────────────┤
│  Hook           在循环外部运行的确定性脚本   │
└─────────────────────────────────────────────┘
  Plugin = 上述所有的打包和分发单元

软件工程类比

如果把 Agent 比作一个 Web 应用:

Agent 概念软件工程类比
CLAUDE.md项目配置文件(.editorconfig / tsconfig.json
Skillnpm 包 / Python 模块(按需导入的功能模块)
SubAgentWorker Thread / 子进程(独立执行的后台任务)
MCPREST API Client / SDK(连接外部服务)
HookExpress Middleware / Git Hook(生命周期回调)
Pluginnpm package(第三方插件包)

何时用什么?决策表

我想…用什么
让 Claude 始终遵守某个规则CLAUDE.md
给 Claude 一套可复用的参考文档Skill(参考型)
让 Claude 执行一个可重复的工作流Skill(任务型,/deploy
隔离一个大量读取文件的任务SubAgent
让多个 Agent 并行工作并互相沟通Agent Teams
让 Claude 查询数据库或发 SlackMCP Server
每次编辑文件后自动跑 lintHook
把上述所有打包分享给团队Plugin

上下文成本对比

这是你做架构决策时最需要关注的:

特性加载时机上下文成本
CLAUDE.md会话开始每次请求都在(高)
Skill 描述会话开始每次请求都在(低)
Skill 全文被调用时仅在使用时
MCP 工具定义会话开始每次请求都在(可能很高)
SubAgent被创建时与主会话隔离(零)
Hook触发时外部运行(零)

关键洞察:SubAgent 和 Hook 是最”便宜”的扩展,因为它们不占主会话的上下文。MCP 可能是最”贵”的,因为所有工具定义都在每次请求中。

容易混淆的特性对比

CLAUDE.md vs Skill vs Rules

CLAUDE.md.claude/rules/Skill
加载每次会话每次会话或匹配文件时按需
作用域整个项目可按文件路径限定特定任务
适用核心规范语言/目录特定规则参考文档、可重复工作流

Skill vs SubAgent

它们可以组合:SubAgent 可以预加载 Skill(skills: 字段)。

SubAgent vs Agent Teams

类比:SubAgent 像是在主线程中开的子任务,Agent Teams 像是多个独立进程通过 IPC 通信。


知识检测

概念理解题

  1. 为什么 Hook 被描述为在 Agentic Loop “外部”运行?它和 Skill 的根本区别是什么?

  2. MCP 的上下文成本为什么可能很高?/mcp 命令的作用是什么?

  3. Plugin 被称为”打包层”——它自身不提供新能力,而是把其他特性打包。这个设计有什么好处?

应用题

  1. 你要给团队搭建一个 Claude Code 环境,需求是:(a) 所有人遵守代码规范 (b) 每次编辑后自动格式化 (c) 能查询 Jira 工单 (d) 有一个部署流程。你会用哪些扩展机制?

  2. 你的 CLAUDE.md 已经 300 行了,Claude 开始忽略其中一些规则。你会怎么重构?

迁移思考题

  1. OpenClaw 的 Skill 和 Claude Code 的 Skill 格式相同(都是 SKILL.md)。但 OpenClaw 没有 .claude/rules/ 机制。如果 OpenClaw 要实现类似的功能,你觉得应该怎么设计?

参见

参考答案

1. Hook 为什么在 Loop”外部”

Hook 是确定性脚本——不经过 LLM 推理,不受模型”情绪”影响。和 Skill 的根本区别:Skill 的内容被注入上下文由 LLM”理解和执行”(概率性),Hook 由系统直接执行(确定性)。保证 100% 执行率的事情(lint、安全门控)应该用 Hook。

2. MCP 上下文成本高的原因

每个 MCP Server 注册的所有工具定义(函数名 + 参数 Schema + 描述)都在每次请求中发送给模型。一个 Server 可能有 10+ 工具,每个 Schema 几百 token。连接 3-4 个 Server 轻松占 5-10% 上下文。/mcp 命令看每个 Server 的 token 开销。

3. Plugin 作为”打包层”的好处

(1) 复用:同一套配置多项目安装 (2) 版本管理:通过 marketplace 分发更新 (3) 命名空间隔离:/plugin-name:skill 避免冲突 (4) 原子性:安装一个 Plugin 获得完整 Skill + Hook + MCP 配置。

4. 团队环境配置

(a) 代码规范 → CLAUDE.md 或 .claude/rules/ (b) 编辑后自动格式化 → Hook(PostToolUse + prettier) (c) 查询 Jira → MCP Server (d) 部署流程 → Skill(/deploydisable-model-invocation: true)。打成一个 Plugin 分发给团队更好。

5. CLAUDE.md 300 行的重构

核心规则留 CLAUDE.md(< 100 行)→ 语言特定规则迁移到 .claude/rules/(带 paths 条件)→ 参考文档迁移到 Skill(按需加载)→ 需要强制的规则改为 Hook → 详细文档用 @path 导入。

6. OpenClaw 的 Rules 等价设计

利用 OpenClaw 的 before_prompt_build Plugin Hook,在 Prompt 组装前根据当前文件路径/上下文动态注入匹配的规则内容到 prependContext。或者在 agent:bootstrap Internal Hook 中动态选择注入哪些 Bootstrap 文件。