Claude Code技能开发指南——从零打造你自己的Skills 目录Claude Code技能开发指南——从零打造你自己的Skills ️ 目录1. 为什么要自己开发Skills 解决团队痛点 真实收益2. SKILL.md规范详解基本结构SKILL.md文件格式命名规范3. Frontmatter字段全解完整字段列表字段详解description — 触发关键allowed-tools — 工具预授权context: fork — 子代理隔离paths — 智能激活4. 触发条件设计三种触发方式方式1自动触发Claude判断方式2手动触发用户调用方式3混合触发触发设计最佳实践触发描述模板5. 动态上下文注入Shell命令注入多行命令引用附属文件6. 脚本与模板编写脚本集成模板集成7. 高级特性子代理执行条件逻辑错误处理权限控制8. 实战从零开发一个完整Skill需求团队代码审查技能步骤1创建目录步骤2编写SKILL.md2. 逐文件审查3. 生成报告 警告问题 信息提示✅ 亮点 总结步骤3编写参考文档步骤4测试使用步骤5迭代优化9. 测试与调试测试清单调试技巧1. 查看技能是否加载2. 测试动态上下文3. 检查触发条件4. 查看上下文使用常见问题10. 发布与分享方式1项目内共享推荐团队方式2GitHub仓库分享推荐社区方式3NPM包分享方式4插件发布发布检查清单11. 最佳实践设计原则代码规范性能优化团队协作12. 总结开发流程核心要点下一步 参考资料Claude Code技能开发指南——从零打造你自己的Skills ️ 更新于2026年5月15日 | ✍️ 原创文章转载请注明出处 目录为什么要自己开发SkillsSKILL.md规范详解Frontmatter字段全解触发条件设计动态上下文注入脚本与模板编写高级特性实战从零开发一个完整Skill测试与调试发布与分享最佳实践总结1. 为什么要自己开发Skills 解决团队痛点痛点Skills解决方案编码规范靠口头传达规范写成SkillClaude自动遵守代码审查标准不一审查Skill统一标准新人上手慢项目Skill即文档重复劳动多一键触发复杂流程最佳实践难落地实践固化为可执行指令 真实收益根据社区反馈场景开发前开发后提升代码审查30分钟/次5分钟/次83%新功能开发2小时45分钟62%部署流程15步手动1步自动93%新人培训2周3天78%2. SKILL.md规范详解基本结构skill-name/ # 目录名 技能名 ├── SKILL.md # 必需入口文件 ├── scripts/ # 可选脚本目录 │ ├── validate.sh │ └── deploy.sh ├── templates/ # 可选模板目录 │ └── component.tsx.template ├── examples/ # 可选示例目录 │ └── sample-output.md └── references/ # 可选参考文档 └── api-spec.mdSKILL.md文件格式--- # YAML Frontmatter元数据 name: my-skill description: 技能描述 --- # Markdown Content指令正文 这是Claude遵循的具体指令... ## 步骤1 ... ## 步骤2 ...命名规范规则示例小写字母code-review✅Code-Review❌数字允许v2-migration✅连字符分隔my-skill✅my_skill⚠️最长64字符-有意义react-component-gen✅skill1❌3. Frontmatter字段全解完整字段列表---# ═══════════════════════════════════════# 基础信息# ═══════════════════════════════════════name:my-skill# 技能名必需description:代码审查技能# 描述推荐Claude根据此自动触发when_to_use:用户要求审查代码时# 补充触发上下文argument-hint:[file-path]# 参数提示显示在自动补全中# ═══════════════════════════════════════# 参数定义# ═══════════════════════════════════════arguments:-name:targetdescription:审查目标文件或目录required:true-name:severitydescription:最低严重级别required:falsedefault:warning# ═══════════════════════════════════════# 调用控制# ═══════════════════════════════════════disable-model-invocation:true# true 只能手动 /skill-nameuser-invocable:false# false 只有Claude能调用# ═══════════════════════════════════════# 工具权限# ═══════════════════════════════════════allowed-tools:-Read# 读取文件-Edit# 编辑文件-Write# 创建文件-Bash(git diff*)# Git差异-Bash(npm run lint:*)# Lint命令-WebSearch# 网络搜索# ═══════════════════════════════════════# 执行配置# ═══════════════════════════════════════model:opus# 覆盖模型sonnet/opus/haikueffort:high# 覆盖推理深度context:fork# 在子代理中运行agent:Explore# 使用探索型子代理# ═══════════════════════════════════════# 路径过滤# ═══════════════════════════════════════paths:-src/**/*.ts# 只在操作TS文件时激活-tests/**# 或测试文件# ═══════════════════════════════════════# Shell配置# ═══════════════════════════════════════shell:bash# bash默认或 powershell# ═══════════════════════════════════════# 钩子生命周期事件# ═══════════════════════════════════════hooks:PreToolUse:-matcher:Writehooks:-type:commandcommand:echo About to write filePostToolUse:-matcher:Bash(npm test *)hooks:-type:commandcommand:echo Tests completed---字段详解description— 触发关键这是最重要的字段Claude根据它判断何时使用技能。好的描述description:当用户要求代码审查、PR审查或安全检查时自动触发差的描述description:审查代码# 太模糊allowed-tools— 工具预授权避免Claude每次使用工具都询问权限。语法allowed-tools:-Read# 工具名-Bash(git*)# 通配符匹配-Bash(npm run lint:*)# 命令模式-Edit# 文件编辑-mcp__github__*# MCP工具context: fork— 子代理隔离适合需要独立上下文的复杂任务context:fork# 在子代理中运行agent:Explore# 使用探索型子代理只读适用场景安全扫描不污染主上下文大范围代码分析并行任务paths— 智能激活只在操作特定文件时激活paths:-src/**/*.ts# TypeScript源码-tests/**/*.test.ts# 测试文件-!**/node_modules/**# 排除node_modules4. 触发条件设计三种触发方式方式1自动触发Claude判断---description:当用户要求创建React组件时使用---Claude根据用户意图自动匹配。方式2手动触发用户调用---name:deploydisable-model-invocation:true---用户必须输入/deploy才会触发。方式3混合触发---description:代码审查也可通过/review手动调用---两种方式都可以。触发设计最佳实践场景推荐方式理由代码审查自动触发用户常说帮我看看代码部署手动触发危险操作需明确意图格式化自动触发保存时自动执行数据库迁移手动触发不可逆操作触发描述模板# 通用型description:当用户要求[动作]时使用# 条件型description:当用户[条件A]且[条件B]时使用# 排除型description:当用户要求[动作]但不涉及[排除场景]时使用5. 动态上下文注入Shell命令注入用!command在技能加载时执行命令并注入结果## 当前状态 分支!git branch --show-current 最近提交!git log --oneline -1 变更文件!git diff --name-only HEAD注意命令在技能加载时执行不是Claude读取时。多行命令用!代码块## 项目信息 ! echo Node版本: $(node --version) echo NPM版本: $(npm --version) echo 项目名: $(basename $(pwd))### 变量替换 | 变量 | 说明 | 示例 | |------|------|------| | $ARGUMENTS | 用户输入的全部参数 | /review src/ → src/ | | $0, $1, $N | 位置参数 | /review src/ main → $0src/, $1main | | $name | 命名参数 | 见下方示例 | | ${CLAUDE_SESSION_ID} | 当前会话ID | - | | ${CLAUDE_EFFORT} | 当前推理级别 | - | | ${CLAUDE_SKILL_DIR} | 技能目录路径 | 引用附属文件 | ### 命名参数示例 yaml --- arguments: - name: target description: 审查目标 required: true - name: level description: 严格程度 default: normal --- 审查目标$target 严格程度$level用户调用/review --target src/ --level strict引用附属文件## 审查规则 参考规则文件 ${CLAUDE_SKILL_DIR}/references/rules.md 运行验证脚本 ${CLAUDE_SKILL_DIR}/scripts/validate.sh $ARGUMENTS6. 脚本与模板编写脚本集成目录结构my-skill/ ├── SKILL.md └── scripts/ ├── validate.sh ├── lint.sh └── deploy.sh在SKILL.md中调用## 验证步骤 1. 运行验证脚本 ${CLAUDE_SKILL_DIR}/scripts/validate.sh $ARGUMENTS 2. 检查输出结果 3. 如果有错误报告并停止脚本示例scripts/validate.sh#!/bin/bash# validate.sh - 代码验证脚本set-eTARGET${1:-.}echo Validating:$TARGET# ESLint检查ifcommand-veslint/dev/null;thenechoRunning ESLint...eslint$TARGET--formatcompactfi# TypeScript检查ifcommand-vtsc/dev/null;thenechoRunning TypeScript check...tsc--noEmitfi# 测试if[-fpackage.json];thenechoRunning tests...npmtest----passWithNoTestsfiecho✅ Validation complete!模板集成目录结构my-skill/ ├── SKILL.md └── templates/ ├── component.tsx.template ├── test.spec.ts.template └── api-route.ts.template在SKILL.md中引用## 创建组件 根据模板创建新组件 ${CLAUDE_SKILL_DIR}/templates/component.tsx.template 将模板中的占位符替换为 - {{ComponentName}} → 用户指定的组件名 - {{Description}} → 组件描述模板示例templates/component.tsx.templateimportReactfromreact;interface{{ComponentName}}Props{// TODO: 定义属性}/** * {{Description}} */exportconst{{ComponentName}}:React.FC{{ComponentName}}Props(props){return(div className{{component-name}}{/* TODO: 实现组件 */}/div);};exportdefault{{ComponentName}};7. 高级特性子代理执行---context:forkagent:Explore---子代理类型类型特点适用场景Explore只读不修改文件代码分析、安全扫描Plan只规划不执行架构设计、方案规划自定义按需配置特定工作流条件逻辑在Markdown中用自然语言描述条件## 处理流程 1. 检查 $target 是否存在 2. 如果是目录 - 递归扫描所有.ts文件 - 生成目录级别的报告 3. 如果是文件 - 详细分析单个文件 - 生成文件级别的报告 4. 如果不存在 - 报告错误并停止错误处理## 错误处理 如果任何步骤失败 1. 记录错误信息 2. 尝试恢复如果可能 3. 生成错误报告 4. 停止后续步骤 **不要** - 忽略错误继续执行 - 修改用户文件导致不一致权限控制---allowed-tools:-Read-Bash(git diff*)-Bash(git log*)# 不包含Write和Edit → 只读技能---8. 实战从零开发一个完整Skill需求团队代码审查技能目标统一审查标准自动检查常见问题生成结构化报告步骤1创建目录mkdir-p~/.claude/skills/team-review/{scripts,references}步骤2编写SKILL.md# ~/.claude/skills/team-review/SKILL.md---name:team-reviewdescription:当用户要求代码审查、PR审查时自动触发allowed-tools:-Read-Bash(git diff*)-Bash(git log*)-Bash(git show*)arguments:-name:targetdescription:审查目标文件、目录或PR号required:falsedefault:HEAD-name:severitydescription:最低报告级别info/warning/errorrequired:falsedefault:warning---# 团队代码审查技能你是一个严格的代码审查员。按照以下标准审查代码。## 审查标准### 严重问题必须修复1.**安全漏洞**-SQL注入-XSS攻击-命令注入-硬编码密码/密钥-不安全的反序列化 2.**数据安全**-敏感信息泄露日志、响应-缺少输入验证-权限检查缺失 3.**逻辑错误**-空指针未处理-资源未释放-并发竞态条件### 警告问题建议修复1.**代码质量**-函数超过50行-嵌套超过3层-重复代码-命名不清晰 2.**性能问题**-N1查询-不必要的循环-内存泄漏风险 3.**可维护性**-缺少注释复杂逻辑-魔法数字-过度耦合### 信息提示可选改进1.**代码风格**-格式不一致-import顺序-未使用的变量 2.**最佳实践**-可以用更现代的语法-可以提取公共方法## 审查流程### 1. 获取变更内容bash# 如果是PRgit diff main...$target# 如果是文件git diff HEAD--$target# 如果是最新提交git show HEAD--stat2. 逐文件审查对每个变更文件理解变更目的检查上述标准记录问题3. 生成报告输出格式## 代码审查报告 **审查范围**$target **审查时间**$(date) **最低级别**$severity --- ### 统计 | 级别 | 数量 | |------|------| | 严重 | N | | 警告 | N | | 信息 | N | --- ### 严重问题 #### [问题标题] - **文件**path/to/file.ts:42 - **描述**[问题详细描述] - **建议**[修复建议] - **示例** typescript // ❌ 当前代码 const query SELECT * FROM users WHERE id ${userId}; // ✅ 建议修改 const query SELECT * FROM users WHERE id ?; db.query(query, [userId]); 警告问题同上格式 信息提示同上格式✅ 亮点值得肯定的地方[亮点1][亮点2] 总结[总体评价和建议]## 上下文注入 当前分支!git branch --show-current 最近提交!git log --oneline -5 变更统计!git diff --stat HEAD步骤3编写参考文档# ~/.claude/skills/team-review/references/rules.md # 团队编码规范 ## 命名规范 - 变量camelCase - 常量UPPER_SNAKE_CASE - 类PascalCase - 文件kebab-case ## 注释规范 - 公共API必须JSDoc - 复杂逻辑必须行内注释 - TODO必须关联Issue号 ## 测试规范 - 新功能必须有测试 - Bug修复必须有回归测试 - 覆盖率不低于80%步骤4测试使用# 在Claude Code中测试claude# 方式1自动触发帮我审查一下最近的改动# 方式2手动触发/team-review# 方式3指定目标/team-review--targetsrc/auth/步骤5迭代优化根据使用反馈调整补充遗漏的检查项调整严重级别优化报告格式9. 测试与调试测试清单自动触发是否正常描述匹配手动触发是否正常/skill-name参数替换是否正确动态上下文是否注入工具权限是否生效路径过滤是否正确子代理是否正常如使用错误处理是否完善调试技巧1. 查看技能是否加载# 在Claude Code中/help# 检查技能是否出现在命令列表中2. 测试动态上下文在SKILL.md中添加调试输出## 调试信息发布前删除 当前目录!pwd 环境变量!echo $NODE_ENV3. 检查触发条件临时修改description测试不同触发词description:测试触发当用户提到review时4. 查看上下文使用# 在Claude Code中/context# 检查技能占用的token常见问题问题原因解决技能不触发description太模糊改为更具体的描述参数不替换参数名拼写错误检查$name对应arguments.name脚本不执行权限不足chmod x scripts/*.sh上下文溢出动态注入过多精简注入内容10. 发布与分享方式1项目内共享推荐团队# 1. 技能放在项目目录cp-r~/.claude/skills/team-review /path/to/project/.claude/skills/# 2. 提交到gitcd/path/to/projectgitadd.claude/skills/team-reviewgitcommit-mfeat: add team code review skill# 3. 团队成员pull后自动可用方式2GitHub仓库分享推荐社区# 1. 创建仓库mkdirmy-claude-skillscdmy-claude-skillsgitinit# 2. 添加技能cp-r~/.claude/skills/my-* skills/# 3. 编写READMEcatREADME.mdEOF # My Claude Code Skills ## 安装 \\\bash git clone https://github.com/yourname/my-claude-skills.git cp -r my-claude-skills/skills/* ~/.claude/skills/ \\\ ## 技能列表 - **skill-1**描述 - **skill-2**描述 EOF# 4. 推送到GitHubgitadd.gitcommit-mInitial commitgitpush origin main方式3NPM包分享// package.json{name:yourname/claude-skills,version:1.0.0,description:Claude Code skills collection,files:[skills/],scripts:{postinstall:cp -r skills/* ~/.claude/skills/}}用户安装npminstall-gyourname/claude-skills方式4插件发布# 1. 创建插件结构my-plugin/ ├── plugin.json ├── skills/ │ └── my-skill/ │ └── SKILL.md └── README.md# 2. plugin.json{name:my-plugin,version:1.0.0,skills:[skills/my-skill]}# 3. 用户安装/install-plugin my-plugin发布检查清单技能名不与已有技能冲突description清晰准确包含使用示例脚本有执行权限测试通过README完整LICENSE明确11. 最佳实践设计原则原则说明单一职责一个技能做一件事文档完整description、示例、参数说明最小权限只申请必要的工具权限可测试支持dry-run或验证模式可复用参数化不硬编码️安全输入验证错误处理代码规范# ✅ 好的实践---name:code-reviewdescription:当用户要求代码审查时自动触发检查安全、质量、性能allowed-tools:-Read-Bash(git diff*)---# ❌ 差的实践---name:skill1description:审查allowed-tools:-*# 过度授权---性能优化精简动态注入只注入必要信息路径过滤避免在无关文件上激活子代理隔离复杂任务用context: fork按需加载支持文件用相对路径引用团队协作统一命名team-前缀区分团队技能版本控制SKILL.md纳入git变更日志在SKILL.md头部记录变更代码审查技能本身也需要审查12. 总结开发流程需求分析 → 设计触发 → 编写指令 → 添加脚本 → 测试调试 → 发布分享核心要点要点说明SKILL.mdYAML frontmatter Markdown指令触发设计description是自动触发的关键工具授权allowed-tools预授权避免反复确认支持文件scripts/、templates/、references/动态注入!command注入实时上下文测试自动触发 手动触发 参数替换发布项目目录 GitHub NPM 插件下一步上一篇Claude Code 2026热门技能Top 20推荐 →下一篇Claude Code技能实战——5个真实项目中的技能组合打法 →官方文档https://code.claude.com/docs/en/skills 参考资料Claude Code Skills官方文档https://code.claude.com/docs/en/skillsAgent Skills开放标准https://github.com/anthropics/claude-codeSKILL.md规范https://code.claude.com/docs/en/skills#skillmd-format动态上下文注入https://code.claude.com/docs/en/skills#dynamic-context子代理执行https://code.claude.com/docs/en/skills#subagent-execution 你开发过Claude Code技能吗遇到了哪些坑欢迎评论区分享经验 下一篇将带来5个真实项目中的技能组合实战手把手教你用技能提升开发效率