Mole CLI Release Flow
tw93/Mole
Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated release notes.
Run the local Agent Safehouse release flow: inspect commits since the last published release, propose the next SemVer version and changelog, present a dry-run for confirmation, then update…
$ npx skills add eugene1g/agent-safehouse --skill release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install eugene1g/agent-safehouse 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/eugene1g/agent-safehouse.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/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/eugene1g/agent-safehouse/tree/main/.agents/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/eugene1g/agent-safehouse/tree/main/.agents/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 eugene1g/agent-safehouse --skill release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install eugene1g/agent-safehouse release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/eugene1g/agent-safehouse.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/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/eugene1g/agent-safehouse/tree/main/.agents/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 eugene1g/agent-safehouse --skill release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install eugene1g/agent-safehouse release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/eugene1g/agent-safehouse.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/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/eugene1g/agent-safehouse/tree/main/.agents/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/eugene1g/agent-safehouse.git --path .agents/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 eugene1g/agent-safehouse --skill release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install eugene1g/agent-safehouse release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/eugene1g/agent-safehouse.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/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/eugene1g/agent-safehouse/tree/main/.agents/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 eugene1g/agent-safehouse 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 eugene1g/agent-safehouse --skill release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/eugene1g/agent-safehouse.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/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/eugene1g/agent-safehouse/tree/main/.agents/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 eugene1g/agent-safehouse --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 eugene1g/agent-safehouse release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/eugene1g/agent-safehouse.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/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/eugene1g/agent-safehouse/tree/main/.agents/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.
releaseRun the local Agent Safehouse release flow: inspect commits since the last published release, propose the next SemVer version and changelog, present a dry-run for confirmation, then update…
Release is an agent skill from eugene1g/agent-safehouse. Run the local Agent Safehouse release flow: inspect commits since the last published release, propose the next SemVer version and changelog, present a dry-run for confirmation, then update changelog, publish the GitHub release, and publish the stable Homebrew tap when confirmed.
Its SKILL.md is about 3.5k 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 GitHub, Homebrew and macOS. The repository describes itself as: Sandbox your local AI agents so they can read/write only what they need. The licence is Apache-2.0.
11 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 398d67f. 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:
ghgitbashFrom 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.comFrom 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 3.5k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 1,812 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 eugene1g/agent-safehouse at commit 398d67f, republished under its Apache-2.0 licence (© eugene1g). 1,812 words, ~3,507 tokens.
.claude/skills/release/SKILL.md (or your agent's skills folder).Use this skill when the user wants changelog text, release notes, or a CHANGELOG.md update for Agent Safehouse.
This skill is also the canonical local release workflow for Agent Safehouse.
Historical changelog sections are append-only by default. Do not rewrite, normalize, or reformat older release entries to match a newer structure unless the user explicitly asks for a changelog migration or cleanup pass.
This skill is responsible for proposing the next release version from the last published release.
The repo-root VERSION file is the canonical version source for Agent Safehouse.
Write the selected version into VERSION and into the new CHANGELOG.md heading unless the user explicitly gives a different target version.
Default to a stable release. Only choose a prerelease version such as -rc.N or -beta.N when the user explicitly asks for a prerelease.
If the user explicitly gives the target version, honor it even if the default SemVer analysis would have chosen a different bump. In that case, note briefly in the dry run that the version came from an explicit user override.
Resolve the baseline release. If the user gives a starting version, use it. Otherwise:
gh release list --exclude-drafts --exclude-pre-releases.-rc, -beta, and other hyphenated SemVer suffixes unless the user explicitly asks to prepare a prerelease.Decide the next SemVer version from the release range. Start from the resolved baseline release and choose:
major for breaking changes, incompatible CLI behavior, removed capabilities, changed defaults that are likely to break existing setups, or sandbox/policy tightening that requires user action to restore a previously supported workflow.minor for backward-compatible new features, new integrations, new profiles, new user-visible capabilities, or meaningful expansions of supported workflows.patch for bug fixes, non-breaking sandbox/profile corrections, docs, tests, internal cleanup, and other maintenance-only changes.minor.patch.major, explicitly state why in the drafted release notes.-rc.1 or -beta.1.1.4.0-rc.1 to 1.4.0-rc.2.Collect git context directly.
Default the target ref to HEAD unless the user specifies another tag or commit.
Treat dist/ as generated output, not release-note source of truth.
Do not load dist/ diffs or dist/ files into context while evaluating customer-visible changes, choosing the version bump, or drafting changelog bullets.
Evaluate the original source changes in the rest of the repo instead, especially bin/, bin/lib/, profiles/, scripts/, tests/, and docs.
Start with:
git log --reverse --no-merges <from-ref>..<to-ref> --format='%h %s'git log --reverse --merges <from-ref>..<to-ref> --format='%h %s'git diff --stat <from-ref>..<to-ref> -- . ':(exclude)dist/**'git diff --dirstat=files,0 <from-ref>..<to-ref> -- . ':(exclude)dist/**'git diff --name-only <from-ref>..<to-ref> -- 'profiles/**/*.sb' 'profiles/*.sb'git diff --name-only <from-ref>..<to-ref> -- . ':(exclude)dist/**'
Only look at dist/ after confirmation, during the regeneration and verification stage.Review anything ambiguous before writing notes.
Use git show --stat <sha> or git diff <from-ref>..<to-ref> -- <path> for commits that are not obvious from the subject line.
When a commit touches both source files and dist/, review only the source files and do not open the generated dist/ portion.
For any changed sandbox profile, inspect the actual diff before summarizing it.
Also collect contributor context for shipped work:
gh pr list --state merged ... when needed.gh pr view <num> --json number,title,author,url,closingIssuesReferences.gh issue view <num> --json number,title,author,url.Thanks unless the user explicitly asks.Thanks, include it even when it is still open or unmerged.Draft changelog bullets in this order:
### Upgrade Notes### Features### Bug Fixes### Chores### Misc### Thanks### Changed Sandboxing ProfilesKeep the changelog high signal.
Upgrade Notes only for changes that require user action, verification, migration, reinstall steps, or awareness of a compatibility/default change.Upgrade Notes.Breaking: when the change is intentionally incompatible.dist/-only changes and pure chore: regenerate dist artifacts commits from changelog analysis.dist/ diffs as independent features, fixes, chores, or reasons to bump the version.Chores only if they are worth calling out.Chores instead of burying it.Misc only for noteworthy items that do not fit Features, Bug Fixes, or Chores.Thanks for contributor shout-outs tied to shipped work. Format each bullet with the contributor's GitHub username as an @mention, not their full name.Thanks bullets with the word Thanks; the section heading already carries that meaning.Thanks bullet to the relevant merged PR or closed issue, and place that link at the end of the sentence after the blurb..sb files changed under profiles/, always include ### Changed Sandboxing Profiles.Dry run and confirmation gate. Before changing any files or publishing anything, prepare a release dry run for the user. The dry run must include:
CHANGELOG.mdVERSIONCHANGELOG.mddist/CHANGELOG.md, regenerate dist/, run the verification gate, create commits, create tags, push commits, push tags, create GitHub releases, edit GitHub releases, or publish the Homebrew tap until the user explicitly confirms.After confirmation, update VERSION and CHANGELOG.md.
Write the selected version string into the repo-root VERSION file with no extra prose.
For a tagged release, create or update a heading shaped like ## [1.2.3] - YYYY-MM-DD, using the version you selected in step 2, then move or rewrite the relevant unreleased bullets underneath it.
Treat ## [Unreleased] as the working buffer for the next release.
Move only the notes that are shipping in the release you are drafting.
Leave unrelated future work under ## [Unreleased].
Insert the new release section immediately below ## [Unreleased] so the newest release stays at the top of the file.
Do not add explanatory prose ahead of ## [Unreleased] or ahead of the latest release section.
If format notes are needed, keep them at the end of the file.
After moving shipped notes out of ## [Unreleased], keep that section sparse:
### Upgrade Notes with either real bullets or - No special notes.### Changed Sandboxing Profiles with either real bullets or - No profiles changed.### Features, ### Bug Fixes, ### Chores, ### Misc, and ### Thanks only when they contain actual unreleased notes.Features, Bug Fixes, Chores, Misc, and Thanks subsections instead of leaving placeholder text.
Apply the current structure only to the section you are drafting.
Leave older release sections in their existing format unless the user explicitly asks to revise historical entries.After confirmation, regenerate dist/ and run the verification gate.
Always regenerate dist/ before publishing:
./scripts/generate-dist.sh
Then run the verification gate from an unsandboxed macOS shell:./tests/run.shtest -x dist/safehouse.shbash -n dist/safehouse.sh./dist/safehouse.sh --explain --stdout >/dev/null
If the verification gate cannot run because the current shell is already sandboxed or the environment is otherwise unsuitable, stop before publishing and tell the user.After confirmation, publish the GitHub release locally with gh.
Derive the final tag as v<version> from the selected version written to VERSION.
Commit and push the release-ready state.
Create and push the tag.
Extract the new release notes from the new CHANGELOG.md section and validate that the extracted notes are not empty.
Attach only dist/safehouse.sh as the custom asset and use the drafted changelog text for the release body.
Use gh release create --verify-tag so publishing fails if the remote tag is missing.
If updating an existing draft release, publish it with gh release edit --draft=false.
If the selected version contains a SemVer prerelease suffix, publish it with gh release create --prerelease or gh release edit --prerelease so GitHub marks it as a prerelease.
After confirmation, publish the Homebrew tap for stable releases.
For every stable release, update the Homebrew tap repository at https://github.com/eugene1g/homebrew-safehouse.
Use ./scripts/publish-homebrew-tap.sh "v<version>" --push.
Skip this step for prereleases such as -rc.N and -beta.N.
When any sandbox profiles changed in the release range, add a separate section:
### Changed Sandboxing Profiles
- [`keychain.sb`](https://github.com/eugene1g/agent-safehouse/compare/<from-ref>...<to-ref>#diff-<sha256(path)>): Tightened keychain access so agents only get the lookups required for login flows.Rules:
.sb file under profiles/.https://github.com/eugene1g/agent-safehouse/compare/<from-ref>...<to-ref>#diff-<sha256(path)>.<sha256(path)> from the literal repo-relative file path, for example printf '%s' 'profiles/.../.sb' | shasum -a 256 | awk '{print $1}'.<from-ref> and the selected release tag as <to-ref>, for example v1.2.2...v1.2.3 or v1.2.3...v1.3.0-rc.1.<to-ref>.Use plain markdown bullets under these headings when they have content:
### Upgrade Notes
- ...
### Features
- ...
### Bug Fixes
- ...
### Chores
- ...
### Misc
- ...
### Thanks
- @username adding or surfacing shipped behavior in [#123](https://github.com/eugene1g/agent-safehouse/pull/123).
### Changed Sandboxing Profiles
- [`profile.sb`](https://github.com/eugene1g/agent-safehouse/compare/<from-ref>...<to-ref>#diff-<sha256(path)>): What changed and why.If a section has nothing worth shipping, omit filler bullets in the final release notes.
Inside ## [Unreleased], only use placeholder text for Upgrade Notes and Changed Sandboxing Profiles.
Do not retrofit old releases to add Upgrade Notes, Chores, or Changed Sandboxing Profiles just because the current release uses those headings.
© eugene1g, Apache-2.0. 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 of eugene1g/agent-safehouse.
Open the folder on GitHubat commit 398d67f
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 skilleugene1g/agent-safehouse | 2.1k | — | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| Mole CLI Release Flowtw93/Mole | 70k | — | ~2.5k | Automated safety check: Pass | GPL-3.0 | |
| Mac App Releasesteipete/agent-scripts | 7.3k | — | ~2.3k | Automated safety check: Pass | MIT | |
| Megaphone ReleaseKuberwastaken/megaphone | 169 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Release VersionGOODBOY008/r-shell | 151 | — | ~4k | Automated safety check: Pass | MIT | |
| Kanvibe Release Deployrookedsysc/kanvibe | 143 | — | ~12k | Automated safety check: Notes | AGPL-3.0 |
tw93/Mole
Runbook for assessing and executing a Mole CLI release: distribution channels, pre-flight checks, capital-V tags, build artifacts and the handoff to curated release notes.
steipete/agent-scripts
Release workflow for Sparkle-updated macOS apps, driven by a repo-owned manifest and a shared script covering appcast, signing, GitHub Release and Homebrew closeout.
Kuberwastaken/megaphone
Prepare, validate, publish, and verify Megaphone releases. An agent skill from Kuberwastaken/megaphone.
GOODBOY008/r-shell
Release a new r-shell version and create a published GitHub release with contributor credits.
rookedsysc/kanvibe
A skill your agent uses whenever releasing or deploying KanVibe desktop from a clean, up-to-date dev checkout: ask only for the target version and release-note approval, then let the AI update…
XueshiQiao/AnyDrag
Runs the full AnyDrag release process end to end, from cumulative bilingual release notes through version bumping to watching CI and the Homebrew cask update.
Categories
Run the local Agent Safehouse release flow: inspect commits since the last published release, propose the next SemVer version and changelog, present a dry-run for confirmation, then update…. Release is an agent skill from eugene1g/agent-safehouse. Run the local Agent Safehouse release flow: inspect commits since the last published release, propose the next SemVer version and changelog, present a dry-run for confirmation, then update changelog, publish the GitHub release, and publish the stable Homebrew tap when confirmed.
Release fits situations like: tasks that involve Changelog and release notes.
Run `npx skills add eugene1g/agent-safehouse --skill release -a claude-code`. Or copy the skill folder (.agents/skills/release in eugene1g/agent-safehouse) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add eugene1g/agent-safehouse --skill release -a codex`. Or copy the skill folder (.agents/skills/release in eugene1g/agent-safehouse) 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 eugene1g/agent-safehouse --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 (gh, git and bash).
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it 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 is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k 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: Mole CLI Release Flow (tw93/Mole, 70k stars), Mac App Release (steipete/agent-scripts, 7.3k stars), Megaphone Release (Kuberwastaken/megaphone, 169 stars) and Release Version (GOODBOY008/r-shell, 151 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
eugene1g (a GitHub user) maintains it in eugene1g/agent-safehouse, which has 2,093 GitHub stars. The repository was last updated on September 30, 2026.
Source: eugene1g/agent-safehouse on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.