Grades are a hygiene check, not a security guarantee.

Claude Code, Skill

Career Manager

Orchestrate the complete career-manager system across job-search, company-research, job-tracker, and cv-tailor.

Compatibility: Not stated.

Grade D

Two or more Medium findings, or a High. 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.

Pattern found, check before installing

The checks matched a pattern that needs a closer look. It does not mean the code is harmful. Read the quoted lines below.

  • NETWORK_HOST_FROM_INPUT High

    host from input plus a credential path in operative code

  • AGENT_HIDDEN_STEP High

    instruction in an agent instruction file without defensive wording

NETWORK_HOST_FROM_INPUT AGENT_HIDDEN_STEP SECRETS_PATH_CREDENTIAL

Why this grade

  • NETWORK_HOST_FROM_INPUT High

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

    job-search/scripts/core/todoist_client.py, line 61 response = requests.get(url, headers=self.headers, params=params)

  • AGENT_HIDDEN_STEP High

    Text tells the agent to hide a step or not to tell the user.

    onboarding/SKILL.md, line 84 te tool requirement). Do this silently. Do NOT tell the user you're reading before writing. Do NOT w

  • SECRETS_PATH_CREDENTIAL Medium

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

    job-search/scripts/core/send_email.py, line 28 CREDENTIALS_FILE = CREDS_DIR / 'gmail-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.

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

    Note

    requests shell access. The manifest names this permission.

    PERMISSION_SHELL_DECLARED

    job-search/scripts/ops/run_pipeline.py, line 152

    result = subprocess.run(cmd, cwd=str(BASE))

    job-search/scripts/ops/run_pipeline.py, line 515

    subprocess.run([sys.executable, str(health_script)], cwd=str(health_script.parent))

  • Install and update

    Concern

    dependencies are not pinned. The docs document an installer that pipes a download into a shell.

    INSTALL_UNPINNED INSTALL_DOCUMENTED_INSTALLER

    onboarding/SKILL.md, line 20

    first (official installer: macOS/Linux `curl -LsSf https://astral.sh/uv/install.sh | sh`, Windows `powershell -ExecutionPolicy

    requirements.txt, line 5

    PyYAML>=6.0

  • Network

    Serious

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

    NETWORK_HOST_FROM_INPUT

    job-search/scripts/core/todoist_client.py, line 61

    response = requests.get(url, headers=self.headers, params=params)

    job-search/scripts/core/todoist_client.py, line 73

    response = requests.get(url, headers=self.headers)

    job-search/scripts/core/todoist_client.py, line 102

    response = requests.post(url, headers=self.headers, json=data)

    Show more

    job-search/scripts/core/todoist_client.py, line 118

    response = requests.post(url, headers=self.headers, json=kwargs)

    job-search/scripts/core/todoist_client.py, line 133

    response = requests.post(url, headers=self.headers)

    job-search/scripts/core/todoist_client.py, line 148

    response = requests.delete(url, headers=self.headers)

    job-search/scripts/core/todoist_client.py, line 155

    response = requests.get(url, headers=self.headers)

    job-search/scripts/ops/discovery_pipeline.py, line 255

    r = requests.get(url, timeout=10, allow_redirects=True, headers=h)

    job-tracker/scripts/todoist_sync.py, line 68

    resp = requests.get(f"{BASE_URL}/projects", headers=_headers(token))

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_PATH_CREDENTIAL

    job-search/scripts/core/send_email.py, line 28

    CREDENTIALS_FILE = CREDS_DIR / 'gmail-credentials.json'

    .gitignore, line 72

    *.pyc

  • Agent instructions

    Serious

    instructions tell the agent to hide a step.

    AGENT_HIDDEN_STEP

    onboarding/SKILL.md, line 84

    te tool requirement). Do this silently. Do NOT tell the user you're reading before writing. Do NOT w

  • 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 5535c281c8a2. requests shell access. The manifest names this permission. dependencies are not pinned. The docs document an installer that pipes a download into a shell. accepts a host from input, with no fixed list in this file. reads a credential or environment file. instructions tell the agent to hide a step.

Date and source

Date checked:

View source

github.com

Commit graded: 5535c281c8a2a1255109eb141d0b756884d28895

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