---
name: meta-create-skill
description: 技能创建元技能。引导用户创建新的 SpecPow 技能，自动生成 SKILL.md 骨架、测试文件，并注册到技能目录。
---

# 创建技能 (Meta Create Skill)
> 指导用户创建新的 SpecPow 技能，包括文件结构、测试生成和目录注册

## 触发条件

- 用户要求创建新技能
- 需要扩展 SpecPow 能力
- 用户提到"写技能"/"创建 SKILL"/"新增技能"
- 需要为特定业务场景创建专用技能

## 铁律

1. **单一职责** — 一个技能只做一件事，解决一个明确的问题
2. **可测试** — 每个技能必须有配套的验证方法
3. **有边界** — 明确什么时候用、什么时候不用
4. **遵循规范** — 必须使用标准 SKILL.md 格式
5. **自动注册** — 新技能必须出现在 `specpow doctor` 检查中

## 合理化防御表

| 你可能的想法 | 现实 |
|-------------|------|
| "这个技能太简单了，不需要正式创建" | 简单的技能也可能变复杂。正式创建。 |
| "我可以晚点再写测试" | 晚点 = 永远不。现在写测试。 |
| "这个技能只有我会用" | 其他人也会用。写清楚文档。 |
| "命名不重要" | 命名很重要。用 kebab-case，见名知意。 |
| "我可以跳过 doctor 检查" | doctor 检查确保技能可被发现。不要跳过。 |
| "铁律可以少写几条" | 铁律是底线。至少写 3 条。 |
| "工作流不需要分阶段" | 分阶段让技能更清晰。至少分 2 阶段。 |
| "红旗可以模糊一点" | 红旗必须具体。模糊的红旗无法触发。 |

## 工作流

### 阶段 1: 需求分析

**目标：** 明确技能的目的和边界

1. **确定技能名称**
   - 使用 kebab-case（如 `java-codegen`、`test-gen`）
   - 格式：`<category>-<purpose>`
   - 分类：planning / execution / quality / business / meta

2. **明确技能职责**
   - 这个技能解决什么问题？
   - 什么时候应该使用这个技能？
   - 什么时候不应该使用？

3. **定义输入输出**
   - 输入：用户需要提供什么？
   - 输出：技能会生成什么？

**完成标志：** 能用一句话说清楚技能的用途

---

### 阶段 2: 创建技能文件

**目标：** 生成标准 SKILL.md 文件

1. **创建技能目录**
   ```bash
   mkdir -p skills/<skill-name>
   ```

2. **生成 SKILL.md 骨架**
   
   使用下方模板生成完整的 SKILL.md 文件：

```markdown
---
name: <category>-<skill-name>
description: <一句话描述技能用途>
---

# <技能名称>
> <一句话描述技能用途>

## 触发条件

- <什么情况下使用这个技能>
- <用户提到什么关键词时触发>

## 铁律

1. **<规则 1>** — <解释>
2. **<规则 2>** — <解释>
3. **<规则 3>** — <解释>

## 合理化防御表

| 你可能的想法 | 现实 |
|-------------|------|
| "<常见借口 1>" | <反驳 1> |
| "<常见借口 2>" | <反驳 2> |
| "<常见借口 3>" | <反驳 3> |

## 工作流

### 阶段 1: <阶段名称>

**目标：** <阶段目标>

1. <步骤 1>
2. <步骤 2>
3. <步骤 3>

**完成标志：** <什么表示阶段完成>

---

### 阶段 2: <阶段名称>

**目标：** <阶段目标>

1. <步骤 1>
2. <步骤 2>
3. <步骤 3>

**完成标志：** <什么表示阶段完成>

## 输出格式

- <期望的输出 1>
- <期望的输出 2>

## 红旗（立即停止）

这些想法意味着 STOP — 你正在合理化：

| 想法 | 现实 |
|------|------|
| "<危险信号 1>" | <现实 1> |
| "<危险信号 2>" | <现实 2> |
| "<危险信号 3>" | <现实 3> |

## 压力测试

在声称完成前，问自己：

1. <边界情况 1>
2. <边界情况 2>
3. <边界情况 3>
```

3. **填写模板内容**
   - 根据需求分析的结果填写所有占位符
   - 确保每个章节都有实质内容
   - 铁律至少 3 条，最多 5 条
   - 合理化防御表至少 5 行
   - 红旗至少 3 条
   - 压力测试至少 3 个问题

**完成标志：** SKILL.md 文件创建完成，格式正确

---

### 阶段 3: 创建测试文件（可选但推荐）

**目标：** 为技能创建验证方法

1. **创建测试文件**
   ```bash
   touch test/<skill-name>.test.ts
   ```

2. **编写测试用例**
   
   测试文件模板：

```typescript
/**
 * <技能名称> 测试
 *
 * 测试 skills/<skill-name>/SKILL.md 的效果
 */

import { describe, it, expect } from 'vitest';
import { readFileSync } from 'fs';
import { join } from 'path';

describe('<skill-name>', () => {
  it('should have valid SKILL.md format', () => {
    const skillPath = join(process.cwd(), 'skills', '<skill-name>', 'SKILL.md');
    const content = readFileSync(skillPath, 'utf-8');
    
    // 检查 frontmatter
    expect(content).toMatch(/^---\nname: .+\ndescription: .+\n---\n/);
    
    // 检查必需章节
    expect(content).toContain('## 触发条件');
    expect(content).toContain('## 铁律');
    expect(content).toContain('## 工作流');
    expect(content).toContain('## 红旗');
  });

  it('should have at least 3 iron rules', () => {
    const skillPath = join(process.cwd(), 'skills', '<skill-name>', 'SKILL.md');
    const content = readFileSync(skillPath, 'utf-8');
    
    const ironRulesSection = content.match(/## 铁律\n([\s\S]*?)(?=\n## |\n$)/);
    expect(ironRulesSection).not.toBeNull();
    
    const rules = ironRulesSection![1].match(/^\d+\./gm);
    expect(rules!.length).toBeGreaterThanOrEqual(3);
  });

  it('should have defense table', () => {
    const skillPath = join(process.cwd(), 'skills', '<skill-name>', 'SKILL.md');
    const content = readFileSync(skillPath, 'utf-8');
    
    expect(content).toContain('## 合理化防御表');
    expect(content).toContain('| 你可能的想法 | 现实 |');
  });

  it('should have pressure testing section', () => {
    const skillPath = join(process.cwd(), 'skills', '<skill-name>', 'SKILL.md');
    const content = readFileSync(skillPath, 'utf-8');
    
    expect(content).toContain('## 压力测试');
  });
});
```

3. **运行测试**
   ```bash
   npx vitest run test/<skill-name>.test.ts
   ```

**完成标志：** 测试文件创建并通过

---

### 阶段 4: 验证技能

**目标：** 确保技能可被正确发现和使用

1. **运行 doctor 检查**
   ```bash
   specpow doctor
   ```
   
   确认输出中包含：
   ```
   ✓ 技能文件: 找到 <N> 个技能文件
   ```

2. **手动验证技能格式**
   - 检查 frontmatter 是否正确
   - 检查所有必需章节是否存在
   - 检查命名是否符合规范

3. **测试技能触发**
   - 在对话中提到触发条件
   - 确认 AI 会引用这个技能

**完成标志：** doctor 检查通过，技能可被正确引用

---

### 阶段 5: 文档更新（可选）

**目标：** 更新相关文档以包含新技能

1. **更新 CLAUDE.md**（如果是核心技能）
   - 在技能分类表格中添加新技能
   - 在技能列表中提及

2. **更新 README.md**（如果需要对外宣传）
   - 在技能列表中添加新技能
   - 提供使用示例

**完成标志：** 相关文档已更新

## 输出格式

完成技能创建后，应该生成：

1. **技能目录**
   ```
   skills/<skill-name>/
   └── SKILL.md
   ```

2. **测试文件**（可选）
   ```
   test/<skill-name>.test.ts
   ```

3. **doctor 检查结果**
   ```
   ✓ 技能文件: 找到 <N> 个技能文件
   ```

## 技能分类参考

| 分类 | 用途 | 示例 |
|------|------|------|
| meta | 元技能，管理其他技能 | using-skills, writing-skills, create-skill |
| planning | 规划和设计阶段 | explore, propose, write-specs, write-design |
| execution | 执行阶段 | subagent-driven-dev, tdd, parallel-agents |
| quality | 质量保障 | requesting-review, receiving-review, verification |
| business | 业务特定 | java-codegen, ui-codegen, test-gen, code-review |

## 命名规范

1. **目录名：** kebab-case（如 `java-codegen`、`test-gen`）
2. **文件名：** 固定为 `SKILL.md`
3. **frontmatter name：** `<category>-<name>`（如 `execution-tdd`）
4. **分类前缀：**
   - `meta-` — 元技能
   - `planning-` — 规划技能
   - `execution-` — 执行技能
   - `quality-` 或 `execution-` — 质量技能
   - `business-` — 业务技能

## 红旗（立即停止）

这些想法意味着 STOP — 你正在合理化：

| 想法 | 现实 |
|------|------|
| "我可以跳过测试" | 测试确保技能质量。不要跳过。 |
| "frontmatter 不重要" | frontmatter 是技能被发现的关键。必须正确。 |
| "我可以少写几个章节" | 每个章节都有用途。全部填写。 |
| "命名随便取一个" | 命名影响可发现性。认真取。 |
| "doctor 检查会失败也没关系" | doctor 检查确保技能可用。必须通过。 |
| "我可以稍后再补防御表" | 防御表防止合理化。现在就写。 |

## 压力测试

在声称技能创建完成前，问自己：

1. 如果用户完全不了解这个技能，能看懂 SKILL.md 吗？
2. 如果 AI 没有看到这个技能，会错过什么关键信息？
3. 如果多个技能同时适用，优先级清晰吗？
4. 如果技能被误用，后果是什么？如何防止？
5. 如果技能需要更新，更新路径清晰吗？
6. 如果其他开发者想贡献，贡献指南明确吗？
7. 如果技能有 bug，如何发现和修复？
8. 如果技能与其他技能冲突，如何解决？

## 示例：创建一个简单的技能

假设要创建一个 `execution-code-review` 技能：

1. **需求分析**
   - 名称：`execution-code-review`
   - 职责：指导如何进行代码审查
   - 触发：用户要求审查代码

2. **创建目录和文件**
   ```bash
   mkdir -p skills/execution-code-review
   ```

3. **生成 SKILL.md**（使用上方模板）

4. **创建测试**（可选）
   ```bash
   touch test/execution-code-review.test.ts
   ```

5. **验证**
   ```bash
   specpow doctor
   npx vitest run test/execution-code-review.test.ts
   ```

完成！
