Skip to content

Claude Code 扩展机制(Hooks / MCP / Skills / 命令)

Claude Code 的强大不只在内置能力,更在可扩展性:用 Hooks 加确定性约束、用 MCP 接外部系统、用 Skills 封装专长、用 Slash Commands 和自定义 Agent 定制工作流。这一页讲清四大扩展机制怎么用、各自解决什么问题。功能总览见 功能总览

一、扩展机制全景:确定性 vs 能力

            确定性约束(代码强制)          能力扩展(给模型更多本事)
            ┌──────────────┐            ┌──────────────────────────┐
            │    Hooks     │            │  MCP / Skills / 命令 / Agent │
            │  生命周期拦截  │            │  外部工具/专长/工作流封装    │
            └──────────────┘            └──────────────────────────┘

核心设计哲学:模型是不可控的(可能忘、可能错),所以关键约束用 Hooks 代码强制;而能力则通过 MCP/Skills 灵活扩展。 一个管「必须遵守」,一个管「能做更多」。

二、Hooks:确定性生命周期钩子

Hooks 让你在 Agent 运行的关键生命周期点插入自定义脚本(shell 命令),框架在这些点自动触发:

典型 Hook 时机用途举例
工具执行(PreToolUse)拦截危险命令、强制校验参数、注入额外检查
工具执行(PostToolUse)改完代码自动跑 lint/format、记录审计日志
用户提交前/会话事件通知、合规检查、自动化触发

为什么 Hooks 重要:它是确定性的——不依赖模型「记得」遵守规矩,而是用代码强制执行。例如「每次写完 .py 文件自动跑 black 格式化」「禁止 Agent 碰 .env 文件」——这些用提示词约束模型不可靠(模型会忘),用 Hook 则 100% 生效。Hook 可以返回「放行/阻止 + 反馈信息」来干预工具执行。

一句话:Prompt 是「建议」,Hook 是「法律」。 工程上必须遵守的约束放 Hook。

三、MCP:接入外部世界

MCP(Model Context Protocol)是标准协议,让 Claude Code 接入外部工具和数据源(见 MCP 协议深入):

  • 内置 MCP vs 外部 MCP:内置的随 Claude Code 提供;外部的由第三方/你自己实现的 MCP Server 提供。
  • 多种传输:stdio(本地进程)、Streamable HTTP(远程)等。
  • 工具发现:连上 MCP Server 后自动发现它暴露的工具/资源/提示,注入给模型可用(常配缓存,如 LRU)。
  • 典型用途:连数据库查询、连内部 API、连 Jira/GitHub、连浏览器自动化、连私有知识库。

MCP 把「M 个应用 × N 个工具」的集成爆炸降为「M + N」——Claude Code 实现一次 MCP Client,任何 MCP Server 即插即用。

四、Skills:「提示即能力」

Skills 把一段「做某类任务的专业提示 + 资源」打包成可复用的技能:

  • 数据模型:Markdown 文件 + Frontmatter(描述、触发条件、可用工具等元数据)。
  • 按需加载:不是一股脑全塞进上下文,而是根据任务描述匹配、按需激活相关技能(预算感知——描述短小,激活才加载全文)。
  • 用途:封装领域专长(如「写符合某规范的 SQL」「按公司模板生成文档」),让 Agent 在特定任务上表现稳定。

设计哲学:能力可以是「数据(提示)」而不必是「代码」——写一段好提示打包成 Skill,就扩展了 Agent 的专长,无需改框架。

五、Slash Commands 与自定义 Agent

  • Slash Commands/ 开头的自定义命令,把常用工作流封装成一条命令(如 /review/commit)。本质是参数化的提示模板。
  • 自定义 Agent(Subagent 定义):用 Markdown 定义一个专用子 Agent(角色、可用工具、系统提示),可从多个来源加载(项目级/用户级),并过滤工具(限定它只能用某些工具)。用于把特定职责(如「代码审查 Agent」「测试 Agent」)固化下来。

六、四者怎么配合用?

Slash Command(入口)→ 触发一个自定义 Agent(角色专精)
   该 Agent 用 MCP 工具(接外部系统)+ Skills(领域专长)干活
   Hooks 在每步工具执行前后强制约束(格式化、安全、审计)

典型组合:/security-review 命令 → 启动「安全审查 Agent」→ 它用 MCP 连漏洞库、用 Skill 套审查清单 → PostToolUse Hook 记录审计日志。命令是入口、Agent 是角色、MCP/Skills 是能力、Hooks 是约束。

高频追问

Q:Hooks 和提示词约束有什么区别?为什么要用 Hooks? 提示词是「建议」,模型可能忘记或绕过;Hooks 是「代码强制」,在工具生命周期点 100% 执行。凡是工程上必须遵守的约束(提交前必须过测试、禁止碰敏感文件、改完自动格式化)都该用 Hook,而不是指望模型自觉。一个不确定,一个确定。

Q:MCP 和 Claude Code 内置工具有什么关系? 内置工具(Read/Edit/Bash 等)是 Claude Code 自带的核心能力;MCP 是扩展通道,让它接入外部世界的工具和数据(数据库、API、第三方系统)。模型调用 MCP 工具和调用内置工具,对它来说是一样的(都走工具调用),区别在能力来源——一个内置、一个外接。

Q:Skills 和 MCP 都是扩展,怎么选? Skills 扩展的是「知道怎么做」(封装专业提示/方法/模板,纯数据),MCP 扩展的是「能接触到什么」(外部工具和数据,需要运行 Server)。要让 Agent 更会做某类任务用 Skill;要让它能操作外部系统用 MCP。常组合使用。

Q:自定义 Agent 为什么要过滤工具? 最小权限 + 专注。给「代码审查 Agent」只读工具(不给写/执行),既安全又让它聚焦审查不乱改;给「测试 Agent」测试相关工具。限定工具集能降低出错和越权风险,也让子 Agent 行为更可预测。

Q:这套扩展体系对自研 Agent 的启发? 分清「约束」和「能力」两类扩展:约束用确定性钩子(代码强制,不靠模型自觉);能力用插件化机制(工具/提示包,灵活加载)。再用「命令/角色」组织入口和职责。这套「Hooks 管纪律、MCP/Skills 管本事、命令/Agent 管编排」的分工是可复用的 Agent 工程范式。

基于 MIT 许可发布