欢迎光临
我们一直在努力

Claude Code Skill 的编写

从零基础到生产级,系统掌握 Claude Code Skill 的编写。本文从最小可用技能开始,逐步叠加知识、权限、模板、脚本、决策树,最终构建一个资深级的复杂技能。


一、核心概念基础

1.1 什么是 Skill

Skill 是一个上下文注入包。激活后,Claude Code 会将指定文件夹中的指令、知识、权限配置注入对话上下文,使模型在限定范围内表现出专业行为。

1.2 最小技能结构

my-skill/
└── SKILL.md # 唯一必需文件

SKILL.md 包含两部分:

  • YAML 前置元数据:定义技能名称、描述、权限等。
  • Markdown 正文:写给 Claude 的系统指令。

1.3 SKILL.md 示例(入门)


name: hello
description: 一个示例技能

# Hello 技能
当我提问时,请先回答“你好,我是由技能驱动的助手”。

这就是一个可工作的技能。安装后,每次激活时 Claude 都会加上这句问候。


二、核心知识点逐层展开

2.1 元数据字段(必知必会)

  • name:技能唯一标识,用 kebab-case。
  • description:描述技能功能,显示在 /skills 列表中。
  • allowed-tools:工具白名单,强烈推荐。不设则继承当前会话全部权限。
  • model:锁定模型,如 claude-sonnet-4-20250514。
  • files:激活时预加载的文件列表,很少用,改用 {{ include }} 更灵活。

2.2 工具权限(安全核心)

allowed-tools 语法:工具名(限定),逗号分隔。

  • 读工具通常全开:Read, Grep, Glob
  • 写工具必须限定路径:Write(templates/*.ts), Edit(src/**)
  • Bash 必须限定命令:Bash(git:status, git:diff, npm:run:lint)
  • 权限是替换式,激活时覆盖当前会话权限。

2.3 {{ include }} 指令

将技能目录下的文件内容注入到指令正文中,减少 SKILL.md 体积,方便管理。

请遵守以下编码规范:
{{ include "knowledge/style-guide.md" }}

2.4 技能目录组织约定

my-skill/
├── SKILL.md
├── templates/ # 代码模板
├── knowledge/ # 规范、知识
├── scripts/ # 受控执行脚本
├── examples/ # 示例输入输出
└── schemas/ # JSON Schema 等

这不是强制的,但随着复杂度增长,合理的目录结构是技能可维护性的基础。


三、案例一:Git 辅助技能(入门级)

目标:生成 Conventional Commits,并执行安全的 Git 操作。

目录结构

git-helper/
└── SKILL.md

SKILL.md


name: githelper
description: 根据暂存变更生成规范的 Git 提交信息,并执行安全提交。
allowed-tools: Read, Bash(git:status, git:diff, git:add, git:commit)

# Git Helper

## 角色
你是一个严格遵守 Conventional Commits 的 Git 助手。

## 流程
1. 执行 `git status –porcelain` 和 `git diff –staged` 获取暂存区变化。
2. 根据变更内容生成一条提交信息,格式:
– `feat: 描述` 新功能
– `fix: 描述` 修复
– `refactor: 描述` 重构
– `test: 描述` 测试
– `docs: 描述` 文档
3. 将生成的提交信息展示给用户确认,再执行 `git commit -m "…"`。

## 禁止
– 不得执行 force push。
– 不得修改暂存区以外的文件。

知识点总结

  • 权限锁定在 git status/diff/add/commit,绝对安全。
  • 指令结构化:角色 + 流程 + 禁止项。
  • 简单清晰,一个文件搞定。

四、案例二:代码审查技能(进阶级)

目标:结合 lint 工具、团队规范和模板,输出分级审查报告。

目录结构

code-reviewer/
├── SKILL.md
├── templates/
│ └── review-checklist.md
└── scripts/
└── run_lint.sh

SKILL.md


name: codereviewer
description: 基于团队规范与 Lint 结果的代码审查,输出分级报告。
allowed-tools: Read, Grep, Glob, Bash(git:diff, bash:./scripts/run_lint.sh)
model: claudesonnet420250514

# 代码审查技能

## 角色
你是一位前端审查员,遵守团队规范。

## 审查清单
以下是必须逐条核对的标准:
{{ include "templates/review-checklist.md" }}

## 工作流
1. 获取暂存区 diff:`git diff –staged`
2. 运行 lint:`bash ./scripts/run_lint.sh`
3. 结合 diff 和 lint 结果,依据审查清单给出分级:
– 🔴 错误:必须修复
– 🟡 警告:应该修复
– 🔵 建议:可忽略
4. 输出表格报告:

| 级别 | 类别 | 文件:行号 | 描述 | 修复建议 |
|——|——|———–|——|———-|
| … | … | … | … | … |

## 禁止
– 不得直接修改任何源文件。
– 不要建议推翻整个架构。

templates/review-checklist.md

– 类型安全:所有函数必须注明参数和返回值类型。
– 命名规范:变量 camelCase,组件 PascalCase。
– 错误处理:禁止空 catch。
– 副作用:React 组件 render 内不能有数据请求。

scripts/run_lint.sh

#!/bin/bash
npx eslint –format json "${@:-.}" || true

知识点总结

  • 使用 {{ include }} 加载外部规范文件,SKILL.md 保持简洁。
  • 通过封装脚本 run_lint.sh 运行 lint,获得确定性 JSON 输出,Claude 解析结构化数据。
  • 权限包含脚本调用,限制了直接 Bash 的风险。
  • 指定模型保证输出质量。

五、案例三:全栈重构智能体(资深级)

目标:构建一个对全栈 TypeScript 单体仓库进行安全、分阶段重构的复杂技能。涵盖前端(React)、后端(Express)、数据库(TypeORM),要求生成回滚、更新 API 契约、保证测试通过。

5.1 技能架构设计

此技能将遵循分层架构:

  • 调度层:SKILL.md 作为中央调度器,根据阶段动态加载工作流。
  • 知识层:团队规范、设计模式、反模式、术语表。
  • 资源层:代码模板、数据库迁移模板、API 契约 Schema。
  • 执行层:受控脚本(lint、测试、迁移安全检查)。
  • 示例层:历史成功重构案例,用作少样本教学。

5.2 完整目录结构

fullstack-refactor/
├── SKILL.md
├── .claude/
│ └── rules/
│ ├── security.md
│ └── architecture.md
├── core/
│ ├── workflows/
│ │ ├── assess.md
│ │ ├── plan.md
│ │ ├── execute.md
│ │ └── verify.md
│ └── decision-trees/
│ └── db-strategy.md
├── knowledge/
│ ├── conventions/
│ │ ├── backend.md
│ │ ├── frontend.md
│ │ └── database.md
│ ├── patterns/
│ │ ├── approved.md
│ │ └── anti-patterns.md
│ └── glossary.md
├── templates/
│ ├── migration/
│ │ └── typeorm.template.ts
│ ├── component/
│ │ └── functional.template.tsx
│ └── api/
│ └── controller.template.ts
├── schemas/
│ └── api-contract.schema.json
├── scripts/
│ ├── run_lint.sh
│ ├── run_tests.sh
│ └── check_migration_safety.py
├── examples/
│ └── rename-field/
│ ├── request.md
│ └── result.md
└── VERSION

5.3 核心指令:SKILL.md


name: fullstackrefactor
description: 全栈重构智能体,分阶段安全地重构 React、Node.js、TypeORM 项目。
allowed-tools: Read, Write(apps/*,packages/*), Edit(apps/*,packages/*), Grep, Glob,
Bash(git:status,git:diff,git:add,git:commit,
npm:run:lint, npm:test,
bash:scripts/run_lint.sh, bash:scripts/run_tests.sh,
python:scripts/check_migration_safety.py)
model: claudeopus420250514

# 全栈重构智能体

## 角色
你是资深全栈架构师,精通 React、Node.js、TypeORM、PostgreSQL。
你的使命:安全地执行用户提出的重构请求。

## 全局约束
– 必须遵循 `knowledge/conventions/` 下所有规范。
– 使用 `knowledge/glossary.md` 中的术语。
– 数据库变更必须经过 `scripts/check_migration_safety.py` 验证。
– API 变更需同步更新 `schemas/api-contract.schema.json`。
– 前端组件重构不得破坏现有测试。

## 分阶段执行
严格按照以下阶段进行,每阶段结束必须获得用户确认才能继续。

### 阶段 1: 评估
{{ include "core/workflows/assess.md" }}

### 阶段 2: 规划
{{ include "core/workflows/plan.md" }}

### 阶段 3: 执行
{{ include "core/workflows/execute.md" }}

### 阶段 4: 验证
{{ include "core/workflows/verify.md" }}

## 决策支持
当涉及数据库变更时,必须依据决策树:
{{ include "core/decision-trees/db-strategy.md" }}

## 示例参考
理想的重构行为应参考 `examples/rename-field/`,学习其回滚策略和前后端协调。

## 禁止
– 绝不直接修改生产配置 (`*.prod.*`)。
– 绝不跳过安全检查。
– 绝不删除现有测试。

5.4 工作流文件(部分示例)

core/workflows/assess.md

## 评估阶段
### 行动
1. 运行 `git status` 和 `git log –oneline -10` 理解上下文。
2. 与用户沟通明确重构目标。
3. 使用 Grep/Glob 定位所有受影响模块。
4. 列出所有相关测试文件。
5. 若涉及数据库实体,读取对应 Entity 文件。

### 输出
生成影响分析报告:
– 受影响模块 (前端/后端/数据库)
– 风险等级 (高/中/低)
– 建议策略 (渐进式/大爆炸)

等待用户确认进入规划阶段。

core/decision-trees/db-strategy.md

## 数据库变更策略决策树
– 添加可空列 → 直接添加
– 添加非空列 → 1) 先添加为可空 2) 回填数据 3) 添加 NOT NULL
– 重命名列 → 保留旧列,新增列,复制数据,标记旧列为 @deprecated,待前端适配后移除
– 删除列 → 先标记 @deprecated,至少一个大版本后删除

5.5 知识层文件示例

knowledge/conventions/backend.md

### 错误处理
– 异步操作必须 try/catch,抛出 AppError。
– 禁止 console.log,使用 winston。

### 数据库
– 使用 TypeORM QueryBuilder,禁止拼接 SQL。

knowledge/patterns/anti-patterns.md

1. 在 React 组件内直接调 API → 使用自定义 hook。
2. 迁移文件中做复杂数据转换 → 移至服务层。

5.6 模板示例

templates/migration/typeorm.template.ts

import { MigrationInterface, QueryRunner } from "typeorm";

export class Migration{{Timestamp}} implements MigrationInterface {
name = 'Migration{{Timestamp}}'

public async up(queryRunner: QueryRunner): Promise<void> {
// UP: {{Description}}
{{UpStatements}}
}

public async down(queryRunner: QueryRunner): Promise<void> {
// DOWN: {{Description}}
{{DownStatements}}
}
}

指令中要求:生成迁移时必须读取此模板,替换占位符,然后写入 migrations/ 目录。

5.7 脚本层

scripts/check_migration_safety.py 应输出 JSON:

{"safe": true, "issues": []}

在 execute 工作流中强制要求:“生成迁移文件后,立即运行 python scripts/check_migration_safety.py <迁移文件路径>,分析 JSON 输出,如果 safe 不为 true,则中止并报告问题。”

5.8 示例层

examples/rename-field/request.md 和 result.md 提供完整的对话转录,展示成功重命名数据库列的全过程。Claude 会将其作为理想行为模式参考。

5.9 动态加载与自省

在 SKILL.md 中虽然没有条件 include,但可通过引导实现伪动态:

根据重构类型,主动使用 Read 工具加载以下文件:
– 若涉及后端:加载 `knowledge/conventions/backend.md`
– 若涉及前端:加载 `knowledge/conventions/frontend.md`
– 若涉及数据库:加载 `knowledge/conventions/database.md`

Claude 会根据指令自行调用 Read 工具按需加载,避免上下文浪费。

5.10 验证和 CI 集成

VERSION 文件记录版本,tests/ 目录可放验证脚本,例如检查所有 include 路径是否存在,YAML 格式是否正确,权限是否过度开放。可集成到 GitHub Actions,确保技能质量。


六、资深级技能的设计原则

原则体现
分层解耦 调度、知识、资源、执行分离
声明式优先 使用 Markdown 知识和模板,避免脚本逻辑
权限最小化 Write/Edit 精确到目录,Bash 限定命令
阶段化协同 评估→规划→执行→验证,人机确认点
知识外化 团队规范和反模式独立维护,可复用
决策自动化 决策树让模型自行推理,不硬编码分支
示例驱动 历史成功案例作为少样本引导
安全内建 迁移安全检查脚本强制调用,无例外
模型锁定 复杂推理锁定 Opus,确保质量

七、总结

从单文件问候技能,到带权限、模板的审查器,再到全栈重构智能体,复杂度逐步递增,但底层逻辑不变:技能 = 受限上下文 + 结构化知识 + 受控执行。掌握这一模式后,任何工程领域的重复或规范敏感工作都可以封装为可靠、可共享的技能。

赞(0)
未经允许不得转载:171主机测评 » Claude Code Skill 的编写
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址