[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ADE52TZJHQDW00S8TB66T1":3,"skill-same:01M6ADE52TZJHQDW00S8TB66T1":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M6ADE52TZJHQDW00S8TB66T1","add-community-extension",null,"Add a community extension to the Spec Kit catalog from a GitHub issue submission. USE FOR: processing extension submission issues, validating catalog entries, updating catalog.community.json and docs\u002Fcommunity\u002Fextensions.md, creating PRs. DO NOT USE FOR: creating new extensions from scratch, or first-party extension work.","github\u002Fspec-kit","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6ADE3C1MHKYG0MVAR3H3J9Y",149334,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fadd-community-extension\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,9],"community","extension","add","add community extension","kit","prs","scratch","submission","issue","new","first","work","From Scratch","extensions","URL","number","use","entries","catalog","for","processing","do","issues","spec kit","2026-11-10 10:12:30",false,"---\nname: add-community-extension\ndescription: 'Add a community extension to the Spec Kit catalog from a GitHub issue submission. USE FOR: processing extension submission issues, validating catalog entries, updating catalog.community.json and docs\u002Fcommunity\u002Fextensions.md, creating PRs. DO NOT USE FOR: creating new extensions from scratch, or first-party extension work.'\nargument-hint: 'GitHub issue URL or number for the extension submission'\n---\n\n# Add Community Extension\n\nProcess an extension submission issue and add or update it in the community catalog.\n\n## When to Use\n\n- A new `[Extension]` submission issue is filed\n- An existing extension submits an update issue (new version, changed metadata)\n- You need to add or update a community extension in `extensions\u002Fcatalog.community.json` and `docs\u002Fcommunity\u002Fextensions.md`\n\n## Procedure\n\n### 1. Fetch the submission issue\n\nRead the GitHub issue to extract all metadata:\n- Extension ID, name, version, description, author\n- Repository URL, download URL, homepage, documentation, changelog\n- License, required spec-kit version, optional tool dependencies\n- Number of commands and hooks\n- Tags\n\n### 2. Validate against publishing rules\n\nCheck **all** of the following (per `docs\u002Fextensions\u002Fpublishing.md`):\n\n| Check | How |\n|-------|-----|\n| Repository exists and is public | Fetch the repository URL |\n| `extension.yml` manifest present | Confirm in repo file listing |\n| README.md present | Confirm in repo file listing |\n| LICENSE file present | Confirm in repo file listing |\n| GitHub release exists matching version | Check releases on the repo page |\n| Download URL is accessible | Verify it follows `archive\u002Frefs\u002Ftags\u002F\u003Ctag>.zip` or `releases\u002Fdownload\u002F\u003Ctag>\u002F\u003Casset>.zip` pattern and release exists |\n| Extension ID is lowercase-with-hyphens only | Regex: `^[a-z][a-z0-9-]*$` |\n| Version follows semver | Format: `X.Y.Z` |\n| Submission checklists are all checked | Confirm in issue body |\n\n### 3. Determine if this is an add or update\n\nSearch `extensions\u002Fcatalog.community.json` for the extension ID.\n\n- **Not found** → this is a **new addition**. Proceed to step 4.\n- **Found** → this is an **update**. Proceed to step 4 but replace the existing entry in-place instead of inserting.\n\n### 4. Add or update `extensions\u002Fcatalog.community.json`\n\n**New extension:** Insert the entry in **alphabetical order** by extension ID.\n\n**Update:** Replace the existing entry in-place. Update only the fields that changed (typically `version`, `download_url`, `description`, `provides`, `requires`, `tags`, `updated_at`). Preserve `created_at` and `downloads`\u002F`stars` from the existing entry.\n\nUse the existing entries as the format template. Entry format:\n\n```json\n{\n  \"\u003Cid>\": {\n    \"name\": \"\u003Cname>\",\n    \"id\": \"\u003Cid>\",\n    \"description\": \"\u003Cdescription>\",\n    \"author\": \"\u003Cauthor>\",\n    \"version\": \"\u003Cversion>\",\n    \"download_url\": \"\u003Cdownload_url>\",\n    \"repository\": \"\u003Crepository>\",\n    \"homepage\": \"\u003Chomepage>\",\n    \"documentation\": \"\u003Cdocumentation>\",\n    \"changelog\": \"\u003Cchangelog>\",\n    \"license\": \"\u003Clicense>\",\n    \"category\": \"\u003Ccategory>\",\n    \"effect\": \"\u003Ceffect>\",\n    \"requires\": {\n      \"speckit_version\": \"\u003Cspeckit_version>\"\n    },\n    \"provides\": {\n      \"commands\": \u003CN>,\n      \"hooks\": \u003CN>\n    },\n    \"tags\": [\"\u003Ctag1>\", \"\u003Ctag2>\"],\n    \"verified\": false,\n    \"downloads\": 0,\n    \"stars\": 0,\n    \"created_at\": \"\u003Ctoday>T00:00:00Z\",\n    \"updated_at\": \"\u003Ctoday>T00:00:00Z\"\n  }\n}\n```\n\n**Category** — free-form string; common values: `docs`, `code`, `process`, `integration`, `visibility`\n**Effect** — one of: `read-only`, `read-write`\n\nIf the extension has optional tool dependencies, add a `\"tools\"` array inside `\"requires\"`:\n\n```json\n\"tools\": [{ \"name\": \"\u003Ctool>\", \"required\": false }]\n```\n\nAlso update the top-level `\"updated_at\"` timestamp in the catalog.\n\nAfter editing, **validate the JSON** by running:\n\n```bash\npython3 -c \"import json; json.load(open('extensions\u002Fcatalog.community.json')); print('Valid JSON')\"\n```\n\n### 5. Add or update `docs\u002Fcommunity\u002Fextensions.md` community extensions table\n\n**New extension:** Insert a new row into the `# Community Extensions` table in **alphabetical order** by extension name.\n\n**Update:** Find the existing row and update the description or other changed fields in-place.\n\nDetermine the category and effect from the extension's behavior:\n\n```\n| \u003CName> | \u003CDescription> | `\u003Ccategory>` | \u003CEffect> | [\u003Crepo-name>](\u003Crepository-url>) |\n```\n\n**Category** — free-form; common values: `docs`, `code`, `process`, `integration`, `visibility`\n**Effect** — write canonical values `read-only` or `read-write` in `extension.yml` and `catalog.community.json`; use `Read-only`\u002F`Read+Write` only for the docs table display\n\n### 6. Commit, push, and open PR\n\nUse `add-` for new extensions, `update-` for updates:\n\n```bash\n# New extension\ngit checkout -b add-\u003Cextension-id>-extension\n\n# Update\ngit checkout -b update-\u003Cextension-id>-extension\n```\n\n```bash\ngit add extensions\u002Fcatalog.community.json docs\u002Fcommunity\u002Fextensions.md\n\n# New extension\ngit commit -m \"Add \u003CName> extension to community catalog\n\nAdd \u003Cid> extension submitted by @\u003Cissue-author> to:\n- extensions\u002Fcatalog.community.json (alphabetical order)\n- docs\u002Fcommunity\u002Fextensions.md community extensions table\n\nCloses #\u003Cissue-number>\"\n\n# Update\ngit commit -m \"Update \u003CName> extension to v\u003Cversion>\n\nUpdate \u003Cid> extension submitted by @\u003Cissue-author>:\n- extensions\u002Fcatalog.community.json (version, download_url, etc.)\n- docs\u002Fcommunity\u002Fextensions.md community extensions table\n\nCloses #\u003Cissue-number>\"\n\ngit push origin \u003Cbranch-name>\n```\n\nThen create a PR to `upstream` (`github\u002Fspec-kit`) with:\n- **Title:** `Add \u003CName> extension to community catalog` (or `Update \u003CName> extension to v\u003Cversion>`)\n- **Body:** Include validation summary, `Closes #\u003Cissue-number>`, and `cc @\u003Cissue-author>`\n- **Head:** `\u003Cfork-owner>:\u003Cbranch-name>`\n- **Base:** `main`\n\n## Common Pitfalls\n\n- **Alphabetical order matters** — entries must be sorted by ID in the JSON and by name in the docs table.\n- **Don't forget the catalog `updated_at`** — the top-level timestamp in `catalog.community.json` must be refreshed.\n- **Validate JSON after editing** — a trailing comma or missing brace will break the catalog.\n- **Use `Closes` not `Fixes`** — `Closes #N` is the correct keyword for submission issues.\n- **Match the proposed entry but verify** — the issue may include a proposed JSON block, but always validate field values against the actual repository state.\n- **Preserve `created_at` on updates** — keep the original `created_at` value; only change `updated_at`.\n- **Preserve `downloads` and `stars` on updates** — these reflect usage metrics and must not be reset.\n","# Add Community Extension\n\nProcess an extension submission issue and add or update it in the community catalog.\n\n## When to Use\n\n- A new `[Extension]` submission issue is filed\n- An existing extension submits an update issue (new version, changed metadata)\n- You need to add or update a community extension in `extensions\u002Fcatalog.community.json` and `docs\u002Fcommunity\u002Fextensions.md`\n\n## Procedure\n\n### 1. Fetch the submission issue\n\nRead the GitHub issue to extract all metadata:\n- Extension ID, name, version, description, author\n- Repository URL, download URL, homepage, documentation, changelog\n- License, required spec-kit version, optional tool dependencies\n- Number of commands and hooks\n- Tags\n\n### 2. Validate against publishing rules\n\nCheck **all** of the following (per `docs\u002Fextensions\u002Fpublishing.md`):\n\n| Check | How |\n|-------|-----|\n| Repository exists and is public | Fetch the repository URL |\n| `extension.yml` manifest present | Confirm in repo file listing |\n| README.md present | Confirm in repo file listing |\n| LICENSE file present | Confirm in repo file listing |\n| GitHub release exists matching version | Check releases on the repo page |\n| Download URL is accessible | Verify it follows `archive\u002Frefs\u002Ftags\u002F\u003Ctag>.zip` or `releases\u002Fdownload\u002F\u003Ctag>\u002F\u003Casset>.zip` pattern and release exists |\n| Extension ID is lowercase-with-hyphens only | Regex: `^[a-z][a-z0-9-]*$` |\n| Version follows semver | Format: `X.Y.Z` |\n| Submission checklists are all checked | Confirm in issue body |\n\n### 3. Determine if this is an add or update\n\nSearch `extensions\u002Fcatalog.community.json` for the extension ID.\n\n- **Not found** → this is a **new addition**. Proceed to step 4.\n- **Found** → this is an **update**. Proceed to step 4 but replace the existing entry in-place instead of inserting.\n\n### 4. Add or update `extensions\u002Fcatalog.community.json`\n\n**New extension:** Insert the entry in **alphabetical order** by extension ID.\n\n**Update:** Replace the existing entry in-place. Update only the fields that changed (typically `version`, `download_url`, `description`, `provides`, `requires`, `tags`, `updated_at`). Preserve `created_at` and `downloads`\u002F`stars` from the existing entry.\n\nUse the existing entries as the format template. Entry format:\n\n```json\n{\n  \"\u003Cid>\": {\n    \"name\": \"\u003Cname>\",\n    \"id\": \"\u003Cid>\",\n    \"description\": \"\u003Cdescription>\",\n    \"author\": \"\u003Cauthor>\",\n    \"version\": \"\u003Cversion>\",\n    \"download_url\": \"\u003Cdownload_url>\",\n    \"repository\": \"\u003Crepository>\",\n    \"homepage\": \"\u003Chomepage>\",\n    \"documentation\": \"\u003Cdocumentation>\",\n    \"changelog\": \"\u003Cchangelog>\",\n    \"license\": \"\u003Clicense>\",\n    \"category\": \"\u003Ccategory>\",\n    \"effect\": \"\u003Ceffect>\",\n    \"requires\": {\n      \"speckit_version\": \"\u003Cspeckit_version>\"\n    },\n    \"provides\": {\n      \"commands\": \u003CN>,\n      \"hooks\": \u003CN>\n    },\n    \"tags\": [\"\u003Ctag1>\", \"\u003Ctag2>\"],\n    \"verified\": false,\n    \"downloads\": 0,\n    \"stars\": 0,\n    \"created_at\": \"\u003Ctoday>T00:00:00Z\",\n    \"updated_at\": \"\u003Ctoday>T00:00:00Z\"\n  }\n}\n```\n\n**Category** — free-form string; common values: `docs`, `code`, `process`, `integration`, `visibility`\n**Effect** — one of: `read-only`, `read-write`\n\nIf the extension has optional tool dependencies, add a `\"tools\"` array inside `\"requires\"`:\n\n```json\n\"tools\": [{ \"name\": \"\u003Ctool>\", \"required\": false }]\n```\n\nAlso update the top-level `\"updated_at\"` timestamp in the catalog.\n\nAfter editing, **validate the JSON** by running:\n\n```bash\npython3 -c \"import json; json.load(open('extensions\u002Fcatalog.community.json')); print('Valid JSON')\"\n```\n\n### 5. Add or update `docs\u002Fcommunity\u002Fextensions.md` community extensions table\n\n**New extension:** Insert a new row into the `# Community Extensions` table in **alphabetical order** by extension name.\n\n**Update:** Find the existing row and update the description or other changed fields in-place.\n\nDetermine the category and effect from the extension's behavior:\n\n```\n| \u003CName> | \u003CDescription> | `\u003Ccategory>` | \u003CEffect> | [\u003Crepo-name>](\u003Crepository-url>) |\n```\n\n**Category** — free-form; common values: `docs`, `code`, `process`, `integration`, `visibility`\n**Effect** — write canonical values `read-only` or `read-write` in `extension.yml` and `catalog.community.json`; use `Read-only`\u002F`Read+Write` only for the docs table display\n\n### 6. Commit, push, and open PR\n\nUse `add-` for new extensions, `update-` for updates:\n\n```bash\n# New extension\ngit checkout -b add-\u003Cextension-id>-extension\n\n# Update\ngit checkout -b update-\u003Cextension-id>-extension\n```\n\n```bash\ngit add extensions\u002Fcatalog.community.json docs\u002Fcommunity\u002Fextensions.md\n\n# New extension\ngit commit -m \"Add \u003CName> extension to community catalog\n\nAdd \u003Cid> extension submitted by @\u003Cissue-author> to:\n- extensions\u002Fcatalog.community.json (alphabetical order)\n- docs\u002Fcommunity\u002Fextensions.md community extensions table\n\nCloses #\u003Cissue-number>\"\n\n# Update\ngit commit -m \"Update \u003CName> extension to v\u003Cversion>\n\nUpdate \u003Cid> extension submitted by @\u003Cissue-author>:\n- extensions\u002Fcatalog.community.json (version, download_url, etc.)\n- docs\u002Fcommunity\u002Fextensions.md community extensions table\n\nCloses #\u003Cissue-number>\"\n\ngit push origin \u003Cbranch-name>\n```\n\nThen create a PR to `upstream` (`github\u002Fspec-kit`) with:\n- **Title:** `Add \u003CName> extension to community catalog` (or `Update \u003CName> extension to v\u003Cversion>`)\n- **Body:** Include validation summary, `Closes #\u003Cissue-number>`, and `cc @\u003Cissue-author>`\n- **Head:** `\u003Cfork-owner>:\u003Cbranch-name>`\n- **Base:** `main`\n\n## Common Pitfalls\n\n- **Alphabetical order matters** — entries must be sorted by ID in the JSON and by name in the docs table.\n- **Don't forget the catalog `updated_at`** — the top-level timestamp in `catalog.community.json` must be refreshed.\n- **Validate JSON after editing** — a trailing comma or missing brace will break the catalog.\n- **Use `Closes` not `Fixes`** — `Closes #N` is the correct keyword for submission issues.\n- **Match the proposed entry but verify** — the issue may include a proposed JSON block, but always validate field values against the actual repository state.\n- **Preserve `created_at` on updates** — keep the original `created_at` value; only change `updated_at`.\n- **Preserve `downloads` and `stars` on updates** — these reflect usage metrics and must not be reset.\n",{"name":5,"description":7,"argument-hint":48},"GitHub issue URL or number for the extension submission","main","f22ae68194f1425349669b058aed95bba728b1f9",".github\u002Fskills\u002Fadd-community-extension",13411,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit","https:\u002F\u002Fgithub.github.com\u002Fspec-kit\u002F","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-11 22:11:08",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add github\u002Fspec-kit --skill add-community-extension",{"tool":65,"command":66},"bunx","bunx skills add github\u002Fspec-kit --skill add-community-extension",{"tool":68,"command":69},"pnpm","pnpm dlx skills add github\u002Fspec-kit --skill add-community-extension","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fadd-community-extension\u002FSKILL.md",true,[],[74],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":90,"publishedAt":43},"01M6ADE7V97CG28KJXGYHKE1JF","code-review","Reviews Spec Kit code changes for consistency with applicable design documents, positive and negative test coverage, regression evidence for bug fixes, and consistent repository terminology. Use when reviewing a diff or pull request. Do not use for implementing changes or posting GitHub review actions.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fcode-review\u002FSKILL.md",[80,85],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[91,92,93,94,95,38,96,23,97,98,99,40,100,101,35,102,42,103,104,105,106,107,108,9,109,110],"review","code","code review","regression","fixes","implementing","consistency","reviews","posting","evidence","diff","coverage","actions","repository","pull","pull request","documents","test","spec","design"]