release
Skill0 starsChanged 6 days agoMITView on GitHub
Cut a release of this extension end to end — pick the number, stamp the changelog, tag, and get both storefronts onto it. Use when the user says \"зарелизь\", \"давай релиз\", \"выпускай\", \"release it\", or asks to publish a new version. Also covers the marketplace upload on its own — \"обнови в маркетплейсе\", \"залей в маркетплейс\", \"publish to the marketplace\", or asking why the two storefronts disagree: start at the marketplace section.
- Commits and pushes
196 other projects use a version of this.
Adopted by
Most recently taken up by
- zxcvbn-ts/zxcvbntheir own version, first seen Nov 9, 2026
- TechbeeAT/jtxBoardtheir own version, first seen Nov 9, 2026
- ddnexus/pagytheir own version, first seen Nov 9, 2026
- zerx-lab/FluxDowntheir own version, first seen Nov 9, 2026
- orioledb/orioledbtheir own version, first seen Nov 9, 2026
- AmruthPillai/Reactive-Resumetheir own version, first seen Nov 8, 2026
Used with
Projects with it also use create-agent-adapter, changelog-style and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
MicrosoftSkillcreate-agent-adapter
Technical guide for creating a new Paperclip agent adapter. Use when building a new adapter package, adding support for a new AI coding tool (e.g. a new CLI agent, API-based agent, or custom process), or when modifying the adapter system. Covers the required interfaces, module structure, registration points, and conventions derived from the existing claude-local and codex-local adapters.
Also in 5 projects that use this
GrinvSkillchangelog-style
Turn a commit range into CHANGELOG.md entries following common-changelog style. Use when finishing a PR or cutting a release, to write/fix the [Unreleased] section's entries — moving [Unreleased] under a new dated version heading is a separate, automated step (see the release skill / scripts/sync-version.ts), not this skill's job.
Also in 4 projects that use this
GrinvSkilldocs-consistency-check
Check README/manifest.json/server.json/CHANGELOG.md/AGENTS.md and docs/*.md for drift against the actual registered tools and source. Use after adding, renaming, or removing a tool, or as part of a live-audit pass.
Also in 4 projects that use this
Microsoft AzureSkillcomponent-release
Prepares a verifiable Agent Landing Zone UI release. Use for release branches, VERSION, changelog entries, tags, release notes, and compatibility evidence; never publish without explicit human approval.
Also in 4 projects that use this
Microsoft AzureSkilldocumentation-consistency
Keeps AI Landing Zone contributor, user, and operator documentation aligned with shipped Bicep behavior. Use for parameters, defaults, outputs, topology, deployment flow, operations, or releases.
Also in 8 projects that use this
rivet-devSkilllaunch-graphics
Generate agentOS marketing/launch graphics (launch & social heroes, code-snippet cards) from the committed generators in docs-internal/graphics. Use when asked to make, update, or render an agentOS launch image, social image, "agentOS Apps" graphic, or technical code-snippet image.
Also in 3 projects that use this
- +3 more from Grinv
Other versions196 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 196
- paperclipai/paperclip★ 112ksame name
- modelcontextprotocol/servers★ 92ksame name
- remotion-dev/remotion★ 72ksame name
- traefik/traefik★ 65ksame name
- usememos/memos★ 64ksame name
- tw93/Pake★ 63ksame name
- AmruthPillai/Reactive-Resume★ 45ksame name
- amruthpillai/reactive-resume★ 45ksame name
- reactive-resume/reactive-resume★ 45ksame name
- Yeachan-Heo/oh-my-claude-sisyphus★ 41ksame name
186 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository4 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- writing-docsSkill
- dashboardSkill
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 2 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 186 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 19
This is publishing: Do it when the user asks for a release, not because work accumulated.
- Very specific: line 59
Check the mechanical parts too: every settings key from package.json present, every contributes.commands title mentioned, every image link …
- Very specific: line 84
patch: when the changelog entry is all ### Fixed.
- Very specific: line 117
A file that is on disk but not in git ships as nothing: Every check above reads the working tree, while CI builds the package from the …
- Distinctive: line 158
Verify the artifact rather than trusting the run, because this same file is what goes to the marketplace by hand:
“Common” is measured: kept by at least 6 in 10 of the 186 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Shared execution contract
Use the current client's real tools and the repository AGENTS.md. Historical tool names are examples, not callable API guarantees. Git/publication, messaging another chat and destructive actions require applicable user authorization; never include unrelated unfinished work. Model/effort and delegation follow the actual session. Verify the resulting artifact before reporting success.
Releasing this extension
One tag publishes to Open VSX. The VS Marketplace is a manual upload, because its
step in release.yml is commented out — the VSCE_PAT it needs cannot be issued
on this account (project memory vsce-pat-blocked-by-azure-subscription). So a
release is done when both storefronts show the new number, not when the
workflow goes green.
This is publishing. Do it when the user asks for a release, not because work accumulated. Everything up to the tag is reversible; the tag and the upload are not — a published version can be unpublished, never replaced.
Before touching anything
git status --porcelain # what will go in
git log --oneline -1 # what the last release was
rg -m2 '^## ' CHANGELOG.md # is there an [Unreleased] section at allTwo questions the answers decide:
Is there a live session in this repository? ListAgents — if another session
is working here, tell it what you are about to commit and give it a minute to
object. A release commits the whole tree; a peer's half-finished file would ride
along.
Is [Unreleased] there and complete? It should already hold a line per
user-visible change, written as each was made. If it is missing or thin, write it
now from git diff and say in the report that it was written late — the rule is
in AGENTS.md, and a release is exactly when its absence hurts.
Does the README still tell the truth? This is a step, not a courtesy: the README is the marketplace listing, so a release ships whatever it says to everyone who looks the extension up. Read it against what changed since the last tag and fix both directions:
git diff --stat v<last>..HEAD # what moved
git log --oneline v<last>..HEAD # and why- A feature that is not described gets described. New settings belong in the settings table, new commands in the command list, a new panel or tab in the prose around it.
- A feature that changed gets corrected. Renamed settings, a moved button, a different default, a screenshot showing a layout that no longer exists — any of those makes the README lie, and a lie in a listing is worse than an omission.
- Check the mechanical parts too: every settings key from
package.jsonpresent, everycontributes.commandstitle mentioned, every image link resolving to a file that exists.
Fix it in the release commit. A README correction is not worth a release of its own, and left undone it stays wrong until someone notices from the outside.
Call the advisor before the tag exists. A release here always bundles a
multi-file feature, so it is the "before declaring done" case of the rule in
AGENTS.md — and the tag is the point of no return: a published version can be
unpublished, never replaced, so a remark that arrives after it costs another
number. Do it once, here, with the work finished and the changelog written; if it
comes back with something that must change, fix it and consult again before
tagging.
This step exists because the rule kept being skipped in practice. The Stop hook asks for tests after every edit, tests go green, and the turn ends feeling checked — but that hook guards tests and the advisor guards judgment. Tying the consult to the release gives it one mechanical moment instead of a judgment call about whether this change was "big enough".
The number
AGENTS.md and project memory version-bumps-at-release-only own this. In short:
- patch when the changelog entry is all
### Fixed; minor when the extension does something it did not do before.majoris never yours. - Two files carry the version, and they must agree.
package.jsonis the extension;.claude-plugin/plugin.jsonis the Claude Code plugin, whose version becomes a path segment in the plugin cache. Bump both, or the plugin keeps announcing the number it was released under while the extension moves on. - The channel is the parity of the minor. "Release" with no qualifier means
stable, which is an even minor: 0.34 → 0.36, never 0.35. A
pre-release happens only when the user asks for one in words (project memory
release-channels, and it cost a wasted version once).
Cutting it
# 1. Stamp the changelog: [Unreleased] becomes the number and today's date.
# The heading is replaced, not kept — no empty [Unreleased] ships.
# 2. Bump "version" in package.json to the same number.
node --test test/*.test.js # must be green
node -p "require('./package.json').version" # and match
rg -m1 -n '^## ' CHANGELOG.md # the two agree
npx @vscode/vsce package --no-dependencies -o <scratch>/vX.Y.Z.vsix
node --test test/packaging.js # uses installed/cached vsce
package_files="$(unzip -Z1 <scratch>/vX.Y.Z.vsix)" || exit 1
if printf '%s\n' "$package_files" | rg '(^|/)(AGENTS\.md|CLAUDE\.md)$|(^|/)\.(claude|agents|codex)(/|$)'; then
echo 'Repository-only instructions leaked into the VSIX' >&2
exit 1
fi
unzip -l <scratch>/vX.Y.Z.vsix | rg 'dashboard\.css' # the page has no styles without it
code --install-extension <scratch>/vX.Y.Z.vsixA file that is on disk but not in git ships as nothing. Every check above
reads the working tree, while CI builds the package from the tagged commit — so
an untracked file passes the tests, passes vsce ls, passes the local install,
and reaches both storefronts as an absent file. The page then renders as unstyled
markup nobody would call broken until they looked. git status --porcelain and
account for every ?? line before committing; screenshots are the same trap from
the other side, since the listing pulls them from raw/HEAD.
Then the release commit — the work and the bump together, Conventional Commits, and the tag on it:
Attribute the actual authoring client and model in the commit trailers. Fill the
values from verified current-session evidence; do not copy a model name or session
URL from this template or another client's transcript. Keep the actual Git author
identity unchanged. Add a verified Session: URL/ID only when available; otherwise
omit it. If the exact model is unavailable, use Model: unverified. Preserve a
truthful Co-Authored-By: trailer when an actual contributor identity is known.
git add <explicit paths> # never -A: another session may be writing here
git commit -F - <<'MSG'
feat(scope): what changed, in the register the repo already uses
…
Agent: <actual authoring client>
Model: <verified current model ID, or unverified>
MSG
git push origin master
git tag vX.Y.Z && git push origin vX.Y.ZOpen VSX, which the tag does by itself
gh run list --limit 2 --json name,status,conclusion # poll until Release completesThe workflow decides the channel from the minor's parity and passes
--pre-release itself — never pass it by hand. The tag must equal the manifest
version or the workflow fails its own check.
Verify the artifact rather than trusting the run, because this same file is what goes to the marketplace by hand:
gh release download vX.Y.Z -p extension.vsix -D <scratch> --clobber
gh release view vX.Y.Z --json assets --jq '.assets[] | "\(.name) \(.digest)"'
shasum -a 256 <scratch>/extension.vsix # must equal the digest
unzip -p <scratch>/extension.vsix extension.vsixmanifest | rg -o 'PreRelease[^/]*'
unzip -p <scratch>/extension.vsix extension/package.json | rg -o '"version": "[^"]*"'
unzip -p <scratch>/extension.vsix extension/changelog.md | rg -m1 '^## 'PreRelease" Value="true" means pre-release; no output at all means stable. The
changelog's first heading must carry the number just released — a stray
[Unreleased] above it means the working section shipped as a version.
Check the channel against what was asked, not against the tag you just made. A stable release that went out odd reaches nobody who has not opted in, and the fix is another release: the number is spent.
The listing lags the run. open-vsx.org/api/grgrwlkr/claude-dashboard kept
answering with the previous version for two to four minutes after the workflow
reported success. Poll it; do not conclude the publish failed. The page itself is
an SPA and curl returns 200 even for an extension that does not exist — the API
is what tells the truth:
curl -s https://open-vsx.org/api/grgrwlkr/claude-dashboard \
| python3 -c 'import json,sys; d=json.load(sys.stdin); print(d["version"], d["preRelease"])'The VS Marketplace, by hand
Upload the release asset, never a locally built package: extension.vsix
from the GitHub release is the exact file CI handed to Open VSX, so both
storefronts carry one byte-identical build. It is already downloaded and checked
by the step above; if you are here on your own — because the storefronts have
drifted apart without a new release — do that verification first.
The browser steps
tabs_context_mcp { createIfEmpty: true }, thennavigatetohttps://marketplace.visualstudio.com/manage/publishers/grgrwlkr.- The page comes up blank while MSAL redirects —
waitfive to eight seconds and screenshot again rather than concluding it failed. - Click the ⋮ next to the extension row. The menu is Reports / View Extension / Update / Unpublish / Remove — Update is third, and the two below it are destructive. Screenshot immediately before each click and click by the coordinates in that screenshot: the window resizes between calls, and a click at stale coordinates closes the menu silently.
- In "Upload Visual Studio Code extension": do not click the drop zone —
that opens a native file picker you cannot see. Instead
find { query: "file input for uploading the vsix" }and hand the path tofile_uploadwith that ref. - The dialog then shows the file name and enables Upload. Click it.
Confirming it, which is not the same as seeing it
The green "It's live!" panel appears immediately and means the upload was accepted, not that the version is published — the row shows the old number with a spinner while the package is verified. Measured: 7, 10, 11, 6, 7, 6, 7 and 6 minutes across the last eight releases. It does not lengthen with the version: budget ten minutes and poll, rather than reading the last number as a trend.
The truth is the gallery API. Run it in the background and keep working; do not sit on a foreground sleep:
curl -s -H 'Content-Type: application/json' \
-H 'Accept: application/json;api-version=7.2-preview.1' \
-d '{"filters":[{"criteria":[{"filterType":7,"value":"grgrwlkr.claude-dashboard"}]}],"flags":119}' \
https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery \
| python3 -c 'import sys,json
vs = json.load(sys.stdin)["results"][0]["extensions"][0]["versions"]
for v in vs[:3]:
p = {x["key"]: x["value"] for x in v.get("properties", [])}
print(v["version"], p.get("Microsoft.VisualStudio.Code.PreRelease", "(absent -> stable)"), len(p), "props")'flags:119, not 103. The smaller value omits IncludeVersionProperties,
so every version comes back with no PreRelease key — which reads exactly like
"published as stable" whatever the truth is. 18 properties on a stable version,
19 on a pre-release; a count near zero means the flags were wrong, not the
package.
The endpoint also answers with an empty body often enough to matter, and a bare parse of that throws in a way that looks like "not published yet" — retry before drawing a conclusion.
The version badge in the README comes from badgen with max-age=3600, so it lags
publication by up to an hour. Never use it as the check.
Done means
| git | tag on the release commit, pushed |
| GitHub release | asset present, digest matches the local file |
| Open VSX | new version, preRelease false for a stable release |
| VS Marketplace | new version, PreRelease absent, 18 properties |
Then walk the publication checklist in project memory
(publication-checklist): anchors by clicking, images on the moving raw/HEAD,
the changelog tab's first heading, the channel, and how far the two storefronts
sit from each other.
What has gone wrong before
- An odd minor published as a pre-release and the Install button stayed on the old version. Two releases were spent on one piece of work.
[Unreleased]shipped as a version heading, so the file claimed a number nobody could install..claude/rode into the package in 0.30.0 — the publishing instructions themselves went to both storefronts. A published version cannot be replaced.- Screenshots are on
raw/HEAD, a moving target: renaming a file undermedia/breaks the images of every version already published. - A click at coordinates from an older screenshot closed the ⋮ menu instead of opening Update, and the next step then failed looking for a dialog that was never opened.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

