Grades are a hygiene check, not a security guarantee.

Claude Code, Plugin

Huggingface Skills

Build, train, evaluate, and use open source AI models, datasets, and spaces.

Compatibility: Not stated.

Grade D

Two or more Medium findings, or a High finding. Only try it in a sandbox.

Graded by PlugVetRubric v2

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

Rescanned at commit c3ff942be3e0, unchanged since the check below.

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/hf-cli/SKILL.md, line 6 Install: `curl -LsSf https://hf.co/cli/install.sh | bash -s`.

  • SECRETS_PATH_CREDENTIAL Medium

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

    skills/huggingface-spaces/references/debugging.md, line 191 ssh -i ~/.ssh/hf_dev -o BatchMode=yes -o StrictHostKeyChecking=accept-new \

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

    scripts/build_skill_distribution.py, line 241

    shutil.rmtree(out_dir)

    scripts/build_skills_index.py, line 60

    return subprocess.check_output(

    scripts/plugin_versions.py, line 151

    return subprocess.check_output(["git", *args], cwd=ROOT, text=True).strip()

    Show more

    scripts/run_skills_help.py, line 27

    result = subprocess.run(

    skills/hf-cloud-python-env-setup/scripts/setup_env.py, line 53

    proc = subprocess.run(

    skills/hf-cloud-python-env-setup/scripts/setup_env.py, line 68

    probe = subprocess.run(["py", f"-{version}", "--version"], capture_output=True, text=True)

    skills/hf-cloud-python-env-setup/scripts/setup_env.py, line 99

    shutil.rmtree(venv_dir)

    skills/hf-cloud-python-env-setup/scripts/setup_env.py, line 103

    if subprocess.run([uv, "venv", "--python", python_version, str(venv_dir)]).returncode != 0:

    skills/hf-cloud-python-env-setup/scripts/setup_env.py, line 113

    if subprocess.run([*base_cmd, "-m", "venv", str(venv_dir)]).returncode != 0:

    skills/hf-cloud-python-env-setup/scripts/setup_env.py, line 126

    rc = subprocess.run(

    skills/hf-cloud-sagemaker-production-defaults/scripts/invoke_endpoint.py, line 176

    os.remove(p)

  • Install and update

    Serious

    install fetches a script from the network.

    INSTALL_REMOTE_SCRIPT

    apps/quests/README.md, line 68

    curl -LsSf https://hf.co/cli/install.sh | bash

    skills/hf-cli/SKILL.md, line 6

    Install: `curl -LsSf https://hf.co/cli/install.sh | bash -s`.

    skills/train-sentence-transformers/references/hf_jobs_execution.md, line 9

    - Access to the `hf_jobs()` MCP tool, or the `hf` CLI (`curl -LsSf https://hf.co/cli/install.sh | bash -s`).

    Show more

    .github/workflows/publish-single-clawhub-skill.yml, line 113

    run: curl -LsSf https://hf.co/cli/install.sh | bash -s

  • Network

    Concern

    can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host. can reach raw.githubusercontent.com. The description does not name that host. can reach datasets-server.huggingface.co. The description does not name that host. can reach pypi.org. The description does not name that host.

    NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST

    apps/evals-leaderboard/app.py, line 52

    resp = requests.get(LEADERBOARD_URL, timeout=30)

    apps/evals-leaderboard/app.py, line 57

    resp = requests.get(METADATA_URL, timeout=30)

    apps/hackers-leaderboard/app.py, line 46

    resp = requests.get(LEADERBOARD_URL, timeout=30)

    Show more

    apps/hackers-leaderboard/app.py, line 51

    resp = requests.get(METADATA_URL, timeout=30)

    skills/hf-cloud-serving-image-selection/SKILL.md, line 65

    curl -s https://huggingface.co/<model-id>/raw/main/config.json

    skills/hf-cloud-serving-image-selection/SKILL.md, line 189

    curl -s https://api.github.com/repos/aws/deep-learning-containers/contents/docs/src/data/huggingface-vllm

    skills/hf-cloud-serving-image-selection/SKILL.md, line 190

    curl -s https://raw.githubusercontent.com/aws/deep-learning-containers/main/docs/src/data/huggingface-vllm/0.21.0-gpu-sagemaker.yml

    skills/huggingface-best/SKILL.md, line 46

    curl -s -H "Authorization: Bearer $(cat ~/.cache/huggingface/token)" \

    skills/huggingface-best/SKILL.md, line 59

    curl -s -H "Authorization: Bearer $(cat ~/.cache/huggingface/token)" \

    skills/huggingface-local-models/SKILL.md, line 82

    curl http://localhost:8080/v1/chat/completions \

    skills/huggingface-papers/SKILL.md, line 46

    curl -s "https://huggingface.co/papers/{PAPER_ID}.md"

    skills/huggingface-papers/SKILL.md, line 58

    curl -s -H "Accept: text/markdown" "https://huggingface.co/papers/{PAPER_ID}"

    skills/huggingface-papers/SKILL.md, line 70

    curl -s "https://huggingface.co/api/papers/{PAPER_ID}"

    skills/huggingface-papers/SKILL.md, line 84

    curl https://huggingface.co/api/models?filter=arxiv:{PAPER_ID}

    skills/huggingface-papers/SKILL.md, line 90

    curl https://huggingface.co/api/datasets?filter=arxiv:{PAPER_ID}

    skills/huggingface-papers/SKILL.md, line 96

    curl https://huggingface.co/api/spaces?filter=arxiv:{PAPER_ID}

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV

    apps/evals-leaderboard/collect_evals.py, line 448

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

    apps/hackers-leaderboard/collect_points.py, line 495

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

    skills/huggingface-spaces/references/debugging.md, line 191

    ssh -i ~/.ssh/hf_dev -o BatchMode=yes -o StrictHostKeyChecking=accept-new \

    Show more

    skills/huggingface-community-evals/scripts/inspect_eval_uv.py, line 61

    hf_token = os.getenv("HF_TOKEN")

    skills/huggingface-community-evals/scripts/inspect_vllm_uv.py, line 37

    hf_token = os.getenv("HF_TOKEN")

    skills/huggingface-community-evals/scripts/lighteval_vllm_uv.py, line 34

    hf_token = os.getenv("HF_TOKEN")

    skills/huggingface-llm-trainer/scripts/hf_benchmarks.py, line 122

    token = os.getenv("HF_TOKEN")

    skills/huggingface-llm-trainer/scripts/unsloth_sft_example.py, line 266

    token = os.environ.get("HF_TOKEN") or os.environ.get("hfjob")

    skills/huggingface-paper-publisher/examples/example_usage.md, line 306

    # Or use .env file

    skills/huggingface-paper-publisher/examples/example_usage.md, line 307

    echo "HF_TOKEN=your_token_here" > .env

    skills/huggingface-paper-publisher/references/quick_reference.md, line 141

    echo "HF_TOKEN=your_token" > .env

    skills/huggingface-paper-publisher/scripts/paper_manager.py, line 44

    self.token = hf_token or os.getenv("HF_TOKEN") or get_token()

    .gitignore, line 138

    # Environments

    skills/hf-cloud-aws-context-discovery/SKILL.md, line 64

    `aws configure list` handles env-var overrides and shows the resolved effective values. Prefer it over parsing `~/.aws/config` yourself. If you need to read raw config (e.g. to lis

    skills/huggingface-paper-publisher/references/quick_reference.md, line 139

    ### Or use .env file

    skills/huggingface-spaces/references/debugging.md, line 171

    - Generate a keypair locally: `ssh-keygen -t ed25519 -f ~/.ssh/hf_dev -N ''` (no passphrase keeps automation simple; user can pick differently if they prefer).

  • 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 c3ff942be3e0. can delete files. install fetches a script from the network. can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host. can reach raw.githubusercontent.com. The description does not name that host. can reach datasets-server.huggingface.co. The description does not name that host. can reach pypi.org. The description does not name that host. reads a credential or environment file.

Date and source

Date checked:

View source

github.com

Commit graded: c3ff942be3e07116b475253f0a8fc4f54682c1a8

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