Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add testdouble/han --skill han-releasegit clone --depth 1 https://github.com/testdouble/hanWrote 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/testdouble/han/han-release)<a href="https://agentmods.dev/skills/testdouble/han/han-release"><img src="https://agentmods.dev/badge/skills/testdouble/han/han-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/testdouble/han/han-release"><img src="https://agentmods.dev/badge/skills/testdouble/han/han-release.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 2 findings, up to high
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- high Tool Misuse · line 426 Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).Fix: Validate all tool parameters against an allowlist. Reject dangerous parameter values (shell=True, --force, -rf /) and use safe defaults.
- medium Excessive Agency · line 19 Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.Fix: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
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.00172 | $0.08495 |
| Opus 5.5 | $0.00069 | $0.03398 |
| Sonnet 5.5 | $0.00034 | $0.01699 |
| Haiku 4.5 | $0.00017 | $0.00850 |
Grade A, and why
han-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 1mo 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 — 495 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Pre-requisites
- gh CLI: !
which gh 2>/dev/null || echo "not installed" - jq: !
which jq 2>/dev/null || echo "not installed" - claude CLI: !
which claude 2>/dev/null || echo "not installed" - git repo: !
git rev-parse --is-inside-work-tree 2>/dev/null || echo NO
If gh, jq, or claude reads not installed, or this is not a git repo: tell the operator which prerequisite is
missing and that it must be installed/configured before /han-release can run, then immediately stop. The skill
cannot proceed without all four.
The claude CLI is what creates the per-plugin tags in Step 10. Every invocation of it in this skill goes through the
shell's command builtin (command claude ...), never a bare claude, because an operator's shell commonly wraps
claude in a function or alias that blocks waiting for terminal input. The which probe above resolves the same way a
bare call would, so it reports the wrapper's presence rather than the executable's; treat a non-empty result as "the
tool is reachable" and let Step 10's first invocation be what proves it runs.
Project Context
- repo: !
gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null || git config --get remote.origin.url - current branch: !
git branch --show-current 2>/dev/null || echo unknown - default branch: !
git symbolic-ref --short refs/remotes/origin/HEAD 2>/dev/null | sed 's#^origin/##' || echo unknown - working tree: !
git status --porcelain 2>/dev/null || echo NO - parent plugin name: !
jq -r .name .claude-plugin/marketplace.json 2>/dev/null - plugins (name source version):
!
jq -r '.plugins[] | "\(.name)\t\(.source)\t\(.version)"' .claude-plugin/marketplace.json 2>/dev/null - latest parent tag: !
git fetch --tags --quiet >/dev/null 2>&1; git tag -l 'han--v*' --sort=-v:refname | head -n1 - latest suite tag: !
git tag -l 'v*.*.*' --sort=-v:refname | head -n1 - changelog head: !
grep -m1 '^## v' CHANGELOG.md 2>/dev/null
What ships with it
6 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 1mo ago First seen · 495 lines · 172 tokens per session scan A 115392abf435
han-release is a skill published in the GitHub repository testdouble/han (311 stars, last pushed yesterday), licensed MIT. It adds 172 tokens to every session and 8,495 once invoked, about $0.0007 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-08-30.
Other skills, from other repositories
review-gate
Fresh-context review of a change against its stated intent, before the change is acted on. Use before a commit (not the per-iteration commits of an autonomous loop the operator started, such as /ar:resume), before a release, or before launching a run whose result will be acted on — whenever the change is more than a…
release
Cut a brooks-lint release: set the version in package.json, propagate it across all four plugin manifests and every version-bearing text file (README badges, docs site metadata), write the CHANGELOG entry, validate, then commit, push, tag, and publish the GitHub release. Triggers when the maintainer asks to "release"…
pre-publish-review
Nuclear-grade 12-agent pre-publish release gate. Runs /get-unpublished-changes to detect all changes since last npm release, spawns up to 10 ultrabrain agents for deep per-change analysis, invokes /review-work (orchestrator manual QA plus one gate reviewer) for holistic review, and 1 oracle for overall release…
release
CONTRIBUTOR TOOL - Cut a plugin release: bump plugin.json version, finalize CHANGELOG, update README if needed, gate on make ci, commit, tag vX.Y.Z, and create the GitHub release. Use when shipping a new plugin version. NOT distributed.
pr-review
Address feedback left on a GitHub pull request: fetch unresolved review threads, make agreed Elixir/Phoenix code fixes, reply, and resolve. Use for a PR URL/number or reviewer comments. NOT for pre-PR review, findings triage, or CI monitoring.
create-release-checklist
Create a release checklist and GitHub issue for an R package. Use when the user asks to "create a release checklist" or "start a release" for an R package.