Claude Code, Skill
Github Publisher
Use when a user wants to publish or update a Skill or project on GitHub.
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.
PERMISSION_DELETE_FILES SECRETS_PATH_DOTENV SECRETS_ENV_READ
Why this grade
- PERMISSION_DELETE_FILES Low
Contains a call that can delete files.
scripts/acceptance.test.mjs, line 22
try { return fn({ root, config, run }); } finally { fs.rmSync(root, { recursive: true, force: true }); } - SECRETS_PATH_DOTENV Low
Mentions a .env file.
scripts/acceptance.mjs, line 14
', '.publisher-pilot'].includes(p) || /^\.env(?:\.|$)/.test(p))) throw new Error(`Loc - SECRETS_ENV_READ Note
Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.
scripts/acceptance.test.mjs, line 17
s.existsSync('SKILL.md')); assert.equal(process.env.PUBLISHER_TEST_SECRET, undefined); assert.ok(!fs.existsSync('
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
scripts/acceptance.test.mjs, line 22
try { return fn({ root, config, run }); } finally { fs.rmSync(root, { recursive: true, force: true }); }
scripts/candidate-review.test.mjs, line 40
['missing confirmation source',f=>{fs.unlinkSync(f.source);assert.equal(reused(f.scan(f.receipt).report,f.finding.reviewId),false);}],
scripts/candidate-review.test.mjs, line 55
for(const [name,body] of cases)test(name,()=>{const f=fixture();try{body(f);}finally{fs.rmSync(f.temp,{recursive:true,force:true});}});
Show more
scripts/candidate-review.test.mjs, line 62
}finally{fs.rmSync(f.temp,{recursive:true,force:true});}
scripts/candidate-review.test.mjs, line 69
}finally{fs.rmSync(f.temp,{recursive:true,force:true});}
scripts/candidate-review.test.mjs, line 76
}finally{fs.rmSync(f.temp,{recursive:true,force:true});}
scripts/candidate-review.test.mjs, line 85
}finally{fs.rmSync(f.temp,{recursive:true,force:true});}
scripts/candidate-review.test.mjs, line 96
}finally{fs.rmSync(f.temp,{recursive:true,force:true});}
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Pass
No network call found.
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
evals/publisher-tasks.mjs, line 28
fs.writeFileSync(path.join(target, '.gitignore'), '.env\nnode_modules/\n.DS_Store\n');
scripts/acceptance.mjs, line 14
', '.publisher-pilot'].includes(p) || /^\.env(?:\.|$)/.test(p))) throw new Error(`Loc
scripts/acceptance.test.mjs, line 17
s.existsSync('SKILL.md')); assert.equal(process.env.PUBLISHER_TEST_SECRET, undefined); assert.ok(!fs.existsSync('
Show more
scripts/acceptance.test.mjs, line 79
for (const rel of ['../outside', '.git', '.env', 'node_modules']) {
scripts/acceptance.test.mjs, line 103
const old = process.env.PUBLISHER_TEST_SECRET;
scripts/acceptance.test.mjs, line 104
process.env['PUBLISHER_TEST_SECRET'] = 'example-only';
scripts/acceptance.test.mjs, line 107
if (old === undefined) delete process.env.PUBLISHER_TEST_SECRET;
scripts/acceptance.test.mjs, line 108
else process.env['PUBLISHER_TEST_SECRET'] = old;
scripts/publish-check.mjs, line 169
[/^\.env\.example$/, "configuration requirements may have changed"],
scripts/publish-check.mjs, line 312
if (base === ".env" || (base !== ".env.example" && /^\.env\.[^.]+$/.test(base))) {
scripts/publish-check.mjs, line 318
if (path.basename(rel) !== ".env.example") continue;
scripts/publish-check.mjs, line 328
if (!placeholder) add("FAIL", ".env.example contains non-placeholder value", `${rel}: ${key}`);
scripts/publish-check.mjs, line 612
["env hygiene", !hasResult("environment file") && !hasResult(".env.example contains"), 3],
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
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 d5002782c36d. can delete files. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: d5002782c36d61d6fa25f2c57f7f508be2373460
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.