Simple English
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
Cut a new release of the habit-hooks packages. An agent skill from habit-hooks/habit-hooks.
$ npx skills add habit-hooks/habit-hooks --skill release-habit-hooks -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install habit-hooks/habit-hooks release-habit-hooks --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/habit-hooks/habit-hooks.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/release-habit-hooks .claude/skills/release-habit-hooks && 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-habit-hooks" agent skill from https://github.com/habit-hooks/habit-hooks/tree/main/skills/release-habit-hooks into .claude/skills/release-habit-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-habit-hooks", 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/habit-hooks/habit-hooks/tree/main/skills/release-habit-hooksType 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 habit-hooks/habit-hooks --skill release-habit-hooks -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install habit-hooks/habit-hooks release-habit-hooks --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/habit-hooks/habit-hooks.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/release-habit-hooks .agents/skills/release-habit-hooks && 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-habit-hooks" agent skill from https://github.com/habit-hooks/habit-hooks/tree/main/skills/release-habit-hooks into .agents/skills/release-habit-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-habit-hooks", 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 habit-hooks/habit-hooks --skill release-habit-hooks -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install habit-hooks/habit-hooks release-habit-hooks --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/habit-hooks/habit-hooks.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/release-habit-hooks .cursor/skills/release-habit-hooks && 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-habit-hooks" agent skill from https://github.com/habit-hooks/habit-hooks/tree/main/skills/release-habit-hooks into .cursor/skills/release-habit-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-habit-hooks", 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/habit-hooks/habit-hooks.git --path skills/release-habit-hooks--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 habit-hooks/habit-hooks --skill release-habit-hooks -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install habit-hooks/habit-hooks release-habit-hooks --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/habit-hooks/habit-hooks.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/release-habit-hooks .gemini/skills/release-habit-hooks && 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-habit-hooks" agent skill from https://github.com/habit-hooks/habit-hooks/tree/main/skills/release-habit-hooks into .gemini/skills/release-habit-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-habit-hooks", 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 habit-hooks/habit-hooks release-habit-hooksInstalls 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 habit-hooks/habit-hooks --skill release-habit-hooks -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/habit-hooks/habit-hooks.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/release-habit-hooks .github/skills/release-habit-hooks && 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-habit-hooks" agent skill from https://github.com/habit-hooks/habit-hooks/tree/main/skills/release-habit-hooks into .github/skills/release-habit-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-habit-hooks", 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 habit-hooks/habit-hooks --skill release-habit-hooks -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install habit-hooks/habit-hooks release-habit-hooks --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/habit-hooks/habit-hooks.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/release-habit-hooks .opencode/skills/release-habit-hooks && 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-habit-hooks" agent skill from https://github.com/habit-hooks/habit-hooks/tree/main/skills/release-habit-hooks into .opencode/skills/release-habit-hooks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release-habit-hooks", 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-habit-hooksCut a new release of the habit-hooks packages. An agent skill from habit-hooks/habit-hooks.
Release Habit Hooks is an agent skill from habit-hooks/habit-hooks. Cut a new release of the habit-hooks packages. Use when asked to release, publish, or bump the version. Reviews what lands, enforces the in-sync versioning rule, validates the changelog, and drives the tag-triggered PyPI publish.
Its SKILL.md is about 1.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. The repository describes itself as: Automated quality checks that nudge AI coding agents toward better habits. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5603331. 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:
uvgitbrewFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv and git, 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 Habit Hooks loads about 1.8k tokens when it runs. Until then it costs about 62 tokens; SKILL.md has 927 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 habit-hooks/habit-hooks at commit 5603331, republished under its MIT licence (© habit-hooks). 927 words, ~1,814 tokens.
.claude/skills/release-habit-hooks/SKILL.md (or your agent's skills folder).Seven packages ship from this repo: habit-hooks (core), habit-hooks-generic,
habit-hooks-python, habit-hooks-typescript, habit-hooks-php,
habit-hooks-java, habit-hooks-ruby. A v* tag
triggers .github/workflows/release.yml, which builds all seven and publishes
each with skip-existing: true — so an unchanged package at an already-published
version is simply skipped. Publishing is irreversible: never tag or push
without Ivett's explicit go-ahead.
git describe --tags --abbrev=0 # last release tag
git log <lastTag>..HEAD --onelineFor each package, diff since the tag matching its current version and decide if it changed:
git diff --stat <lastTag>..HEAD -- src/ # core
git diff --stat <tagForItsVersion>..HEAD -- plugins/<name>/A plugin's shipped package data (eslint.config.mjs, knip.json, .jscpd.json,
ruff.toml, sensors/guides) is consumer-facing — a change there means that
plugin changed. Read every diff; classify each as consumer-facing vs internal.
max(all current package versions) plus the appropriate
semver bump. Decide the bump from what actually landed: patch for
fixes/internal, minor only for genuinely new backward-compatible features.pip install -U habit-hooks upgrades a plugin only when the new core stops being satisfied by
the installed one, so a plugin left behind hands someone the new core with last
release's plugins. tests/test_the_plugin_floor_tracks_the_release.py gates it.version in the core's pyproject.toml and in every
plugins/*/pyproject.toml, and raise each habit-hooks-<name> floor in the
core's dependencies and optional-dependencies to the new minor. Then
uv lock and confirm the lock shows the new versions. The same test gates both
halves, so a forgotten floor fails the suite rather than shipping quietly.>=X.Y.dev0,<2, never ~=X.Y. By PEP 440 ordering
X.Y.0rc1 sorts below X.Y, so ~=X.Y makes a release candidate declare
floors its own plugins cannot satisfy — and no --pre flag lifts it, because
it is the specifier excluding the version, not a policy about candidates. The
same spelling serves every rc and the final release, so nothing is rewritten
at the tag.X.Y.0rc1, rc2, rc3 are
all pre-releases of the same X.Y.0; only the version lines move between
them. Iterate as far as the reporters need.CHANGELOG.md must have a heading for every released version — no lingering
## Unreleased content that has actually shipped (this has bitten us: 1.0.0–1.0.2
all sat under a stale "Unreleased"). Before releasing:
## X.Y.Z section.uv run pytest -q
uv build --all-packages --out-dir dist/_relcheck # mirrors release.yml; check artifact versionsAll green. Then present the tag command as a ⚠️ checkpoint for Ivett to run — do not tag or push yourself:
git tag vX.Y.Z && git push origin main --tagsAnyone handed an install command already has habit-hooks — that is why they are reading it. So test the command from their state, not from an empty machine.
Half of this belongs before the tag, and half cannot. The upgrade mechanics
need only the wheels, which uv build has already produced in step 4 — so run
them from dist/_relcheck while the tag can still be moved. Only the cache
behaviour below needs a live PyPI, because the stale cache does not exist until
the version does.
Before the tag, against the built wheels:
export UV_TOOL_DIR=$(mktemp -d) UV_TOOL_BIN_DIR=$(mktemp -d)
uv tool install 'habit-hooks[typescript]==<the version they are on now>'
uv tool install --force --find-links dist/_relcheck 'habit-hooks[typescript]==X.Y.Z'
"$UV_TOOL_BIN_DIR/habit-hooks" --version # did it actually move?Every package must move together in that output — a core that upgrades while a plugin stays behind is the failure the in-sync rule exists to stop, and it is visible here and nowhere else. Then run the installed binary against a throwaway project and read a real finding out of it, so the answer covers the plugins the core just pulled in, not only its own version string.
After the publish, against PyPI:
uv tool install <the exact command about to be published>
"$UV_TOOL_BIN_DIR/habit-hooks" --versionuv tool install does not upgrade an already-installed tool. It prints
"already installed" and exits 0. It needs --force. 1.4.0rc1 was announced on
#133 and #134 without it; both reporters retested 1.3.1, and one reported a
1.3.1 bug back as an rc failure.
--force is not enough either: it resolves from uv's cached index. Anyone
who installed the previous version minutes ago has a cache that predates the
one just published, and uv answers No solution found … there is no version of habit-hooks[typescript]==X.Y.Z for a version sitting on PyPI. So the published
command is
uv tool install --force --refresh 'habit-hooks[<extras>]==X.Y.Z'and all three parts earn their place: the pin, because uv will not upgrade to a
pre-release without one; --force, because it skips a tool already installed;
--refresh, because its index cache does not know the release exists. rc3 was
caught by this step, with the packages already live on PyPI.
A fresh venv proves the package builds. It says nothing about the upgrade path, and the upgrade path is the only one a reader takes.
Only after the PyPI publish — the formula pins each artifact's URL and
sha256 from PyPI, so the values don't exist until the release is live.
The habit-hooks/homebrew-tap repo's Formula/habit-hooks.rb carries the core's sdist URL +
sha256, one resource block per plugin with its own URL + sha256, and a
test do block asserting the exact list of plugin entry points.
brew install without that
plugin.test do block's asserted entry-point list.main.
brew test-bot builds bottles either way, but publish.yml (brew pr-pull) attaches them from a PR number; pushed straight to main, 1.2.1
shipped with no bottles.© habit-hooks, 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 skills/release-habit-hooks of habit-hooks/habit-hooks.
Open the folder on GitHubat commit 5603331
Release Habit Hooks 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 Habit Hooks this skillhabit-hooks/habit-hooks | 222 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Simple Englishmoeru-ai/airi | 50k | 2 repos | ~4.6k | Automated safety check: Pass | MIT | |
| StarRocks Release NotesStarRocks/starrocks | 12k | — | ~1.9k | Automated safety check: Notes | Apache-2.0 | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| Mole CLI Release Flowtw93/Mole | 70k | — | ~2.6k | Automated safety check: Pass | GPL-3.0 | |
| React Router Release Notes Prepremix-run/react-router | 57k | — | ~1.1k | Automated safety check: Pass | MIT |
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
StarRocks/starrocks
Drafts English release notes for a StarRocks patch release from the PRs merged into its release branch, then opens a documentation PR and hands translation to /translate.
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
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.
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.
PrefectHQ/fastmcp
Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp.
habit-hooks/habit-hooks
Write or revise a habit-hooks coaching prompt. An agent skill from habit-hooks/habit-hooks.
habit-hooks/habit-hooks
Spawn a reviewer sub-agent to assess a change set against habit-hooks's coding principles.
habit-hooks/habit-hooks
Write or trim habit-hooks documentation under docs/. An agent skill from habit-hooks/habit-hooks.
Categories
Cut a new release of the habit-hooks packages. An agent skill from habit-hooks/habit-hooks. Release Habit Hooks is an agent skill from habit-hooks/habit-hooks. Cut a new release of the habit-hooks packages.
Release Habit Hooks fits situations like: asked to release; bump the version.
Run `npx skills add habit-hooks/habit-hooks --skill release-habit-hooks -a claude-code`. Or copy the skill folder (skills/release-habit-hooks in habit-hooks/habit-hooks) into .claude/skills/release-habit-hooks in your project. Claude Code loads it when a task matches its description.
Run `npx skills add habit-hooks/habit-hooks --skill release-habit-hooks -a codex`. Or copy the skill folder (skills/release-habit-hooks in habit-hooks/habit-hooks) into .agents/skills/release-habit-hooks 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 habit-hooks/habit-hooks --skill release-habit-hooks -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-habit-hooks, .gemini/skills/release-habit-hooks, .github/skills/release-habit-hooks and .opencode/skills/release-habit-hooks in your project.
Going by SKILL.md and its folder, Release Habit Hooks needs the command-line tools its instructions call (uv, git and brew). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use uv and git, 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 Habit Hooks 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.8k tokens (SKILL.md is roughly 7.3k 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 Habit Hooks: Simple English (moeru-ai/airi, 50k stars), StarRocks Release Notes (StarRocks/starrocks, 12k stars), Cutting A Release (TriliumNext/Trilium, 38k stars) and Mole CLI Release Flow (tw93/Mole, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
habit-hooks (a GitHub organization) maintains it in habit-hooks/habit-hooks, which has 222 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 2, 2026.
Source: habit-hooks/habit-hooks on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.