Claude Code, Skill
Claude Config
Claude Config, a skill listed in the PlugVet directory.
Compatibility: Not stated.
Grade D
Two or more Medium findings, or a High. Only try it in a sandbox.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
INSTALL_REMOTE_SCRIPT SECRETS_PATH_CREDENTIAL
Why this grade
- INSTALL_REMOTE_SCRIPT High
Fetches a script from the network and runs it (a pipe to a shell, or an install hook with a URL).
skills/hermes-agent/SKILL.md, line 13
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash - SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
hooks/caveman-config.js, line 281
// the flag with a symlink to ~/.ssh/id_rsa (or any user-readable secret). Every
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.
If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.
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/caveman-activate.js, line 148
fs.unlinkSync(target);
hooks/caveman-config.js, line 263
fs.unlinkSync(tempPath);
hooks/caveman-config.js, line 496
try { fs.unlinkSync(legacy); } catch (e) { /* already absent */ }
Show more
hooks/caveman-config.js, line 531
try { fs.unlinkSync(p); } catch (e) {}
hooks/caveman-config.js, line 534
try { fs.unlinkSync(path.join(claudeDir, PREV_BASENAME)); } catch (e) {}
hooks/caveman-config.js, line 564
if (st.mtimeMs < cutoff) { fs.unlinkSync(p); deleted++; }
hooks/caveman-mode-tracker.js, line 129
fs.unlinkSync(path);
skills/brainstorming/scripts/server.cjs, line 604
if (fs.existsSync(eventsFile)) fs.unlinkSync(eventsFile);
skills/compress/scripts/compress.py, line 438
result = subprocess.run(
skills/design-system/scripts/slide-token-validator.py, line 30
result = subprocess.run(cmd)
skills/last30days/scripts/box_chrome_login.py, line 172
subprocess.Popen(recipe["command"], env=launch_env)
skills/last30days/scripts/evaluate_search_quality.py, line 347
result = subprocess.run(
skills/last30days/scripts/evaluate_search_quality.py, line 372
subprocess.run(
skills/last30days/scripts/evaluate_search_quality.py, line 390
subprocess.run(
skills/last30days/scripts/verify_v3.py, line 43
return subprocess.run(
skills/last30days/scripts/verify_v3.py, line 61
*subprocess.run(
Install and update
Serious
install fetches a script from the network. The docs document an installer that pipes a download into a shell.
INSTALL_REMOTE_SCRIPT INSTALL_DOCUMENTED_INSTALLER
skills/hermes-agent/SKILL.md, line 13
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
skills/last30days/scripts/lib/backends.py, line 290
"install the Grok CLI: curl -fsSL https://x.ai/cli/install.sh | bash, "
skills/last30days/scripts/lib/grok_x.py, line 8
Install: curl -fsSL https://x.ai/cli/install.sh | bash (or npm i -g @xai-official/grok)
Show more
skills/last30days/SKILL.md, line 685
- **Grok CLI (no X credential):** install with `curl -fsSL https://x.ai/cli/install.sh | bash`, then `grok login`. No X account, no cookies, no API key. Needs a Grok plan; calls dr
skills/last30days/scripts/lib/health.py, line 186
"install the Grok CLI: curl -fsSL https://x.ai/cli/install.sh | bash, then run `grok login`",
skills/last30days/scripts/lib/health.py, line 187
"reinstall the Grok CLI: curl -fsSL https://x.ai/cli/install.sh | bash; the current binary won't run",
skills/last30days/scripts/lib/prescriptions.py, line 97
"install the Grok CLI (curl -fsSL https://x.ai/cli/install.sh | bash) "
Network
Concern
can reach a host that is not written as a fixed address. can reach kit.svel. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
skills/brainstorming/scripts/helper.js, line 80
ws = new WebSocket(websocketUrl());
skills/caveman-setup/SKILL.md, line 159
curl -sS "$CAVE_GATEWAY_URL/w/<app>/v1/chat/completions" \
skills/caveman-setup/SKILL.md, line 165
curl -sS "$CAVE_GATEWAY_URL/w/<app>/v1/messages" \
Show more
skills/last30days/scripts/lib/bird_x.py, line 375
# Windows/Node 24: the vendored Bird CLI uses native fetch (undici),
skills/last30days/scripts/lib/bluesky.py, line 121
response = http.request(
skills/last30days/scripts/lib/bluesky.py, line 240
response = http.request(
skills/last30days/scripts/lib/chrome_cdp.py, line 108
with urllib.request.urlopen(url, timeout=_HTTP_TIMEOUT) as resp:
skills/last30days/scripts/lib/chrome_cdp.py, line 177
sock = socket.create_connection((host, port), timeout=timeout)
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
hooks/caveman-config.js, line 281
// the flag with a symlink to ~/.ssh/id_rsa (or any user-readable secret). Every
hooks/caveman-mode-tracker.js, line 324
// pointing at something like ~/.ssh/id_rsa, it returns null and we emit
hooks/caveman-stats.js, line 92
const raw = process.env.CAVEMAN_RULE_OVERHEAD_TOKENS;
Show more
hooks/caveman-statusline.sh, line 48
# Refuse symlinks - a local attacker could point the flag at ~/.ssh/id_rsa and
skills/brainstorming/scripts/server.cjs, line 123
const TOKEN_FILE = process.env.BRAINSTORM_TOKEN_FILE || null;
skills/brainstorming/scripts/server.cjs, line 133
if (process.env.BRAINSTORM_TOKEN) {
skills/brainstorming/scripts/server.cjs, line 134
return { value: process.env.BRAINSTORM_TOKEN, source: 'env' };
skills/caveman-setup/SKILL.md, line 87
apiKey: process.env.OPENAI_API_KEY, // byok: unchanged · stored: use CAVE_API_KEY
skills/caveman-setup/SKILL.md, line 89
"x-cave-api-key": process.env.CAVE_API_KEY!,
skills/caveman-setup/SKILL.md, line 91
"x-cave-upstream-key": process.env.OPENAI_API_KEY!,
skills/ci-cd-and-automation/SKILL.md, line 274
.env.example → Committed (template for developers)
skills/ci-cd-and-automation/SKILL.md, line 275
.env → NOT committed (local development)
skills/ci-cd-and-automation/SKILL.md, line 276
.env.test → Committed (test environment, no real secrets)
skills/compress/scripts/compress.py, line 65
# developers on sensitive codebases cannot cross. detect.py already skips .env
skills/compress/scripts/compress.py, line 66
# by extension, but credentials.md / secrets.txt / ~/.aws/credentials would
skills/compress/scripts/compress.py, line 413
api_key = os.environ.get("ANTHROPIC_API_KEY")
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. the file cap was reached before every file was read.
OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
skills/last30days/SKILL.md, line 1
---
skills/last30days/scripts/lib/hackernews.py, line 1
"""Hacker News search via Algolia API (free, no auth required).
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 d4272dad4821. can delete files. install fetches a script from the network. The docs document an installer that pipes a download into a shell. can reach a host that is not written as a fixed address. can reach kit.svel. The description does not name that host. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: d4272dad4821a6e196b30253384baf6c214f2e54
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.