Atlas / Skills / zoolcoder / scoutjobs

scoutjobsBLOCK

skills/zoolcoder/scoutjobs

Open-source job-search OS for job seekers: Agent Skills for Claude Code/Codex/Cursor/Gemini/Copilot, Go CLI, local dashboard, learns from your decisions

Verdict
BLOCK
Grade
D
Trust score
69 /100
Version
—
Hosts
6 documented
License
MIT
Stars
3
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Your job search, on your machine. An open-source job-search operating system for the person looking for a job, driven by AI coding agents. One repo gives you:

  • Skills (Agent Skills standard) for the whole loop: find jobs, score fit, check your CV, tailor resume and cover letter, track applications, prep and mock interviews, debrief, negotiate, upskill.
  • A learning loop: every skip, apply, withdraw and declined offer is logged with your reason. learn-preferences turns those into preferences you confirm, and the scorer and tailoring skills read them. It gets better the longer you use it.
  • A dashboard for people, not just developers: a single Go binary, SQLite, no Node, one embedded script, no external assets, bound to localhost. Overview with your next best move, job search with plain-language match reasons, pipeline board where every card opens the job and moves to the next stage with one click or a drag, a per-job Continue with AI button that tailors your CV and co
Read from source at commit 6f98ac4088abOBSERVED · 2026-10-12
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

git clone https://github.com/ZoolCoder/scoutjobs && cd scoutjobs
git clone https://github.com/zoolcoder/scoutjobs && cd scoutjobs
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
claude-desktopmentioned
codexmentioned
copilotmentioned
cursormentioned
gemini-climentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: application-tracker
description: Records application state in ScoutJobs. Marks jobs drafted, applied, interview, offer, rejected, withdrawn or no_response, adds notes and follow-up reminders, and keeps the per-application folder tidy. Use when the user says "I applied", "mark as rejected", "they replied", "track this", "status update", or asks what is pending.
license: MIT
---

# Application tracker

The tracker is the `scoutjobs` CLI. Status vocabulary, in pipeline order:

`new` → `ranked` → `drafted` → `applied` → `interview` → `offer` → `hired`
Side exits: `skipped`, `rejected`, `no_response`, `withdrawn`, `offer_declined`.

## Commands you will use

```bash
scoutjobs job list --open                      # everything still in play
scoutjobs job show <id|company/title>           # one job with history
scoutjobs job set <id> --status applied --note "applied via Greenhouse, used CV v3"
scoutjobs job set <id> --status rejected --note "rejected after screen: wanted more k8s"
scoutjobs job set <id> --deadline 2026-10-31 --salary-min 80000 --salary-max 95000 --currency EUR
scoutjobs interview add <id> --stage screen --at 2026-10-20T14:00 --format video --interviewer "Jane, EM"
scoutjobs stats                                 # funnel, follow-ups due, stale list
scoutjobs email sync [--dry-run]                # IMAP: log replies as reply:received, move to interview/rejected when the wording is clear
```

Resolve jobs by id, by `company/title`, or by a unique company substring. If the CLI says the reference is ambiguous, list and ask.

## Rules

- Every status change gets a `--note` with the fact that caused it. Notes feed the activity log and the weekly review.
- `applied` only when the user confirms they submitted. Drafts ready but not sent are `drafted`.
- When the user reports a rejection or ghosting, ask one question: "Anything you'd do differently?" Put the answer in the note. Do not push.
- When an interview is scheduled, add it with `scoutjobs interview add` (the job flips to `interview` automatically) and suggest `interview-prep`.
- When an offer arrives, set `offer`, record salary fields, and suggest `salary-negotiation-prep` or `offer-comparison-analyzer`.
- Decisions that teach preferences go through `scoutjobs decision log`: withdrawals (`--kind withdraw`), declined offers (`--kind decline_offer`), accepted offers (`--kind accept_offer`). Always include `--reason` in the user's words and `--signals` with the facts.

## Per-application folder

`scoutjobs job show <id> --json` returns `dir`, usually `~/.scoutjobs/applications/<company>_<title>/`. Keep there: `posting.md`, `resume.md` (tailored), `cover-letter.md`, `research.md`, `interview-prep.md`, `stories.md`, `debrief-<date>.md`. Nothing else.

## Follow-ups

`scoutjobs stats` lists applications quiet for more than `follow_up_days` (config, default 10). For each, offer a two-sentence follow-up message the user can send. After they send it, `scoutjobs job set <id> --note "follow-up sent"` which resets the quiet timer. Applications quiet past `stale_days` (default 60) get `no_response` only when the user agrees.
05

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (4 observation(s))
Network
declared (2 observation(s))
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (14)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
internal/runner/runner.go:296
func (rn *Runner) Exec(ctx context.Context, run *Run, ag Agent, j store.Job, echo io.Writer) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
internal/runner/runner.go:340
func (rn *Runner) exec(ctx context.Context, run *Run, ag Agent, j store.Job) error {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
commands/dash.md:6
Run `scoutjobs serve` in the background (for example `nohup scoutjobs serve >/dev/null 2>&1 &` or the platform's background-task feature), wait one second, then tell the user the URL printed by `scout
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitleaksignore
.gitleaksignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.golangci.yml
.golangci.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.goreleaser.yaml
.goreleaser.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
internal/apply/apply_test.go:36
if _, err := WriteFile(dir, "../../escape.md", []byte("x")); err != nil {
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:65
scoutjobs serve          # dashboard at http://127.0.0.1:7070
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
README.md:142
**Claude Code on the web, Codex cloud, hosted n8n**: no shell on your machine, so they use the dashboard's JSON API. Set `api_token`, run `scoutjobs serve` behind a tunnel (`cloudflared tunnel --url h
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
adapters/cloud/AGENTS.md:14
cloudflared tunnel --url http://127.0.0.1:7070  # or ngrok, tailscale serve, ssh -R; prints a public https URL
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/modules/ROOT/pages/api.adoc:49
$ curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:7070/api/brief | jq .stats
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@antora/lunr-extension, asciidoctor-kroki
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/mock-interview/references/library/sysdesign/whatsapp-chat.md:127
- Server history (Slack/Telegram model): new-device backfill and multi-device sync are trivial, server-side search works, message recall is consistent. The price: an archive measured in petabytes (50B
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.conditional_escalation · CWE-94, CWE-1427
skills/apply-by-email/SKILL.md:3
description: Sends one application by e-mail through the user's own SMTP account, cover letter as body and tailored resume attached, after showing the full message and getting an explicit yes. Use whe

Gates applied: no_behavioural_pass.

Audited 2026-10-12 · audit v0.4.1 · source sha 6f98ac4088abfull audit observations/trust-audit/skill/zoolcoder__scoutjobs.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-126f98ac4088abBLOCKD69first audit
07

Questions

What does the scoutjobs skill do?

Open-source job-search OS for job seekers: Agent Skills for Claude Code/Codex/Cursor/Gemini/Copilot, Go CLI, local dashboard, learns from your decisions

Is scoutjobs safe to install?

No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can scoutjobs access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does scoutjobs work with?

Its documentation mentions claude-code, claude-desktop, codex, copilot, cursor and gemini-cli. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (6f98ac4088ab), read on 2026-10-12. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement