关于 add-new-opc-skill
这是一份供 OPC Skills 项目贡献者新增技能时使用的流程指南,列出所需文件、元数据和发布信息更新,并说明验证与 Git 操作。
主要功能
- 01技能目录与文件要求
- 02YAML 前置元数据规范
- 03Logo 与元数据配置
- 04更新 README 和变更日志
- 05验证与 Git 工作流
适用场景
- 01创建 OPC 技能目录
- 02在项目元数据中登记技能
- 03准备发布技能
- 04提交前验证改动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ resciencelab/ opc-skills --skill add-new-opc-skill安装后在 Claude Code 中输入/add-new-opc-skill确认已加载。
详细介绍
添加新 OPC Skill
添加新 Skill 到 OPC Skills 项目时,请使用此 Skill。请按照以下每个步骤操作,确保该 Skill 满足所有发布要求。
准备工作
开始之前,请确认:
- 你位于功能分支上:
feature/skill/<skill-name>(从develop分支创建) - Skill 名称采用 kebab-case 格式(例如,
my-new-skill)
检查清单
1. Skill 目录结构
创建包含必需文件的 Skill 目录:
skills/<skill-name>/
├── SKILL.md (required) Main skill documentation
├── scripts/ (if skill has scripts)
│ └── *.py / *.sh
├── examples/ (recommended) Usage examples
│ └── *.md
└── references/ (optional) API docs, templates
└── *.md
SKILL.md 必须包含 YAML frontmatter:
---
name: <skill-name>
description: Clear description. Include trigger keywords and "Use when..." contexts.
---
使用 template/SKILL.md 作为起点:
cp -r template skills/<skill-name>
2. Skill 徽标
生成与现有 Skill 徽标风格相符的像素艺术风格 SVG 徽标:
# Use the logo-creator skill
python3 skills/nanobanana/scripts/batch_generate.py \
"Pixel art <subject> logo, 8-bit retro style, black pixels on white background, minimalist icon, clean crisp edges, no text, centered" \
-n 20 --ratio 1:1 \
-d .skill-archive/logo-creator/<date>-<skill-name> \
-p logo
# Open preview to pick a logo
cp skills/logo-creator/templates/preview.html .skill-archive/logo-creator/<date>-<skill-name>/
open .skill-archive/logo-creator/<date>-<skill-name>/preview.html
# After picking (e.g., #5):
python3 skills/logo-creator/scripts/crop_logo.py <input>.png <output>-cropped.png
python3 skills/logo-creator/scripts/vectorize.py <output>-cropped.png skill-logos/<skill-name>.svg
验证:skill-logos/<skill-name>.svg 存在,且符合其他徽标的像素艺术风格。
3. skills.json 条目
在 skills.json 的 skills 数组中添加完整条目。除非另有说明,否则所有字段均为必填项:
{
"name": "<skill-name>",
"version": "1.0.0",
"description": "Full description of the skill.",
"logo": "https://raw.githubusercontent.com/ReScienceLab/opc-skills/main/skill-logos/<skill-name>.svg",
"icon": "<simpleicons-name>",
"color": "<hex-without-hash>",
"triggers": ["trigger1", "trigger2"],
"dependencies": {},
"auth": {
"required": false,
"type": null,
"keys": []
},
"install": {
"user": {
"claude": "npx skills add ReScienceLab/opc-skills --skill <skill-name> -a claude",
"droid": "npx skills add ReScienceLab/opc-skills --skill <skill-name> -a droid",
"opencode": "npx skills add ReScienceLab/opc-skills --skill <skill-name> -a opencode",
"codex": "npx skills add ReScienceLab/opc-skills --skill <skill-name> -a codex"
},
"project": {
"claude": "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
"droid": "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
"cursor": "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
"opencode": "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
"codex": "npx skills add ReScienceLab/opc-skills --skill <skill-name>"
}
},
"commands": [
"python3 scripts/example.py \"{input}\""
],
"links": {
"github": "https://github.com/ReScienceLab/opc-skills/tree/main/skills/<skill-name>"
}
}
字段说明:
icon:使用 Simple Icons 名称,或"globe"、"archive"、"image"之类的通用名称color:不带#的 6 位十六进制颜色(例如,"6B7280")dependencies:以 Skill 名称为键、版本范围为值的对象(例如,{"twitter": ">=1.0.0"})auth.keys:{"env": "VAR_NAME", "url": "https://...", "optional": true/false}对象组成的数组commands:此 Skill 提供的 CLI 命令列表(如果仅包含说明,则使用空数组[])
编辑后验证:
python3 -c "import json; json.load(open('skills.json')); print('valid')"
4. README.md
将此 Skill 添加到 README.md 中的“Included Skills”表格:
| <img src="./skill-logos/<skill-name>.svg" width="24"> | [<skill-name>](./skills/<skill-name>) | Short description |
在现有表格中插入到合适的位置。
5. 网站(worker.js)
在 website/worker.js 的 fetchCompareData() 函数中,将此 Skill 添加到硬编码的 skills 数组。找到数组的 ],\n };\n} 结尾,并在其前添加:
{
name: "<skill-name>",
version: "1.0.0",
description: "<description>",
icon: "<icon>",
color: "<color>",
triggers: ["trigger1", "trigger2"],
dependencies: [],
auth: { required: false, note: "..." },
install: {
user: {
claude: "npx skills add ReScienceLab/opc-skills --skill <skill-name> -a claude",
droid: "npx skills add ReScienceLab/opc-skills --skill <skill-name> -a droid",
opencode: "npx skills add ReScienceLab/opc-skills --skill <skill-name> -a opencode",
codex: "npx skills add ReScienceLab/opc-skills --skill <skill-name> -a codex",
},
project: {
claude: "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
droid: "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
cursor: "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
opencode: "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
codex: "npx skills add ReScienceLab/opc-skills --skill <skill-name>",
},
},
commands: [],
links: {
github: "https://github.com/ReScienceLab/opc-skills/tree/main/skills/<skill-name>",
},
},
6. CHANGELOG.md
将此 Skill 添加到 Skill Compatibility & Dependency Matrix 表格:
| **<skill-name>** | 1.0.0 | - | - |
在 ## [Unreleased](或发布版本部分)下添加条目:
### <skill-name>
#### [1.0.0] - YYYY-MM-DD
- **Added**: Initial release - <description>
验证
提交前,验证以下所有事项:
# 1. SKILL.md exists with valid frontmatter
head -5 skills/<skill-name>/SKILL.md
# 2. Logo SVG exists
ls -la skill-logos/<skill-name>.svg
# 3. skills.json is valid JSON with all fields
python3 -c "
import json
config = json.load(open('skills.json'))
skill = [s for s in config['skills'] if s['name'] == '<skill-name>'][0]
required = ['name','version','description','logo','icon','color','triggers','dependencies','auth','install','links']
missing = [f for f in required if f not in skill]
print('PASS' if not missing else f'MISSING: {missing}')
"
# 4. README.md lists the skill
grep '<skill-name>' README.md
# 5. worker.js has the skill
grep '<skill-name>' website/worker.js
# 6. CHANGELOG.md has the skill in matrix
grep '<skill-name>' CHANGELOG.md
Git 工作流
# Branch
git checkout develop && git pull
git checkout -b feature/skill/<skill-name>
# Commit
git add skills/<skill-name>/ skill-logos/<skill-name>.svg skills.json README.md website/worker.js CHANGELOG.md
git commit -m "feat(skill): add <skill-name> skill"
# PR to develop
git push -u origin feature/skill/<skill-name>
gh pr create --base develop
评论
支持 Markdown