hunt

An automated daily job search that collects live roles, sorts them, checks their details, and prepares application materials for suitable jobs. It works from a populated job-search workspace and records the result of each role.

In plain words
What is it for?
Use it to run a full daily search across configured sources, triage adverts, tailor applications, write cover letters, create alternative CV versions, and bundle the day’s files.
Why use it?
It keeps job searching from stopping at a list of links or a spreadsheet. It also makes sure fetched adverts are reviewed, suitable applications are prepared, and skipped or drafted roles are tracked.

Command

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add commands/soheilfallah/jobxhunter/hunt
Clone the repo
git clone --depth 1 https://github.com/soheilfallah/jobxhunter
Per session 20 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 796 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00020 $0.00796
Opus 5 $0.00010 $0.00398
Sonnet 5 $0.00004 $0.00159
Haiku 4.5 $0.00002 $0.00080

Measured yesterday against content hash 9c86fa91f1d1, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

hunt scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

commands/hunt.md · 50 lines

What it actually says

Use the jobxhunter skill's DAILY HUNT routine against the populated workspace.

Open references/run-the-hunt.md and follow it (context discipline + every command with its flags). In short: read STATE.md → read the profile fresh → python "$root/scripts/run_hunt.py" --workspace "$w" (sweep every source across the whole keyword file, company boards, consolidate, rank, verify, fetch JDs → to-tailor.csv) → triage every fetched advert on disk → tailor every role you can defend → write each cover letter in full, finished and send-ready → write the L2 alternative-world CV per role → track & file every job (Drafted/Skipped) → daily_bundle.py --root <apps> → verify.

The day is not done when the script exits. run_hunt.py ends at to-tailor.csv; if the day's bundle folder holds no .docx, the day produced a spreadsheet and left the work.

Triage is tracked on disk, not in your head. A run that reads the loudest lane properly and skims the rest leaves the best fit unread.

python "$root/scripts/triage.py" --workspace "$w" --init       # one row per fetched advert
python "$root/scripts/triage.py" --workspace "$w" --next --n 5  # ROUND-ROBIN BY LANE, not by rank
python "$root/scripts/triage.py" --workspace "$w" --mark <url> --verdict applied|skipped --reason "..."
python "$root/scripts/triage.py" --workspace "$w" --status      # EXITS NON-ZERO while any pending

--next hands out work round-robin across lanes on purpose. A skip needs a reason — skipping most of the adverts is fine, leaving no record of why is not. The day is not finished until --status exits 0.

Every tailored folder must pass scripts/validate_profile.py --folder <dir> (exit 0; exit 2 = broken rules, stop) and the humanizer pass (the installed humanizer skill, if present) before bundling.

Sources the script cannot reach (an OAuth MCP connector such as Indeed, or a board that serves a bot interstitial to a plain GET): query them yourself, then hand the rows over so they go through the same gate, ledger and query log as everything else — indeed_to_rows.py + import_rows.py, any time before --stage consolidate. See references/daily-hunt.md.

Relevance is a ranking, not a gate. The pipeline rejects only security-clearance titles and the Global knockouts list in SEARCH-KEYWORDS.md; an unmatched title scores 0 and sorts last, never dropped. Judge fit yourself from the advert — do not expect the pipeline to have judged it for you.

Before writing anything up: python "$root/scripts/verify_run.py" --workspace "$w" --date <DATE>. A FAIL means the run is thin — go back and search more; never write it up as thorough.

Follow SKILL.md ("Command: DAILY HUNT") and references/daily-hunt.md. Only LIVE, only NEW roles; dedupe on the canonical link key; never touch Applied rows. STATE.md at the workspace root is the handover: read it first, overwrite it last, keep it short.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 50 lines · 20 tokens per session scan A 9c86fa91f1d1

Subscribe to this mod's changes

hunt is a command published in the GitHub repository soheilfallah/jobxhunter (8 stars, last pushed 4d ago), licensed MIT. It adds 20 tokens to every session and 796 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.