mcpField
A
add-new-opc-skill

add-new-opc-skill

github.com/resciencelabAgent 工作流1.9k51 次安装今天更新
代码仓库

关于 add-new-opc-skill

这是一份供 OPC Skills 项目贡献者新增技能时使用的流程指南,列出所需文件、元数据和发布信息更新,并说明验证与 Git 操作。

主要功能

  1. 01技能目录与文件要求
  2. 02YAML 前置元数据规范
  3. 03Logo 与元数据配置
  4. 04更新 README 和变更日志
  5. 05验证与 Git 工作流

适用场景

  1. 01创建 OPC 技能目录
  2. 02在项目元数据中登记技能
  3. 03准备发布技能
  4. 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