Kt Search Release
jillesvangurp/kt-search
A skill your agent uses when the user wants to cut, publish, tag, or create a GitHub release for kt-search, especially when the task includes version bumping, validating that commits are pushed…
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.
$ npx skills add tw93/Mole --skill release-flow -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tw93/Mole release-flow --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/tw93/Mole.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release-flow .claude/skills/release-flow && 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-flow" agent skill from https://github.com/tw93/Mole/tree/main/.claude/skills/release-flow into .claude/skills/release-flow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-flow", 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/tw93/Mole/tree/main/.claude/skills/release-flowType 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 tw93/Mole --skill release-flow -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tw93/Mole release-flow --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tw93/Mole.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release-flow .agents/skills/release-flow && 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-flow" agent skill from https://github.com/tw93/Mole/tree/main/.claude/skills/release-flow into .agents/skills/release-flow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-flow", 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 tw93/Mole --skill release-flow -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tw93/Mole release-flow --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tw93/Mole.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release-flow .cursor/skills/release-flow && 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-flow" agent skill from https://github.com/tw93/Mole/tree/main/.claude/skills/release-flow into .cursor/skills/release-flow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-flow", 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/tw93/Mole.git --path .claude/skills/release-flow--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 tw93/Mole --skill release-flow -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tw93/Mole release-flow --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tw93/Mole.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release-flow .gemini/skills/release-flow && 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-flow" agent skill from https://github.com/tw93/Mole/tree/main/.claude/skills/release-flow into .gemini/skills/release-flow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-flow", 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 tw93/Mole release-flowInstalls 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 tw93/Mole --skill release-flow -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tw93/Mole.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release-flow .github/skills/release-flow && 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-flow" agent skill from https://github.com/tw93/Mole/tree/main/.claude/skills/release-flow into .github/skills/release-flow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-flow", 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 tw93/Mole --skill release-flow -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tw93/Mole release-flow --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tw93/Mole.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release-flow .opencode/skills/release-flow && 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-flow" agent skill from https://github.com/tw93/Mole/tree/main/.claude/skills/release-flow into .opencode/skills/release-flow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-flow", 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-flowRunbook 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.
Releases are tag-driven. Pushing a tag that starts with a capital V triggers the `release.yml` workflow, which builds amd64 and arm64 macOS binaries, generates a checksum file, attaches build provenance, creates the GitHub Release without notes and opens a Homebrew core pull request. Three channels exist: a nightly channel installing from `main` with no tag involved, the GitHub stable release, and the Homebrew core version bump, whose merge timing belongs to upstream. At the start of any release task the agent restates which channels the run will touch and confirms them with the maintainer, because channel scope is never inferred.
A pre-flight checklist comes first. The agent resolves the latest published stable tag from GitHub, reconciles any handoff claims against the current branch, worktree and remote, and reviews all changes since that tag. It checks that the `VERSION` line in `mole` matches, that `SECURITY_AUDIT.md` shows the new version and date and matches the CI test matrix, that `git status` is clean and the unpushed commits are the intended ones, and that the format check, test script, `go test` and `make build` all pass. Curated release notes are a manual follow-up, and the skill is not for writing release-note copy alone or for ordinary code review.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a68741b. 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:
gitmakeghgobrewFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git 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.
Mole CLI Release Flow loads about 2.5k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 1,384 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 tw93/Mole at commit a68741b, republished under its GPL-3.0 licence (© tw93). 1,384 words, ~2,522 tokens.
.claude/skills/release-flow/SKILL.md (or your agent's skills folder).Tag-driven flow. The release.yml workflow watches 'V*' tag pushes (capital V), builds amd64 and arm64 binaries on macOS, generates SHA256SUMS, attaches build provenance, creates the GitHub Release without notes, then opens a Homebrew core PR.
| Channel | What ships | Trigger | Automation |
|---|---|---|---|
Nightly (mo update --nightly) | main HEAD via install.sh | Any commit pushed to main | Automatic; no tag or release involved |
| GitHub stable release | amd64/arm64 binaries + SHA256SUMS | Push a capital-V tag | release.yml builds and creates the release; curated notes are a manual follow-up |
| Homebrew core | Version-bump PR to Homebrew/homebrew-core | Same V* tag workflow | Automatic PR; merge timing is upstream's |
At the start of any release-flavored task, restate which channels this run will touch and which it will not, and confirm with the maintainer before acting. Channel scope is specified by the maintainer, never inferred.
Resolve the latest published stable tag from GitHub before choosing the version or review range. Reconcile handoff claims against the current branch, worktree, and remote SHA; an earlier report of uncommitted work may describe commits that have already landed. Review all changes since that stable tag, not just the final fix batch.
grep '^VERSION=' mole matches the new version.SECURITY_AUDIT.md opening line reflects the new version and date, and its CI coverage list matches the matrix in .github/workflows/test.yml.git status -s is empty or only contains intentionally staged release work.git log origin/main..HEAD --oneline shows only commits you intend to ship../scripts/check.sh --format and TERM=xterm-256color MOLE_TEST_NO_AUTH=1 MOLE_TEST_JOBS=2 BATS_FORMATTER=tap ./scripts/test.sh both exit 0.go test ./... and make build both pass.Use the Go version declared in go.mod for local release builds, matching actions/setup-go in CI, then run scripts/check_release_minos.sh on both architectures. A newer local Go can raise the minimum macOS version even with CGO_ENABLED=0; during V1.54.0 verification, Go 1.27 produced macOS 13 binaries while the declared Go 1.25 toolchain preserved macOS 12. Rebuild with the declared toolchain instead of relaxing the minimum-OS gate. Check the make release-amd64 release-arm64 outputs, not make build: the local build links status with cgo against the host SDK, so its status-go reports the host macOS as its minimum and says nothing about the release binaries.
Capture the test runner's exit status and structured summary, with skipped tests reported separately. After pushing the candidate commit, wait for its required Check, Validation, and CodeQL workflows to finish successfully before tagging that exact SHA. A cancelled run or a green check on another commit is not release evidence.
git push origin main
git tag V<version> # capital V; release workflow ignores lowercase v
git push origin V<version>Wait for the workflow to finish. The workflow creates the release with assets but generate_release_notes: false, so notes must be added in a follow-up step.
After the workflow finishes, verify the release assets before announcing anything: gh release view V<version> --json assets --jq '.assets[].name' must list all four analyze-/status-darwin-{amd64,arm64} binaries, both binaries-darwin-*.tar.gz Homebrew tarballs, AND SHA256SUMS. Install verification is fail-closed, so a release without a readable SHA256SUMS asset makes every install and mo update abort by design; a missing checksums file is a release blocker, not a cosmetic gap.
Download all seven assets. Verify the six payload checksums, attestations for all seven tied to the release tag, exact source commit, and .github/workflows/release.yml, and each archive's two expected binary members against the raw binary assets. Check Mach-O architecture and minimum macOS version on the downloaded binaries, then run the native architecture's Analyze and Status smoke probes. Successful local builds do not prove the public package contains those bytes.
Then run a script self-update smoke before publishing notes or announcing: install the previous stable release through the script channel, run mo update, and confirm mo --version prints the candidate version. Script-installed clients execute the new tag's install.sh, so this is the only gate that exercises their real upgrade path; the pre-flight suite cannot cover it before the release exists. Homebrew is a separate downstream gate: verify it only after the core formula has updated, and never treat a script-channel smoke as proof that Homebrew is ready. If the script smoke fails, pull the release (see the pulling-and-re-releasing pitfall) before anyone is told to update.
Use a fresh archive of the previous tag so ignored local bin/* builds cannot contaminate the old installation. Place the isolated prefix and config under a physical user-owned directory; /tmp or /var aliases and writable ancestors can correctly fail installer path checks. Isolate HOME, config/cache paths, and PATH, block host brew and sudo, and set MOLE_TEST_NO_AUTH=1. Verify config/install_channel retains CHANNEL=stable, config/bin/{analyze,status}-go match the verified release assets, changed installed shell sources match the tag, and a second update reports the current version. Keep the user's existing installation unchanged.
The curated-notes flow (bilingual format, gh release edit instead of create, thanks block, and the six-reaction set) is owned by .claude/skills/release-notes/SKILL.md. .agents/skills/release-notes is a symlink to that canonical directory for Codex discovery, and its Codex-only invocation policy lives in agents/openai.yaml; do not replace the symlink with a copied mirror. Follow that skill; do not duplicate its format details here. Version, codename, and emoji go only in the release title; the body h1 is just Mole.
After applying notes and the standard reactions through that skill, read back the published title, full body, and all six reactions. Report GitHub Stable and Homebrew availability separately; a successfully opened core PR still needs upstream tests and merge.
Format rules (impact ordering, command existence checks, icon semantics, no em dash, no inline PR refs) live in .claude/skills/release-notes/SKILL.md under "Format rules". Keep that skill as the single source of truth for notes formatting.
release.yml filters on 'V*'. A lowercase v1.38.0 tag will not trigger the workflow.install.sh from the release tag, not from main: a self-updating Mole downloads raw.githubusercontent.com/tw93/mole/V<tag>/install.sh, and tag content is immutable. An installer/updater bug therefore reaches existing stable users only through a new tag; fixing main changes Nightly but does not repair an already published stable updater.AGENTS.md (Release). The incident behind it: on 2026-09-17, four days after V1.54.0 shipped, a git filter-branch --msg-filter run stripped a Co-authored-by: Cursor trailer from a commit dated 2026-05-06 that had 956 descendants. --tag-name-filter cat carried the tags onto the rebuilt commits, the release commit was rebuilt, and brew upgrade mole has failed the source checksum for every Intel user since, because Homebrew dropped Intel bottles so they all build from source (#1591). The enumeration was run afterwards: 25 published tags were reachable from that rewrite, so 25 source-tarball checksums moved, not one. Only V1.54.0 broke anything, because homebrew-core pins the checksum of the formula's current version alone, and install.sh anchors on the release assets' SHA256SUMS rather than on the tag archive it downloads. Any external consumer pinning an older tag's tarball is outside what can be checked from here. Recovery on a live release is a one-line sha256 PR to Homebrew/homebrew-core with the current tarball's hash, and it takes two things that are easy to miss. The PR body must carry Homebrew's own template or a bot closes it within seconds as AI-written, editing it in reopens the same PR and opening a second one is explicitly refused. And a moved checksum is read as a possible supply-chain compromise, so a maintainer will hold the merge until the upstream author confirms in that thread that the change was benign; answer with the two commits' identical tree and the archive's pax header, which they can verify without trusting you, not with a promise. Check for an existing PR before opening one: the community usually files it first. Bottles are unaffected because BrewTestBot built them from the original download.gh release delete V<old> --cleanup-tag removes the release and remote tag. Delete the local tag, close the superseded Homebrew core PR with a one-line supersede comment before pushing the replacement tag (release.yml refuses to overwrite an existing mole-<version> fork branch and reuses, rather than recreates, an open PR for the same head), then bump VERSION and SECURITY_AUDIT.md, commit release: V<new>, tag, and run the normal publish flow. The Homebrew core PR regenerates on the new tag.When release work touches Shell code or tests, read .claude/skills/bugs/references/shell-and-test-pitfalls.md for Bash 3.2 arrays, heredoc input, mock bypasses, and CI-runner quirks.
© tw93, GPL-3.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 .claude/skills/release-flow of tw93/Mole.
Open the folder on GitHubat commit a68741b
Mole CLI Release Flow 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 |
|---|---|---|---|---|---|---|
| Mole CLI Release Flow this skilltw93/Mole | 69k | — | ~2.5k | Automated safety check: Pass | GPL-3.0 | |
| Kt Search Releasejillesvangurp/kt-search | 155 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Releaseeugene1g/agent-safehouse | 2.1k | — | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| Releasing Blancbnfy/blanc | 105 | — | ~2.9k | Automated safety check: Notes | MIT | |
| ClickUp CLI Release Processkrodak/clickup-cli | 120 | — | ~906 | Automated safety check: Warn | MIT | |
| Mac App Releasesteipete/agent-scripts | 7.3k | — | ~2.3k | Automated safety check: Pass | MIT |
jillesvangurp/kt-search
A skill your agent uses when the user wants to cut, publish, tag, or create a GitHub release for kt-search, especially when the task includes version bumping, validating that commits are pushed…
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…
bnfy/blanc
Full runbook for cutting a Blanc desktop release — scripts/release.sh mechanics and its required BLANCRELEASE env vars, macOS notarization via 1Password, the Touch ID provisioning profile and…
krodak/clickup-cli
Walks through releasing a new version of clickup-cli: pre-release checks, version bump, tagging, CI watch, release notes and the Homebrew update.
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.
vaayne/mori
Release workflow for Mori macOS workspace terminal and MoriRemote iOS app.
tw93/Mole
A catalog of recurring bug shapes in the Mole Mac cleaner, used to review safety-sensitive diffs for deletion safety, unbounded commands, shell traps and weak tests.
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.
tw93/Mole
Teaches an agent to drive the Mole (mo) Mac cleaning CLI safely: preview first, use JSON output, and leave destructive runs to the user.
Categories
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. Releases are tag-driven.yml` workflow, which builds amd64 and arm64 macOS binaries, generates a checksum file, attaches build provenance, creates the GitHub Release without notes and opens a Homebrew core pull request.
Mole CLI Release Flow fits situations like: preparing a new Mole release; checking release readiness before pushing a tag; working out which distribution channels a release will touch.
Run `npx skills add tw93/Mole --skill release-flow -a claude-code`. Or copy the skill folder (.claude/skills/release-flow in tw93/Mole) into .claude/skills/release-flow in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tw93/Mole --skill release-flow -a codex`. Or copy the skill folder (.claude/skills/release-flow in tw93/Mole) into .agents/skills/release-flow 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 tw93/Mole --skill release-flow -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-flow, .gemini/skills/release-flow, .github/skills/release-flow and .opencode/skills/release-flow in your project.
Going by SKILL.md and its folder, Mole CLI Release Flow needs the command-line tools its instructions call (git, make, gh, go and brew). Our summary lists: The Mole repository with its `release.yml` workflow; Access to GitHub, to look up the latest stable tag.
SKILL.md contains no URLs. Its commands use git 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.
Mole CLI Release Flow is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.5k tokens (SKILL.md is roughly 10k 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 Mole CLI Release Flow: Kt Search Release (jillesvangurp/kt-search, 155 stars), Release (eugene1g/agent-safehouse, 2.1k stars), Releasing Blanc (bnfy/blanc, 105 stars) and ClickUp CLI Release Process (krodak/clickup-cli, 120 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tw93 (a GitHub user) maintains it in tw93/Mole, which has 69,469 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 7, 2026.
Source: tw93/Mole on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.