[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71F0E7F2MN7PYA93TDNEDME":3,"skill-same:01M71F0E7F2MN7PYA93TDNEDME":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":30,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M71F0E7F2MN7PYA93TDNEDME","release-flow",null,"Dogfooded release ritual for ai-specs-cli: version bump, promote to main, tag, and GitHub release. Trigger: when cutting a release, shipping vX.Y.Z, promoting development to main, or tagging a version.","parada1104\u002Fai-specs-cli","parada1104","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F57575053?v=4","01M71EZZV71KAFZKJ47FQ99ZVS","01M71EZZW7JJBY2VAWA5HRD944",0,"MIT","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Fai-specs\u002Fskills\u002Frelease-flow\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"release","flow","release flow","github release","root","tagging","github","cli","shipping","version bump","version","when","main","trigger","bump","for","development","promote","2026-11-10 10:12:30",false,"---\nname: release-flow\ndescription: >\n  Dogfooded release ritual for ai-specs-cli: version bump, promote to main,\n  tag, and GitHub release. Trigger: when cutting a release, shipping vX.Y.Z,\n  promoting development to main, or tagging a version.\nlicense: MIT\nmetadata:\n  author: ai-specs\n  version: \"1.0\"\n  scope: [root]\n  auto_invoke:\n    - \"Cutting a release or shipping vX.Y.Z\"\n    - \"Promoting development to main for a release\"\n    - \"Tagging a version and creating a GitHub release\"\n---\n\n# Release Flow\n\nProject-local playbook for shipping ai-specs-cli. This is **not** part of the\n`vcs-pr-flow` capability — use the bound VCS skill for PR\u002Fmerge primitives;\nthis skill owns product release policy (VERSION, CHANGELOG, promote, tag).\n\n## When to use\n\n- User asks to release, cut a version, ship `vX.Y.Z`, or promote to `main`\n- After features land on `development` and the tree is ready to publish\n- When recreating the release steps that agents otherwise rediscover from memory\n\n## Critical rules\n\n1. **Never** open the promote PR with `development` (or `main`\u002F`staging`) as\n   the head. Use a disposable `release\u002FvX.Y.Z` head into `main`.\n2. **Never** push directly to `main` or `development` — PR + explicit approval.\n3. Bump only `VERSION` and `CHANGELOG.md` on the bump branch (no feature work).\n4. Hard stop for explicit user approval before: promote merge, tag push, and\n   publishing release notes. The tag push is the irreversible step — it is what\n   builds and attaches the gate binaries.\n5. Before promote, run the VCS `delete_branch_on_merge` preflight (GitHub). If\n   it is `true`, warn — long-lived heads can be wiped when used as a PR head.\n6. After merge, delete only **feature** heads (`chore\u002Frelease-*`, `release\u002Fv*`).\n   Never delete protected heads.\n\nBefore the version bump (step 1 of the ritual), the isolated\nclean-materialization gate must pass. Evidence is\n`tests\u002Ftest_release_materialization.py` (isolated temp consumer project\n+ in-tree CLI), not this repo's dogfood `ai-specs\u002F.ai-specs.lock`. Do\n**not** treat a stale dogfood lock as release evidence.\n\n## Ritual\n\n```text\ndecide bump → chore\u002Frelease-vX.Y.Z (VERSION+CHANGELOG)\n  → PR → development (squash OK)\n  → reset release\u002FvX.Y.Z from origin\u002Fdevelopment\n  → PR → main (merge commit)\n  → annotated tag + gh release\n  → cleanup feature heads\n```\n\n### 1. Decide the bump\n\nFrom repo root (or release worktree):\n\n```bash\ncat VERSION\ngit describe --tags --abbrev=0\ngit log \"$(git describe --tags --abbrev=0)..origin\u002Fdevelopment\" --oneline\n```\n\nChoose major \u002F minor \u002F patch from `[Unreleased]` in `CHANGELOG.md` and commits\nsince the last tag. Confirm with the user if unclear.\n\n### 2. Bump branch\n\nWorktree off `development` (do not edit protected branches in the main tree):\n\n```bash\ngit fetch origin development\ngit worktree add .worktrees\u002Frelease-vX.Y.Z -b chore\u002Frelease-vX.Y.Z origin\u002Fdevelopment\n```\n\nIn that worktree:\n\n1. Set `VERSION` to `X.Y.Z` (no `v` prefix).\n2. Move `CHANGELOG.md` `[Unreleased]` notes into `## [X.Y.Z] — YYYY-MM-DD`.\n3. Leave a fresh empty `## [Unreleased]` section at the top.\n4. **Decide whether this release needs an upgrade notice** (see below).\n5. Commit: `chore(release): bump to X.Y.Z`.\n\n#### Upgrade notes (post-upgrade actions)\n\nIf a user must *do* something after upgrading, say so in an `### Upgrade notes`\nsubsection under the new version heading. `ai-specs upgrade` replays it for\neveryone who crosses this version, oldest release first.\n\n```markdown\n## [X.Y.Z] — YYYY-MM-DD\n\n### Upgrade notes\nRun `ai-specs sync` in each project to acquire the verified Go worktree-gate\nbinary. Until you do, the gate keeps falling back to the Bash implementation.\n```\n\nRules:\n\n- **Prose only.** `upgrade` runs against `~\u002F.ai-specs` and has no consumer\n  project in scope, so it cannot evaluate project-dependent conditions. Name\n  the command; let `ai-specs doctor` handle anything conditional.\n- **Nothing is executed.** A notice is displayed verbatim.\n- Write one only when an action is genuinely required. A notice on every\n  release trains users to skip them.\n\nAsk: *would a user who upgrades and does nothing else be silently worse off?*\nIf yes, write the notice.\n\n### 3. PR into development\n\n```bash\ngit push -u origin chore\u002Frelease-vX.Y.Z\ngh pr create --base development --head chore\u002Frelease-vX.Y.Z \\\n  --title \"chore(release): bump to X.Y.Z\" \\\n  --body \"$(cat \u003C\u003C'EOF'\n## Summary\n- Bump VERSION to X.Y.Z\n- Document changes in CHANGELOG.md\n\n## Test plan\n- [ ] VERSION reads X.Y.Z\n- [ ] After merge: promote via release\u002FvX.Y.Z → main, tag, gh release\n\nEOF\n)\"\n```\n\nSquash-merge is fine for the bump PR (after user approval). Pull\n`origin\u002Fdevelopment` after it lands.\n\n### 4. Promote head (disposable local branch)\n\nThe promotion head is a local branch only so it can be pushed as the PR head;\nit does not need its own worktree, and the canonical worktree stays on\n`development` throughout the promotion and tag steps.\n\n```bash\ngit fetch origin development main\ngit branch -f release\u002FvX.Y.Z origin\u002Fdevelopment\ngit push -u origin release\u002FvX.Y.Z\n```\n\nRun delete_branch_on_merge preflight via the bound VCS merge skill, then:\n\n```bash\ngh pr create --base main --head release\u002FvX.Y.Z \\\n  --title \"chore(release): promote vX.Y.Z to main\" \\\n  --body \"$(cat \u003C\u003C'EOF'\n## Summary\nPromote development tip (includes VERSION X.Y.Z) to main for release.\n\n## Test plan\n- [ ] Merge with merge commit (not squash)\n- [ ] Tag vX.Y.Z on main\n- [ ] Release workflow green and 4 gate assets attached\n- [ ] gh release edit — title and notes\n\nEOF\n)\"\n```\n\nMerge **only** after explicit user approval, using a **merge commit**\n(not squash):\n\n```bash\ngh pr merge \u003Cn> --merge --delete-branch\n```\n\n`--delete-branch` is safe here: `release\u002FvX.Y.Z` is a feature head.\n\n### 5. Tag and GitHub release\n\nAfter the promote PR lands, tag the fetched `origin\u002Fmain` commit directly. Do\nnot checkout `main` in the canonical worktree: Git tags point at commits, not\nworking directories, and the canonical checkout remains on `development`.\n\n```bash\ngit fetch origin main\ntest \"$(git rev-parse origin\u002Fmain)\" = \"$(git rev-parse origin\u002Fdevelopment)\" \\\n  || { echo \"origin\u002Fmain is not the current development tip\" >&2; exit 1; }\ngit tag -a \"vX.Y.Z\" origin\u002Fmain -m \"vX.Y.Z\"\ngit push origin \"vX.Y.Z\"\ntest \"$(git rev-list -n1 \"vX.Y.Z\")\" = \"$(git rev-parse origin\u002Fmain)\"\n```\n\n**The tag push creates the release — you do not.** Pushing `v*` triggers\n`.github\u002Fworkflows\u002Frelease-worktree-gate.yml`, which builds the four gate\nbinaries, verifies them against the committed\n`catalog\u002Frecipes\u002Fworktree-flow\u002Fbin\u002FSHA256SUMS`, and attaches them via\n`softprops\u002Faction-gh-release`. That action creates the GitHub Release for the\ntag, with an empty body and the bare tag as its title.\n\nSo `gh release create` **fails with \"already exists\"**. Wait for the workflow,\nthen fill in the release:\n\n```bash\ngh run watch \u003Crun-id> --exit-status          # 6 jobs, all must pass\ngh release view vX.Y.Z --json assets          # expect 4 worktree-gate-* assets\n\ngh release edit \"vX.Y.Z\" --title \"vX.Y.Z — \u003Cshort summary>\" \\\n  --notes-file - \u003C\u003C'EOF'\n## Highlights\n- \u003Cfrom CHANGELOG>\n\n## Install\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fparada1104\u002Fai-specs-cli\u002Fmain\u002Finstall.sh | bash\nEOF\n```\n\nVerify the published assets match the trust root without downloading them —\nuseful when a sandbox blocks the asset CDN:\n\n```bash\ngh api repos\u002Fparada1104\u002Fai-specs-cli\u002Freleases\u002Ftags\u002FvX.Y.Z \\\n  --jq '.assets[] | \"\\(.digest)  \\(.name)\"'\n```\n\nBefore tagging, reproduce the digests locally with the CANONICAL toolchain\n(`go1.24.13`): run `scripts\u002Fbuild-gate.sh`, then compare `shasum -a 256` of the\nfour `dist\u002Fworktree-gate-\u003Cos>-\u003Carch>` files against the committed `SHA256SUMS`.\nExclude `dist\u002Fworktree-gate-current` — CI does not build it. A mismatch means\nthe release workflow will fail and publish **no** assets, leaving every user on\nthe Bash fallback.\n\nInstaller default ref is `main` (`AI_SPECS_REF=main`). Point release notes at\nrepo-root `install.sh`, not a nested path.\n\n### 6. Cleanup\n\n```bash\ngit branch -D chore\u002Frelease-vX.Y.Z release\u002FvX.Y.Z 2>\u002Fdev\u002Fnull || true\ngit push origin --delete chore\u002Frelease-vX.Y.Z 2>\u002Fdev\u002Fnull || true\n# release\u002Fv* may already be deleted by --delete-branch on the promote PR\n```\n\nIf a release branch was deliberately checked out in a worktree, remove that\nworktree before deleting the branch. The normal flow creates no release\nworktree. Do **not** delete `development` or `main`.\n\n## Post-release checklist\n\n- [ ] `origin\u002Fmain` contains the tagged release commit\n- [ ] `VERSION` on `origin\u002Fmain` matches the tag\n- [ ] Canonical worktree remains on `development`\n- [ ] GitHub Release exists and notes look right\n- [ ] `development` still exists on origin\n- [ ] Feature release branches\u002Fworktrees removed\n- [ ] Optional: sync any post-tag fixes back to `development` via PR if needed\n\n## Relation to other skills\n\n| Skill \u002F capability | Role |\n|---|---|\n| `vcs-pr-flow` (`git-merge-workflow`) | PR create\u002Fmerge, protected vs feature heads, account + delete_branch_on_merge preflight |\n| `worktree-flow` | Isolated worktrees for bump and cleanup |\n| `release-flow` (this skill) | Semver bump, promote shape, tag, GitHub release notes |\n","# Release Flow\n\nProject-local playbook for shipping ai-specs-cli. This is **not** part of the\n`vcs-pr-flow` capability — use the bound VCS skill for PR\u002Fmerge primitives;\nthis skill owns product release policy (VERSION, CHANGELOG, promote, tag).\n\n## When to use\n\n- User asks to release, cut a version, ship `vX.Y.Z`, or promote to `main`\n- After features land on `development` and the tree is ready to publish\n- When recreating the release steps that agents otherwise rediscover from memory\n\n## Critical rules\n\n1. **Never** open the promote PR with `development` (or `main`\u002F`staging`) as\n   the head. Use a disposable `release\u002FvX.Y.Z` head into `main`.\n2. **Never** push directly to `main` or `development` — PR + explicit approval.\n3. Bump only `VERSION` and `CHANGELOG.md` on the bump branch (no feature work).\n4. Hard stop for explicit user approval before: promote merge, tag push, and\n   publishing release notes. The tag push is the irreversible step — it is what\n   builds and attaches the gate binaries.\n5. Before promote, run the VCS `delete_branch_on_merge` preflight (GitHub). If\n   it is `true`, warn — long-lived heads can be wiped when used as a PR head.\n6. After merge, delete only **feature** heads (`chore\u002Frelease-*`, `release\u002Fv*`).\n   Never delete protected heads.\n\nBefore the version bump (step 1 of the ritual), the isolated\nclean-materialization gate must pass. Evidence is\n`tests\u002Ftest_release_materialization.py` (isolated temp consumer project\n+ in-tree CLI), not this repo's dogfood `ai-specs\u002F.ai-specs.lock`. Do\n**not** treat a stale dogfood lock as release evidence.\n\n## Ritual\n\n```text\ndecide bump → chore\u002Frelease-vX.Y.Z (VERSION+CHANGELOG)\n  → PR → development (squash OK)\n  → reset release\u002FvX.Y.Z from origin\u002Fdevelopment\n  → PR → main (merge commit)\n  → annotated tag + gh release\n  → cleanup feature heads\n```\n\n### 1. Decide the bump\n\nFrom repo root (or release worktree):\n\n```bash\ncat VERSION\ngit describe --tags --abbrev=0\ngit log \"$(git describe --tags --abbrev=0)..origin\u002Fdevelopment\" --oneline\n```\n\nChoose major \u002F minor \u002F patch from `[Unreleased]` in `CHANGELOG.md` and commits\nsince the last tag. Confirm with the user if unclear.\n\n### 2. Bump branch\n\nWorktree off `development` (do not edit protected branches in the main tree):\n\n```bash\ngit fetch origin development\ngit worktree add .worktrees\u002Frelease-vX.Y.Z -b chore\u002Frelease-vX.Y.Z origin\u002Fdevelopment\n```\n\nIn that worktree:\n\n1. Set `VERSION` to `X.Y.Z` (no `v` prefix).\n2. Move `CHANGELOG.md` `[Unreleased]` notes into `## [X.Y.Z] — YYYY-MM-DD`.\n3. Leave a fresh empty `## [Unreleased]` section at the top.\n4. **Decide whether this release needs an upgrade notice** (see below).\n5. Commit: `chore(release): bump to X.Y.Z`.\n\n#### Upgrade notes (post-upgrade actions)\n\nIf a user must *do* something after upgrading, say so in an `### Upgrade notes`\nsubsection under the new version heading. `ai-specs upgrade` replays it for\neveryone who crosses this version, oldest release first.\n\n```markdown\n## [X.Y.Z] — YYYY-MM-DD\n\n### Upgrade notes\nRun `ai-specs sync` in each project to acquire the verified Go worktree-gate\nbinary. Until you do, the gate keeps falling back to the Bash implementation.\n```\n\nRules:\n\n- **Prose only.** `upgrade` runs against `~\u002F.ai-specs` and has no consumer\n  project in scope, so it cannot evaluate project-dependent conditions. Name\n  the command; let `ai-specs doctor` handle anything conditional.\n- **Nothing is executed.** A notice is displayed verbatim.\n- Write one only when an action is genuinely required. A notice on every\n  release trains users to skip them.\n\nAsk: *would a user who upgrades and does nothing else be silently worse off?*\nIf yes, write the notice.\n\n### 3. PR into development\n\n```bash\ngit push -u origin chore\u002Frelease-vX.Y.Z\ngh pr create --base development --head chore\u002Frelease-vX.Y.Z \\\n  --title \"chore(release): bump to X.Y.Z\" \\\n  --body \"$(cat \u003C\u003C'EOF'\n## Summary\n- Bump VERSION to X.Y.Z\n- Document changes in CHANGELOG.md\n\n## Test plan\n- [ ] VERSION reads X.Y.Z\n- [ ] After merge: promote via release\u002FvX.Y.Z → main, tag, gh release\n\nEOF\n)\"\n```\n\nSquash-merge is fine for the bump PR (after user approval). Pull\n`origin\u002Fdevelopment` after it lands.\n\n### 4. Promote head (disposable local branch)\n\nThe promotion head is a local branch only so it can be pushed as the PR head;\nit does not need its own worktree, and the canonical worktree stays on\n`development` throughout the promotion and tag steps.\n\n```bash\ngit fetch origin development main\ngit branch -f release\u002FvX.Y.Z origin\u002Fdevelopment\ngit push -u origin release\u002FvX.Y.Z\n```\n\nRun delete_branch_on_merge preflight via the bound VCS merge skill, then:\n\n```bash\ngh pr create --base main --head release\u002FvX.Y.Z \\\n  --title \"chore(release): promote vX.Y.Z to main\" \\\n  --body \"$(cat \u003C\u003C'EOF'\n## Summary\nPromote development tip (includes VERSION X.Y.Z) to main for release.\n\n## Test plan\n- [ ] Merge with merge commit (not squash)\n- [ ] Tag vX.Y.Z on main\n- [ ] Release workflow green and 4 gate assets attached\n- [ ] gh release edit — title and notes\n\nEOF\n)\"\n```\n\nMerge **only** after explicit user approval, using a **merge commit**\n(not squash):\n\n```bash\ngh pr merge \u003Cn> --merge --delete-branch\n```\n\n`--delete-branch` is safe here: `release\u002FvX.Y.Z` is a feature head.\n\n### 5. Tag and GitHub release\n\nAfter the promote PR lands, tag the fetched `origin\u002Fmain` commit directly. Do\nnot checkout `main` in the canonical worktree: Git tags point at commits, not\nworking directories, and the canonical checkout remains on `development`.\n\n```bash\ngit fetch origin main\ntest \"$(git rev-parse origin\u002Fmain)\" = \"$(git rev-parse origin\u002Fdevelopment)\" \\\n  || { echo \"origin\u002Fmain is not the current development tip\" >&2; exit 1; }\ngit tag -a \"vX.Y.Z\" origin\u002Fmain -m \"vX.Y.Z\"\ngit push origin \"vX.Y.Z\"\ntest \"$(git rev-list -n1 \"vX.Y.Z\")\" = \"$(git rev-parse origin\u002Fmain)\"\n```\n\n**The tag push creates the release — you do not.** Pushing `v*` triggers\n`.github\u002Fworkflows\u002Frelease-worktree-gate.yml`, which builds the four gate\nbinaries, verifies them against the committed\n`catalog\u002Frecipes\u002Fworktree-flow\u002Fbin\u002FSHA256SUMS`, and attaches them via\n`softprops\u002Faction-gh-release`. That action creates the GitHub Release for the\ntag, with an empty body and the bare tag as its title.\n\nSo `gh release create` **fails with \"already exists\"**. Wait for the workflow,\nthen fill in the release:\n\n```bash\ngh run watch \u003Crun-id> --exit-status          # 6 jobs, all must pass\ngh release view vX.Y.Z --json assets          # expect 4 worktree-gate-* assets\n\ngh release edit \"vX.Y.Z\" --title \"vX.Y.Z — \u003Cshort summary>\" \\\n  --notes-file - \u003C\u003C'EOF'\n## Highlights\n- \u003Cfrom CHANGELOG>\n\n## Install\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fparada1104\u002Fai-specs-cli\u002Fmain\u002Finstall.sh | bash\nEOF\n```\n\nVerify the published assets match the trust root without downloading them —\nuseful when a sandbox blocks the asset CDN:\n\n```bash\ngh api repos\u002Fparada1104\u002Fai-specs-cli\u002Freleases\u002Ftags\u002FvX.Y.Z \\\n  --jq '.assets[] | \"\\(.digest)  \\(.name)\"'\n```\n\nBefore tagging, reproduce the digests locally with the CANONICAL toolchain\n(`go1.24.13`): run `scripts\u002Fbuild-gate.sh`, then compare `shasum -a 256` of the\nfour `dist\u002Fworktree-gate-\u003Cos>-\u003Carch>` files against the committed `SHA256SUMS`.\nExclude `dist\u002Fworktree-gate-current` — CI does not build it. A mismatch means\nthe release workflow will fail and publish **no** assets, leaving every user on\nthe Bash fallback.\n\nInstaller default ref is `main` (`AI_SPECS_REF=main`). Point release notes at\nrepo-root `install.sh`, not a nested path.\n\n### 6. Cleanup\n\n```bash\ngit branch -D chore\u002Frelease-vX.Y.Z release\u002FvX.Y.Z 2>\u002Fdev\u002Fnull || true\ngit push origin --delete chore\u002Frelease-vX.Y.Z 2>\u002Fdev\u002Fnull || true\n# release\u002Fv* may already be deleted by --delete-branch on the promote PR\n```\n\nIf a release branch was deliberately checked out in a worktree, remove that\nworktree before deleting the branch. The normal flow creates no release\nworktree. Do **not** delete `development` or `main`.\n\n## Post-release checklist\n\n- [ ] `origin\u002Fmain` contains the tagged release commit\n- [ ] `VERSION` on `origin\u002Fmain` matches the tag\n- [ ] Canonical worktree remains on `development`\n- [ ] GitHub Release exists and notes look right\n- [ ] `development` still exists on origin\n- [ ] Feature release branches\u002Fworktrees removed\n- [ ] Optional: sync any post-tag fixes back to `development` via PR if needed\n\n## Relation to other skills\n\n| Skill \u002F capability | Role |\n|---|---|\n| `vcs-pr-flow` (`git-merge-workflow`) | PR create\u002Fmerge, protected vs feature heads, account + delete_branch_on_merge preflight |\n| `worktree-flow` | Isolated worktrees for bump and cleanup |\n| `release-flow` (this skill) | Semver bump, promote shape, tag, GitHub release notes |\n",{"name":5,"license":14,"metadata":41,"description":49},{"scope":42,"author":43,"version":44,"auto_invoke":45},[22],"ai-specs","1.0",[46,47,48],"Cutting a release or shipping vX.Y.Z","Promoting development to main for a release","Tagging a version and creating a GitHub release","Dogfooded release ritual for ai-specs-cli: version bump, promote to main, tag, and GitHub release. Trigger: when cutting a release, shipping vX.Y.Z, promoting development to main, or tagging a version.\n","c092fc1f51280350a4434827e2f6d6d99e3431ca","ai-specs\u002Fskills\u002Frelease-flow",2,"https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli","https:\u002F\u002Fgithub.com\u002Fparada1104","2026-11-08 05:20:31",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add parada1104\u002Fai-specs-cli --skill release-flow",{"tool":62,"command":63},"bunx","bunx skills add parada1104\u002Fai-specs-cli --skill release-flow",{"tool":65,"command":66},"pnpm","pnpm dlx skills add parada1104\u002Fai-specs-cli --skill release-flow","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Fai-specs\u002Fskills\u002Frelease-flow\u002FSKILL.md",true,[],[71,91,105,113,122,135],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":85,"publishedAt":36},"01M71F2TF9TS9DNCJ68M7C3B5S","test-skill","Test skill for fixture purposes.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Frecipes\u002Ftest-fixture\u002Fskills\u002Ftest-skill\u002FSKILL.md",[77,82],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":83,"categoryName":84,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000023","Skill与智能体开发",[86,87,33,22,88,89,90],"Test Skill","test","fixtures","fixture","testing",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":100,"publishedAt":36},"01M71F2RTH94ZB7XEAW4P6ZG0D","obsidian-markdown","Fixture skill for obsidian-markdown.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fobsidian-markdown\u002FSKILL.md",[97],{"categoryNo":98,"categoryName":99,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000002","文档处理",[101,102,103,33,89,104],"markdown","obsidian markdown","obsidian","fixture skill",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":36},"01M71F2R20CPTJXD9F7DP4JPP6","obsidian-cli","Fixture skill for obsidian-cli.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fobsidian-cli\u002FSKILL.md",[],[112,103,25,33,89,104],"obsidian cli",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":36},"01M71F2PCH4NWVTT1J57SHJX33","obsidian-bases","Fixture skill for obsidian-bases.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fobsidian-bases\u002FSKILL.md",[],[120,121,103,33,89,104],"bases","obsidian bases",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":131,"publishedAt":36},"01M71F2MSS6EVFEYVYAA1KBYCC","json-canvas","Fixture skill for json-canvas.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fjson-canvas\u002FSKILL.md",[128],{"categoryNo":129,"categoryName":130,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000015","视觉设计",[132,133,134,104,89,33],"json","json canvas","canvas",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":36},"01M71F2KY5QVNEN1Q3REFB0MQZ","defuddle","Fixture skill for defuddle.","https:\u002F\u002Fgithub.com\u002Fparada1104\u002Fai-specs-cli\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fkepano-obsidian-skills\u002Fskills\u002Fdefuddle\u002FSKILL.md",[],[137,104,89,33]]