skills/skill-builder/SKILL.md
skillix-hub 项目标准化 Skill 开发流程指南和脚手架工具。当用户要求创建新 Skill、 初始化 Skill 目录结构、或询问 Skill 开发规范时使用。提供 10 阶段完整生命周期: 需求命名、可行性分析、设计文档、讨论迭代、代码开发、单元测试、测试报告、技术文档、README 同步、docs 同步。
npx skillsauth add shetengteng/skillix-hub skill-builderInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
skillix-hub 项目中创建新 Skill 的标准化流程和脚手架工具。
初始化新 Skill 的完整目录结构和模板文件:
node skills/skill-builder/scaffold.js init '{"name":"my-skill","tech":"node","description":"简短描述"}'
参数:
name(必填):小写字母+数字+连字符,如 web-content-readertech:node(默认)、python 或其他(根据 Skill 需求选择最合适的技术栈)description:简短描述生成的目录结构:
skills/<name>/ # Skill 源码
SKILL.md, tool.js, package.json, lib/
design/<name>/ # 设计文档
YYYY-MM-DD-01-设计文档.md
tests/<name>/ # 测试
run_tests.js, src/unit/test_example.js, reports/
当用户要求创建新 Skill 时,严格按以下顺序执行每个阶段。
目标:确认 Skill 名称、技术栈、使用场景。
执行步骤:
根据用户描述的功能需求,给出 3-5 个命名推荐,每个附带简要理由:
推荐命名:
1. data-analyzer — 强调数据分析能力
2. data-insight — 强调洞察输出
3. csv-parser — 强调具体输入格式
推荐:方案 1,最准确描述核心功能
命名讨论(必须):使用 AskQuestion 工具让用户从推荐中选择或自定义,同时确认:
命名规范(强制):
helper、utils 等模糊词agent-interact 比 agent-dialog 更通用web-content-reader、api-tracer、swagger-api-reader、agent-interact命名记录:将所有候选方案、选择理由记录在设计文档的 Phase 1 章节中
运行脚手架初始化目录:
node skills/skill-builder/scaffold.js init '{"name":"<name>","tech":"<tech>","description":"<desc>"}'
目标:在投入设计之前,快速验证 Skill 的技术可行性和实现路径。
路径规范:design/<name>/YYYY-MM-DD-NN-可行性分析.md
文档结构:
执行要求:
目标:编写完整设计文档,包含技术方案和待讨论问题。
重要原则:
路径规范:design/<name>/YYYY-MM-DD-NN-描述.md
YYYY-MM-DD:当前日期NN:当天序号(01 起步)design/web-content-reader/2026-02-21-01-Web内容读取Skill设计文档.md文档结构(参考 templates/design-doc.md.tpl):
目标:基于设计文档与用户确认方案。
执行步骤:
目标:实现 Skill 源码。
目录规范:
skills/<name>/
├── SKILL.md # Skill 文档(Phase 完成后编写)
├── tool.js # CLI 入口(Node.js)
├── main.py # CLI 入口(Python)
├── package.json # Node.js 依赖(Node.js 项目)
├── requirements.txt # Python 依赖(Python 项目)
└── lib/ # 核心模块
└── ...
根据选择的技术栈保留对应的入口文件和依赖文件。
CLI 入口规范:
# Node.js
node skills/<name>/tool.js <command> '<json_params>'
# Python
python3 skills/<name>/main.py <command> [--param value]
输出格式规范:所有命令返回 JSON 到 stdout:
{
"result": { ... },
"error": null
}
错误时:
{
"result": null,
"error": "error message"
}
编码规范:
lib/ 下templates/ 目录下,通过文件读取后替换占位符。不要在代码中内联大段模板字符串'use strict'install / update / uninstall 命令(强制):
每个 Skill 必须实现 install、update 和 uninstall 命令,支持用户通过自然语言管理:
# Node.js
node skills/<name>/tool.js install '{"target":"~/.cursor/skills/<name>"}'
node skills/<name>/tool.js update '{"target":"~/.cursor/skills/<name>"}'
node skills/<name>/tool.js uninstall '{"target":"~/.cursor/skills/<name>"}'
# Python
python3 skills/<name>/main.py install --target ~/.cursor/skills/<name>
python3 skills/<name>/main.py update --target ~/.cursor/skills/<name>
python3 skills/<name>/main.py uninstall --target ~/.cursor/skills/<name>
install 命令要求:
target 参数,指定安装目标目录SKILL.md、tool.js、package.json、lib/、templates/,排除 node_modules、dist、运行时数据)npm install、pip install 等)~/.cursor/rules/update 命令要求:
target 参数uninstall 命令要求:
target 参数~/.cursor/rules/ 下的 .mdc 文件)SKILL.md 中必须包含安装/更新/卸载说明(根据技术栈选择对应命令):
## 安装 / 更新 / 卸载
\`\`\`bash
# Node.js Skill
node skills/<name>/tool.js install '{"target":"~/.cursor/skills/<name>"}'
node skills/<name>/tool.js update '{"target":"~/.cursor/skills/<name>"}'
node skills/<name>/tool.js uninstall '{"target":"~/.cursor/skills/<name>"}'
# Python Skill
python3 skills/<name>/main.py install --target ~/.cursor/skills/<name>
python3 skills/<name>/main.py update --target ~/.cursor/skills/<name>
python3 skills/<name>/main.py uninstall --target ~/.cursor/skills/<name>
\`\`\`
自然语言管理示例(用户只需说):
帮我从 https://github.com/shetengteng/skillix-hub 安装 <name> skill
帮我更新 <name> skill
帮我卸载 <name> skill
Agent 会自动克隆仓库并执行 install/update/uninstall 命令。
目标:在编写测试代码之前,先编写测试设计文档,明确测试范围、用例和验证策略。
路径规范:
tests/<name>/design/test-design.md文档模板:
# <Name> Skill 测试设计
## 测试范围
| 模块 | 文件 | 说明 |
|------|------|------|
| response | lib/response.js | 标准输出格式 |
| ... | ... | ... |
## 测试用例
### 模块:<module>
| 用例 | 输入 | 预期输出 | 类型 |
|------|------|----------|------|
| 正常路径 | ... | ... | unit |
| 边界情况 | ... | ... | unit |
| 错误处理 | ... | ... | unit |
## 测试策略
- 沙箱隔离:所有文件操作在 testdata/runtime/ 下
- 模块覆盖:每个 lib/ 模块至少一个测试文件
- 依赖隔离:通过修改 config 模块路径实现
## 不测试的范围
- 需要真实浏览器的 Playwright 操作(集成测试阶段覆盖)
- 需要网络的 URL 采集(集成测试阶段覆盖)
要求:
目标:编写并运行单元测试。
路径规范:
tests/<name>/design/test-design.mdtests/<name>/src/unit/test_<module>.jstests/<name>/run_tests.js测试风格:
let passed = 0;
let failed = 0;
function assert(condition, msg) {
if (condition) { passed++; console.log(` PASS: ${msg}`); }
else { failed++; console.error(` FAIL: ${msg}`); }
}
// 每个用例为独立 async function test_xxx()
// main() 依次调用,最后打印结果
// 失败时 process.exit(1)
沙箱测试要求(强制):
测试必须在沙箱环境中运行,绝不能在项目根目录下创建/修改文件。
testdata/ 目录,用于存放测试数据和运行时沙箱tests/<name>/testdata/runtime/ 下,每次测试自动创建、测试后自动清理__dirname 推算项目根目录),必须支持通过环境变量(如 PROJECT_ROOT)覆盖,以便测试指向沙箱目录.gitkeep 到 testdata/ 目录以确保 git 跟踪const TESTDATA_DIR = path.resolve(__dirname, '../../testdata/runtime');
function makeSandbox(label) {
const id = `${label}-${Date.now()}`;
const dir = path.join(TESTDATA_DIR, id);
fs.mkdirSync(dir, { recursive: true });
return dir;
}
// 在 finally 中清理
fs.rmSync(sandbox, { recursive: true, force: true });
文件组织要求(强制):
test_response.js 只测 response.js,test_store.js 只测 store.jstest_example.js 测试所有模块)test_<module>.js,与被测模块名一一对应覆盖要求:
lib/ 模块至少一个测试文件目标:运行测试生成 Markdown 报告。
执行:
node tests/<name>/run_tests.js
报告路径:tests/<name>/reports/YYYY-MM-DD-NN-test-report.md
报告格式:
# <Name> Skill 测试报告
> 时间: YYYY-MM-DD HH:MM:SS
> 结果: PASSED/FAILED
> 耗时: X.XXXs
## 汇总
| 指标 | 数值 |
|---|---:|
| 总用例 | N |
| 通过 | N |
| 失败 | N |
## 单元测试
| 用例 | 状态 | 耗时 |
|---|---|---:|
| `test_xxx` | PASS | 0.XXs |
目标:输出面向开发者的技术文档,详细说明代码结构、模块职责和数据流。
路径规范:design/<name>/YYYY-MM-DD-NN-技术文档.md
文档结构:
lib/ 模块的 API 说明(函数签名、参数、返回值)执行要求:
目标:更新项目 README 文件。
需要更新的文件:
README.md(中文):
README_EN.md(英文):
Skills 表格格式:
| [<name>](./skills/<name>/) | 简短描述 |
使用说明章节结构:
目标:更新 docs 展示页面数据。
每个 Skill 的数据存放在独立文件中,新增 Skill 需要 3 步:
Step 1:创建 docs/scripts/skills/<name>.js
/**
* Skillix Hub - <Name> Skill Data
*/
window.SKILL_DATA_<NAME_UPPER> = {
id: '<name>',
name: '<name>',
icon: '<icon>', // lightbulb/document/chart/brain/globe/folder/code
description: {
zh: '中文描述',
en: 'English description'
},
tags: [
{ zh: '标签', en: 'Tag' }
],
features: [
{ zh: '功能', en: 'Feature' }
],
scripts: ['tool.js'],
version: '1.0',
author: 'shetengteng',
repo: 'https://github.com/shetengteng/skillix-hub/tree/main/skills/<name>',
useCases: [
{
title: { zh: '标题', en: 'Title' },
userInput: { zh: '用户输入', en: 'User input' },
aiResponse: { zh: 'AI 响应', en: 'AI response' }
}
]
};
其中 <NAME_UPPER> 是 skill id 的大写+下划线形式(如 web-content-reader → WEB_CONTENT_READER)。
Step 2:在 docs/index.html 中添加 script 引用(在 skills-data.js 之前):
<script src="scripts/skills/<name>.js"></script>
Step 3:在 docs/scripts/skills-data.js 的 SKILL_KEYS 数组中添加变量名:
const SKILL_KEYS = [
// ... 已有的 ...
'SKILL_DATA_<NAME_UPPER>',
];
| 用户说 | 执行 |
|--------|------|
| "创建一个新 skill" / "帮我写个 skill" | 从 Phase 1 开始,引导用户完成全流程 |
| "初始化 skill 目录" | 运行 scaffold.js init |
| "skill 开发流程是什么" | 展示 8 阶段流程 |
| "skill 命名规范" | 展示命名规范 |
| "设计文档模板" | 展示设计文档结构 |
| "测试怎么写" | 展示测试风格和覆盖要求 |
development
读取网页内容,支持 SPA 页面自动检测与浏览器渲染降级。当普通 HTTP fetch 无法获取 Vue/React 等 SPA 页面的渲染数据时,自动通过 Playwright 浏览器获取完整内容。当用户需要读取网页数据、提取页面内容、或 WebFetch 工具返回空内容时使用。
tools
被动录制用户浏览器操作行为。打开浏览器后用户自由操作,系统通过 CDP + DOM 事件注入 自动记录点击、输入、导航等操作和 API 调用。录制完成后 LLM 分析生成结构化工作流。 支持参数化重放、生成独立 Skill、导出 Playwright 脚本。依赖 Playwright Skill。
development
# uni-app 小程序代码生成器 > **版本**: v1.0.0 > **作者**: AI Assistant > **参考项目**: tt-paikebao-mp(排课宝) ## 功能概述 这是一个基于 **tt-paikebao-mp** 项目代码规范的 uni-app 小程序代码生成器。根据用户提供的需求文档,自动生成符合项目规范的: - Vue3 页面组件 - API 接口文件 - Pinia Store 状态管理 - 路由配置 - 数据库 Schema 定义 ## 触发条件 当用户请求以下内容时,应使用此 Skill: 1. 创建新的页面模块 2. 生成 API 接口文件 3. 创建数据库集合定义 4. 生成 Store 状态管理 5. 提供需求文档要求生成代码 6. 询问 uni-app 小程序开发规范 ## 快速开始 ### 1. 用户提供需求文档 用户应提供以下格式的需求文档: ```markdown # 模块名称 ## 功能描述 简要描述该模块的功能 ## 数据字段 - fieldName: 字段描述(必填/可选,类型) ## 页面列
development
读取并缓存 Swagger/OpenAPI 文档供模型使用。当用户需要添加、读取、刷新 API 文档,或使用 Swagger URL 时触发。