Claude Code, Skill
CoalMine
CoalMine — 9 quality-canary skills for coding agents: rot-canary (code-health audit + auto-cadence hooks), gold-standard (world-class completeness; fills & adopts rules), source-grounding (anti-hallucination sourcing), supply-chain-audit (deps/build/artifact trust), resilience-a
Compatibility: Not stated.
Grade B
Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit e585a26d2e5a.
PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST SECRETS_PATH_DOTENV SECRETS_ENV_READ OBFUSCATION_FILE_OVER_READ_CAP
Why this grade
- PERMISSION_DELETE_FILES Low
Contains a call that can delete files.
hooks/coalmine-conductor.js, line 654
try { fs.rmSync(oldUpdateStampPath(), { force: true }); } catch { /* best-effort */ } - NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
scripts/front-door-links.test.mjs, line 101
const counting = (u, o) => { calls++; return fetch(u, o); }; - SECRETS_PATH_DOTENV Low
Mentions a .env file.
scripts/secret-scan.test.mjs, line 138
['a framework key, .env bare', 'SECRET' + `_KEY=${django}`], - SECRETS_ENV_READ Note
Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.
scripts/prune-release-zips.mjs, line 52
const token = process.env.GITHUB_TOKEN; - OBFUSCATION_FILE_OVER_READ_CAP Note
A file was over the read cap and was not fully read.
CHANGELOG.md, line 1
# Changelog
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
hooks/coalmine-conductor.js, line 654
try { fs.rmSync(oldUpdateStampPath(), { force: true }); } catch { /* best-effort */ }
hooks/rot-canary-stop.js, line 670
try { fs.unlinkSync(tmp); } catch {}
hooks/rot-canary-stop.js, line 713
try { fs.unlinkSync(f); } catch {}
Show more
hooks/rot-canary-stop.js, line 875
try { fs.unlinkSync(stamp); } catch {}
hooks/rot-canary-stop.js, line 903
try { if (fs.statSync(p).mtimeMs < cutoff) fs.unlinkSync(p); } catch {}
hooks/rot-canary-stop.js, line 927
try { if (fs.statSync(p).mtimeMs < cutoff) fs.unlinkSync(p); } catch {}
hooks/_shared/markers-write.js, line 13
try { fs.unlinkSync(tmp); } catch {}
plugin/hooks/coalmine-conductor.js, line 654
try { fs.rmSync(oldUpdateStampPath(), { force: true }); } catch { /* best-effort */ }
plugin/skills/scale-canary/references/checks.md, line 26
| Node | `fs.*Sync`, `child_process.execSync`, `crypto.pbkdf2Sync`, JSON.parse on multi-MB payloads — inside server handlers |
skills/scale-canary/references/checks.md, line 26
| Node | `fs.*Sync`, `child_process.execSync`, `crypto.pbkdf2Sync`, JSON.parse on multi-MB payloads — inside server handlers |
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST
scripts/front-door-links.test.mjs, line 101
const counting = (u, o) => { calls++; return fetch(u, o); };
scripts/prune-release-zips.mjs, line 40
const r = await fetch(`${API}/repos/${repo}/releases/assets/${id}`, {
plugin/skills/resilience-audit/references/checks.md, line 7
| TS/JS | bare `fetch(url)` / axios without `timeout` | `AbortSignal.timeout(ms)` / axios `timeout` |
Show more
plugin/skills/resilience-audit/references/checks.md, line 9
| Python | `requests.get(url)` with no `timeout=` (waits forever) | explicit `timeout=(connect, read)` |
skills/resilience-audit/references/checks.md, line 7
| TS/JS | bare `fetch(url)` / axios without `timeout` | `AbortSignal.timeout(ms)` / axios `timeout` |
skills/resilience-audit/references/checks.md, line 9
| Python | `requests.get(url)` with no `timeout=` (waits forever) | explicit `timeout=(connect, read)` |
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
scripts/prune-release-zips.mjs, line 52
const token = process.env.GITHUB_TOKEN;
scripts/release-notes.test.mjs, line 273
const saved = { HOME: process.env.HOME, GITHUB_TOKEN: process.env.GITHUB_TOKEN, GH_TOKEN: process.env.GH_TOKEN };
scripts/secret-scan.test.mjs, line 138
['a framework key, .env bare', 'SECRET' + `_KEY=${django}`],
Show more
scripts/release-notes.test.mjs, line 274
process.env.GITHUB_TOKEN = '
scripts/secret-gate.test.mjs, line 326
-- RED before UMB-456 (1) vi', { skip: process.env.SECRET_GATE_NESTED ? 'this is the nested run' : false }, (
scripts/secret-scan.test.mjs, line 63
'token = process.env.GITHUB_TOKEN_FOR_THIS_REPOSITORY',
scripts/lib/publish-release.mjs, line 118
const token = process.env.GITHUB_TOKEN;
scripts/lib/test-spawn.test.mjs, line 55
assert.match(src, /spawnSync\(process\.execPath, plan\.args, \{[^}]*env: plan\.env[^}]*timeout: plan\.timeout[^}]*killSignal: plan\.killSignal/);
scripts/lib/wave-run.test.mjs, line 26
ir: process.env.TMPDIR ?? null, secret: process.env.OPERATOR_SECRET ?? null })));\n",
scripts/lib/wave-run.test.mjs, line 325
process.env.OPERATOR_SECRET = '
scripts/secret-scan.test.mjs, line 177
['.env, bare', 'SECRET' + `_ENV=${ENV277}`],
scripts/lib/secret-scan.mjs, line 170
// keys per generator and carrier (a .env line, a YAML line, quoted, followed by a call), none read
evals/04-traversal-and-off-by-one/graders/ranks-traversal-above-doc-rot.md, line 13
`name` onto `ROOT` with no containment check at all, so `../../.env` escapes
plugin/skills/drift-canary/SKILL.md, line 20
5. **Environment Configuration drift** — introducing new required config keys (`.env` / OS vars) without defaults or fallback.
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read.
OBFUSCATION_FILE_OVER_READ_CAP
CHANGELOG.md, line 1
# Changelog
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit e585a26d2e5a. can delete files. can reach a host that is not written as a fixed address. reads a credential or environment file. a file was over the read cap and was not fully read.
Date and source
Date checked:
github.com
Commit graded: e585a26d2e5a5e56c6dd043d5d19f5b53c5dc8f7
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.