React Router Release Notes Prep
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
Release one or more ExtraSuite packages to PyPI. An agent skill from think41/extrasuite.
$ npx skills add think41/extrasuite --skill release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install think41/extrasuite release --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/think41/extrasuite.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release .claude/skills/release && 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" agent skill from https://github.com/think41/extrasuite/tree/main/.claude/skills/release into .claude/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", 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/think41/extrasuite/tree/main/.claude/skills/releaseType 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 think41/extrasuite --skill release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install think41/extrasuite release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/think41/extrasuite.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release .agents/skills/release && 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" agent skill from https://github.com/think41/extrasuite/tree/main/.claude/skills/release into .agents/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", 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 think41/extrasuite --skill release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install think41/extrasuite release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/think41/extrasuite.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release .cursor/skills/release && 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" agent skill from https://github.com/think41/extrasuite/tree/main/.claude/skills/release into .cursor/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", 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/think41/extrasuite.git --path .claude/skills/release--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 think41/extrasuite --skill release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install think41/extrasuite release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/think41/extrasuite.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release .gemini/skills/release && 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" agent skill from https://github.com/think41/extrasuite/tree/main/.claude/skills/release into .gemini/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", 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 think41/extrasuite releaseInstalls 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 think41/extrasuite --skill release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/think41/extrasuite.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release .github/skills/release && 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" agent skill from https://github.com/think41/extrasuite/tree/main/.claude/skills/release into .github/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", 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 think41/extrasuite --skill release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install think41/extrasuite release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/think41/extrasuite.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release .opencode/skills/release && 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" agent skill from https://github.com/think41/extrasuite/tree/main/.claude/skills/release into .opencode/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", 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.
releaseRelease one or more ExtraSuite packages to PyPI. An agent skill from think41/extrasuite.
Release is an agent skill from think41/extrasuite. Release one or more ExtraSuite packages to PyPI. Use when the user asks to release, publish, or cut a new version of any package. Handles version bumps, changelogs, git tags, PyPI publishing, and dependency propagation in the correct order.
Its SKILL.md is about 1.4k 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. It works with Git. The repository describes itself as: Token-efficient pull/edit/push workflow for AI agents editing Google Workspace files (Sheets, Docs, Slides, Forms). The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit ded6772. 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:
gituvghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, uv and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release loads about 1.4k tokens when it runs. Until then it costs about 62 tokens; SKILL.md has 556 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 think41/extrasuite at commit ded6772, republished under its MIT licence (© think41). 556 words, ~1,415 tokens.
.claude/skills/release/SKILL.md (or your agent's skills folder).Release ExtraSuite packages to PyPI following the correct dependency order.
Usage:
/release extradoc — release one package/release extradoc extrasuite — release multiple in correct order/release all — release everything that has unreleased changesAlways release in this order — extrasuite (client) depends on all others:
1. extrasheet (standalone)
2. extraslide (standalone)
3. extraform (standalone)
4. extrascript (standalone)
5. extradoc (standalone)
6. extrasuite (client — depends on all above)When releasing multiple packages, sort by the order above regardless of what the user specified. Never release extrasuite before its dependencies.
For each package to release, run:
# Find last tag for this package
git tag --sort=-version:refname | grep "^<package>-v" | head -1
# What changed since that tag
git log --oneline <package>-vX.Y.Z..HEAD -- <package>/If there are no commits since the last tag, skip this package — there's nothing to release.
Read <package>/pyproject.toml for the current version, then apply semver:
| Change type | Bump | Example |
|---|---|---|
| Breaking changes, removed APIs | major | 1.2.3 → 2.0.0 |
| New features, new commands, new dependencies | minor | 1.2.3 → 1.3.0 |
| Bug fixes, docs, internal refactors | patch | 1.2.3 → 1.2.4 |
If the user specified a bump level (major/minor/patch), use that. Otherwise infer from the commits.
Special case: While any package is pre-1.0, treat minor bumps as patch and new features as minor (no major bumps until 1.0).
Each package has <package>/CHANGELOG.md. Prepend a new section above the previous latest entry:
## [X.Y.Z] - YYYY-MM-DD
### Added
- ...
### Changed
- ...
### Fixed
- ...
### Breaking Changes ← only if applicable
- ...Rules:
### Fixed etc.)Edit <package>/pyproject.toml:
version = "X.Y.Z"If releasing extrasuite after a dependency was also bumped in this session, also update the dependency constraint:
"extradoc>=0.3.0", # ← bump lower bound to new versionFor extrasuite (client) only, after updating pyproject.toml:
cd client && uv syncThis updates client/uv.lock. Commit the lock file alongside the version bump.
git add <package>/pyproject.toml <package>/CHANGELOG.md [<package>/uv.lock]
git commit -m "Release <package> vX.Y.Z"
git tag <package>-vX.Y.Z
git push && git push origin <package>-vX.Y.ZTag format: <package>-vX.Y.Z (e.g. extradoc-v0.3.0, extrasuite-v0.6.0).
The GitHub Actions workflow validates that the tag version matches pyproject.toml — if they don't match, the publish will fail. Double-check before pushing the tag.
After pushing the tag, monitor the GitHub Actions run:
gh run watch $(gh run list --repo think41/extrasuite --limit 1 --json databaseId -q '.[0].databaseId') --repo think41/extrasuiteDo not proceed to the next package until this completes successfully.
Once the run shows ✓, verify the package is resolvable:
uv pip install <package>==X.Y.Z --dry-run --systemOnly move on when this succeeds.
If you bumped any dependency package in this release session, update the lower-bound constraint in client/pyproject.toml before releasing extrasuite:
"extradoc>=0.3.0", # was >=0.2.2Then run uv sync in client/ to update the lock file, and include uv.lock in the release commit.
Before cutting any release, verify:
main branch (not a feature branch)git status is clean — no uncommitted changescd <package> && uv run pytest tests/ -vuv run ruff check .pyproject.toml matches the intended tagWrong order — releasing extrasuite before extradoc means users get the old extradoc. Always check the dependency graph.
Skipping the PyPI wait — the next package's uv sync will fail to resolve the new version if PyPI hasn't indexed it yet. Always wait for propagation.
Tag/version mismatch — if pyproject.toml says 0.3.0 but you tag extradoc-v0.3.1, the GitHub Actions workflow aborts. Make sure they match exactly before pushing the tag.
Forgetting uv.lock — when bumping extrasuite's dependencies, always run uv sync and commit the updated uv.lock. Otherwise users installing from source get stale lock resolution.
Empty changelog section — don't include ### Fixed or ### Changed sections with no content. Only include sections that have actual entries.
© think41, 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 .claude/skills/release of think41/extrasuite.
Open the folder on GitHubat commit ded6772
Release 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 this skillthink41/extrasuite | 166 | — | ~1.4k | Automated safety check: Pass | MIT | |
| React Router Release Notes Prepremix-run/react-router | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT | |
| Mole Release Notes Publishertw93/Mole | 69k | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Release Bumpjamiepine/voicebox | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Git Workflow and Versioningaddyosmani/agent-skills | 102k | 2 repos | ~3.5k | Automated safety check: Notes | MIT |
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
tw93/Mole
Publishes curated, bilingual release notes for an existing Mole version tag with gh release edit, including contributor thanks and reactions, after the release workflow finishes.
jamiepine/voicebox
Ends a release cycle by moving the Unreleased changelog notes under a dated version heading, bumping version files with bumpversion and tagging the commit.
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
verdaccio/verdaccio
Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.
think41/extrasuite
CRUD on google workspace files - Sheets, Slides, Docs, Forms.
Works with
Categories
Release one or more ExtraSuite packages to PyPI. An agent skill from think41/extrasuite. Release is an agent skill from think41/extrasuite. Release one or more ExtraSuite packages to PyPI.
Release fits situations like: the user asks to release; cut a new version of any package.
Run `npx skills add think41/extrasuite --skill release -a claude-code`. Or copy the skill folder (.claude/skills/release in think41/extrasuite) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add think41/extrasuite --skill release -a codex`. Or copy the skill folder (.claude/skills/release in think41/extrasuite) into .agents/skills/release 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 think41/extrasuite --skill release -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, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.
Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (git, uv and gh). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use git, uv and gh, which can reach the network depending on how they are called. 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 is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.4k tokens (SKILL.md is roughly 5.7k 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: React Router Release Notes Prep (remix-run/react-router, 57k stars), Draft Release Notes (jamiepine/voicebox, 57k stars), Mole Release Notes Publisher (tw93/Mole, 69k stars) and Release Bump (jamiepine/voicebox, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
think41 (a GitHub organization) maintains it in think41/extrasuite, which has 166 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on April 17, 2026.
Source: think41/extrasuite on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.