Grades are a hygiene check, not a security guarantee.

Claude Code, Plugin

jobxhunter

Searches live UK and Canada jobs, fits an ATS-safe CV to each role from your real experience, and recommends the gaps to close.

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

SECRETS_PATH_CREDENTIAL

Why this grade

  • SECRETS_PATH_CREDENTIAL Medium

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

    scripts/_lib.py, line 194 ~/.claude/.credentials.json under `pluginSecrets[<plugin@marketplace>]`; the same

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

    scripts/check_release.py, line 226

    out = subprocess.run(

    scripts/check_release.py, line 271

    out = subprocess.run(

    scripts/check_release.py, line 306

    out = subprocess.run(["git", "grep", "-I", "-h", "-E", r"github\.com[:/][A-Za-z0-9-]+/"],

    Show more

    scripts/check_release.py, line 317

    bare = subprocess.run(["git", "grep", "-I", "-h", "-oE", r"marketplace add [A-Za-z0-9-]+/[A-Za-z0-9._-]+"],

    scripts/check_release.py, line 331

    remote = subprocess.run(["git", "remote", "get-url", "origin"],

    scripts/check_release.py, line 352

    out = subprocess.run(

    scripts/cvgen.py, line 257

    shutil.rmtree(tmp, ignore_errors=True)

    scripts/daily_bundle.py, line 131

    shutil.rmtree(target, ignore_errors=True)

    scripts/daily_bundle.py, line 307

    subprocess.run([sys.executable, os.path.abspath(__file__), "--root", apps,

    scripts/daily_bundle.py, line 323

    shutil.rmtree(ws, ignore_errors=True)

    scripts/fetch_jds.py, line 494

    shutil.rmtree(tmp, ignore_errors=True)

    scripts/harvest.py, line 884

    shutil.rmtree(tmp, ignore_errors=True)

    scripts/harvest.py, line 938

    shutil.rmtree(tmp, ignore_errors=True)

    scripts/import_rows.py, line 218

    shutil.rmtree(tmp, ignore_errors=True)

    scripts/init_workspace.py, line 471

    init = subprocess.run([sys.executable, os.path.join(HERE, "tracker.py"),

    scripts/l2gen.py, line 697

    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 a host that is not written as a fixed address. can reach example.test. The description does not name that host.

    NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST

    scripts/fetch_jds.py, line 176

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

    scripts/fetch_jds.py, line 271

    text, who = fetch(url)

    scripts/harvest.py, line 128

    return urllib.request.urlopen(req, timeout=timeout)

    Show more

    scripts/harvest.py, line 135

    return urllib.request.urlopen(req, timeout=timeout)

    scripts/harvest_companies.py, line 75

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

    scripts/harvest_companies.py, line 382

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

    scripts/scrape.py, line 91

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

    scripts/scrape.py, line 107

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

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV

    connectors/adzuna-mcp/server.py, line 37

    # Load a local .env if present so `python server.py` (and the mcp-inspector verify

    connectors/adzuna-mcp/server.py, line 44

    # Anchor to THIS file's directory so the connector's own .env is found even when

    scripts/_lib.py, line 194

    ~/.claude/.credentials.json under `pluginSecrets[<plugin@marketplace>]`; the same

    Show more

    connectors/adzuna-mcp/server.py, line 46

    load_dotenv(dotenv_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), ".env"),

    connectors/adzuna-mcp/server.py, line 146

    app_key = os.getenv("ADZUNA_APP_KEY")

    connectors/reed-mcp/server.py, line 34

    # Load a local .env if present so `python server.py` (and the mcp-inspector verify

    connectors/reed-mcp/server.py, line 41

    # Anchor to THIS file's directory so the connector's own .env is found even when

    connectors/reed-mcp/server.py, line 43

    load_dotenv(dotenv_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), ".env"),

    connectors/reed-mcp/server.py, line 101

    key = os.getenv("REED_API_KEY")

    scripts/_lib.py, line 200

    path = store or os.path.join(os.path.expanduser("~"), ".claude", ".credentials.json")

    scripts/harvest_companies.py, line 391

    env = os.environ.get("FIRECRAWL_API_KEY", "").strip()

    scripts/scrape.py, line 63

    return explicit or os.environ.get("JOBXHUNTER_SCRAPER_KEYFILE") or ""

  • 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 5fb25ee3292c. can delete files. can reach a host that is not written as a fixed address. can reach example.test. The description does not name that host. reads a credential or environment file.

Date and source

Date checked:

View source

github.com

Commit graded: 5fb25ee3292c95b53f25ca9af7d0fbc6f5505d41

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