[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71KEP6XT3X4AZCBQ78P96TR":3,"skill-same:01M71KEP6XT3X4AZCBQ78P96TR":66},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M71KEP6XT3X4AZCBQ78P96TR","release-prep",null,"Prepare a new agentsync release — validates goreleaser config, summarizes commits since the last tag against the changelog filters in .goreleaser.yaml, proposes the next semantic version, and runs a snapshot build. Does NOT tag or push — that remains a manual step requiring user confirmation.","noah-hrbth\u002Fagent-tool-sync","noah-hrbth","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F78396377?v=4","01M71KE9YFAYQ79YBHR2TA6D8K","Noah","01M71KE9Z1FHAXYJT40KM7MD24",2,"MIT","https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Frelease-prep\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"release","prep","release prep","semantic","user","prepare","snapshot","yaml","config","build","next","changelog","last","version","confirmation","filters","new","manual","commits","push","2026-11-10 10:12:30",false,"---\nname: release-prep\ndescription: Prepare a new agentsync release — validates goreleaser config, summarizes commits since the last tag against the changelog filters in .goreleaser.yaml, proposes the next semantic version, and runs a snapshot build. Does NOT tag or push — that remains a manual step requiring user confirmation.\n---\n\n# Release Prep\n\nGoal: produce a release-readiness report and a proposed version bump for the user to approve. **Never tag, push, or invoke `goreleaser release` (non-snapshot) yourself** — those actions affect remotes and are out of scope.\n\n## Procedure\n\n### 1. Confirm clean state\n\n```bash\ngit status --porcelain\ngit rev-parse --abbrev-ref HEAD\n```\n\nAbort with a clear message if there are uncommitted changes or the branch is not `main`. Releases should cut from a clean `main`.\n\n### 2. Identify the current and previous tag\n\n```bash\ngit describe --tags --abbrev=0    # latest tag, e.g. v0.4.2\ngit tag --sort=-v:refname | head -5\n```\n\n### 3. Summarize commits since the last tag\n\n```bash\ngit log \u003Clast-tag>..HEAD --pretty=format:'%h %s'\n```\n\nGroup the output by the changelog regex groups in `.goreleaser.yaml` (`Features` = `^.*feat[(\\w)]*:+.*$`, `Bug fixes` = `^.*fix[(\\w)]*:+.*$`, `Refactors` = `^.*refactor[(\\w)]*:+.*$`, `Other` = everything not excluded by `^docs:`, `^chore:`, `^test:`, `^ci:`, `^style:`).\n\n### 4. Propose the next version\n\nApply conventional-commit semver inference:\n\n- Any `feat!:` \u002F `BREAKING CHANGE:` → bump **major**.\n- Any `feat:` (and no breaking) → bump **minor**.\n- Only `fix:` \u002F `refactor:` \u002F `chore:` → bump **patch**.\n- No commits since last tag → no release; report and stop.\n\nState the proposed version and the rule that produced it.\n\n### 5. Validate the goreleaser config\n\n```bash\nmake release-check        # runs `goreleaser check`\n```\n\nSurface any errors verbatim.\n\n### 6. Build a snapshot\n\n```bash\nmake release-snapshot     # goreleaser release --snapshot --clean --skip=publish\n```\n\nThis validates that the build pipeline (`builds`, `archives`, `homebrew_casks` rendering) succeeds locally without publishing. Then list `dist\u002F` and confirm the expected per-OS\u002Fper-arch archives are present:\n\n```bash\nls dist\u002F\n```\n\n### 7. Report\n\n```\n# Release prep: \u003Cproposed-version>\n\n## Branch: main (clean)\n## Last tag: \u003CvX.Y.Z>\n## Commits since: N\n\n### Features\n- \u003Chash> \u003Csubject>\n\n### Bug fixes\n- \u003Chash> \u003Csubject>\n\n### Refactors\n- \u003Chash> \u003Csubject>\n\n### Other\n- \u003Chash> \u003Csubject>\n\n## Proposed version: \u003CvX.Y.Z+1>\n## Bump rule: \u003Cmajor | minor | patch> — \u003Cone-line justification>\n\n## goreleaser check: \u003Cpass\u002Ffail>\n## snapshot build: \u003Cpass\u002Ffail>\n## dist artifacts: \u003Ccount> archives\n```\n\nEnd with the exact commands the user can run to actually cut the release — do not run them:\n\n```\ngit tag \u003CvX.Y.Z+1>\ngit push origin \u003CvX.Y.Z+1>\n```\n\nThe Homebrew tap publish path requires the `HOMEBREW_TAP_KEY` env var (see `.goreleaser.yaml` and `a7e56d3`); flag this if the env var is unset locally so the user knows the publish step will need it in CI.\n","# Release Prep\n\nGoal: produce a release-readiness report and a proposed version bump for the user to approve. **Never tag, push, or invoke `goreleaser release` (non-snapshot) yourself** — those actions affect remotes and are out of scope.\n\n## Procedure\n\n### 1. Confirm clean state\n\n```bash\ngit status --porcelain\ngit rev-parse --abbrev-ref HEAD\n```\n\nAbort with a clear message if there are uncommitted changes or the branch is not `main`. Releases should cut from a clean `main`.\n\n### 2. Identify the current and previous tag\n\n```bash\ngit describe --tags --abbrev=0    # latest tag, e.g. v0.4.2\ngit tag --sort=-v:refname | head -5\n```\n\n### 3. Summarize commits since the last tag\n\n```bash\ngit log \u003Clast-tag>..HEAD --pretty=format:'%h %s'\n```\n\nGroup the output by the changelog regex groups in `.goreleaser.yaml` (`Features` = `^.*feat[(\\w)]*:+.*$`, `Bug fixes` = `^.*fix[(\\w)]*:+.*$`, `Refactors` = `^.*refactor[(\\w)]*:+.*$`, `Other` = everything not excluded by `^docs:`, `^chore:`, `^test:`, `^ci:`, `^style:`).\n\n### 4. Propose the next version\n\nApply conventional-commit semver inference:\n\n- Any `feat!:` \u002F `BREAKING CHANGE:` → bump **major**.\n- Any `feat:` (and no breaking) → bump **minor**.\n- Only `fix:` \u002F `refactor:` \u002F `chore:` → bump **patch**.\n- No commits since last tag → no release; report and stop.\n\nState the proposed version and the rule that produced it.\n\n### 5. Validate the goreleaser config\n\n```bash\nmake release-check        # runs `goreleaser check`\n```\n\nSurface any errors verbatim.\n\n### 6. Build a snapshot\n\n```bash\nmake release-snapshot     # goreleaser release --snapshot --clean --skip=publish\n```\n\nThis validates that the build pipeline (`builds`, `archives`, `homebrew_casks` rendering) succeeds locally without publishing. Then list `dist\u002F` and confirm the expected per-OS\u002Fper-arch archives are present:\n\n```bash\nls dist\u002F\n```\n\n### 7. Report\n\n```\n# Release prep: \u003Cproposed-version>\n\n## Branch: main (clean)\n## Last tag: \u003CvX.Y.Z>\n## Commits since: N\n\n### Features\n- \u003Chash> \u003Csubject>\n\n### Bug fixes\n- \u003Chash> \u003Csubject>\n\n### Refactors\n- \u003Chash> \u003Csubject>\n\n### Other\n- \u003Chash> \u003Csubject>\n\n## Proposed version: \u003CvX.Y.Z+1>\n## Bump rule: \u003Cmajor | minor | patch> — \u003Cone-line justification>\n\n## goreleaser check: \u003Cpass\u002Ffail>\n## snapshot build: \u003Cpass\u002Ffail>\n## dist artifacts: \u003Ccount> archives\n```\n\nEnd with the exact commands the user can run to actually cut the release — do not run them:\n\n```\ngit tag \u003CvX.Y.Z+1>\ngit push origin \u003CvX.Y.Z+1>\n```\n\nThe Homebrew tap publish path requires the `HOMEBREW_TAP_KEY` env var (see `.goreleaser.yaml` and `a7e56d3`); flag this if the env var is unset locally so the user knows the publish step will need it in CI.\n",{"name":5,"description":7},"main","3b6d4dd03c2efaabac9d24bac067186575670b54",".cline\u002Fskills\u002Frelease-prep",0,"https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync","https:\u002F\u002Fgithub.com\u002Fnoah-hrbth","noah-hrbth.dev","2026-08-21 13:43:41",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add noah-hrbth\u002Fagent-tool-sync --skill release-prep",{"tool":58,"command":59},"bunx","bunx skills add noah-hrbth\u002Fagent-tool-sync --skill release-prep",{"tool":61,"command":62},"pnpm","pnpm dlx skills add noah-hrbth\u002Fagent-tool-sync --skill release-prep","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync\u002Fblob\u002Fmain\u002F.cline\u002Fskills\u002Frelease-prep\u002FSKILL.md",true,[],[67,88,101,121,130,139],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":78,"publishedAt":39},"01M71KFJ5BKV6Y4S3PXR0BSNYW","code-reviewer","Reviews code for quality, bugs, and security issues.","https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync\u002Fblob\u002Fmain\u002Ftestdata\u002Fscenarios\u002Fempty-workspace\u002Finput\u002F.agentsync\u002Fskills\u002Fcode-reviewer\u002FSKILL.md",[73],{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[79,80,81,82,83,84,85,86,87],"code","reviewer","code reviewer","issues","quality","for","bugs","security","reviews",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":39},"01M71KFGQNE7T84G9X0JEZXVM8","commit","Conventional commit helper sourced from Mistral Vibe","https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync\u002Fblob\u002Fmain\u002Fexamples\u002Fsandbox\u002F.vibe\u002Fskills\u002Fcommit\u002FSKILL.md",[],[90,95,96,97,98,99,100],"true","commit helper","helper","Mistral","conventional commit","vibe",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":113,"publishedAt":39},"01M71KFETSGVYNWR2Z9VEP5XQG","code-review","Code reviewer sourced from Mistral Vibe. Use to review or audit changes.","https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync\u002Fblob\u002Fmain\u002Fexamples\u002Fsandbox\u002F.vibe\u002Fskills\u002Fcode-review\u002FSKILL.md",[107,112],{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},[114,115,79,100,116,117,81,118,98,119,80,120],"review","code review","changes","use","audit","read","grep",{"skillNo":122,"name":103,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":128,"publishedAt":39},"01M71KFDXCM6P17ZTGECET584V","Code reviewer sourced from JetBrains Junie. Use to review or audit changes.","https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync\u002Fblob\u002Fmain\u002Fexamples\u002Fsandbox\u002F.junie\u002Fskills\u002Fcode-review\u002FSKILL.md",[126,127],{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},[114,115,79,129,116,117,81,118,80],"jetbrains",{"skillNo":131,"name":103,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":137,"publishedAt":39},"01M71KFAEW9WXYWCSMDM4E85NK","Code reviewer sourced from Cline. Use to review or audit changes.","https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync\u002Fblob\u002Fmain\u002Fexamples\u002Fsandbox\u002F.cline\u002Fskills\u002Fcode-review\u002FSKILL.md",[135,136],{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},{"categoryNo":74,"categoryName":75,"taxonomyType":76,"taxonomyTypeDesc":77},[114,115,79,138,116,117,81,118,80],"cline",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":39},"01M71KF52DECGRXMSZ3PENK1EA","path-scoped","Context-aware TypeScript helper. Auto-activates when TypeScript files are in scope.","https:\u002F\u002Fgithub.com\u002Fnoah-hrbth\u002Fagent-tool-sync\u002Fblob\u002Fmain\u002Fexamples\u002Fsandbox-seed\u002F.agentsync\u002Fskills\u002Fpath-scoped\u002FSKILL.md",[],[146,147,148,149,150,119,151,152,120,153,154,155,97,156,157],"scoped","path","path scoped","scope","lib","src","typescript","files","auto","when","context","typescript helper"]