rot-canary

rot-canary is a skill for Claude Code from HetCreep/CoalMine. It costs 114 tokens per session (3,111 once invoked), scanned A, original, Apache-2.0.

A code-health checker that looks through source files for dead code, likely bugs, resource leaks, concurrency problems, silent failures, and weak input handling.

In plain words
What is it for?
Use it to scan recently changed files, a diff, selected files, or the whole repository, with either a quick or deeper review.
Why use it?
It helps find code that has become risky or unnecessary before it causes failures. It reports confirmed findings and can fix them when asked.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin. Also seen: reads .claude/ paths; mentions subagents; names the AskUserQuestion tool.

Part of the coalmine plugin — 9 skills shipped together

Good fit Use it to scan recently changed files, a diff, selected files, or the whole repository, with either a quick or deeper review.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/hetcreep/coalmine/rot-canary
Install

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.

Any agent
npx skills add HetCreep/CoalMine --skill rot-canary
Clone the repo
git clone --depth 1 https://github.com/HetCreep/CoalMine

Made for: Claude Code.

Or install coalmine, the plugin that ships this one along with the rest of its 9 skills.

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

agentmods badge for rot-canary

README.md
[![agentmods](https://agentmods.dev/badge/skills/hetcreep/coalmine/rot-canary/github.svg)](https://agentmods.dev/skills/hetcreep/coalmine/rot-canary)
Your own site
<a href="https://agentmods.dev/skills/hetcreep/coalmine/rot-canary"><img src="https://agentmods.dev/badge/skills/hetcreep/coalmine/rot-canary/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.

agentmods 80×15 button for rot-canary

Your own site · 80×15
<a href="https://agentmods.dev/skills/hetcreep/coalmine/rot-canary"><img src="https://agentmods.dev/badge/skills/hetcreep/coalmine/rot-canary.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 114 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,111 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.00114 $0.03111
Opus 5 $0.00057 $0.01555
Sonnet 5 $0.00023 $0.00622
Haiku 4.5 $0.00011 $0.00311

Measured 7d ago against content hash 40e949e437c8, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-10, from the pricing page.

Security

Grade A, and why

rot-canary 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 7d 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.

plugin/skills/rot-canary/SKILL.md · 105 lines

How it starts

The opening of the file, as written. The whole thing — 105 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Rot-Canary

Language: Generate EVERYTHING at runtime in the user's language — questions, answer options, menu labels, recommendations, report narrative. Detect from their messages; never default to English just because this file is English. English is allowed only for technical terms: commands, paths, code identifiers, severity labels (CRITICAL/HIGH/MEDIUM/LOW), and tier names (Light/Standard/Heavy).

Config reads — every config key, always the CASCADE, never the bare project file: ~/.claude/.coalmine.json first, then the project config (own agent dir → other known agent dirs → legacy <gitroot>/.coalmine.json), project wins per key. A bare project read is ABSENT on a machine configured only globally, so it silently yields defaults.

Scan code for rot. Report CONFIRMED findings. Fix on request.

Parameters

  • SCOPE: touched files (default) | diff | named files | whole repo. Touched-files scan is hybrid-capped: all if ≤ autoScanFileCap, else the autoScanFileCapSlice most-recently-modified files (warn the user). A touched file matching scanExcludePaths (lab/throwaway tooling only — never shipped/tracked source) is dropped before the cap; the nudge notes the skip count.
  • DISCLOSE EVERY SCOPE CUT, always — a suppressed finding must never look like an absent one. Whenever the scope you actually scanned is narrower than the scope you were asked for, say so IN THE REPORT, with the COUNT and the KNOB that did the cutting: files dropped by scanExcludePaths, files left unscanned by the autoScanFileCap slice, file types outside watchedExtensions. State it even when the scan found nothing — that is exactly the case where the omission is invisible, because "scanned, clean" and "never scanned" read identically to a user. If EVERY file in scope was cut, that is not a clean report: say plainly that no scan ran, and name what cut it. scanEverything: true bypasses every scan-scope cut at once (scanExcludePaths ignored, autoScanFileCap not applied) — offer it when a user asks why files were skipped. It does NOT re-enable a disabled canary, and it does NOT reach the recording-side cuts (watchedExtensions, tmpdir), which decide what is recorded before any scan-time key is read, nor the tripwire's tripwireMaxFileSizeKb cap (an over-cap file IS recorded and IS scanned — only its edit-time pre-flag is skipped). So report it as an unfiltered SCAN, never as "everything" — an incompletely-widened scan that reads as fully widened is the same trust defect as a suppressed scan reading as a clean one, with the sign reversed. Read it through the merged config, never the project file alone — for TWO independent reasons, and the second is the one CWK-057 left out: (1) the READ PATH — a bare project file is ABSENT on a machine configured only globally, so an agent reading it sees nothing and silently uses defaults; (2) the CLAMP — a project-level true is CLAMPED to false unless the global layer also says true (hooks-safety.md §9 — a cloned repo must not be able to force a full scan on you), so a raw project-file read would report a scope that is not what the hook actually ran. (The Stop-hook auto-scan path already emits its own equivalents — capNotice, scanExcludeNotice, and the all-excluded quiet note — in all five languages; this rail is the MANUAL path's counterpart, which has no hook to speak for it.)
  • FILE TYPES: code only by default, matching watchedExtensions (source files — never docs/prose/config-prose, CoalLedger's axis). Name non-code files explicitly to include them.
  • DEPTH: QUICK (default) | DEEP

Read the full file on GitHub · 105 lines

Files

What ships with it

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

Changes

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.

  1. 7d ago Changed · +3 lines 40e949e437c8
  2. 11d ago First seen · 102 lines · 114 tokens per session scan A 4d084f4d660a

Subscribe to this mod's changes

rot-canary is a skill published in the GitHub repository HetCreep/CoalMine (12 stars, last pushed yesterday), licensed Apache-2.0. It adds 114 tokens to every session and 3,111 once invoked, about $0.0006 per session on Opus 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.

Related

Other skills, from other repositories

doubt-driven-development

Subjects every non-trivial decision to a fresh-context adversarial review before it stands. Use when you want every assumption cross-examined before proceeding, when stress-testing a plan for hidden failure modes, when correctness matters more than speed, when working in unfamiliar code, when stakes are high…

addyosmani/agent-skills · 96 tokens

ai-development-guide

Applies language-agnostic and backend technical decision criteria, anti-pattern detection, debugging, and quality gates. Use when reviewing general/backend implementation choices, code smells, failures, or implementation completeness.

shinpr/claude-code-workflows · 43 tokens

dorodango

Polishes working code through successive quality passes in fresh subagents. Use after tests pass when code needs multi-dimension refinement before release.

athola/claude-night-market · 31 tokens

issue-analyze

GitHub Issue and PR review thread deep analysis with Codex blind verdict. Use when: analyzing issue root cause, classifying problems, investigation planning, triaging PR review comments for actionability. Not for: fixing bugs (use bug-fix), code exploration (use code-explore). Output: classified analysis + verdict…

sd0xdev/sd0x-harness · 73 tokens

polish-code

Stage, format, lint, test, review, smoke test, and re-run itself until stable. Use when the user asks to "polish code", "refine code", "iterate on code quality", "review loop", "clean up, test, and review loop", or "run the polish loop".

tobihagemann/turbo · 67 tokens

simplify-code

Run a multi-agent review of changed files for scope, reuse, quality, efficiency, clarity, and altitude issues followed by fixes. Use when the user asks to "simplify code", "review changed code", "check for code reuse", "review code quality", "review efficiency", "simplify changes", "clean up code", "refactor changes"…

tobihagemann/turbo · 81 tokens