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.
npx agentmods add commands/madslorentzen/ai-job-search/rankgit clone --depth 1 https://github.com/MadsLorentzen/ai-job-searchWhat 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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00000 | $0.03459 |
| Opus 5 | $0.00000 | $0.01729 |
| Sonnet 5 | $0.00000 | $0.00692 |
| Haiku 4.5 | $0.00000 | $0.00346 |
Grade A, and why
rank scanned grade A with 1 finding 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 2d ago.
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.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
- **Before marking anything `expired`, the agent must exhaust the escalation order** in `.claude/skills/job-application-assistant/09-web-research.md`: a `WebFetch` 403 is a rejected *client*, not a missing page, and retr How it starts
The opening of the file, as written. The whole thing — 148 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/rank - Triage Scraped Jobs into a Ranked Shortlist
You are batch-scoring the jobs that /scrape has collected, so the user can decide where to spend /apply effort. /scrape finds and dedupes postings; /apply evaluates one at a time in depth. /rank is the bridge: it scores every new posting against the fit framework and returns a ranked shortlist.
/rank produces triage scores, not final evaluations. It scores from the posting text and the candidate profile only - no company research, no reviewer agent. /apply's Step 1 evaluation (which adds company research) remains authoritative and always re-runs when the user applies.
Follow these steps in order.
Step 0: Parse Input
$ARGUMENTS may contain:
- Nothing → rank all jobs with status
newinjob_scraper/seen_jobs.json - A focus area (e.g.
/rank data science) → rank only jobs whose title or stored fit-notes match the focus --all→ re-rank every job that has not been applied to, including previously ranked ones (useful after the profile changes)--top <N>→ shortlist size (default 5)
Step 1: Load State
- Read
job_scraper/seen_jobs.json. If the file is missing or has no entries, tell the user to run/scrapefirst and stop. - Read
job_search_tracker.csv. Build the exclusion set: any company+role already in the tracker is out of scope regardless of flags - it has been applied to or consciously tracked. - Select candidates: entries with status
new(or entries of any status with--all), minus the exclusion set, filtered by the focus area if one was given. - If no candidates remain, say so ("Nothing new to rank - run /scrape to find fresh postings") and stop.
- Read the scoring framework and profile once:
.claude/skills/job-application-assistant/04-job-evaluation.md.claude/skills/job-application-assistant/01-candidate-profile.md
State how many jobs will be ranked before proceeding.
Step 2: Batch-Fetch and Score
Dispatch parallel general-purpose agents via the Agent tool, ~5 jobs per agent (a single agent is fine for ≤5 jobs). Token-efficiency rules, consistent with /apply:
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.
- 2d ago First seen · 148 lines · 0 tokens per session scan A a33c698efc4d
rank is a command published in the GitHub repository MadsLorentzen/ai-job-search (39,400 stars, last pushed today), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 3,459 tokens. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
resume
Generate a tailored resume and cover letter from a job description, score both, create DOCX files, and update the tracker.
resume-team
Run the role-separated, fail-closed Resume Team workflow against a job description.
writing-coach
Human-voice writing coach — rewrite resumes and cover letters with brevity, burstiness, plain language, and authentic impact. Blocks AI-sounding prose.
cover-letter
Create a one-page cover letter for a job description and generate the final DOCX.
find-jobs
Search live job boards for roles that match the master resume, then rank them by fit.
job-fit
Run the deterministic, digest-bound candidate-fit gate before any resume tailoring.