驾驭Claude代码:真正能触发的技能

驾驭Claude代码:真正能触发的技能

系列之前

简介

技能是Claude代码中看似简单但你真正尝试持续使用时才会发现的特性。这个想法很简单:写一个带有指令的markdown文件,放到合适的目录里,Claude在需要时加载------或者你用斜杠命令明确调用它。实际上,"相关时"这部分才是事情变得有趣的地方,而且不总是好事。

本文将介绍技能的工作原理、它们的居住地、实际控制它们是否发射的因素,以及它们常见的无声失败方式。我还会介绍一些我觉得真正有用的模式,以及那些会增加文件杂乱却无明显效益的模式。

什么是技能。

技能是带有YAML前件的markdown文件,Claude Code会加载到上下文中。每个技能都会生成一个斜击命令------写入,你得到的就是。你可以直接调用,或者当对话内容符合技能描述时,克劳德自动调用。 ~/.claude/skills/security-review/SKILL.md /security-review

这种双重调用模型将技能与旧有的使用者调用方法区分开来。合并发生在版本 2.1.3,现在两个地点的结果相同。如果你已经有文件,它们会继续工作------当名称冲突时,技能优先。.claude/commands/``.claude/commands/

技能存在于三个层面:

  • 个人 ()------适用于你所有项目 ~/.claude/skills/
  • 项目 ()------提交到仓库,与团队共享.claude/skills/
  • 企业 级------托管设置适用于整个组织

当同一个技能名称在多个层级存在时,企业级获胜,然后是个人级,然后是投射。这与大多数人的预期相反------你的全局技能优先于项目层面的技能,而不是反过来。我稍后会回到这点的重要性。

技能的解剖结构。

每个技能都需要两个东西:YAML前置和标记说明。 SKILL.md

yaml 复制代码
name: pr-review
description: Reviews staged changes for correctness, test coverage, and consistency with project conventions. Use when the user asks for a code review or is about to open a PR.

Review the current changes:

1. Run \`git diff --staged\` to see what's changing.
2. Check that every modified function has a corresponding test change.
3. Flag any hardcoded values that should be environment variables.
4. Confirm the commit message matches the conventional commit format used in this repo.

Return findings as a short numbered list. If nothing to flag, say so explicitly.

字段变成了砍击命令。这是Claude用来决定是否自动加载这项技能的内容------虽然看起来像是,但它并不是为人类准备的文档。这种区分很重要。 name description

辅助文件是可选的,但很有用。技能目录可以包含模板、示例输出、脚本或参考文档:

yaml 复制代码
.claude/skills/pr-review/
├── SKILL.md
├── examples/good-review.md
└── conventions.md

明确引用这些,让克劳德知道它们的存在。目录里的文件不会自动加载------你必须指向它们。 SKILL.md

具体控制自动召唤的是什么。

克劳德根据场地情况决定是否自动加载技能。描述与当前对话背景进行对比,克劳德做出判断。这是语义匹配,而非关键词匹配------听起来灵活,但有具体缺点:难以预测或测试。 description

角色描述有预算。所有技能名称都会加载到上下文中,但描述会被截断以适应动态限制(上下文窗口的1%,备用8000字符)。每个描述的长度都限制在250个字符以内。

这意味着两件事:

  1. 如果你的描述太长,就会被删减。前期就要有用例------什么任务,什么触发条件。
  2. 如果你有很多技能,他们会争夺预算。十个平庸技能会挤掉重要技能。

你可以用 来增加预算,但更有用的解决办法是写更紧凑的描述,保持技能总数低。这和MCP服务器工具数量的压力一样------两者都争夺相同的上下文预算,并且会叠加。一场包含十个MCP工具和十五项技能的游戏,在你还没写出提示词之前就已经把预算烧掉了。 SLASH_COMMAND_TOOL_CHAR_BUDGET

为了防止技能自动调用,可以在前言中添加内容。部署和其他破坏性工作流程应始终保持这一点------你不希望Claude自己决定现在是发布的好时机。 disable-model-invocation: true

yaml 复制代码
name: deploy
description: Deploy the application to production
disable-model-invocation: true

陷阱

先例倒置

优先顺序------企业>个人>项目------让人措手不及。如果你有一个全局代码,团队为该仓库添加了一个项目级技能,且步骤不同,项目级技能就会输。全球的胜出。 ~/.claude/skills/deploy/SKILL.md deploy

这与大多数配置的运作方式相反(项目层面覆盖全局)。解决方法是为项目特定的工作流程使用不同的名称,而不是依赖不存在的覆盖行为。

bash 复制代码
# Don't do this --- assumes project-level wins
~/.claude/skills/deploy/SKILL.md        # global deploy
.claude/skills/deploy/SKILL.md          # intended project override --- will be ignored

# Do this instead
~/.claude/skills/deploy/SKILL.md        # generic deploy scaffold
.claude/skills/deploy-staging/SKILL.md  # project-specific
.claude/skills/deploy-prod/SKILL.md     # project-specific with env context

无声无匹配问题

本应自动触发的技能往往根本不会生效。描述过于模糊、冗长,或者与对话的实际表述不符。没有任何预警。Claude 根本不会加载技能,除非你特别注意,否则你会以为这个功能坏了。

失败的模式如下:

yaml 复制代码
# Too vague --- Claude doesn't know when this applies
description: Helps with code quality and reviews
yaml 复制代码
# Better --- specific trigger condition, specific task
description: Reviews staged changes for test coverage and conventional commit format. Use before opening a PR.

当技能没有触发时,首先要检查的不是说明,而是描述。通过直接调用技能来测试,确认指令本身有效,然后细化描述,直到自动调用可靠。 /skill-name

如果你想要对某个工作流程保证调用,可以加个注释,比如"每次PR前使用/pr-review"。这是一种手动协议,不是自动化,但很可靠。自动调用在正常时很方便,坏时则是隐形的。 CLAUDE.md

总是加载技能带来的上下文膨胀

自动调用技能每次发射时都会把指令添加到上下文窗口。这项技能会在每一个文件解释、每次代码审查、每一次提交------也就是说,在这些任务中消耗的token------都触发。长时间的治疗会叠加。

捆绑技能就是一个很好的例子:它会并行生成三个审核代理,每个代理读取文件。这是针对一次性重构的故意设置,而不是你想在每道题都加载的内容。 /simplify

要有意识地选择哪些技能可以自动调用,哪些应该明确调用。任务技能------部署、迁移、PR创建------几乎都应该使用。参考技能------约定、模式、API文档------是自动调用的合理候选对象,因为它们的全部价值在于无需你请求即可获得。 disable-model-invocation: true

还有一个值得注意的钩子交互:一个在每次写入文件时运行格式化器的钩子本身就会增加令牌开销。再加上一个广泛自动调用的技能,在主动编辑会话中每回合消耗会迅速攀升。如果你用的是PostToolUse钩子,要更保守地选择让哪些技能自动射击。

值得了解的捆绑技能。

Claude Code 内置了几个技能。这些是基于提示的(非硬编码),因此可以读取文件、生成代理并适应你的代码库:

  • /batch <instruction> ------ 将大量变更分解为并行单元,在孤立的 git 工作树中每个单元生成一个代理,并为每个单元打开一个 PR。需要git仓库。对跨代码库迁移非常有用。
  • /simplify [focus] ------生成三个并行审查代理,汇总发现并应用修复。传递焦点:。 /simplify focus on memory efficiency
  • /loop [interval] <prompt> ------在会话开放时,按计划反复运行一个提示。对于监控部署或轮询外部资源非常有用。
  • /debug [description] ------在会话中启用调试日志并读取日志。当工具调用出现意外行为时,这比听起来更有用。
  • /claude-api ------ 加载你项目语言的 API 参考材料。当检测到代码中导入 Anthropic SDK 时,它还会自动调用。

捆绑技能与内置斜杠命令(, , )之间的区别很重要:内置命令执行固定逻辑且无法自定义。捆绑技能是基于提示的,你可以通过创建同名且优先级更高的技能来覆盖它们。 /compact /clear /cost

技巧与窍门

  • 项目技能保持在版本控制中。 承诺仓库。未来的团队成员无需入职步骤就能掌握工作流程。.claude/skills/
  • 一项技能,一份工作。 一个能做代码审查、生成提交消息并检查覆盖范围的技能,比三项专注技能还差。分开。
  • 对于长篇参考内容,请使用辅助文件。 如果你的技能指令引用了你们团队的编码规范,把这些规范放进技能目录里,并从那里链接到。这样说明书更易读。 conventions.md SKILL.md
  • 通过直接调用来测试技能指令。 绕过描述匹配。如果技能在手动调用时有效但不会自动,说明需要改进------而不是说明。 /skill-name
  • CLAUDE.md 添加技能清单。 列出可用的自定义技能以及使用时间。克劳德在游戏开始时会朗读,这不仅强化了自动召唤,也增强了团队意识。

摘要

技能很有用,但需要比文档所暗示的更为刻意的设置。自动调用完全取决于描述质量,而无声失败模式------技能根本不触发------第一次触发时诊断需要一段时间。优先顺序(全球节拍项目)几乎会让所有人感到惊讶。

有效的模式是:团队工作流程中使用项目级技能,保持专注并明确命名,用于任何破坏性任务,并在可靠性比便利性更重要的情况下,用技能清单来补充自动调用。 disable-model-invocation: true CLAUDE.md

在下一篇文章中,我将介绍子代理------它们与技能的区别,何时生成独立代理值得承担开销,以及为什么他们的隔离模型(每个代理一个新的上下文窗口,不共享历史)是适合技能不适合在线处理的冗长工作的最佳方案。

相关推荐
小脑斧1232 小时前
自媒体内容工业化:基于AI Skills低代码实现穿搭账号矩阵自动化量产
人工智能·低代码·媒体·skills·openclaw·hermes·marvis
低代码布道师2 天前
健身房私教管理系统(四)教练账号审核
低代码
Jeking2172 天前
低代码平台表单设计器 unione form editor 组件 —— 子表单组件
低代码·动态表单·表单设计·表单引擎·unione cloud
Jeking2173 天前
低代码平台表单设计器 unione-form-editor 组件 —— 子数据组件
低代码·动态表单·表单设计·表单引擎·unione cloud
Jeking2173 天前
实战案例|引用组件在【销售订单表单】中的真实应用
低代码·动态表单·表单设计·表单引擎·unione cloud
2501_927283583 天前
堆垛机立体库:告别人工翻找与货物堆压
大数据·人工智能·低代码·自动化·区块链
多租户观察室3 天前
信通院标准体系2.0深度解读:低代码管理平台进入“精品竞争”时代
前端·低代码·程序员
Jeking2174 天前
低代码平台表单设计器 unione-form-editor 组件 —— 条形码组件
低代码·动态表单·表单设计·表单引擎·unione cloud
AI产品实战4 天前
开源政府门户设计器核心技术解析
低代码