Agent skill

Release Habit Hooks

by habit-hooks in habit-hooks/habit-hooks

Cut a new release of the habit-hooks packages. An agent skill from habit-hooks/habit-hooks.

MITAuto-check passedDevelopment

Install Release Habit Hooks

skills CLI
$ npx skills add habit-hooks/habit-hooks --skill release-habit-hooks -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install habit-hooks/habit-hooks release-habit-hooks --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
release-habit-hooks
GitHub stars
222
Token cost
~1.8k tokens
SKILL.md length
927 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

Cut a new release of the habit-hooks packages. An agent skill from habit-hooks/habit-hooks.

  • Works in 6 steps: Review what lands → Versioning — all released packages stay… → Validate the changelog → …
  • Asked to release
  • SKILL.md covers 1. Review what lands, 2. Versioning — all released…, 3. Validate the changelog and 4. Verify, then hand off, plus 2 more sections
  • Calls uv, git and brew

What it does

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.

When your agent uses it

  • Asked to release
  • Bump the version

Example prompts

  • “/release-habit-hooks”

Requirements

  • Python 3

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Review what lands
  2. Versioning — all released packages stay in sync
  3. Validate the changelog
  4. Verify, then hand off
  5. An install instruction is verified from an install, never from empty
  6. Bump the Homebrew tap

What it can do on your machine

Read from SKILL.md and the folder at commit 5603331. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • uv
    • git
    • brew

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~62
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from habit-hooks/habit-hooks at commit 5603331, republished under its MIT licence (© habit-hooks). 927 words, ~1,814 tokens.

Download SKILL.mdSave it as .claude/skills/release-habit-hooks/SKILL.md (or your agent's skills folder).
name
release-habit-hooks
description
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.

Release Habit Hooks

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.

1. Review what lands

git describe --tags --abbrev=0            # last release tag
git log <lastTag>..HEAD --oneline

For 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.

2. Versioning — all released packages stay in sync

  • The new version is 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.
  • Every package ships at that version, changed or not. 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.
  • Bump 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.
  • The floor is spelled >=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.
  • A release candidate does not move the minor. 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.

3. Validate the changelog

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:

  • Every version between the last documented one and the new tag has its own ## X.Y.Z section.
  • The new version's section records the consumer-facing changes from step 1.
  • Nothing under a version heading is actually unreleased.

4. Verify, then hand off

uv run pytest -q
uv build --all-packages --out-dir dist/_relcheck   # mirrors release.yml; check artifact versions

All 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 --tags
Show full SKILL.md (499 more words)Show less

5. An install instruction is verified from an install, never from empty

Anyone 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" --version

uv 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.

6. Bump the Homebrew tap

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.

  • Move every resource block to the new version's URL + sha256. A plugin new in this release needs its own resource block added, not just the existing ones bumped — a missing one ships a brew install without that plugin.
  • Add the new plugin to the test do block's asserted entry-point list.
  • Open it as a pull request against the tap — never push to its 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

Files

Just SKILL.md in skills/release-habit-hooks of habit-hooks/habit-hooks.

Open the folder on GitHubat commit 5603331

Compare with similar skills

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.

Release Habit Hooks compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Release Habit Hooks this skillhabit-hooks/habit-hooks222—~1.8kAutomated safety check: PassMIT
Simple Englishmoeru-ai/airi50k2 repos~4.6kAutomated safety check: PassMIT
StarRocks Release NotesStarRocks/starrocks12k—~1.9kAutomated safety check: NotesApache-2.0
Cutting A ReleaseTriliumNext/Trilium38k—~3.2kAutomated safety check: PassAGPL-3.0
Mole CLI Release Flowtw93/Mole70k—~2.6kAutomated safety check: PassGPL-3.0
React Router Release Notes Prepremix-run/react-router57k—~1.1kAutomated safety check: PassMIT

Similar skills

  • 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.

    50k GitHub starsUsed in 2 repos~4.6k tokens
    DevelopmentAuto-check passed
  • StarRocks Release Notes

    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.

    12k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check: notes
  • Cutting A Release

    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.

    38k GitHub stars~3.2k tokensUpdated today
    DevelopmentAuto-check passed
  • 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.

    70k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • 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.

    57k GitHub stars~1.1k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Release

    PrefectHQ/fastmcp

    Cut a FastMCP release end to end. An agent skill from PrefectHQ/fastmcp.

    28k GitHub stars~2.9k tokensUpdated today
    DevelopmentAuto-check passed

More from habit-hooks/habit-hooks

  • Habit Hooks Prompting

    habit-hooks/habit-hooks

    Write or revise a habit-hooks coaching prompt. An agent skill from habit-hooks/habit-hooks.

    222 GitHub stars~570 tokensUpdated 8 days ago
    Auto-check passed
  • Habit Hooks Review

    habit-hooks/habit-hooks

    Spawn a reviewer sub-agent to assess a change set against habit-hooks's coding principles.

    222 GitHub stars~1.5k tokensUpdated 8 days ago
    Auto-check passed
  • Writing Docs

    habit-hooks/habit-hooks

    Write or trim habit-hooks documentation under docs/. An agent skill from habit-hooks/habit-hooks.

    222 GitHub stars~1.4k tokensUpdated 8 days ago
    Auto-check passed

Categories

Questions about Release Habit Hooks

What does Release Habit Hooks do?

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.

When should I use Release Habit Hooks?

Release Habit Hooks fits situations like: asked to release; bump the version.

How do I install Release Habit Hooks in Claude Code?

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.

How do I install Release Habit Hooks in Codex?

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.

Can I use Release Habit Hooks in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Release Habit Hooks need to run?

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.

Does Release Habit Hooks access the network?

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.

Is Release Habit Hooks safe to install?

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.

What licence does Release Habit Hooks use?

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.

How many tokens does Release Habit Hooks use?

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.

What are the alternatives to Release Habit Hooks?

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.

Who maintains Release Habit Hooks?

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.