Claude Code, Plugin
ClaudeSkills
Skills for Claude.ai and Claude Code
Compatibility: Not stated.
Grade C
One Medium finding. Read the findings before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit cf6f6fb91cfc, unchanged since the check below.
NETWORK_HOST_FROM_INPUT
Why this grade
- NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
api-designer/references/common-patterns.md, line 296
fetch('/api/v1/payments', {
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
Note
requests shell access. The manifest names this permission.
PERMISSION_SHELL_DECLARED
code-reviewer/scripts/review_helper.py, line 51
result = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
code-reviewer/scripts/review_helper.py, line 95
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
code-reviewer/scripts/review_helper.py, line 102
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
Show more
code-reviewer/scripts/review_helper.py, line 109
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
code-reviewer/scripts/review_helper.py, line 138
result = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
code-reviewer/scripts/review_helper.py, line 177
result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
markdown-pro/scripts/markdown_helper.py, line 108
result = subprocess.run(cmd, capture_output=True, text=True, check=True)
code-reviewer/examples/security_patterns.md, line 59
os.system(f"cat {filename}")
Install and update
Note
README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell.
INSTALL_DOCUMENTED_INSTALLER
README.md, line 94
# Requires UV: curl -LsSf https://astral.sh/uv/install.sh | sh
env-config/README.md, line 20
curl -LsSf https://astral.sh/uv/install.sh | sh
env-config/SKILL.md, line 454
- [ ] Install UV: `curl -LsSf https://astral.sh/uv/install.sh | sh`
Show more
env-config/SKILL.md, line 58
curl -LsSf https://astral.sh/uv/install.sh | sh
env-config/references/testing-guide.md, line 421
run: curl -LsSf https://astral.sh/uv/install.sh | sh
env-config/references/troubleshooting.md, line 144
curl -LsSf https://astral.sh/uv/install.sh | sh
Network
Concern
can reach a host that is not written as a fixed address. can reach api.example.com. The description does not name that host. accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
api-designer/references/common-patterns.md, line 296
fetch('/api/v1/payments', {
code-reviewer/references/performance_guide.md, line 294
response = requests.get(url) # Blocks for each request
code-reviewer/references/performance_guide.md, line 319
return requests.get(url).json()
Show more
code-reviewer/references/performance_guide.md, line 332
response = requests.get('https://api.example.com/data')
code-reviewer/references/performance_guide.md, line 338
response = requests.get(
docker-workflow/examples/Dockerfile.multi-stage, line 109
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"
error-detective/examples/common_errors.md, line 304
const response = await fetch(url);
error-detective/examples/common_errors.md, line 322
const response = await fetch(url);
error-detective/examples/common_errors.md, line 741
fetch(url)
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
docker-workflow/SKILL.md, line 44
.env
env-config/SKILL.md, line 102
uv add python-dotenv # For .env file loading
env-config/SKILL.md, line 123
.env
Show more
env-config/SKILL.md, line 124
.env.local
env-config/SKILL.md, line 125
.env.*.local
env-config/SKILL.md, line 142
# .env.template - Commit this file
env-config/SKILL.md, line 143
# Copy to .env and fill in actual values
env-config/SKILL.md, line 193
"""Load appropriate .env file based on environment."""
env-config/SKILL.md, line 290
'anthropic_api_key': os.getenv('ANTHROPIC_API_KEY', '')
mcp-builder/SKILL.md, line 344
API_KEY = os.getenv("API_KEY") # ✅ Good
mcp-builder/SKILL.md, line 386
API_KEY = os.getenv("API_KEY")
mcp-builder/examples/advanced-server.py, line 71
GITHUB_TOKEN = os.getenv("GITHUB_TOKEN")
mcp-builder/examples/advanced-server.py, line 72
WEATHER_API_KEY = os.getenv("WEATHER_API_KEY")
mcp-builder/examples/advanced-server.py, line 73
MCP_API_KEY = os.getenv("MCP_API_KEY")
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
Licence
Note
no licence file found.
LICENCE_MISSING
No file path was stored.
no licence file found.
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit cf6f6fb91cfc. requests shell access. The manifest names this permission. README documents an installer that pipes a download into a shell. 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 api.example.com. The description does not name that host. accepts a host from input, with no fixed list in this file. reads a credential or environment file. no licence file found.
Date and source
Date checked:
github.com
Commit graded: cf6f6fb91cfc0c9594942cd629c2217605e47ef5
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.