Grades are a hygiene check, not a security guarantee.

Claude Code, Skill

Ultimate Scraper Agent

A research skill for Claude Code that treats web research like engineering: several search engines behind one interface, parallel agent waves that never duplicate each other's work, and a verify gate that refuses to call a report done while any citation lacks a verbatim quote fro

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.

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.

    skills/research-agent/references/search.py, line 96 with urllib.request.urlopen(req, timeout=TIMEOUT) as r:

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

    evals/gate_mutations.py, line 42

    return subprocess.run([sys.executable, CLI, "--ledger", ledger, *args], capture_output=True, text=True)

    evals/gate_mutations.py, line 95

    os.remove(os.path.join(site, "deadline.html"))

    evals/gate_mutations.py, line 132

    shutil.rmtree(work)

    Show more

    evals/gate_mutations.py, line 133

    shutil.rmtree(site)

    skills/research-agent/references/fetch_hard.py, line 61

    p = subprocess.run(cmd, capture_output=True, text=True, timeout=150)

    skills/research-agent/references/search.py, line 176

    p = subprocess.run(["mcporter", "call", "exa.web_search_exa", "--args", args],

    skills/research-agent/references/search.py, line 214

    p = subprocess.run(["mcporter", "call", "hound.mcp_smart_search", "--args", args,

    skills/research-agent/references/search.py, line 228

    p = subprocess.run(["mcporter", "call", tool, "--args", json.dumps(args),

  • Install and update

    Pass

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

  • Network

    Serious

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

    NETWORK_HOST_FROM_INPUT

    skills/research-agent/references/search.py, line 96

    with urllib.request.urlopen(req, timeout=TIMEOUT) as r:

    skills/research-agent/references/sources.py, line 105

    with urllib.request.urlopen(req, timeout=timeout) as resp:

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_PATH_DOTENV

    skills/research-agent/references/search.py, line 30

    Keys: Umgebung, dann <skill>/.env. Keys werden nie ausgegeben.

    skills/research-agent/references/search.py, line 48

    os.path.join(SKILL_DIR, ".env"),

    README.md, line 53

    - **Keys** come from the environment, then from a local `.env` (gitignored). Inline comments in `.env` are stripped, a bug that once sent a comment as an API key.

    Show more

    README.md, line 86

    19 tests, no network, no keys, about one second. CI runs them on Linux and macOS with Python 3.10, 3.12 and 3.13. Covered: URL canonicalisation, merge ranking, fallback order and e

    README.md, line 94

    3. Optional: copy `skills/research-agent/.env.example` to `.env` and add the free-tier keys you have (Tavily, Exa, Serper, Jina). Missing keys are skipped.

    SECURITY.md, line 10

    | Key leakage | Keys come from the environment or a gitignored `.env`. `--status` reports presence only, never values. Keys are never written to reports, ledgers or the seen list.

    skills/research-agent/.env.example, line 1

    # Keys für den research-agent. ECHTE Werte gehören in eine .env (nicht committen)

    skills/research-agent/.gitignore, line 1

    # Falls dieses Skill in ein Git-Repo gespiegelt wird: echte Secrets nie mit.

  • 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 be03bf543c0e. can delete files. 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: be03bf543c0e16986eef4dd7af92c367294dd6cb

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