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/uHappyLogic/cairnnpx agentmods add skills/uhappylogic/cairn/release-pluginWrote 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/uhappylogic/cairn/release-plugin)<a href="https://agentmods.dev/skills/uhappylogic/cairn/release-plugin"><img src="https://agentmods.dev/badge/skills/uhappylogic/cairn/release-plugin/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/uhappylogic/cairn/release-plugin"><img src="https://agentmods.dev/badge/skills/uhappylogic/cairn/release-plugin.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.00034 | $0.11259 |
| Opus 5.5 | $0.00014 | $0.04504 |
| Sonnet 5.5 | $0.00007 | $0.02252 |
| Haiku 4.5 | $0.00003 | $0.01126 |
Grade B, and why
release-plugin scanned grade B with 1 finding 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 5d 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.
Reads agent configuration directoriesmediumAgent snooping
.claude/, .codex/, .gemini/ hold keys, settings and other credentials a mod has no legitimate need for.
plugin copy at `~/.gemini/config/plugins/cairn`; it sits outside `testpaths`, so neither How it starts
The opening of the file, as written. The whole thing — 921 lines — stays where its author put it; the contents beside it link to each section on GitHub.
release-plugin
Releases the cairn plugin at a maintainer-supplied MAJOR.MINOR.PATCH version. This
SKILL.md is the single place the release procedure is documented — no release prose lives
in CLAUDE.md or README.md. It is a maintainer-only, project-local skill: it lives under
.claude/skills/, outside core/, so no host build renders it into a hosts/<host>/ tree
and it never reaches a consuming project.
Every tag and release is a bare MAJOR.MINOR.PATCH, with no v prefix anywhere in the
history — the legacy v.0.9.x and v0.9.7 tags were renamed to their bare form on
2026-09-07, and no v-prefixed tag remains on either side.
Nothing is written, committed, pushed, tagged, or published until every gate below has passed and the release notes have been composed. The pre-flight and version gates (steps 2 and 3) are hard stops: on failure, report the specific reason and exit, having changed nothing. Never work around a gate, and never ask the maintainer to waive one.
The release notes live in the repository: the Release: <VERSION> commit prepends them to
CHANGELOG.md as the entry ## <VERSION> — <YYYY-MM-DD>, and from that commit on the
committed entry — extracted from HEAD:CHANGELOG.md by the rule step 7 states — is the one
source of the notes: step 7 shows it (and, while the commit is still unpushed, revises it in
place at the maintainer's request by amending that commit) and step 8 publishes it to the
monorepo release and every distribution release, so the changelog and the three release pages
carry identical text by construction.
Resuming an interrupted release. Re-running with the same version after a failed run is the whole recovery story — there is no rollback of already-published refs and no hand-run recovery command. A resumption is detected once, up front:
git log -1 --format='%s' HEAD
If that prints exactly Release: <VERSION>, this version's release commit is already
recorded and the run is a resumption. When it is, step 1 excludes <VERSION> from the
last-release lookup, step 3b tolerates a tag that points at HEAD, step 3c requires the
CHANGELOG.md entry it would otherwise forbid, and steps 5 and 6 are skipped whole — the
notes step 5 would compose and the commit step 6 would produce already exist, as the entry in
HEAD:CHANGELOG.md, and steps 7 and 8 read that entry exactly as they do on a fresh run.
Every other step runs unchanged, and step 8's per-artifact checks pick the run up from the
first step that did not complete.
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.
- 5d ago Changed · +31 lines scan A → B 1dc13dab7c4f
- 22d ago Changed · +47 lines 16503190ac30
- 1mo ago Changed · +34 lines 3c7b96caebf2
- 1mo ago Changed · +12 lines 9099bb247366
- 1mo ago Changed · +347 lines 11604f24a8dd
- 1mo ago Changed · -4 lines 42d3a2757475
- 1mo ago First seen · 454 lines · 34 tokens per session scan A 8591399152a2
release-plugin is a skill published in the GitHub repository uHappyLogic/cairn (3 stars, last pushed today), licensed MIT. It adds 34 tokens to every session and 11,259 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it B with 1 finding (reads agent configuration directories). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-06.
Other skills, from other repositories
release
Bump a plugin's version, write a detailed changelog entry for the upgrade skill to consume, and commit+push. Takes a plugin slug argument identifying which plugin under plugins/ to release. Use this skill whenever the user says "release", "version bump", "cut a release", "changelog and push", or finishes a set of…
release
Bump a plugin's version, write a detailed changelog entry for the upgrade skill to consume, and commit+push. Takes a plugin slug argument identifying which plugin under plugins/ to release. Use this skill whenever the user says "release", "version bump", "cut a release", "changelog and push", or finishes a set of…
pre-release-review
Run the pre-release gate for this multi-plugin monorepo: establish each plugin's release boundary from its last reachable tag to HEAD, audit every changed plugin's [Unreleased] changelog against the actual code diff, identify contract-surface and breaking changes, and, per the objective the user picks up front, either…
fleet-release
Use this skill whenever the user wants to release, ship, prep, or cut versions for two or more plugins together on the current branch. Trigger on phrasings like "release both plugins", "ship them together", "release all changed plugins", "fleet release", "multi-plugin release", "release in order", or "release…
fleet-release
Use this skill whenever the user wants to release, ship, prep, or cut versions for two or more plugins together on the current branch. Trigger on phrasings like "release both plugins", "ship them together", "release all changed plugins", "fleet release", "multi-plugin release", "release in order", or "release…
pipeline-digest
Daily release-pipeline digest with a change gate — reports which plugins are pending release, whether main's CI is green, and which branches went stale, and notifies the operator only when that state actually moved since the last run. Use when the operator asks "what moved in the pipeline", "anything to ship"…