创建你的第一个 SKILL

124 阅读5分钟

上一篇 初识 Claude Code SKILLS

Claude Code 官方文档(支持中文), 定位到编写 SKILL.md

目录结构

项目根目录/
├── CLAUDE.md                    # 入口文件(每次加载)
└── .claude/
    └── skills/
        ├── morning-greeting/
        │   └── SKILL.md         # AI Skill 配置文件(必填)
        ├── generator-crud/
        │   └── SKILL.md         # curd 页面生成
        ├── generator-hybrid/
            ├── SKILL.md         # 数据库操作
            ├── reference.md          # 参考文档(可选)
            ├── scripts/              # 辅助脚本目录(可选)
            │   └── xx.js             # 执行文件 (可选)
            └── templates/            # 模板文件目录(可选)
                └── page-template.md  # 页面模板文档
        └── ...

注意事项

  1. 截至到26年1月6日, Claude Code 只识别 SKILL.md 格式文件, 用 .yaml 等格式文件声明,在 Claude中都不会被识别为 skill
  2. 新增skill,记得重启 Claude Code

根据 Claude Code 文档:
"Exit and restart Claude Code for changes to take effect." (退出并重启 Claude Code 以使更改生效)

需要重启的操作

    • ✅ 创建新 skill
    • ✅ 修改现有 skill
    • ✅ 删除 skill
    • ✅ 修改 skill.json 配置
    • ✅ 修改 skill.md 文档

为什么不能热重载?

Claude Code 在启动时只加载 skill 的名称和描述,保持快速启动。完整内容在需要时才加载。这种设计导致无法热重载。

SKILL.md 正文内容

贴张官方给出的内容

创建你的第一个 SKILL

第一次我看到官方文档的时候,并不知道怎么去写一个我的 SKILL

有个小技巧,在 AI 时代,大模型能助你体验武侠片里高手左脚踩右脚的快乐

直接让 Claude 帮你生成一个 SKILL 去体验,我的第一个 SKILL 就是 morning-greeting

下面是原文内容

---
name: morning-greeting
description: 当用户说"早上好"时,返回包含日期、星期和农历信息的温馨问候语
version: 1.0.0
---

## 功能说明

你是一个清晨问候助手,当用户说"早上好"时,返回包含完整日期信息的问候语。
当检测到用户说"早上好"、"早"、"早安"、"Good morning"等问候语时,返回包含以下信息的问候语:

- 公历日期:2026年x月x日
- 星期:星期x
- 农历日期:农历x月x日
- 激励语:让我们开启活力的一天

## 触发条件

当用户输入包含以下任一关键词时触发:
- 早上好
-- 早安
- Good morning
- 早啊
- 大家早

## 响应格式

```
早上好!今天是 2026年1月6日 星期二 农历腊月初八,让我们开启活力的一天!
```

## 实现步骤

1. **检测触发词**:判断用户输入是否包含触发关键词
2. **获取当前日期**:使用 JavaScript Date 对象获取当前日期和时间
3. **计算星期**:使用 getDay() 方法获取星期(0-6,0为周日)
4. **计算农历**:使用农历转换算法将公历转换为农历
5. **格式化输出**:组合所有信息返回问候语

## 日期计算逻辑

### 公历日期
```javascript
const now = new Date()
const year = now.getFullYear()
const month = now.getMonth() + 1  // 0-11,需要+1
const day = now.getDate()
```

### 星期
```javascript
const weekDays = ['日', '一', '二', '三', '四', '五', '六']
const weekDay = weekDays[now.getDay()]
```

### 农历转换

使用简化的农历算法(参考基准日期:2026年1月1日为农历冬月十五):

```javascript
// 简化版农历计算(仅供演示,实际项目建议使用 lunar-javascript 库)
function getLunarDate(year, month, day) {
    // 这是一个简化示例,实际需要完整的农历算法
    // 建议使用专业库:https://github.com/zhouztchn/lunar-javascript
    const lunarInfo = {
        year: year,
        month: month,
        day: day
    }

    // 实际实现中应调用完整的农历转换库
    return `农历${lunarMonth}月${lunarDay}`
}
```

**推荐方案**:在实际项目中使用 `lunar-javascript` 库进行准确的农历转换:

```bash
npm install lunar-javascript
```

```javascript
import { Lunar } from 'lunar-javascript'

const lunar = Lunar.fromDate(new Date())
const lunarMonth = lunar.getMonthInChinese()
const lunarDay = lunar.getDayInChinese()
```

## 使用示例

**用户输入**```
早上好
```

**返回**```
早上好!今天是 2026年1月6日 星期二 农历腊月初八,让我们开启活力的一天!
```

## 注意事项

1. 日期格式:使用中文格式,不加前导零(如:1月6日,不是01月06日)
2. 星期格式:使用"星期x"格式
3. 农历格式:使用"农历x月x日"格式
4. 语气友好:保持积极向上的语气
5. 时间范围:建议仅在早上时段(6:00-11:59)触发完整问候,其他时间可以返回简化版本

## 扩展功能(可选)

可以根据时间提供不同的问候语:
- **早上(6:00-11:59)**:完整的早上好问候
- **中午(12:00-13:59)**:中午好,祝你午餐愉快!
- **下午(14:00-17:59)**:下午好,继续保持活力!
- **晚上(18:00-22:00)**:晚上好,辛苦了一天好好休息!
- **深夜(22:00-5:59)**:夜深了,注意休息哦!

## 测试用例

- 输入:"早上好" → 输出完整问候
- 输入:"早啊" → 输出完整问候
- 输入:"大家早" → 输出完整问候
- 输入:"Good morning" → 输出完整问候(英文关键词也可触发)
- 输入:"晚上好" → 不触发或返回不同时段的问候

效果

触发原理

SKILL 的触发基于 description 中的关键词匹配

  1. Claude 分析用户提示
  2. 扫描所有 SKILL 的 description
  3. 匹配关键词触发 SKILL
  4. 加载 SKILL.md 内容
  5. 后续对话基于 SKILL 指导

创建你真实的 SKILL

体验完第一个 SKILL 后,去创建你真实的 SKILL

建议先创建这 3 个 Skills:

  1. 项目规范 Skill:你的代码风格、架构约定
  2. CRUD Skill:最常写的业务代码模板
  3. 工具类 Skill:项目中有哪些工具可以用