Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Checklist and automation guide for adding a new skill to the OPC Skills project. Ensures all required files, metadata, logos, and listings are created before release. Use when adding a new skill, publishing a skill, or preparing a skill for release.
.claude/skills/resciencelab-add-new-opc-skill/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 43% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 47% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 200% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 55% | 0% |
Use this skill when adding a new skill to the OPC Skills project. Follow every step below to ensure the skill meets all publishing requirements.
Before starting, confirm:
feature/skill/<skill-name> (branched from develop)my-new-skill)Create the skill directory with required files:
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
└── *.mdSKILL.md must include YAML frontmatter:
yaml--- name: <skill-name> description: Clear description. Include trigger keywords and "Use when..." contexts. ---
Use template/SKILL.md as a starting point:
bashcp -r template skills/<skill-name>
Generate a pixel-art style SVG logo matching existing skill logos:
bash# 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
Verify: skill-logos/<skill-name>.svg exists and matches the pixel-art style of other logos.
Add a complete entry to the skills array in skills.json. All fields are required unless noted:
json{ "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>" } }
Field notes:
icon: Use a Simple Icons name, or generic like "globe", "archive", "image"color: 6-char hex without # (e.g., "6B7280")dependencies: Object with skill names as keys and version ranges as values (e.g., {"twitter": ">=1.0.0"})auth.keys: Array of {"env": "VAR_NAME", "url": "https://...", "optional": true/false}commands: List of CLI commands the skill exposes (empty array [] if instructions-only)Validate after editing:
bashpython3 -c "import json; json.load(open('skills.json')); print('valid')"
Add the skill to the "Included Skills" table in README.md:
markdown| <img src="./skill-logos/<skill-name>.svg" width="24"> | [<skill-name>](./skills/<skill-name>) | Short description |
Insert in the appropriate position within the existing table.
Add the skill to the hardcoded skills array in website/worker.js inside the fetchCompareData() function. Find the ],\n };\n} closing of the skills array and add before it:
javascript{ 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>", }, },
Add the skill to the Skill Compatibility & Dependency Matrix table:
markdown| **<skill-name>** | 1.0.0 | - | - |
Add an entry under ## [Unreleased] (or the release version section):
markdown### <skill-name> #### [1.0.0] - YYYY-MM-DD - **Added**: Initial release - <description>
Before committing, verify all items:
bash# 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
bash# 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
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 13,111 | 14,704 | +12% | 1 | 1 | 0% | 2,587 | 4,931 | +91% | 0 | 0 | — |
case-03 | fail→pass | 35,292 | 11,851 | -66% | 1 | 1 | 0% | 3,542 | 5,055 | +43% | 0 | 0 | — |
case-18 | pass→pass | 6,430 | 2,107 | -67% | 1 | 1 | 0% | 1,037 | 2,560 | +147% | 0 | 0 | — |
case-01 | fail→pass | 19,557 | 14,487 | -26% | 1 | 1 | 0% | 3,947 | 5,791 | +47% | 0 | 0 | — |
case-04 | fail→pass | 5,119 | 2,296 | -55% | 1 | 1 | 0% | 893 | 2,676 | +200% | 0 | 0 | — |
case-05 | fail→pass | 10,970 | 2,366 | -78% | 1 | 1 | 0% | 1,668 | 2,590 | +55% | 0 | 0 | — |
case-06 | fail→pass | 25,376 | 4,662 | -82% | 1 | 1 | 0% | 3,150 | 3,187 | +1% | 0 | 0 | — |
case-07 | fail→pass | 9,622 | 2,177 | -77% | 1 | 1 | 0% | 1,566 | 2,675 | +71% | 0 | 0 | — |
case-08 | fail→pass | 5,726 | 1,708 | -70% | 1 | 1 | 0% | 1,011 | 2,527 | +150% | 0 | 0 | — |
case-09 | fail→pass | 6,951 | 1,658 | -76% | 1 | 1 | 0% | 1,171 | 2,480 | +112% | 0 | 0 | — |
case-10 | fail→pass | 4,497 | 1,593 | -65% | 1 | 1 | 0% | 781 | 2,455 | +214% | 0 | 0 | — |
case-11 | fail→pass | 2,663 | 1,857 | -30% | 1 | 1 | 0% | 438 | 2,590 | +491% | 0 | 0 | — |
case-12 | fail→pass | 9,282 | 1,460 | -84% | 1 | 1 | 0% | 1,577 | 2,426 | +54% | 0 | 0 | — |
case-13 | fail→pass | 6,607 | 3,049 | -54% | 1 | 1 | 0% | 1,281 | 2,823 | +120% | 0 | 0 | — |
case-14 | fail→pass | 6,114 | 1,677 | -73% | 1 | 1 | 0% | 1,084 | 2,436 | +125% | 0 | 0 | — |
case-15 | fail→pass | 9,198 | 4,434 | -52% | 1 | 1 | 0% | 1,906 | 3,062 | +61% | 0 | 0 | — |
case-16 | fail→pass | 6,325 | 1,850 | -71% | 1 | 1 | 0% | 1,257 | 2,545 | +102% | 0 | 0 | — |
case-17 | pass→pass | 8,174 | 1,877 | -77% | 1 | 1 | 0% | 1,328 | 2,591 | +95% | 0 | 0 | — |
case-19 | pass→pass | 6,772 | 1,276 | -81% | 1 | 1 | 0% | 956 | 2,418 | +153% | 0 | 0 | — |
case-20 | pass→pass | 15,249 | 11,653 | -24% | 1 | 1 | 0% | 2,760 | 4,353 | +58% | 0 | 0 | — |
case-21 | pass→pass | 6,659 | 4,331 | -35% | 1 | 1 | 0% | 1,404 | 3,057 | +118% | 0 | 0 | — |
case-22 | pass→pass | 2,154 | 1,569 | -27% | 1 | 1 | 0% | 324 | 2,507 | +674% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +73 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.