以“谁来触发”为主线,辨析 Claude Code Hooks、斜杠命令与 Skills:由人调用的命令、可复用的 Skills、确定性的 Hooks,以及何时应该组合使用。
作者:AI Free API Team
发布于:2026-06-01
更新于:2026-06-01
阅读时间:14 分钟
字数:2559
来源:https://blog.laozhang.ai/en/posts/claude-code-hooks-slash-commands-skills

区分 Claude Code Hooks、斜杠命令与 Skills,最简单的方法是问:谁来启动这项操作?当人类应该明确启动某项会话控制或工作流时,使用斜杠命令;当 Claude 需要一套可以在相关场景中载入的可复用方法、参考资料或检查清单时,使用 Skill;当某个生命周期事件每次都必须运行脚本、请求、Prompt 或 Agent 时,使用 Hook。
Claude Code 当前文档尤其强调了一条边界:自定义 Commands 已合并到 Skills 中,但现有 .claude/commands/ 文件仍然有效。因此,实际问题已经不再是“应该使用哪个旧版自定义文件夹”,而是“这项工作应该由谁触发、需要多强的确定性,以及模型忘记时应该发生什么”。
快速选择表
| 如果工作流需要…… | 首先选择 | 通常存放在 | 不要用它处理 |
|---|---|---|---|
| 明确的时机、参数与人的意图 | 斜杠命令或用户调用的 Skill | 内置 / 命令、/skill-name,或旧版 .claude/commands/*.md |
即使无人输入命令也必须运行的自动护栏 |
| 可复用的方法、参考资料集、检查清单、脚本包或模板 | Skill | .claude/skills/<name>/SKILL.md,以及可选辅助文件 |
一次性提示词,或每项操作前都应该可见的规则 |
| 确定性事件响应、验证、通知或范围严格的护栏 | Hook | settings.json 中调用 command、HTTP、prompt 或 agent 处理程序的 Hooks |
细腻判断、宽泛代码审查或长期记忆 |

这张表是最值得记住的部分。斜杠命令关乎时机,Skills 关乎方法,Hooks 关乎确定性。斜杠命令为人类提供一个像按钮一样明确的操作时刻;Skill 为 Claude 提供可复用的指令与文件包;Hook 则为运行时提供绑定事件的规则,无须依赖 Claude 是否记得。
第一个错误是把三者全都视为自动化。它们都能减少重复输入,却不会带来相同风险。Command 可能被忘记,Skill 的载入范围可能太宽或太窄,Hook 则可能触发过于频繁并阻止错误的操作。优秀的 Claude Code 自定义方案,会在创建又一个文件前,先说清相应的失败模式。
截至 2026 年 6 月 1 日,请以官方命令参考、Skills 文档、Hooks 指南与 Hooks 参考为准。命令与 Bundled Skills 是否可用可能因平台、套餐和环境而异,因此不要把任何第三方命令清单当成完整目录。
斜杠命令用于明确时机
如果最重要的是由人类选择执行时刻,斜杠命令就是正确界面。你在消息开头输入 /,选择命令,并可在后面传入参数。因此,Commands 很适合会话控制、刻意启动工作流,以及需要明确显示有人监督 Claude 的操作。
当工作流听起来像下面这样时,请使用斜杠命令或由用户调用的 Skill:
• “现在运行这项审查。”
• “在我切换任务前总结当前状态。”
• “使用这些参数启动发布清单。”
• “解释选中的这条代码路径。”
• “创建计划,但暂时不要执行。”
保持 Command 形态最有力的理由是控制副作用。如果工作流可能部署、删除、计费、发布、重写大量文件、联系外部服务或改变分支状态,那么由人类决定时机就不只是小小的用户体验偏好,而是安全模型的一部分。Skill 仍可承载工作流背后的方法,但除非操作确实风险很低,否则调用应保持显式。
因此,当前把自定义 Commands 合并进 Skills,并不意味着“Commands 消失了”。可见的 / 调用界面仍然重要。变化在于,Skills 现在是许多自定义工作流更丰富的打包方式。相比简单的旧版 Command 文件,它们可以携带元数据、辅助文件、动态上下文、工具控制与生命周期 Hooks。
清晰的模式如下:
1、用内置会话命令控制会话。
2、当 Command 应启动一套可复用工作流时,使用用户调用的 Skill。
3、只有在旧版 .claude/commands/*.md 已经有效,而且不需要更丰富的 Skill 契约时,才继续保留。
如果准备创建一条并无明确人工时机要求的 Command,请先停一下。它可能应该成为 Claude 在相关工作出现时载入的 Skill,也可能应该成为在事件边界执行的 Hook。
Skills 承载可复用方法
当 Claude 需要一套可复用工作方式时,Skill 就是正确界面。真正有价值的单元并不是“我喜欢的一条提示词”,而是结构完整、值得打包的方法:应一同载入的指令、参考资料、示例、脚本、模板与边界。
Anthropic 当前 Skills 文档将 SKILL.md 描述为必需入口,周围可以放置可选辅助材料。这种结构很重要,因为优秀的 Skill 可以把重复工作流知识移出始终开启的项目指令,同时又能在任务需要时提供这些知识。
当工作流听起来像下面这样时,请使用 Skill:
• “使用这份证据清单审查 Pull Request。”
• “每次都用相同方式运行迁移审计。”
• “按照这些示例和格式规则,从代码生成 API 文档。”
• “使用严格的来源事实包翻译文章。”
• “按照我们的浏览器 QA 评分标准测试 Web 应用。”
判断标准是:每次会话都重新解释这套方法,是否烦人或存在风险?如果答案是肯定的,Skill 会带来真正提升。如果答案是否定的,就继续把它当作提示词、文档或简短说明,直到重复次数足以证明值得打包。
Skills 也允许控制调用方式。有些 Skills 应该允许 Claude 在相关场景中自行载入,另一些则只能直接调用。如果 Skill 会产生副作用、花钱、联系其他系统或修改生产状态,请设为用户调用,并保持人工操作时机可见。此时,命令式 Skill 能兼得两种界面的优势:在显式 /skill-name 背后提供可复用方法。
如果接下来想知道应该先安装哪些 Skills,请参阅最佳 Claude Code Skills 指南。本文讨论的选择范围更窄:判断某项工作是否首先就适合 Skill 这种界面。
Hooks 强制执行运行时事件
当某个事件无论 Claude 是否记得都应该触发操作时,Hook 就是正确界面。Hooks 用于生命周期自动化:工具使用前后、会话边界、通知发生时、上下文压缩期间,或其他已配置事件的前后。处理程序可以是 command、HTTP request、prompt 或 agent,具体取决于 Hook 类型与当前文档。
当工作流听起来像下面这样时,请使用 Hook:
• “文件编辑后运行格式化工具,或记录一条简短日志。”
• “危险工具调用前,阻止一小类已知有害命令。”
• “会话开始时,注入一小段当前上下文。”
• “Claude 需要注意时发送通知。”
• “工作停止时,写入一份精简会话记录。”
这里的小范围非常重要。Hook 并不适合宽泛判断。如果问题是“这次代码审查够不够好”,应该交给 Skill、子智能体或显式审查工作流。如果问题是“这条命令是否试图删除受保护路径”,则可以交给 Hook。规则能够确定性检查、稳定观察,并通过简短失败消息解释时,Hooks 才最强大。
Hooks 还需要比 Skills 更谨慎,因为它们会自动触发。糟糕的 Skill 可能浪费上下文或错误引导任务;糟糕的 Hook 则可能打断每次会话、增加延迟、制造嘈杂日志,甚至阻止合法工作。请先从观察与记录开始,再考虑阻止。信号稳定后,才收紧 Hook。
使用 /hooks 或当前的配置/调试方式检查哪些 Hooks 正在运行。如果问题只是 Claude 总会忘记某套工作流,不要立刻改成 Hook。首先判断它缺的是方法、记忆、访问能力,还是事件强制执行。
只有每层都有明确职责时才组合界面

最强大的配置往往会组合这些界面,但前提是每一层承担不同职责。组合方案并不会因为更高级而自动更好;只有真正消除歧义时,它才更好。
下面是三种安全模式。
| 工作流 | Command 负责 | Skill 负责 | Hook 负责 |
|---|---|---|---|
| 发布清单 | 准备好后,由人类启动 /release-checklist |
有序发布步骤、证据要求与回滚说明 | 范围严格的 PreToolUse 防护,阻止已知禁止的分支或环境操作 |
| 代码审查 | 由人类或 Claude 启动审查工作流 | 审查方法、严重程度标准与报告格式 | PostToolUse 格式化或日志捕获,保持输出一致 |
| 部署准备 | 由人类启动 /deploy 或 /deploy-plan |
部署方法与检查清单 | 确定性验证分支、环境或批准状态 |
糟糕的版本是层次模糊:Command 重复 Skill,Skill 试图强制执行策略,Hook 又要求 Claude 作出细腻判断。优秀版本的层次则很明确:
• Command 选择时机。
• Skill 教授方法。
• Hook 强制执行一项小范围不变量。
如果无法用一句话说明每层的职责,就删除一层。简单配置更容易调试、更适合与团队共享,也不容易产生让下一位代码库使用者意外的隐藏行为。
避免 Claude Code 配置过度设计的停止规则

在 .claude/ 下增加文件,或在 Settings 中添加另一个 Hook 前,请先应用这些停止规则。
不要把细腻判断放入 Hooks。 Hooks 最擅长确定性检查,而不是宽泛的审查品味。Hook 可以阻止某种命令模式或验证路径;需要大量判断的审查则应由 Skill 或子智能体处理。
不要自动触发破坏性 Skills。 如果工作流能够发布、部署、删除、花钱或接触生产环境,请保留人工调用步骤。必要时可以把方法打包进 Skill,但启动过程必须显式。
不要把一次性提示词变成 Skills。 只有工作流会重复,并能从参考资料、示例、脚本或模板中受益时,Skill 才值得存在。只使用过一次的心爱提示词还不是 Skill。
不要把命令清单当成策略。 知道大量斜杠命令,不如知道哪个界面负责哪项工作。需要查询目录时,请使用官方命令参考;需要设计判断时,请使用选择表。
不要把 Hooks 当作记忆。 如果 Claude 需要在开始工作前看到某条规则,请把它放进合适的记忆或项目指令界面。Hooks 在事件发生时运行,不应变成隐藏的策略文档。
当缺少的是访问能力时,不要使用 Skills。 Skill 可以教 Claude 如何使用 GitHub、浏览器、数据库或部署系统,但无法凭空暴露这些系统。如果缺少外部访问,下一层通常是 MCP。更广泛的层次选择见 Claude Code Memory、MCP 与 Skills 对比,具体服务器选择则见最佳 Claude Code MCP 服务器指南。
不要用 Hooks 或 Skills 解决无人值守运行时的归属问题。 如果真正的问题是周期性工作应该在云端、本机、打开的会话里还是 CI 中运行,请阅读 Claude Code Routines 指南。Hooks 与 Skills 可以支持自动化工作流,却不能决定工作流应该在哪里运行。
一份简短的设计清单
开始构建任何内容前,请按顺序回答这些问题:
1、应该由谁触发工作:人类、Claude,还是运行时事件?
2、这是一项一次性操作,还是可复用方法?
3、该行为需要自动运行,还是只应按需运行?
4、规则能否得到确定性检查?
5、操作是否可能产生副作用、费用或生产环境变更?
6、Claude 是否需要访问外部数据或执行外部操作?
7、队友能否理解这一层为什么存在?
如果答案指向明确时机,请从斜杠命令或用户调用的 Skill 开始;如果指向方法,请编写 Skill;如果指向确定性的事件处理,请配置 Hook;如果指向外部访问,请使用 MCP;如果指向无人值守运行时,请先选择运行时归属,再添加扩展文件。
这个顺序可以避免大多数 Claude Code 自定义配置无限膨胀,也能让配置更容易解释:“这条 Command 启动工作流,这项 Skill 承载方法,这个 Hook 强制执行一项不变量。”这就是应该追求的标准。
常见问题
斜杠命令与 Skills 现在是一回事吗?
不完全是。当前文档说明自定义 Commands 已合并进 Skills,而且 Skill 可以通过 /skill-name 调用。但斜杠命令仍然是可见的会话调用界面。请把 Commands 理解为时机与调用,把 Skills 理解为可复用工作流的打包方式。
应该把每个 .claude/commands/ 文件都迁移到 Skill 吗?
不需要。现有 Command 文件仍然可以工作。当工作流需要更丰富的打包方式、辅助文件、元数据、工具控制、动态上下文或更好的可发现性时,再进行迁移。如果一条简单 Command 仍能清楚完成一项小任务,不必只为了形式美观而迁移。
Hooks 比 Skills 更可靠吗?
Hooks 更具确定性,但并非普遍更好。配置的事件发生时,Hook 就会触发,这对格式化工具、日志、通知与小范围防护很有用,但不能替代工作流判断。当 Claude 需要方法、上下文、示例或检查清单时,Skills 更合适。
Skill 能调用工具或使用 Hooks 吗?
Skills 可以定义工作流上下文与控制,当前文档还介绍了工具访问和生命周期行为方面的高级选项。重要的设计原则仍是关注点分离:用 Skill 承载方法,只把应该自动运行、与事件绑定的部分交给 Hooks。
添加另一种界面前应该检查什么?
首先使用 /help 或命令参考检查命令是否可用,使用 /skills 查看现有 Skills,使用 /hooks 或配置调试检查 Hooks;如果怀疑指令已经载入,则使用 /context。完成这些检查后,如果仍无法说清缺少哪一层,就先不要再添加。
项目级规则应该放在哪里?
把宽泛且始终开启的项目规则放进 CLAUDE.md 或适当的记忆界面,而不是 Hook 或 Skill;把详细的重复流程放进 Skills;把事件强制执行放进 Hooks。如果真正的问题就是这条边界,可以继续阅读更广泛的 Memory、MCP 与 Skills 对比指南。
简短总结
根据触发方选择界面。斜杠命令用于明确的人为时机,Skills 用于可复用方法,Hooks 用于确定性的生命周期事件。只有当 Command、Skill 与 Hook 各自拥有不同职责时,才组合使用。
只要遵守这条规则,Claude Code 自定义就能保持务实:既能有意识地启动工作流、整洁打包重复方法,也能强制执行小范围不变量,而不会让 .claude/ 配置变成一堆相互重叠的自动化。