Grades are a hygiene check, not a security guarantee.

Claude Code, Skill

skills

skills, a skill listed in the PlugVet directory.

Compatibility: Not stated.

Grade C

One Medium finding. Read the report before installing.

Graded by PlugVetRubric v2

Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.

SECRETS_PATH_CREDENTIAL

Why this grade

  • SECRETS_PATH_CREDENTIAL Medium

    Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).

    _quarantine/walk-the-recipe/replay/replay.py, line 158 credential = base_path / "agent-config" / ".credentials.json"

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

    _quarantine/detached-child/SKILL.md, line 46

    subprocess.Popen([sys.executable, _DETACHED], cwd=root,

    _quarantine/frontend-slop/test_oracle.py, line 464

    return subprocess.run(

    _quarantine/frontend-slop/test_oracle.py, line 546

    ignored = subprocess.run(

    Show more

    _quarantine/walk-the-recipe/replay/replay.py, line 42

    return subprocess.run(["git", "-C", str(repo), *args], check=True,

    _quarantine/walk-the-recipe/replay/replay.py, line 87

    return subprocess.run(cmd, cwd=base, env=agent_env(base), stdout=out,

    _quarantine/walk-the-recipe/replay/replay.py, line 126

    out = subprocess.run(["cmd.exe", "/c", "ver"], capture_output=True, text=True).stdout

    _quarantine/walk-the-recipe/replay/replay.py, line 147

    shutil.rmtree(base_root, ignore_errors=True)

    _quarantine/walk-the-recipe/replay/replay.py, line 169

    subprocess.run([sys.executable, "-I", str(HERE / "strip_system.py"), str(trace)], check=True)

    _quarantine/walk-the-recipe/replay/replay.py, line 174

    version = subprocess.run(["claude", "--version"], capture_output=True,

    scripts/ci_local.py, line 162

    shutil.rmtree(temp, ignore_errors=True)

    scripts/test_install_form.py, line 372

    shutil.rmtree(path, onexc=make_writable_and_retry)

    scripts/test_install_form.py, line 374

    shutil.rmtree(path, onerror=make_writable_and_retry)

    scripts/test_validate_site_links.py, line 86

    shutil.rmtree(tmp, ignore_errors=True)

  • Install and update

    Pass

    No install-time script found, and dependencies are pinned or absent.

  • Network

    Concern

    can reach api.other.example. The description does not name that host. can reach openrouter.ai. The description does not name that host. can reach a host that is not written as a fixed address. can reach your.site. The description does not name that host.

    NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST

    _quarantine/frontend-slop/test_oracle.py, line 438

    'fetch("https://api.other.example/v1");',

    _quarantine/prefill-rejection/SKILL.md, line 54

    curl -s -X POST https://openrouter.ai/api/v1/chat/completions \

    scripts/release_gate.py, line 935

    with urllib.request.urlopen(request, timeout=15) as response: # noqa: S310

    Show more

    skills/engineering/stale-deploy/SKILL.md, line 61

    sleep 35 && curl ... # often blocked

    skills/engineering/stale-deploy/SKILL.md, line 72

    body=$(curl -fsS "$url") && {

    skills/engineering/stale-deploy/SKILL.md, line 94

    curl -fsS "https://your.site/" | grep -E "<verification-grep>" | head -20

    _quarantine/frontend-slop/fixtures.json, line 121

    "why": "An executed script calls fetch() against a host that is not on the allowlist.",

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV

    _quarantine/sdk-via-openrouter/SKILL.md, line 81

    if os.environ.get("ANTHROPIC_API_KEY"):

    _quarantine/sdk-via-openrouter/SKILL.md, line 84

    openrouter_key = os.environ.get("OPENROUTER_API_KEY", "")

    _quarantine/walk-the-recipe/replay/replay.py, line 158

    credential = base_path / "agent-config" / ".credentials.json"

    Show more

    mods/tips-anywhere/hooks/register.tsx, line 165

    const home = (await $.env.get('USERPROFILE')) ?? (await $.env.get('HOME'))

    mods/tips-anywhere/hooks/register.tsx, line 166

    const config = (await $.env.get('CLAUDE_CONFIG_DIR')) ?? (home ? `${home}/.claude` : undefined)

    scripts/release_gate.py, line 931

    token = os.environ.get("GITHUB_TOKEN")

    _quarantine/phantom-answers/SKILL.md, line 30

    - A wizard or setup script "succeeded" but its `.env` / config / report is empty or default.

    _quarantine/walk-the-recipe/replay/replay.py, line 157

    Path(os.environ["USERPROFILE"]) / ".claude/.credentials.json"))

  • Agent instructions

    Pass

    No instruction to ignore earlier instructions or to hide a step.

  • Obfuscation

    Concern

    contains an encoded blob in a file that should be readable.

    OBFUSCATION_ENCODED_BLOB

    CHANGELOG.md, line 1

    # Changelog

    skills/orchestration/decision-rights/gotchas.md, line 1

    # gotchas - decision-rights

    _quarantine/walk-the-recipe/receipts/trace-negative.ndjson.txt, line 1

    {"type":"assistant","message":{"model":"claude-opus-5-5","id":"msg_011CgEQZxFHrR9TGN9aZe5Mp","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signat

    Show more

    _quarantine/walk-the-recipe/receipts/trace-negative.ndjson.txt, line 4

    {"type":"assistant","message":{"model":"claude-opus-5-5","id":"msg_011CgEQa8jqGf6ZXT3TRrnaB","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signat

    _quarantine/walk-the-recipe/receipts/trace-negative.ndjson.txt, line 14

    {"type":"assistant","message":{"model":"claude-opus-5-5","id":"msg_011CgEQbGgb9HLSWX1yWRaEh","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signat

    _quarantine/walk-the-recipe/receipts/trace-negative.ndjson.txt, line 17

    {"type":"assistant","message":{"model":"claude-opus-5-5","id":"msg_011CgEQbbWg24sv7ynRCui4R","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signat

    _quarantine/walk-the-recipe/receipts/trace-positive.ndjson.txt, line 1

    {"type":"assistant","message":{"model":"claude-opus-5-5","id":"msg_011CgERQ9eEx8WBwp6MxxXLC","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signat

    _quarantine/walk-the-recipe/receipts/trace-positive.ndjson.txt, line 11

    {"type":"assistant","message":{"model":"claude-opus-5-5","id":"msg_011CgERQw7D5s4U16Pvqz7Ak","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signat

    _quarantine/walk-the-recipe/receipts/trace-positive.ndjson.txt, line 16

    {"type":"assistant","message":{"model":"claude-opus-5-5","id":"msg_011CgERRMBoSUXoPzrQc592D","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signat

    _quarantine/walk-the-recipe/receipts/trace-positive.ndjson.txt, line 19

    {"type":"assistant","message":{"model":"claude-opus-5-5","id":"msg_011CgERRUgVvdeMA5qbTQBtS","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"","signat

  • 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 dca024db0b34. can delete files. can reach api.other.example. The description does not name that host. can reach openrouter.ai. The description does not name that host. can reach a host that is not written as a fixed address. can reach your.site. The description does not name that host. reads a credential or environment file. contains an encoded blob in a file that should be readable.

Date and source

Date checked:

View source

github.com

Commit graded: dca024db0b34ebdfb195560029c29d1f1776312a

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