跳转至

卷五 03|skills / MCP / agents / subagents / hooks / plugins 是怎样接入 Claude Code 的

导读

第 01 篇已经立住:复杂场景会逼系统长出扩展层。

第 02 篇已经立住:这层扩展权最终会交到用户侧,而不是继续只靠官方无限内建。

那下一步就不能再停在抽象判断上了。读者自然会继续问:

这些扩展权到底是通过什么对象、以什么路径接进 Claude Code runtime 的?

这一篇的任务,就是先给卷五立一张统一接入总地图。

它不负责把每条对象线的正文讲完,只负责回答两件事:

  1. 这些对象都在接入 runtime,但接入的位置和职责不一样
  2. 正因为接入位置不同,它们不能被混成一个“扩展大桶”

先给结论

结论一:这些对象不是并排功能栏目,而是一组以不同方式进入 runtime 的平台对象

如果只看表层产品感受,skills、MCP、agents、hooks、plugins 很容易像几个平级栏目。

但从源码导向来看,它们更像五种不同的接入路径:

  • skills 接入工作方式
  • MCP 接入系统外部能力源
  • agents / subagents 接入更多执行者与协作结构
  • hooks 接入 runtime 关键接缝
  • plugins 接入更高一级的统一封装层

所以卷五后面不是对象百科,而是平台对象谱系。

结论二:这些对象都在扩展 Claude Code,但扩展的“层”不同

这是第 03 篇最需要防混的地方。

如果只说“都是扩展”,那你很快就会分不清:

  • skill 和 plugin 到底差在哪
  • MCP 和普通 tool 到底差在哪
  • agent 和 skill 到底差在哪
  • hook 为什么不是另一种 plugin

更稳的判断应该是:

它们都在扩展 Claude Code,但扩展的是不同层:方法层、能力源层、执行者层、接缝层、封装层。

结论三:卷五后半所有对象组,都应该挂回一张统一 runtime 关系图

这一篇最重要的工作,不是定义术语,而是给后面 04-24 篇准备一张骨架图。

后面的 skills 组、MCP 组、Agent 主轴、hooks 组、plugins 组,都应该能挂回这张图上去理解。没有这张图,后文很容易越写越像散装介绍。

先把卷五对象接入总地图画出来

flowchart TD
    A[用户现场 / 外部系统 / 当前任务] --> B[Claude Code runtime]

    S[skills\n方法 / 流程 / 角色结构] --> B
    M[MCP\n外部能力源 / 资源系统] --> B
    AG[agents / subagents\n更多执行者 / worker 分叉] --> B
    H[hooks\nruntime 事件接缝] --> B
    P[plugins\n统一封装 / 安装 / 分发 / 治理] --> B

    B --> Q[当前 turn 的执行链]
    B --> C[能力面 / 命令面 / 执行者面 / 生命周期]

这张图先不求细,只求把一个事实钉住:

这些对象不是在 runtime 外面飘着,而是以不同路径进入同一套 runtime。

再画一张更具体的接入位置图

flowchart TD
    A[用户方法] --> S[skills]
    B[外部 server / resources] --> M[MCP]
    C[任务委派需求] --> AG[agents / subagents]
    D[事件生命周期] --> H[hooks]
    E[多组件能力包] --> P[plugins]

    S --> R[方法组织层]
    M --> R
    AG --> R
    H --> R
    P --> R

    R --> T[Claude Code runtime]

这张图的重点不是“都能接”,而是“各自接入的东西根本不同”。

下面逐一把这五条线的位置说清楚。

一、skills 是怎样接入 Claude Code 的

它接入的首先不是动作原语,而是工作方式

卷一 SkillTool 那条线已经把技能对象的大方向讲出来了:skill 会被发现、被解析、被统一成 prompt command,再由 SkillTool 接进执行体系。必要时它还会 inline 展开,或者 fork 到 agent 路径上。

这说明 skills 在总地图里的第一职责,不是给系统再多一个动作,而是:

把用户的方法、流程和角色结构正式编进系统。

所以 skills 接入的不是“某个外部服务”,而是“怎么做这件事”的组织方式。

它在总图里更靠近方法组织层

换句话说,skills 负责回答的是:

  • 这一类任务该怎么拆
  • 哪些步骤优先
  • 哪些约束不能忘
  • 哪些结果才算完成

它当然可能调用工具,也可能进一步接上 agent,但那是后续动作;它在卷五总图里的第一位置,是方法组织层入口

旧文与源码抓手

  • 旧文锚点:docs/guidebook/volume-1/15-skilltool-bridge.md
  • 关键源码入口:cc/src/tools/SkillTool/

只要保住这两个抓手,就不会把 skill 写成“长一点的 prompt”这么浅。

二、MCP 是怎样接入 Claude Code 的

它接入的是系统外部能力源与资源系统

卷四 MCP 总入口已经给出很清楚的链路感觉:外部 server 并不会直接裸露给模型,而是先经过配置归并、连接管理、tools / prompts / resources 拉取,再被翻译成 Claude Code 自己能消费的能力包。

这说明 MCP 在总地图里的位置很明确:

它不是方法组织层,也不是执行者层,而是外部能力源接入层。

它让 Claude Code 的能力面不只来自自身本体

MCP 接进来的,典型包括:

  • 外部工具
  • 外部 prompts / commands
  • 外部 resources
  • 更广的外部能力节点

所以它回答的是:

  • 系统外部的能力怎样进入当前 runtime
  • 哪些资源怎样变成当前工作链可用的对象

旧文与源码抓手

  • 旧文锚点:docs/guidebook/volume-4/01-mcp-runtime-entry.md
  • 关键源码入口:cc/src/mcp/

有了这两个抓手,就能稳稳防住一个常见跑偏:别把 MCP 只写成“多了一批远程工具”。

三、agents / subagents 是怎样接入 Claude Code 的

它接入的是更多执行者,而不是更多动作

卷一 AgentTool 那篇已经把这条线说得很清楚:AgentTool 不是“再开一个对话”,而是任务委派、角色选择、工具池装配、执行环境与生命周期管理的入口。

这意味着 agent 这条线接入的不是动作能力,也不是方法模板,而是:

新的工作承担者。

复杂任务一大,系统面临的就不只是“做什么”,还包括“谁来做、谁来接这一段、结果怎么回流”。这就是 agent 线在总图里的位置。

为什么第 03 篇必须把 subagent 放回 agent 主轴内部

这里必须先立卷内边界:

subagent 不是和 skills / MCP / hooks / plugins 平级的另一类对象,它是 agent 主轴继续往后长出来的 worker 形态。

也就是说:

  • agent 主线前半段讲“更多执行者怎样成立”
  • 后半段讲“主执行者怎样继续切出 subagent / worker,并保持可控回流”

所以在总图里,最稳的写法不是把 subagent 单独拉成一类,而是写成:

  • agents / subagents:执行者结构接入层

旧文与源码抓手

  • 旧文锚点:docs/guidebook/volume-1/10-agenttool.md
  • 关键源码入口:cc/src/tools/AgentTool/

这能帮后面的 Agent 主轴始终挂回“执行者层”而不是写成哲学文。

四、hooks 是怎样接入 Claude Code 的

它接入的是 runtime 接缝,而不是能力对象本身

卷四 hooks 总入口最该保住的判断是:hooks 不是普通脚本回调,而是事件驱动的运行时编排层。它们卡在 SessionStart、UserPromptSubmit、PreToolUse、PostToolUse、Permission 等关键事件点上。

这说明 hooks 在总图里接入的,并不是某个独立能力对象,而是:

runtime 在不同阶段留出来的正式干预接缝。

它解决的不是“多会一点”,而是“在哪些位置允许观察、限制和改写”

所以 hooks 和前面三条线的差异非常大:

  • skill 关心“怎么做”
  • MCP 关心“接什么外部能力”
  • agent 关心“谁来做”
  • hook 关心“运行到哪一步时允许怎样干预”

这就是它在卷五总图里必须独立成层的原因。

旧文与源码抓手

  • 旧文锚点:docs/guidebook/volume-4/06-hooks-runtime-entry.md
  • 关键源码入口:cc/src/hooks/

只要保住这个抓手,就不会把 hooks 写成“另一种自动化脚本”。

五、plugins 是怎样接入 Claude Code 的

它接入的是更高一级的统一封装层

卷四 plugin 能力面那篇已经把位置讲得很稳:plugin 不是 hooks 的壳,也不是某个单独扩展点的别名,而是 commands、agents、skills、hooks、MCP / LSP、settings 的统一能力包和治理包。

所以 plugin 在总图里的位置,不是“又一类局部能力”,而是:

把前面这些扩展内容进一步收成正式封装、安装、启停、分发与治理单元。

它为什么不是所有扩展对象的总称

这点必须先切干净。

如果把 plugin 写成所有扩展对象的总称,后面的层级就会立刻塌掉。更稳的分层应该是:

  • skills / MCP / agents / hooks:分别把不同东西接进 runtime
  • plugins:把这些扩展内容组织成更成熟的封装对象

也就是说,plugin 不是大桶名词,而是更高一级的封装层

旧文与源码抓手

  • 旧文锚点:docs/guidebook/volume-4/10-plugin-capability-surface.md
  • 关键源码入口:cc/src/plugins/

这个抓手能稳住 plugin 的平台层位置,避免把它写成“装扩展的地方”。

把五类对象压回一张职责图

如果把上面的解释再压缩一次,可以得到卷五后半最重要的一张职责图:

第一层:方法组织层

  • skills

第二层:外部能力源层

  • MCP

第三层:执行者结构层

  • agents / subagents

第四层:运行时接缝层

  • hooks

第五层:统一封装层

  • plugins

这不是严格的软件分层图,但它是卷五最重要的一张写作骨架图。

它帮助读者在后文里始终记住:

这些对象不是并排功能点,而是在不同方向上把 Claude Code 从“会执行的系统”继续推成“可持续长能力的平台”。

为什么这些对象不能混成一个“扩展大桶”

第一,因为一混写,边界就会立刻消失

如果只说“都是扩展 Claude Code 的东西”,虽然不算错,但解释力几乎为零。你很快就会分不清:

  • 工作方式和能力源的区别
  • 执行者和方法模块的区别
  • 接缝和封装层的区别

卷五后面之所以还要分组写,正是为了把这些边界重新切稳。

第二,因为它们解决的问题不是同一个问题

这几类对象虽然都在扩展系统,但各自回答的问题完全不同:

  • skill 回答“怎么做”怎样进入系统
  • MCP 回答“外部能力从哪来”怎样进入系统
  • agent 回答“谁来承担这段工作”怎样进入系统
  • hook 回答“runtime 关键节点哪里允许干预”
  • plugin 回答“这些扩展怎样收成正式交付单元”

问题不同,接入层就不同,自然不能混成一个对象大桶。

第三,因为卷五真正要建立的是平台对象谱系,而不是名词索引

第 03 篇最大的价值,不是解释得最全,而是让读者在后文带着一张稳定地图继续往下读:

  • 看到 skill,知道它挂在方法组织层
  • 看到 MCP,知道它挂在外部能力源层
  • 看到 agent,知道它挂在执行者层
  • 看到 hook,知道它挂在接缝层
  • 看到 plugin,知道它挂在统一封装层

只有这样,后面的 22 篇才会越写越清,而不是越写越糊。

从源码感觉看,这些对象为什么都算“接入 runtime”

这一篇虽然不拆 call chain,但还得保住一点源码证据感。

skills:由 SkillTool 接入统一执行链

skill 不是停在磁盘文件上,而是会被发现、装成 command、进入 Tool runtime。这已经说明它是正式 runtime 对象。

MCP:由配置、连接、翻译链进入当前能力面

MCP server 不是文档概念,而是会被翻译成 Tool / Command / Resource 包,再进入 runtime 的动态能力面。

agents / subagents:由 AgentTool / runAgent 接入任务委派链

agent 不是 UI 名词,而是 runtime 里的任务执行体。subagent 则是这个执行者体系里的 worker 分叉形式。

hooks:由事件类型和 hook runtime 接入主循环控制面

hook 不是工具库,而是会影响继续 / 停止 / 注入 / 改写的正式干预接口。

plugins:由 loader、policy、lifecycle 接入扩展治理面

plugin 不是扩展目录,而是统一能力包和治理包,会进入安装、启停、校验、来源追踪与分发体系。

把这五条并排放在一起,就能保住一句很关键的话:

卷五后半讲的不是五种“外围功能”,而是五种已经进入 runtime 的平台对象。

这篇不展开什么

1. 不把 skills / MCP / Agent 主轴 / hooks / plugins 的正文细节提前讲完

这篇只立接入总图,不吃掉后文各组任务。

2. 不把 Agent 主轴后半段 worker / fork 细节讲完

这里只先把 subagent 放回 agent 主轴,不展开 fork 继承、回流与职责边界。

3. 不转去讲命令入口、产品界面和卷六整合层

卷五先把 runtime 接入总图立稳。

和前后文的边界

它承接第 02 篇

第 02 篇说明为什么扩展权会交给用户。第 03 篇进一步说明:这份扩展权不是抽象许可,而是会落在一组正式对象上,并以不同路径进入 runtime。

它导向第 04 篇以及后续各组

从第 04 篇开始,卷五就不再讲总地图,而要按固定顺序逐组展开:

skills → MCP → Agent 主轴 → hooks → plugins

后面每一组的任务,都是把这张总地图上的一个层次讲清。

一句话收口

skills、MCP、agents / subagents、hooks、plugins 不是并排功能点,而是一组以不同方式接入 Claude Code runtime 的平台对象:skills 接入工作方式,MCP 接入外部能力源,agents / subagents 接入更多执行者,hooks 接入运行时接缝,plugins 接入更高一级的统一封装层;正因为它们接入的是不同层,卷五后半才必须分组把它们逐一讲清。