Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/Jebel-Quant/rhiza-claudenpx agentmods add skills/jebel-quant/rhiza-claude/rhiza-releaseWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jebel-quant/rhiza-claude/rhiza-release)<a href="https://agentmods.dev/skills/jebel-quant/rhiza-claude/rhiza-release"><img src="https://agentmods.dev/badge/skills/jebel-quant/rhiza-claude/rhiza-release/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/jebel-quant/rhiza-claude/rhiza-release"><img src="https://agentmods.dev/badge/skills/jebel-quant/rhiza-claude/rhiza-release.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00060 | $0.10178 |
| Opus 5.5 | $0.00024 | $0.04071 |
| Sonnet 5.5 | $0.00012 | $0.02036 |
| Haiku 4.5 | $0.00006 | $0.01018 |
Grade A, and why
rhiza-release scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 694 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Portable copy of
plugin/skills/release/SKILL.md, generated byplugin/scripts/build_bundle.py. Edit the source and runmake bundle— an edit here is overwritten.
${RHIZA_ROOT}is yourrhiza-claudecheckout. Export it, or substitute the path wherever it appears. Any remark below about the variable being empty in a source checkout is Claude Code's spelling of the same idea —${RHIZA_ROOT}replaces it, and the repo-relative fallbacks do not apply, because you are working in the user's repo, not in this one./rhiza:<name>names another skill in this bundle,rhiza-<name>. Invoke it however your client invokes skills.- Tools.
Read,EditandWriteread and write files;GrepandGlobsearch;Bashis a shell in the user's repo. Use your equivalents.AskUserQuestionis a multiple-choice question put to the user. With no such tool, ask in plain text, number the options, and wait for a reply: where the procedure says nothing is created without an explicit selection, that holds however the question was asked.- Arguments: [version e.g. v1.4.0] (optional; omit to pick from a table of candidates). The text below writes
$ARGUMENTSfor what the user passed; substitute it yourself if your client does not.- Runs:
git,gh,glab,uv,uvx,make,cat,grep. Nothing here enforces that list, where the plugin's frontmatter did — your client has to permit them.- Never run this on your own initiative — only when the user asks for it by name.
You are running /release in the current working directory's repo. Goal: land the
version bump on the default branch through a pull request, like every other change,
and tag the commit that actually merged — in one run.
A tag still cannot be cut before the merge, which is why there is a wait in the middle. A tag must point at a commit that exists on the branch you publish from; a squash-merge replaces the branch's commits with a new one, so a tag created before the merge names a SHA that never lands. No reordering of the steps fixes that — the commit to tag does not exist until the request merges. So the run goes through the merge instead of stopping in front of it: it hands the merge to the forge, waits for the bump to appear on the default branch, and tags what landed.
| Stage | Steps | Ends with |
|---|---|---|
| Prepare | 2–9 | the version chosen, the bump and changelog committed on a pushed branch, an open release PR |
| Land | 10–11 | auto-merge handed to the forge, and the bump on the default branch |
| Tag | 12–13 | the merged commit tagged, the tag pushed, release CI running |
phase A and phase B — what step 1a's script reports — name the repo's state, not
two runs of this command. Phase A is "nothing pending"; phase B is "a bump is committed
that no tag names". An ordinary run starts in A, and steps 10–11 are what put the repo
into B; step 12 then tags it. A run that starts in B is one finishing a release whose
wait had expired.
The wait can time out, and then the run hands back rather than half-finishing. Review
takes as long as it takes and a session does not outlive a weekend; when the wait expires
the run reports the open PR and stops, having created no tag. Re-running
/rhiza:release finishes the release — step 1a reports phase B and goes straight to
step 12. That is not a special case: it is steps 12–13 entered later, and it is why an
expired wait leaves nothing to undo.
Never push to the default branch, and never move an existing tag. The run pushes one
release branch — the same thing /rhiza:init and /rhiza:update do — and then one
tag, onto the commit the forge merged.
The human decision is the version; the checks are the gate. Step 3 stops and makes a person choose the bump, because that is the judgement nothing here can make. What follows is mechanical, so the run carries it through rather than handing back a command to re-type. What keeps that safe is not a second pair of hands, it is step 12's guard: a version that does not strictly increase, or a tag that already exists, stops the run before anything is created. If anything is ambiguous, stop and report.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 6d ago First seen · 694 lines · 60 tokens per session scan A 06548e5043c9
rhiza-release is a skill published in the GitHub repository Jebel-Quant/rhiza-claude (4 stars, last pushed today), licensed MIT. It adds 60 tokens to every session and 10,178 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-24.
Other skills, from other repositories
release
Prepare a version release — bump version files, commit, and tag. Just run /release with no arguments.
release-init
Detect project type and generate a tailored project-level /release skill. Run once per project to set up releasing.
release
Use when the user wants to publish a new release, says "release", "publish release", "cut a release", or "new version". Covers tag creation, CI-driven build, and troubleshooting.
watch-tag
Watch a GitHub repository for new tags using the gh-watch extension. Use when the user wants to be notified when a tag is created, when a release is cut, or when a tag that includes a specific commit appears (e.g. "tell me when my merge ships in a release").
gitlab-release
GitLab release operations. ALWAYS use this skill when user wants to: (1) list releases, (2) view release details, (3) create new releases, (4) upload assets, (5) delete releases.
codew-release-qa-sweep
Use before claiming Codewhale release work is done: run the full gate sweep and list the manual QA targets.