一再重复的痛苦
你是否曾经不得不一遍又一遍地向某人解释相同的内容?那就想象一下,这种情况还是发生在一台几小时内就会“忘记”你的话的机器人上。
“Claude,提交操作前必须通过测试。”
“Claude,我跟你说过要用格式 类型: 描述。”
“别加表情符号,拜托!”
这就是我每天的写照,直到我发现了 技能(Skills)。简单来说,就是你只需写一次指令,Claude会永远听以执行。就像训练一只狗一样,只不过这次不需要狗粮。
什么是技能?
从 2.1.3 版本开始,Claude Code 将之前的 斜杠命令(slash commands) 合并成了一种更强大的功能:技能(Skills)。它们是 Markdown 文件,Claude 可以通过以下两种方式执行:
- 手动:当你输入
/我的技能时触发 - 自动:当 Claude 检测到应该使用它时触发
第二点是这个功能的魔力所在。你再也不需要记得手动调用命令了。如果你设置了一个技能,告诉系统:“在用户完成任务且存在未提交更改时使用”,Claude 会自动帮你完成。
它就如同一个不需要你吩咐也会知道什么时候该收拾餐桌的管家。
技能存放在哪里?
~/.claude/skills/ # 个人技能(适用于所有你的项目)
.claude/skills/ # 项目技能(与团队共享)
~/.claude/commands/ # 旧版支持,仍然可用
.claude/commands/ # 旧版支持,仍然可用
如果你希望只有你自己可以使用某个技能,可以将其放在 home 目录下。如果你希望整个团队都能用它,则可以将其提交到代码库中。就是这么简单。
技能的基本结构
一个技能是包含 YAML frontmatter 和内容的 Markdown 文件:
---
name: mi-skill
description: 简要描述此技能的功能
---
# 指令
当调用此技能时,Claude 应执行的具体操作。
这已经是最简单的形式了。但其实 frontmatter 中还有更多值得关注的选项。
必填字段
name
技能的唯一标识符。只能使用小写字母、数字和连字符(最多 64 个字符)。这个字段必须和文件名或文件夹名称一致。
name: check-types # ✓ 合法
name: Check_Types # ✗ 非法(含大写字母和下划线)
description
这是最重要的字段。 Claude 使用这个字段来:
- 决定何时自动调用技能
- 理解技能的功能
最多 1024 个字符。请使用用户自然会说的关键词。
# 错误 —— 描述过于笼统
description: 处理提交操作
# 正确 —— 描述具体且有触发条件
description: >
创建 Git 提交时验证代码类型检查、代码风格和测试。
当用户说“提交”、“保存更改”或完成任务并有未提交更改时使用。
可选字段
model
为此技能指定特定的模型。适用于需要更多计算能力的任务。
model: opus # 用于安全审核和复杂重构
model: sonnet # 性能与成本的平衡选择
model: haiku # 适合简单、快速的任务
如果不指定,将使用当前会话的默认模型。
allowed-tools
限制 Claude 可以使用哪些工具。对于只读或安全技能来说非常重要。
# 只能读取,不能修改
allowed-tools:
- Read
- Grep
- Glob
# 只能执行特定命令
allowed-tools:
- Bash(git:*) # 仅允许 Git 命令
- Bash(uv:*) # 仅允许 uv 命令
- Read
实际示例:一个不能改变任何内容的分析技能:
---
name: analyze-deps
description: 分析项目的依赖关系而不修改任何内容。
allowed-tools:
- Read
- Grep
- Bash(uv pip list:*)
---
context: fork
在独立的子代理中执行技能,该子代理具有自己的上下文。主对话记录不会被污染。
context: fork
适用于多步复杂操作,避免在聊天中添加多余信息。
agent
此字段仅在 context: fork 指定时有效。定义执行技能的代理类型。
context: fork
agent: Explore # 快速探索代理
agent: Plan # 规划代理
user-invocable
控制技能是否显示在 / 菜单中(斜杠命令)。默认值为 true。
user-invocable: false # 不在菜单中显示,但 Claude 可以自动调用
适用于只应在自动触发时使用的内部技能。
disable-model-invocation
禁止 Claude 自动调用此技能。只有你能通过 /技能名称 激活它。
disable-model-invocation: true
适用于需要明确人工决策的破坏性或成本高昂的操作。
hooks
定义技能生命周期内执行的钩子。支持 PreToolUse、PostToolUse 和 Stop。
hooks:
PreToolUse:
- matcher: "Bash"
hooks:
- type: command
command: "./scripts/validate-input.sh $TOOL_INPUT"
once: true
替代变量
在技能的内容中可以使用:
| 变量 | 含义 |
|---|---|
$ARGUMENTS | 调用 /skill arg1 arg2 时的参数 |
${CLAUDE_SESSION_ID} | 当前会话的 ID(用于日志记录) |
总结表
| 字段 | 必填 | 作用 |
|---|---|---|
name | ✓ | 技能标识符 |
description | ✓ | 使用技能的条件和功能描述 |
model | 指定特定模型 | |
allowed-tools | 限制工具使用范围 | |
context | fork 表示使用独立子代理 | |
agent | 使用的代理类型(需配合 context: fork) | |
user-invocable | 控制是否出现在斜杠命令菜单中 | |
disable-model-invocation | 禁止自动调用 | |
hooks | 定义生命周期中的钩子 |
完整示例
---
name: security-audit
description: >
OWASP 安全审核。当需要检查安全问题、查找漏洞,或上线生产环境前使用。
model: opus
allowed-tools:
- Read
- Grep
- Glob
user-invocable: true
disable-model-invocation: true # 仅手动触发,因耗时较长
---
# 安全审核
[instrucciones...]
更多参考,请查看 Agent Skills 官方文档。
[…]
本文原文为西班牙语,借助AI翻译。