Release Round
ethereumjs/ethereumjs-monorepo
Runs a coordinated EthereumJS npm release round in six human-gated phases — intent and readiness, CHANGELOG, version bump, publish (human executes), post-publish verification, and announcements.
Cut a new release of @ilamy/calendar — analyze commits since the last tag, suggest a semver bump, draft a CHANGELOG entry in the project's existing style, run the CI gate, commit, tag, push to…
$ npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kcsujeet/ilamy-calendar release-new-version --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kcsujeet/ilamy-calendar.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/release-new-version .claude/skills/release-new-version && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "release-new-version" agent skill from https://github.com/kcsujeet/ilamy-calendar/tree/main/.agents/skills/release-new-version into .claude/skills/release-new-version/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-new-version", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kcsujeet/ilamy-calendar/tree/main/.agents/skills/release-new-versionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kcsujeet/ilamy-calendar release-new-version --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kcsujeet/ilamy-calendar.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/release-new-version .agents/skills/release-new-version && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release-new-version" agent skill from https://github.com/kcsujeet/ilamy-calendar/tree/main/.agents/skills/release-new-version into .agents/skills/release-new-version/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-new-version", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kcsujeet/ilamy-calendar release-new-version --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kcsujeet/ilamy-calendar.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/release-new-version .cursor/skills/release-new-version && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release-new-version" agent skill from https://github.com/kcsujeet/ilamy-calendar/tree/main/.agents/skills/release-new-version into .cursor/skills/release-new-version/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-new-version", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kcsujeet/ilamy-calendar.git --path .agents/skills/release-new-version--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kcsujeet/ilamy-calendar release-new-version --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kcsujeet/ilamy-calendar.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/release-new-version .gemini/skills/release-new-version && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release-new-version" agent skill from https://github.com/kcsujeet/ilamy-calendar/tree/main/.agents/skills/release-new-version into .gemini/skills/release-new-version/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-new-version", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kcsujeet/ilamy-calendar release-new-versionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kcsujeet/ilamy-calendar.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/release-new-version .github/skills/release-new-version && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release-new-version" agent skill from https://github.com/kcsujeet/ilamy-calendar/tree/main/.agents/skills/release-new-version into .github/skills/release-new-version/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-new-version", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kcsujeet/ilamy-calendar release-new-version --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kcsujeet/ilamy-calendar.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/release-new-version .opencode/skills/release-new-version && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release-new-version" agent skill from https://github.com/kcsujeet/ilamy-calendar/tree/main/.agents/skills/release-new-version into .opencode/skills/release-new-version/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-new-version", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
release-new-versionCut a new release of @ilamy/calendar — analyze commits since the last tag, suggest a semver bump, draft a CHANGELOG entry in the project's existing style, run the CI gate, commit, tag, push to…
Release New Version is an agent skill from kcsujeet/ilamy-calendar. Cut a new release of @ilamy/calendar — analyze commits since the last tag, suggest a semver bump, draft a CHANGELOG entry in the project's existing style, run the CI gate, commit, tag, push to origin, and create the GitHub release page (marked as latest). Pauses for the user to run bun run release (build + publish) interactively, then (on their signal) updates and deploys the docs site (apps/website, with demo/playground updates when needed) and comments on every issue closed by the release, closing any still…
Its SKILL.md is about 5.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Changelog and release notes, Static sites and blogs and App store release. It works with GitHub, npm, React and TypeScript. The repository describes itself as: A modern, open-source Full Calendar alternative for React. Month, week, day, and year views with drag-and-drop, horizontal and vertical resource views, and RFC 5545 recurring… The licence is MIT.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d1ee535. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitbunghnpmcurlpython3wranglerFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comregistry.npmjs.orgFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
CLOUDFLARE_API_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release New Version loads about 5.8k tokens when it runs. Until then it costs about 212 tokens; SKILL.md has 2,864 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from kcsujeet/ilamy-calendar at commit d1ee535, republished under its MIT licence (© kcsujeet). 2,864 words, ~5,795 tokens.
.claude/skills/release-new-version/SKILL.md (or your agent's skills folder).You're shipping a new version of the @ilamy/calendar npm package. The flow is conservative on purpose: suggest, wait for approval, apply, wait for approval, push. The user handles the actual publish manually via bun run release (it needs an interactive login).
Monorepo note. This is a Bun-workspaces monorepo (workspaces: packages/*, packages/plugins/*, apps/*) but only @ilamy/calendar is published. Not every other package is bundled into it — be precise:
@ilamy/calendar (private, no separate npm release): @ilamy/types, @ilamy/utils, @ilamy/ui, @ilamy/calendar-recurrence, @ilamy/calendar-agenda (the two plugin packages live under packages/plugins/). They are declared as devDependencies of packages/calendar and inlined via bunup's noExternal; prepack then drops devDependencies so the published manifest stays clean.@ilamy/demo and @ilamy/website, and @ilamy/playground. They never ship to npm and are not part of a release. The docs site (apps/website) deploys separately (Cloudflare Pages) — cutting an npm release does not redeploy it.packages/calendar/package.json, not the root package.json (the root is private and versionless). Bump and read the version there.exports map: ., ./testing, ./plugins/recurrence, ./plugins/agenda. If a release changes a plugin's public surface, name the relevant subpath in the changelog.bun run release = build:lib (bun run --filter '@ilamy/calendar' build — builds only the published package, bundling the internal packages above) then publish:lib (cd packages/calendar && bun publish, which honors publishConfig.access: public and runs prepack/postpack). bun run release:dry does the same with --dry-run.CHANGELOG.md and docs/logs/ stay at the repo root.Why the pauses matter. Recent git history shows version churn (1.7.0 → 1.6.1 → 1.6.0 → 1.6.1) from premature version bumps. Every step that writes to the tree, commits, tags, or pushes should be explicitly approved. It's cheap to pause and expensive to revert a tag.
Do these in parallel and report anything wrong. Do not proceed if any check fails; tell the user and let them resolve it.
git branch --show-current → must be main (releases land on main per recent history).git status --short → must be empty. If there are staged/unstaged changes, ask the user whether to commit, stash, or abort.git fetch origin main then git rev-list --left-right --count origin/main...HEAD → local must be equal to or 0 ahead of origin/main. If local is behind, pull first. If ahead, confirm with the user that the unpushed commits are intended for this release.git describe --tags --abbrev=0 → capture the last release tag (e.g., v1.6.1). This is the baseline for the commit log and the changelog compare link.packages/calendar/package.json version field (NOT the root — it's private and versionless). Sanity-check it matches the last tag minus the v prefix. If they diverge (as happened with the 1.7.0 → 1.6.1 revert), surface the mismatch and ask the user what the correct baseline is before continuing.Do not run bun run ci yet — save it for Step 4 so we don't waste a clean build if the user doesn't like the version or the changelog.
Goal: propose patch, minor, or major with evidence, and wait for the user's call.
git log <last-tag>..HEAD --pretty=format:"%h %s" — list every commit since the last tag.
Classify each commit by its conventional prefix:
feat: → minorfix: / perf: → patchrefactor: / chore: / docs: / test: / style: → patch (internal-only; doesn't bump minor)!: suffix anywhere, or BREAKING CHANGE: in body → majorThe suggested bump is the highest level across all commits. Example: 5 fix: + 1 feat: → minor.
Present a short table to the user:
Since v1.6.1 (7 commits):
feat (1): feat: add weekViewGranularity prop (#113)
fix (3): fix: ..., fix: ..., fix: ...
perf (1): perf: ...
chore(2): chore: ..., chore: ...
Suggested bump: minor → v1.7.0Ask: "Bump to v1.7.0 (minor), or different?". Wait for approval. If the user picks a different level, use their choice — don't argue.
Edge cases to call out up front (don't fix silently):
feat: that looks trivial or a fix: that looks like a breaking change: flag it; the user decides.Match the existing format in CHANGELOG.md exactly — the repo has a consistent style and downstream tooling/readers expect it.
#### [vX.Y.Z](https://github.com/kcsujeet/ilamy-calendar/compare/vPREV...vX.Y.Z)
> DD Month YYYY
##### Features
- feat: <rewritten, user-facing description> ([`#N`](https://github.com/kcsujeet/ilamy-calendar/pull/N)) — Thanks [@handle](https://github.com/handle)!
##### Fixes
- fix: <rewritten, user-facing description> ([`#N`](https://github.com/kcsujeet/ilamy-calendar/pull/N))
##### Performance
- perf: <description>
##### Internal
- chore: <description>Sections, in this order, only if non-empty: Features, Fixes, Performance, Internal. Skip empty sections entirely — don't render an empty ##### Performance heading.
Section mapping:
feat: → Featuresfix: → Fixesperf: → Performancechore: / refactor: / docs: / test: / style: → Internal (but see "what to include" below)Date: today's date in UTC, formatted D Month YYYY (e.g., 19 April 2026). Use date -u "+%-d %B %Y" — no leading zero on the day.
Compare link: https://github.com/kcsujeet/ilamy-calendar/compare/vPREV...vX.Y.Z. Always include it, even if vPREV doesn't exist yet as a tag on GitHub — it'll render once pushed.
PR link format: ([#N](https://github.com/kcsujeet/ilamy-calendar/pull/N)) — backticks around #N, trailing space before the parenthesis group.
Issue-closing: if a PR body closes an issue, append — Closes [#M](https://github.com/kcsujeet/ilamy-calendar/issues/M).
Contributor attribution: for each PR, run gh pr view <N> --json author,number. If the author login is not kcsujeet, append — Thanks [@<handle>](https://github.com/<handle>)!. Don't thank the repo owner.
Attribute taken-over PRs to whoever opened the original. Some contributor PRs are closed unmerged and re-done as a maintainer PR — same diagnosis, different implementation. The merged PR's author is then kcsujeet, so the author check above finds nobody to thank and the person who did the work silently loses the credit. Sweep for this every release:
# closed-but-never-merged PRs from contributors, since the last release
gh pr list --state closed --limit 150 --json number,title,author,mergedAt,closedAt \
-q '.[] | select(.mergedAt == null) | select(.author.login != "kcsujeet")
| select(.closedAt > "<last-release-date>")
| "#\(.number) @\(.author.login) \(.closedAt[0:10]) \(.title)"'For each hit, ask whether something in this release replaced it — usually obvious from the title, and the superseding PR's body often says so outright (#253 states "credit for the diagnosis belongs to @mattanderson-io"). If so, thank the original author on the bullet for the merged PR. A closed PR that was not replaced gets no credit; nothing of theirs shipped.
Do not thank issue reporters. Credit is for authoring a PR, including one that was taken over. Reporting a bug, however well diagnosed, is not the same thing, and the changelog's Closes #N link already records who filed it.
Bullet wording: rewrite commit messages into user-facing prose. "feat: add prop X" → "feat: add X prop — lets consumers do Y". Read the PR/commit body for the why. Avoid internal jargon the user-facing audience won't parse. When the original commit message is already good, lifting it directly is fine.
feat, fix, perf — these affect consumers.Insert the new entry at the top of CHANGELOG.md (after the ### Changelog preamble, before the previous release). Show the user the full draft entry (not a diff — a diff of a prepend is noisy). Ask: "Changelog looks right? Any wording changes?". Wait for approval. Iterate until they're happy.
Only now run bun run ci (root). It runs, in order, check (Biome lint + format) → build → type-check → test. Monorepo wrinkle: root bun run build builds every workspace, including the @ilamy/demo and @ilamy/website apps, so this gate is slow and can fail on an app/website build issue that has nothing to do with the published package. If it fails, stop and surface the failure — do not bump the version or commit anything. The user fixes it (or, if it's an unrelated app-build failure, decides how to proceed — don't make that call yourself), then re-runs the skill (Step 1 will re-check state).
In this order:
packages/calendar/package.json to set "version": "X.Y.Z" (the published package — not the root). Don't use npm version — its default behavior creates its own commit and tag with a message you don't control, and the recent revert chaos suggests you want full control over the commit.CHANGELOG.md (already drafted in Step 3).docs/logs/YYYY-MM-DD.md (today, per the project's mandatory dev-log rule) with a one-line summary: "[release]: Cut vX.Y.Z — <short summary of what's in it>".git add -A:git add packages/calendar/package.json CHANGELOG.md docs/logs/<today>.mdX.Y.Z (matching the project's existing release-commit style — see commits 1.6.0, 1.6.1, 1.7.0 in git log). No conventional prefix, no body, no co-author trailer (project CLAUDE.md forbids AI co-author trailers).git tag vX.Y.Z. Lightweight tag, no -a -m — matches existing tag style in this repo unless git tag -n <last-tag> shows otherwise, in which case match that.Show the user git log -1 --stat and git tag --points-at HEAD and ask: "Ready to push main and tag vX.Y.Z to origin?". Wait for approval.
On explicit approval:
git push origin main
git push origin vX.Y.ZTwo separate pushes. If either fails (e.g., non-fast-forward on main because someone pushed while you were drafting), stop immediately — do not use --force. Tell the user and let them resolve.
Turn the pushed tag into a published release page on GitHub, marked as latest. This is public-facing, so follow the project's workflow rule: draft the body, get explicit approval, then post.
CHANGELOG.md, starting after the #### [vX.Y.Z](...) heading (GitHub's title row already renders the version + compare link) and ending before the next #### [v heading (or EOF). Keep the > DD Month YYYY date line and the ##### Features / ##### Fixes / etc. sections verbatim./tmp/release-notes-vX.Y.Z.md. Don't inline the body as a CLI arg — shell quoting mangles backticks and newlines. A file is lossless..agents/rules/workflow.md): never post public-facing content without explicit approval, even if the user has broadly opted-in to this skill.gh release create vX.Y.Z \
--repo kcsujeet/ilamy-calendar \
--title "vX.Y.Z" \
--notes-file /tmp/release-notes-vX.Y.Z.md \
--latest \
--verify-tag--latest pins this release as the one GitHub's UI/npm badges/readme install snippets point at. Pass it explicitly — don't rely on gh's auto-latest heuristic, because backport releases (e.g., a 1.5.3 after 1.6.0 exists) would otherwise lose the flag silently.--verify-tag fails loudly if the tag didn't make it to the remote. Better than creating a release pointing at nothing.--draft. The user already approved the body in step 3; publishing a draft just means they have to click "Publish" again.gh's output so the user can open it.Only one manual step is left before the issue follow-ups:
Released vX.Y.Z. Remaining (manual):
bun run release
(from the repo root — builds @ilamy/calendar then publishes it; needs an
interactive npm login, which is why this skill stops here)
Once published, say "published" (or similar) and I'll update/deploy the
docs site and notify the issues this release closes.bun run release (= build:lib then publish:lib) builds only @ilamy/calendar (bundling the private internal packages) and runs bun publish from packages/calendar — it honors publishConfig.access: public and the prepack/postpack scripts (which inject sideEffects: false and strip devDependencies). Tip: suggest bun run release:dry first to preview the tarball without uploading.
Do not offer to run bun run release yourself — it requires credentials you don't have. Pause here. Do not comment "Shipped in" / "Fixed in vX.Y.Z" on any issue (Step 10) until the publish has landed — saying so before the package is on npm would be a lie to the reporter.
Confirm the publish on the registry itself, not only on the user's word or npm's confirmation email. The email can arrive before the registry and its CDN catch up, and a plain npm view can serve a stale copy: during v3.1.0 it reported 3.0.1 as latest for a while after the email. Query the registry with a cache-buster and allow a delay before concluding anything:
curl -s -H 'Cache-Control: no-cache' "https://registry.npmjs.org/@ilamy%2Fcalendar?t=$(date +%s)" \
| python3 -c "import json,sys;d=json.load(sys.stdin);print(d['dist-tags']['latest'], d['time'].get('X.Y.Z'))"If the version is missing, say so plainly as "not on the registry yet", re-check after a minute or two, and only then ask the user for the publish output. (The website deploy in Step 9 may run once the release is tagged, but is normally done right after the publish too.)
The docs site and live demo (apps/website) live in this repo but ship separately from the npm package — a release isn't really done until the website reflects it. Most releases need only docs changes; some also touch the demo / playground.
Cross-reference the changelog you wrote in Step 3:
feat: / public-API or prop changes → update the matching page under apps/website/src/content/docs/** (a new prop → its row in components/calendar.mdx; a new plugin → a new plugins/<name>.mdx page plus a sidebar entry in apps/website/astro.config.mjs).apps/demo) and/or the shared playground (packages/playground) so the live demo exercises it.fix:-only release with no public-surface change → docs usually need no edits. Either skip the deploy, or redeploy anyway to pick up unrelated doc fixes already on main. Say which you're doing.Write any doc/demo changes the same way as the rest of the codebase: verify every API claim against source (don't trust memory — past doc passes shipped fabricated members), and validate with the website build (bun run --filter '@ilamy/website' build). These are ordinary repo changes — branch + PR per the workflow rule, or commit per the user's call. They are not part of the release commit/tag from Step 5.
The site goes to Cloudflare Pages and is not auto-deployed on push. From the repo root:
bun run deploy:websiteThat's build:lib (so docs build against the just-released @ilamy/calendar dist) then the website's own deploy (astro build && wrangler pages deploy dist --project-name=calendar-ilamy-dev --branch=main). It needs CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID in the environment (Pages-scoped secrets; the repo is public, so never commit, echo, or paste them). If they aren't set in your environment, hand the deploy command to the user — same as the npm publish. Deploying is an outward-facing publish, so get explicit approval before running it (per .agents/rules/workflow.md) and confirm the live site afterward.
Triggered when the user confirms the publish succeeded (phrases like "published", "it's on npm", "done", "pushed to npm"). Comment on every issue that this release closes and close any still open — in a single approval gate, not per-issue.
Collect issue numbers from two sources and deduplicate:
Closes [#N](…/issues/N) patterns. This is the canonical list.<prev-tag>..<new-tag> — git log <prev>..<new> --pretty=format:"%B" then grep for (Closes|Fixes|Resolves|closes|fixes|resolves) #\d+ in commit messages and in each referenced PR's body (gh pr view <N> --json body). Catches issues closed via a PR description that didn't make it verbatim into the changelog bullet.For each number, check state with gh issue view <N> --json state,title,number:
CLOSED (auto-closed when the PR merged): comment only, don't re-close.OPEN (PR reference didn't auto-link, or the fix landed via a commit not a PR): comment and close.Skip numbers that resolve to pull requests, not issues. gh issue view on a PR number errors loudly — catch that and drop it.
Keep it short and human. No marketing copy, no emoji, no changelog repetition — the reporter can click through to the release page for details.
The first word depends on what the issue asked for. Read it off the changelog bullet that closes the issue (you wrote it in Step 3): a bullet under Features gets "Shipped in", one under Fixes gets "Fixed in". Telling someone their feature request was "fixed" reads as if their idea were a bug.
Shipped in vX.Y.Z — https://github.com/kcsujeet/ilamy-calendar/releases/tag/vX.Y.Z
Thanks for trying ilamy calendar! Feel free to open more issues any time.Fixed in vX.Y.Z — https://github.com/kcsujeet/ilamy-calendar/releases/tag/vX.Y.Z
Thanks for trying ilamy calendar! Feel free to open more issues any time.The release URL must match the one gh release create printed in Step 7 — don't reconstruct it manually and risk a typo.
Present the full plan in one message (issues + bodies + actions) and ask once. Example:
Ready to post on these 2 issues:
#N "<feature request title>" (Features, currently CLOSED) — comment only
Shipped in vX.Y.Z — https://github.com/kcsujeet/ilamy-calendar/releases/tag/vX.Y.Z
#M "<bug report title>" (Fixes, currently OPEN) — comment + close
Fixed in vX.Y.Z — https://github.com/kcsujeet/ilamy-calendar/releases/tag/vX.Y.Z
Every body ends with:
Thanks for trying ilamy calendar! Feel free to open more issues any time.
Post?The project's workflow rule (.agents/rules/workflow.md) requires explicit approval before any public-facing post — one approval for the batch is fine since the user has seen every body and the full list.
For each issue, in sequence (small set, no benefit to parallel):
gh issue comment <N> --repo kcsujeet/ilamy-calendar --body "<template>"
# then, if the issue was OPEN:
gh issue close <N> --repo kcsujeet/ilamy-calendarIf gh issue close reports "already closed" (the auto-close landed between your state check and the close call), that's fine — keep going. If gh issue comment fails for a specific issue (e.g., the reporter deleted their account and the issue got locked), surface that one failure to the user and continue with the rest; don't abort the whole batch.
After the batch, report what landed:
Posted on #N, #M. Closed #M. All done.git tag vX.Y.Z fails): somebody already cut this version, or a previous attempt got halfway. Ask the user before using -f.packages/calendar/package.json version doesn't match latest tag: the canonical example is the recent 1.7.0 → reverted state. Flag it, ask what the true baseline is.gh pr view <N>, confirm the PR is merged (not closed). If it's closed without merging, don't credit it.bun run ci is slow (~60s+ for the full gate on this repo): run it in the background and keep drafting; don't block the user unnecessarily.© kcsujeet, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/release-new-version of kcsujeet/ilamy-calendar.
Open the folder on GitHubat commit d1ee535
Release New Version next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release New Version this skillkcsujeet/ilamy-calendar | 351 | — | ~5.8k | Automated safety check: Pass | MIT | |
| Release Roundethereumjs/ethereumjs-monorepo | 2.8k | — | ~2k | Automated safety check: Pass | None | |
| Releasehyhmrright/brooks-lint | 1.5k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Release WorkflowCaldis/react-zmage | 945 | — | ~3.6k | Automated safety check: Notes | MIT | |
| Create Release Checklistsoftware-mansion/smelter | 734 | — | ~1.9k | Automated safety check: Notes | Custom licence | |
| Release TS SDKaptos-labs/aptos-ts-sdk | 116 | — | ~864 | Automated safety check: Pass | Custom licence |
ethereumjs/ethereumjs-monorepo
Runs a coordinated EthereumJS npm release round in six human-gated phases — intent and readiness, CHANGELOG, version bump, publish (human executes), post-publish verification, and announcements.
hyhmrright/brooks-lint
Cut a brooks-lint release: set the version in package.json, propagate it across all four plugin manifests and every version-bearing text file (README badges, docs site metadata), write the CHANGELOG…
Caldis/react-zmage
A skill your agent uses when the user wants to ship a new version of react-zmage to npm.
software-mansion/smelter
Generate a GitHub release-checklist issue for a full (non-RC) release of the Smelter server and/or the TypeScript SDK.
aptos-labs/aptos-ts-sdk
A skill your agent uses when cutting a release of @aptos-labs/ts-sdk or @aptos-labs/confidential-asset.
senchabot-opensource/monorepo
A skill your agent uses when completing a new feature or making a user-facing change in the apps/extensions workspace to ensure no required files or configurations are forgotten.
kcsujeet/ilamy-calendar
Reviews code changes for reuse, composition, codebase consistency, and slop.
kcsujeet/ilamy-calendar
Systematically reduce the shipped bundle size of a JS/TS library without sacrificing code readability or breaking consumer APIs.
Categories
Cut a new release of @ilamy/calendar — analyze commits since the last tag, suggest a semver bump, draft a CHANGELOG entry in the project's existing style, run the CI gate, commit, tag, push to…. Release New Version is an agent skill from kcsujeet/ilamy-calendar. Cut a new release of @ilamy/calendar — analyze commits since the last tag, suggest a semver bump, draft a CHANGELOG entry in the project's existing style, run the CI gate, commit, tag, push to origin, and create the GitHub release page (marked as latest).
Release New Version fits situations like: the user says release a new version; bump the version; publish the next version; I just published X.
Run `npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a claude-code`. Or copy the skill folder (.agents/skills/release-new-version in kcsujeet/ilamy-calendar) into .claude/skills/release-new-version in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a codex`. Or copy the skill folder (.agents/skills/release-new-version in kcsujeet/ilamy-calendar) into .agents/skills/release-new-version in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kcsujeet/ilamy-calendar --skill release-new-version -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release-new-version, .gemini/skills/release-new-version, .github/skills/release-new-version and .opencode/skills/release-new-version in your project.
Going by SKILL.md and its folder, Release New Version needs the command-line tools its instructions call (git, bun, gh, npm, curl and python3) and credentials named CLOUDFLARE_API_TOKEN.
SKILL.md names 2 domains. In commands or code: github.com and registry.npmjs.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Release New Version is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.8k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release New Version: Release Round (ethereumjs/ethereumjs-monorepo, 2.8k stars), Release (hyhmrright/brooks-lint, 1.5k stars), Release Workflow (Caldis/react-zmage, 945 stars) and Create Release Checklist (software-mansion/smelter, 734 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kcsujeet (a GitHub user) maintains it in kcsujeet/ilamy-calendar, which has 351 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 9, 2026.
Source: kcsujeet/ilamy-calendar on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.