Grades are a hygiene check, not a security guarantee.

Claude Code, Skill

robium

Self-improving robotics expertise for AI agents: skills for architecting, integrating, simulating, visualizing, testing, and training physical-AI applications (ROS 2, Nav2, Gazebo, LeRobot, Isaac, HuggingFace) — captured from real builds, mined from the ecosystem, evidence-verif

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 ce944953d11c, unchanged since the check below.

INSTALL_REMOTE_SCRIPT NETWORK_HOST_FROM_INPUT

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).

    scripts/bootstrap.sh, line 28 command -v uv >/dev/null 2>&1 || { say "Installing uv…"; curl -LsSf https://astral.sh/uv/install.sh | sh; }

  • NETWORK_HOST_FROM_INPUT Medium

    A file takes a URL or endpoint as input and has no fixed host list.

    skills/environments/references/docker-patterns.md, line 52 # no pip/curl needed for this step.

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/scripts/session_end.py, line 35

    os.remove(path)

    hooks/scripts/session_end.py, line 79

    os.remove(f)

    hooks/scripts/session_end.py, line 123

    os.remove(tmp)

    Show more

    scripts/engine/run_task_checks.py, line 70

    subprocess.run(

    scripts/engine/run_task_checks.py, line 115

    proc = subprocess.Popen(

    scripts/engine/run_trigger_evals.py, line 56

    out = subprocess.run(["claude", "-p", prompt],

    scripts/engine/verify_citations.py, line 41

    blob = subprocess.run(

    skills/test-assets/scripts/fetch_assets.py, line 150

    shutil.rmtree(target)

  • Install and update

    Serious

    install fetches a script from the network.

    INSTALL_REMOTE_SCRIPT

    docs/secrets.md, line 77

    (`brew install dopplerhq/cli/doppler` or `curl -Ls https://cli.doppler.com/install.sh | sh`),

    docs/secrets.md, line 99

    curl -Ls https://cli.doppler.com/install.sh | sh

    scripts/bootstrap.sh, line 28

    command -v uv >/dev/null 2>&1 || { say "Installing uv…"; curl -LsSf https://astral.sh/uv/install.sh | sh; }

    Show more

    scripts/bootstrap.sh, line 42

    else curl -Ls https://cli.doppler.com/install.sh | sh; fi

    .claude/hooks/session-start.sh, line 23

    curl -LsSf https://astral.sh/uv/install.sh | sh

  • Network

    Serious

    accepts a host from input, with no fixed list in this file.

    NETWORK_HOST_FROM_INPUT

    skills/environments/references/docker-patterns.md, line 52

    # no pip/curl needed for this step.

    skills/live-demo/examples/demo_gateway.py, line 61

    token = json.load(urllib.request.urlopen(tok_req, timeout=2))['access_token']

    skills/live-demo/examples/demo_gateway.py, line 62

    project = urllib.request.urlopen(urllib.request.Request(

    Show more

    skills/live-demo/examples/demo_gateway.py, line 72

    data = json.load(urllib.request.urlopen(req, timeout=5))

    skills/ros2/TURTLEBOT4.md, line 21

    curl -X POST -H "Content-Type: application/json" -d '{}' \

    skills/test-assets/scripts/fetch_assets.py, line 105

    def fetch(asset: dict, destination: Path) -> None:

    skills/test-assets/scripts/fetch_assets.py, line 114

    with urllib.request.urlopen(request) as response, archive_path.open("wb") as output:

    skills/test-assets/scripts/fetch_assets.py, line 174

    fetch(asset, args.destination)

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_PATH_DOTENV

    scripts/run.sh, line 6

    # 2) .env - else if a local ./.env exists (gitignored), source it

    scripts/run.sh, line 14

    # Populate a .env (maintainer, if you don't use Doppler interactively):

    scripts/run.sh, line 15

    # doppler secrets download --no-file --format env > .env # from Doppler, or

    Show more

    scripts/run.sh, line 16

    # cp .env.template .env && edit in your values # by hand

    scripts/run.sh, line 23

    elif [ -f .env ]; then

    scripts/run.sh, line 24

    set -a; . ./.env; set +a # source 2: local .env

    .gitignore, line 43

    # Secrets - managed in Doppler; never commit real values (template is allowed)

    .gitignore, line 44

    .env

  • 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 ce944953d11c. can delete files. install fetches a script from the network. accepts a host from input, with no fixed list in this file. reads a credential or environment file.

Date and source

Date checked:

View source

github.com

Commit graded: ce944953d11ccdbd32613c4746389bc78a24e8c5

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