Skip to content

6.2 设计题——给真实场景设计技能包

📋 多工具适用说明

本节的设计场景适用于所有 AI 编程工具

设计题考察的是通用设计决策:

  • 什么时候触发?需要什么实时数据?
  • 有没有副作用?输出格式是什么?

Claude Code 用户:写出完整的 SKILL.md 其他工具用户:为你的工具写出等效配置(Cursor Prompt、Windsurf 规则块等)

说明

以下每个场景都来自真实开发需求。请设计技能包并写出完整的配置。没有标准答案——重点是设计决策和理由。


设计题一:每日站会报告

场景:你们团队每天早上 9 点开站会。每个人需要回答三个问题:昨天做了什么、今天打算做什么、有没有阻塞项。目前这些信息散落在 git log、Jira 和 Slack 中。

要求:设计一个技能包,自动汇总站会信息。

需要考虑

  • 用哪些 !command`` 注入实时数据?
  • 应该自动触发还是手动触发?
  • 是否需要参数?
  • 输出格式是什么样的?
参考设计
markdown
---
name: standup
description: 生成每日站会报告。当说"站会"、"standup"、"今天做了什么"时使用
disable-model-invocation: true
---

## 昨天的工作

!`git log --since="yesterday" --until="today" --author="$(git config user.name)" --oneline`

## 今天的计划

基于当前分支和未完成的工作,建议今天的工作重点。

## 阻塞项

检查是否有需要关注的开放 PR 或 Issue:

!`gh pr list --author="$(git config user.name)" --state open --limit 5 2>/dev/null || echo "无开放 PR"`

## 指令

按以下格式输出站会报告:

### 昨天完成
- (列出完成的任务)

### 今天计划
- (建议今天的工作重点)

### 阻塞项
- (列出需要他人协助或关注的问题)

设计决策:

  • disable-model-invocation: true——站会报告应该主动触发,不应该 Claude 自动生成
  • 不需要参数——基于当前用户和日期自动获取
  • 输出格式明确——站会需要结构化的信息

设计题二:安全审查技能包

场景:你们的项目处理用户支付数据,安全性至关重要。每次提交涉及支付模块的代码时,都需要进行安全审查。

要求:设计一个安全审查技能包,重点检查 OWASP Top 10 相关风险。

需要考虑

  • 如何限定只对支付模块的代码生效?
  • 应该检查哪些安全风险?
  • 如何确安全审查不会被跳过?
参考设计
markdown
---
name: security-review
description: 支付模块安全审查。当编辑支付相关代码、说"安全审查"时使用
paths:
  - "src/payment/**"
  - "src/checkout/**"
disable-model-invocation: true
---

## 安全审查清单

逐一检查以下风险,发现问题时明确标注 🔴:

1. **SQL 注入**:是否使用参数化查询?是否有字符串拼接 SQL?
2. **XSS**:用户输入是否转义?是否有 v-html 直接渲染?
3. **敏感数据泄露**:金额是否用整数?是否有浮点运算?日志中是否包含卡号/令牌?
4. **认证缺失**:所有支付 API 是否需要认证?是否有公开端点?
5. **超时和重试**:外部调用是否设置超时?重试是否有上限?
6. **错误处理**:错误信息是否泄露内部细节?是否正确回滚?

## 输出格式

| 检查项 | 状态 | 说明 |
|--------|------|------|
| SQL 注入 | ✅/🔴 | ... |

设计决策:

  • paths 限定只对支付模块生效——编辑其他模块不会触发
  • disable-model-invocation: true——安全审查应该主动执行
  • 明确的检查清单和输出格式——确保审查覆盖所有关键点

设计题三:框架迁移技能包

场景:你的团队正在把组件从 Vue 2 Options API 迁移到 Vue 3 Composition API。迁移规则很明确,但每个组件都需要手动转换,容易遗漏。

要求:设计一个迁移技能包,指导 Claude 完成组件迁移。

需要考虑

  • 如何传入要迁移的组件路径?
  • 迁移规则应该放在 SKILL.md 还是 references/?
  • 如何确保迁移后功能不变?
参考设计
markdown
---
name: migrate-component
description: 将 Vue 2 组件迁移到 Vue 3 Composition API
argument-hint: "[component-path]"
arguments:
  - component-path
disable-model-invocation: true
allowed-tools:
  - Bash(npm run test:unit *)
---

## 迁移目标

!`cat $component-path`

## 迁移步骤

1. 将 Options API 转换为 `<script setup>` + Composition API
2. `data()``ref()` / `reactive()`
3. `computed``computed()`
4. `methods` → 普通函数
5. 生命周期钩子 → `onMounted()`
6. `watch``watch()` / `watchEffect()`
7. `this.$refs``ref()` 模板引用
8. `this.$emit``defineEmits()`
9. `this.$props``defineProps()`

## 验证

迁移完成后:
1. 确保所有原有功能保持不变
2. 运行相关测试:`npm run test:unit $component-path`
3. 列出迁移前后的差异摘要

设计决策:

  • arguments 接收组件路径,!cat $component-path`` 注入当前代码
  • 迁移步骤直接写在 SKILL.md 中——规则足够简洁,不需要辅助文件
  • allowed-tools 授权测试命令——迁移后自动验证
  • disable-model-invocation: true——迁移是有副作用的操作

下一节

下一节:综合实战——构建你的技能包工具集