1. Claude Code技能系统概述
Claude Code技能系统是一套让AI助手Claude具备扩展能力的框架。通过这套系统,开发者可以为Claude添加各种定制化的功能模块,使其能够执行更复杂的任务。这就像给一个普通工人配备各种专业工具,让他能够胜任不同工种的工作。
技能系统的核心思想是将特定领域的知识和操作流程封装成独立的"技能包"。每个技能包包含:
- 技能描述:说明这个技能的功能和使用场景
- 执行逻辑:具体操作的步骤和规则
- 权限控制:定义技能可以访问哪些资源和工具
2. 技能系统的核心组件
2.1 技能文件结构
每个技能都是一个目录,包含以下关键文件:
code复制my-skill/
├── SKILL.md # 主要技能说明(必需)
├── template.md # 执行模板
├── examples/ # 示例目录
│ └── sample.md # 示例输出
└── scripts/ # 脚本目录
└── validate.sh # 可执行脚本
2.2 技能元数据
SKILL.md文件顶部使用YAML格式定义技能元数据:
yaml复制---
name: my-skill
description: 技能功能描述
disable-model-invocation: false
allowed-tools: Bash(git *)
---
主要元数据字段包括:
name: 技能显示名称description: 功能描述(影响AI自动调用)disable-model-invocation: 是否禁止AI自动调用allowed-tools: 技能可用的工具权限
3. 技能开发实战
3.1 创建第一个技能
我们以创建一个代码变更摘要技能为例:
- 创建技能目录
bash复制mkdir -p ~/.claude/skills/summarize-changes
- 编写SKILL.md
markdown复制---
description: 总结未提交的变更并标记风险内容。当用户询问变更、需要提交信息或要求审查差异时使用。
---
## 当前变更
!`git diff HEAD`
## 指令
用2-3个要点总结上述变更,然后列出你注意到的任何风险,如缺少错误处理、硬编码值或需要更新的测试。如果差异为空,说明没有未提交的变更。
- 测试技能
- 让AI自动调用:询问"What did I change?"
- 直接调用:输入
/summarize-changes
3.2 动态内容注入
使用`!command语法可以在技能执行前注入动态内容:
markdown复制## 拉取请求上下文
- PR差异: !`gh pr diff`
- PR评论: !`gh pr view --comments`
- 变更文件: !`gh pr diff --name-only`
这些命令会在技能内容发送给AI前执行,结果会直接替换占位符。
4. 高级技能开发技巧
4.1 子代理执行
通过设置context: fork可以让技能在隔离的子代理中执行:
yaml复制---
name: deep-research
description: 深入研究某个主题
context: fork
agent: Explore
---
这种模式适合需要隔离环境的复杂任务,如:
- 代码库探索
- 数据分析
- 自动化测试
4.2 可视化输出
技能可以生成交互式HTML报告。例如创建一个代码库可视化工具:
- 技能定义:
markdown复制---
name: codebase-visualizer
description: 生成代码库的交互式树状可视化图。
allowed-tools: Bash(python3 *)
---
# 代码库可视化器
运行可视化脚本:
```bash
python3 ${CLAUDE_SKILL_DIR}/scripts/visualize.py .
code复制
2. Python脚本(部分):
```python
def generate_html(data, stats):
# 生成包含交互式树状图的HTML
html = f'''
<!DOCTYPE html>
<html>
<style>
.tree {{ list-style: none; padding-left: 20px; }}
details {{ cursor: pointer; }}
</style>
<body>
<div id="tree"></div>
<script>
// 渲染交互式树状图
</script>
</body>
</html>
'''
return html
5. 技能管理最佳实践
5.1 技能部署策略
根据使用范围选择部署方式:
- 个人技能:
~/.claude/skills/ - 项目技能:
.claude/skills/ - 插件技能:插件目录下的
skills/ - 企业技能:通过托管设置部署
5.2 性能优化技巧
- 控制技能描述长度,关键信息前置
- 大型参考资料放在单独文件中
- 使用
disable-model-invocation限制非必要自动调用 - 定期使用
/doctor检查技能列表的上下文开销
6. 常见问题排查
6.1 技能未触发
- 检查描述是否包含用户可能使用的关键词
- 确认技能出现在可用技能列表中
- 检查YAML格式是否正确
6.2 技能过度触发
- 使描述更具体
- 添加
disable-model-invocation: true - 调整
when_to_use元数据
6.3 性能问题
- 检查
/context输出中的技能列表大小 - 考虑将低优先级技能设置为
"name-only" - 调整
skillListingBudgetFraction设置
7. 技能开发进阶
7.1 参数传递
技能支持多种参数传递方式:
markdown复制---
name: fix-issue
arguments: [issue, branch]
---
修复问题 $issue 在分支 $branch 上:
1. 检查问题描述
2. 创建修复分支
3. 实现解决方案
调用方式:
/fix-issue 123 main
7.2 钩子集成
技能可以绑定生命周期钩子:
yaml复制---
hooks:
pre-invoke: scripts/pre-check.sh
post-invoke: scripts/cleanup.sh
---
8. 技能评估与迭代
使用skill-creator插件进行技能评估:
-
安装插件:
/plugin install skill-creator@claude-plugins-official -
创建测试用例:
json复制{
"prompt": "What did I change?",
"input": "sample-diff.txt",
"expectations": [
"contains summary",
"lists at least one risk"
]
}
- 运行评估:
/evaluate summarize-changes
9. 安全注意事项
- 项目技能在被信任前不应获得
allowed-tools权限 - 审查来自第三方的技能代码
- 使用
disallowed-tools限制敏感操作 - 生产环境考虑设置
disableSkillShellExecution: true
通过这套技能系统,Claude可以像掌握"十八般武艺"的多面手一样,适应各种专业场景的需求。从简单的代码变更摘要,到复杂的系统分析可视化,开发者可以通过组合不同的技能模块,构建出功能强大的AI助手。
