[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EDY88YPJ69ET593QH3NF7B":3,"skill-same:01M6EDY88YPJ69ET593QH3NF7B":52},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":25,"linkOnly":26,"markdownContent":27,"markdownBody":27,"frontMatter":28,"refName":29,"commitSha":30,"skillDirectory":31,"forksCount":32,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":6,"ownerDescription":36,"updatedAt":37,"install":38,"resources":51},"01M6EDY88YPJ69ET593QH3NF7B","add-new-opc-skill",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FReScienceLab\u002Fopc-skills\u002Fadd-new-opc-skill\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24],"add","add new opc skill","2026-11-10 10:12:30",false,"# Add New OPC Skill\n\nUse this skill when adding a new skill to the OPC Skills project. Follow every step below to ensure the skill meets all publishing requirements.\n\n## Pre-flight\n\nBefore starting, confirm:\n- You are on a feature branch: `feature\u002Fskill\u002F\u003Cskill-name>` (branched from `develop`)\n- The skill name is kebab-case (e.g., `my-new-skill`)\n\n## Checklist\n\n### 1. Skill Directory Structure\n\nCreate the skill directory with required files:\n\n```\nskills\u002F\u003Cskill-name>\u002F\n├── SKILL.md              (required) Main skill documentation\n├── scripts\u002F              (if skill has scripts)\n│   └── *.py \u002F *.sh\n├── examples\u002F             (recommended) Usage examples\n│   └── *.md\n└── references\u002F           (optional) API docs, templates\n    └── *.md\n```\n\n**SKILL.md** must include YAML frontmatter:\n\n```yaml\n---\nname: \u003Cskill-name>\ndescription: Clear description. Include trigger keywords and \"Use when...\" contexts.\n---\n```\n\nUse `template\u002FSKILL.md` as a starting point:\n\n```bash\ncp -r template skills\u002F\u003Cskill-name>\n```\n\n### 2. Skill Logo\n\nGenerate a pixel-art style SVG logo matching existing skill logos:\n\n```bash\n# Use the logo-creator skill\npython3 skills\u002Fnanobanana\u002Fscripts\u002Fbatch_generate.py \\\n  \"Pixel art \u003Csubject> logo, 8-bit retro style, black pixels on white background, minimalist icon, clean crisp edges, no text, centered\" \\\n  -n 20 --ratio 1:1 \\\n  -d .skill-archive\u002Flogo-creator\u002F\u003Cdate>-\u003Cskill-name> \\\n  -p logo\n\n# Open preview to pick a logo\ncp skills\u002Flogo-creator\u002Ftemplates\u002Fpreview.html .skill-archive\u002Flogo-creator\u002F\u003Cdate>-\u003Cskill-name>\u002F\nopen .skill-archive\u002Flogo-creator\u002F\u003Cdate>-\u003Cskill-name>\u002Fpreview.html\n\n# After picking (e.g., #5):\npython3 skills\u002Flogo-creator\u002Fscripts\u002Fcrop_logo.py \u003Cinput>.png \u003Coutput>-cropped.png\npython3 skills\u002Flogo-creator\u002Fscripts\u002Fvectorize.py \u003Coutput>-cropped.png skill-logos\u002F\u003Cskill-name>.svg\n```\n\nVerify: `skill-logos\u002F\u003Cskill-name>.svg` exists and matches the pixel-art style of other logos.\n\n### 3. skills.json Entry\n\nAdd a complete entry to the `skills` array in `skills.json`. All fields are required unless noted:\n\n```json\n{\n  \"name\": \"\u003Cskill-name>\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Full description of the skill.\",\n  \"logo\": \"https:\u002F\u002Fraw.githubusercontent.com\u002FReScienceLab\u002Fopc-skills\u002Fmain\u002Fskill-logos\u002F\u003Cskill-name>.svg\",\n  \"icon\": \"\u003Csimpleicons-name>\",\n  \"color\": \"\u003Chex-without-hash>\",\n  \"triggers\": [\"trigger1\", \"trigger2\"],\n  \"dependencies\": {},\n  \"auth\": {\n    \"required\": false,\n    \"type\": null,\n    \"keys\": []\n  },\n  \"install\": {\n    \"user\": {\n      \"claude\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name> -a claude\",\n      \"droid\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name> -a droid\",\n      \"opencode\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name> -a opencode\",\n      \"codex\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name> -a codex\"\n    },\n    \"project\": {\n      \"claude\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n      \"droid\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n      \"cursor\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n      \"opencode\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n      \"codex\": \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\"\n    }\n  },\n  \"commands\": [\n    \"python3 scripts\u002Fexample.py \\\"{input}\\\"\"\n  ],\n  \"links\": {\n    \"github\": \"https:\u002F\u002Fgithub.com\u002FReScienceLab\u002Fopc-skills\u002Ftree\u002Fmain\u002Fskills\u002F\u003Cskill-name>\"\n  }\n}\n```\n\n**Field notes:**\n- `icon`: Use a [Simple Icons](https:\u002F\u002Fsimpleicons.org\u002F) name, or generic like `\"globe\"`, `\"archive\"`, `\"image\"`\n- `color`: 6-char hex without `#` (e.g., `\"6B7280\"`)\n- `dependencies`: Object with skill names as keys and version ranges as values (e.g., `{\"twitter\": \">=1.0.0\"}`)\n- `auth.keys`: Array of `{\"env\": \"VAR_NAME\", \"url\": \"https:\u002F\u002F...\", \"optional\": true\u002Ffalse}`\n- `commands`: List of CLI commands the skill exposes (empty array `[]` if instructions-only)\n\nValidate after editing:\n\n```bash\npython3 -c \"import json; json.load(open('skills.json')); print('valid')\"\n```\n\n### 4. README.md\n\nAdd the skill to the \"Included Skills\" table in `README.md`:\n\n```markdown\n| \u003Cimg src=\".\u002Fskill-logos\u002F\u003Cskill-name>.svg\" width=\"24\"> | [\u003Cskill-name>](.\u002Fskills\u002F\u003Cskill-name>) | Short description |\n```\n\nInsert in the appropriate position within the existing table.\n\n### 5. Website (worker.js)\n\nAdd the skill to the hardcoded skills array in `website\u002Fworker.js` inside the `fetchCompareData()` function. Find the `],\\n  };\\n}` closing of the skills array and add before it:\n\n```javascript\n{\n  name: \"\u003Cskill-name>\",\n  version: \"1.0.0\",\n  description: \"\u003Cdescription>\",\n  icon: \"\u003Cicon>\",\n  color: \"\u003Ccolor>\",\n  triggers: [\"trigger1\", \"trigger2\"],\n  dependencies: [],\n  auth: { required: false, note: \"...\" },\n  install: {\n    user: {\n      claude: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name> -a claude\",\n      droid: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name> -a droid\",\n      opencode: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name> -a opencode\",\n      codex: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name> -a codex\",\n    },\n    project: {\n      claude: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n      droid: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n      cursor: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n      opencode: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n      codex: \"npx skills add ReScienceLab\u002Fopc-skills --skill \u003Cskill-name>\",\n    },\n  },\n  commands: [],\n  links: {\n    github: \"https:\u002F\u002Fgithub.com\u002FReScienceLab\u002Fopc-skills\u002Ftree\u002Fmain\u002Fskills\u002F\u003Cskill-name>\",\n  },\n},\n```\n\n### 6. CHANGELOG.md\n\nAdd the skill to the **Skill Compatibility & Dependency Matrix** table:\n\n```markdown\n| **\u003Cskill-name>** | 1.0.0 | - | - |\n```\n\nAdd an entry under `## [Unreleased]` (or the release version section):\n\n```markdown\n### \u003Cskill-name>\n#### [1.0.0] - YYYY-MM-DD\n- **Added**: Initial release - \u003Cdescription>\n```\n\n## Verification\n\nBefore committing, verify all items:\n\n```bash\n# 1. SKILL.md exists with valid frontmatter\nhead -5 skills\u002F\u003Cskill-name>\u002FSKILL.md\n\n# 2. Logo SVG exists\nls -la skill-logos\u002F\u003Cskill-name>.svg\n\n# 3. skills.json is valid JSON with all fields\npython3 -c \"\nimport json\nconfig = json.load(open('skills.json'))\nskill = [s for s in config['skills'] if s['name'] == '\u003Cskill-name>'][0]\nrequired = ['name','version','description','logo','icon','color','triggers','dependencies','auth','install','links']\nmissing = [f for f in required if f not in skill]\nprint('PASS' if not missing else f'MISSING: {missing}')\n\"\n\n# 4. README.md lists the skill\ngrep '\u003Cskill-name>' README.md\n\n# 5. worker.js has the skill\ngrep '\u003Cskill-name>' website\u002Fworker.js\n\n# 6. CHANGELOG.md has the skill in matrix\ngrep '\u003Cskill-name>' CHANGELOG.md\n```\n\n## Git Workflow\n\n```bash\n# Branch\ngit checkout develop && git pull\ngit checkout -b feature\u002Fskill\u002F\u003Cskill-name>\n\n# Commit\ngit add skills\u002F\u003Cskill-name>\u002F skill-logos\u002F\u003Cskill-name>.svg skills.json README.md website\u002Fworker.js CHANGELOG.md\ngit commit -m \"feat(skill): add \u003Cskill-name> skill\"\n\n# PR to develop\ngit push -u origin feature\u002Fskill\u002F\u003Cskill-name>\ngh pr create --base develop\n```\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FReScienceLab\u002Fopc-skills\u002Fadd-new-opc-skill",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill add-new-opc-skill",{"tool":44,"command":45},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill add-new-opc-skill",{"tool":47,"command":48},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill add-new-opc-skill","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FReScienceLab\u002Fopc-skills\u002Fadd-new-opc-skill\u002FSKILL.md",true,[],[53,63,73,82,88,95],{"skillNo":54,"name":55,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":59,"publishedAt":25},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[58],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[60,61,62],"model","model hierarchy","model hierarchy skill",{"skillNo":64,"name":65,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":69,"publishedAt":25},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[68],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[70,71,72],"MCP","zoom","zoom mcp",{"skillNo":74,"name":75,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":25},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[79,80,81,71],"sdk","zoom apps sdk","apps",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":25},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[84],{"skillNo":89,"name":90,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":94,"publishedAt":25},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[93],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[90],{"skillNo":96,"name":97,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":25},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[97]]