Grades are a hygiene check, not a security guarantee.

Claude Code, Plugin

ClaudeSkills

Skills for Claude.ai and Claude Code

Compatibility: Not stated.

Grade C

One Medium finding. Read the findings before installing.

Graded by PlugVetRubric v2

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:

View source

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.

Read how this letter is chosen