Skip to main content

Command Palette

Search for a command to run...

IT Job Search and Tailored CV Submission with Claude Code

Updated
16 min read

Reference notes on tooling that automates job hunting and generates an ATS-optimized CV for each application. This article was written entirely by AI and was created in response to my curiosity in this area.


Stack architecture

Three independent layers, mixed freely.

Job search — aggregation across job boards, filtering, scoring: JobSpy MCP, go-job, career-ops, jobpilot, ApplyPilot.

CV tailoring — ATS-optimization of a resume for a specific JD: resume-tailor-plugin, resume-tailoring-skill, claude-code-job-tailor, cv-claw, claude-resume-kit, resume-helper.

Full pipeline — search + CV + cover letter + application tracking: career-ops, proficiently, ai-job-search, jobpilot, ApplyPilot, job-apply-plugin, job-applier-agent, job-hunt-skill, ua-job-search.

The layers are independent: you can pick JobSpy MCP for search and olegvg/resume-tailor-plugin for tailoring without using anything else.


Job search tools

JobSpy MCP server

Repository: borgius/jobspy-mcp-server (Node.js), chinpeerapat/jobspy-mcp-server (Python), lowcoordination/jobspy_mcp_server (Python, adds a salary filter and markdown summary). Base library: speedyapply/JobSpy (MIT, 16k+ stars).

Aggregates 8 boards through a single site_name parameter: linkedin, indeed, glassdoor, google, zip_recruiter, bayt, naukri, bdjobs. The first four are active by default; the rest must be enabled explicitly. Indeed and Glassdoor support country filters for 60+ countries.

Install via claude mcp add jobspy -- uvx jobspy-mcp-server or by adding an entry to claude_desktop_config.json.

Extensibility: the set of active boards is a parameter — no code change required. Adding a fundamentally new board requires a new scraper in upstream JobSpy.

Limits: LinkedIn rate-limiting kicks in around page 10 from a single IP; proxies are required under active use.

career-ops

Repository: santifer/career-ops (MIT); forks ymys/career-ops-claude, NanaWhan/career-ops.

A complete job-search system built on Claude Code: 14 modes, job scoring, batch processing via subagents, ATS-PDF generation, a Go TUI dashboard, and a TSV tracker.

Sources. job_search runs over WebSearch + WebFetch with site: filters — it covers any board through search queries. From v1.3 onward, zero-token scan hits the Greenhouse, Ashby, Lever, Wellfound, and Workable APIs directly (73+ companies, no LLM token spend). The apply mode uses Playwright but stops before the Submit button.

Source configuration lives in portals.yml: a list of companies with careers_url, ATS-board type, filter keywords, and search queries. Claude edits the file itself in response to an instruction like "Add these companies to portals.yml".

Job scoring is A–F with an acceptance threshold of 4.0/5 and weights: required skills match (40%), nice-to-have (20%), role-level alignment (15%), location/remote (10%), compensation (10%), culture signals (5%).

Install: git clone, npm install, npx playwright install chromium, copy portals.example.ymlportals.yml, add a cv.md with the master profile, run claude.

Commands: /career-ops scan — scan portals.yml; /career-ops — full search + scoring; /career-ops batch — batch evaluation via subagents; /career-ops pdf — generate an ATS-PDF for a job; /career-ops apply — navigate to the application form.

Repository: MadsLorentzen/ai-job-search (MIT). Author: Mads Lorentzen; CLI search tools — Mikkel Krogholm.

A framework for the full application cycle built on Claude Code: onboarding interview, job scoring, drafter-reviewer pipeline, CV and cover letter generation in LaTeX, interview preparation, and application tracking in CSV.

Architecture. The candidate profile is split across seven files: 01-candidate-profile.md, 02-behavioral-profile.md (PI/DISC), 03-writing-style.md, 04-job-evaluation.md (scoring framework), 05-cv-templates.md (LaTeX moderncv, banking style), 06-cover-letter-templates.md (custom cover.cls, Lato/Raleway fonts), 07-interview-prep.md (STAR examples). Two slash commands: /setup (interactive onboarding, can import an existing CV) and /apply <url or JD text>.

Workflow /apply: parse the job → fit evaluation → drafter agent (LaTeX drafts) → reviewer agent (researches the company, critiques) → revision → final output with a checklist. Fabrication is forbidden at the prompt level.

Job scraper. Four TypeScript (Bun) CLI tools for the Danish market: Jobbank, Jobdanmark, Jobindex, Jobnet. /scrape walks all four, deduplicates, and ranks by fit.

Source extensibility: an explicit TypeScript CLI pattern under .agents/skills/; for a new market — a similar scraper. Search queries live in search-queries.md and are reconfigured via /setup --section search.

Requirements: Claude Code CLI, Python 3.10+, Bun, LaTeX (TeX Live or MiKTeX).

Install: gh repo fork MadsLorentzen/ai-job-search --clone, then bun install in each of the four scraper directories, then /setup inside Claude Code.

Limits: the scraper targets Denmark; other markets require building analogous CLIs. Early stage (1 star, 1 commit).

suxrobGM/jobpilot

Repository: suxrobGM/jobpilot.

A Claude Code plugin that autonomously searches for jobs, fills applications, generates cover letters, and prepares for interviews. Works in both Claude Code and Codex; uses Playwright MCP to drive the browser. Slash commands cover search and ranking, auto-apply by link or from a queue, Upwork proposals, interview prep, and inbox classification. Alongside the plain plugin, the repository ships a Next.js + SQLite web UI.

Source extensibility: profile.json holds a jobBoards array — a new entry with name, domain, searchUrl, type (search/ats), enabled requires no code change. Out of the box: LinkedIn, Greenhouse, Lever, Workday, Upwork.

Install: git clone https://github.com/suxrobgm/jobpilot.git, then bun install && bun run db:setup && bun run dev for the web UI, or claude --plugin-dir plugin for the plain plugin; copy profile.example.jsonprofile.json.

Pickle-Pixel/ApplyPilot

Repository: Pickle-Pixel/ApplyPilot (AGPL-3.0).

A 6-stage autonomous pipeline: discover → enrich → score → tailor → cover letters → apply. It scores jobs 1–10 against the resume, rewrites the resume for each job (without fabrication), writes cover letters, and uses Claude Code + Playwright to fill forms, upload documents, and answer screening questions. Parallel worker execution and a live dashboard. Configures itself without manual MCP setup.

Sources: 5 main boards through JobSpy (Indeed, LinkedIn, Glassdoor, ZipRecruiter, Google Jobs); 48 preconfigured Workday employers (config/employers.yaml) and 30+ direct career sites (config/sites.yaml); search queries — config/searches.yaml.

Extensibility: employers.yaml and sites.yaml are hand-edited; the 5 base boards are pinned through JobSpy.

Install: pip install applypilot, then pip install --no-deps python-jobspy && pip install pydantic tls-client requests markdownify regex; applypilot init, applypilot doctor, applypilot run. Requires Python 3.11+, Node.js, a Gemini API key (free), Claude Code CLI, Chrome.

neonwatty/job-apply-plugin

Repository: neonwatty/job-apply-plugin (MIT).

A Claude Code plugin for auto-filling applications. Dual architecture: Chrome MCP for authenticated sessions + Playwright MCP for filling forms and uploading files. Smart profile-to-form-field mapping, auto-generation of search keys from the resume, hiring-manager search. Never submits without an explicit confirmation. Search results are saved to ~/.claude-job-searches/ as JSON.

Supported ATS: LinkedIn Easy Apply, Greenhouse, Ashby, Lever, Rippling, Workday. The list is fixed and the README does not describe how to extend it.

Install: claude plugin marketplace add neonwatty/job-apply-plugin, then claude plugin install job-apply@neonwatty-plugins. Requires Claude-in-Chrome MCP and Playwright MCP.

theaayushstha1/job-applier-agent

Repository: theaayushstha1/job-applier-agent.

«Apply to 100+ jobs» automation with personalized resumes, cover letters, recruiter outreach, ATS optimization, interview prep, and analytics. Uses existing browser sessions (Gmail, LinkedIn) — no passwords are stored, data is local, no shell execution. Confirmation precedes any application submission, email, or LinkedIn request.

Sources: LinkedIn and company career pages. The extension mechanism is not explicitly documented.

liushenpeng1-cmyk/job-hunt-skill

Repository: liushenpeng1-cmyk/job-hunt-skill.

An end-to-end Claude Code skill of 8 phases + 2 sub-skills. From a master CV and an «experience bank» it generates per-job: a 1-page CV (PDF via Tectonic/LaTeX), a cover letter of 250–400 words, a LinkedIn cold DM of ≤60 words, and 3 «why I fit» bullets; it then walks through the form and logs into the tracker. The master CV is canonical and immutable; a «learn + backport» loop accumulates feedback. Bilingual EN/中文. Originally targeted at UK AI startups.

Extensibility: via fork-and-adapt; the roadmap includes a config.yaml for auto-substituting market/visa.

ua-job-search/job-search-skill

Repository: ua-job-search/job-search-skill.

A Claude Code skill for the Ukrainian market. Scores jobs across 6 criteria (role, skills, experience, industry, format, salary), generates cover letters, auto-applies with CV+cover letter, tracks in Excel with dropdown statuses, and remembers what has been submitted (no duplicates). Requires --dangerously-skip-permissions, Playwright, openpyxl.

Sources: Djinni, Work.ua, Robota.ua.

Install: copy SKILL.md to .claude/skills/job-search/; npx playwright install chromium; pip3 install openpyxl.

go-job

Repository: anatolykoptev/go-job (Go, MIT, v1.3.2, early stage).

Provides sources that JobSpy does not. job_search covers LinkedIn, Greenhouse, Lever, YC, HN Who's Hiring (Algolia), Indeed, Habr.Career. remote_work_search — RemoteOK, WeWorkRemotely, Remotive, SearXNG. freelance_search — Freelancer.com and Upwork. job_match_score — Jaccard scoring of a resume against a JD (0–100). Additionally in the code: resume_tailor, cover_letter_generate, company_research, and an SQLite tracker.

Requires LLM_API_KEY (Gemini/OpenAI-compatible) and INDEED_API_KEY; SearXNG + Redis + Postgres are optional.

Extensibility: each board is a separate Go file in internal/engine/jobs/; adding a new source means a new file plus a rebuild. No documented configuration mechanism exists.

workopia/workopia-mcp

Repository: workopia/workopia-mcp (MIT for the client side; the server is hosted).

A free remote MCP server for Claude Code, Claude Desktop, ChatGPT, Cursor, Windsurf. Tools: job_tool (jobs directly from employer career pages and Lever/Greenhouse ATS feeds — without scraping LinkedIn/Indeed), resume_tool (PDF from JSON Resume), career_tool (advice).

Install: add https://workopia.io/api/mcp-jobs to claude_desktop_config.json (type streamable-http). Requires OAuth login.

Extensibility: sources are controlled by the hosted server; new boards are added on the Workopia side.

gmen1057/headhunter-mcp-server

Repository: gmen1057/headhunter-mcp-server (Python, MIT).

An MCP server for the HeadHunter (hh.ru) API. 10 tools: job search with filters (location, salary, experience, employment type), resume management, applications with a cover letter, employer data, application tracking, an AI «vacancy hunter» agent with intelligent matching. OAuth 2.0.

Install: git clone, venv, pip install -r requirements.txt; register an application at dev.hh.ru, populate .env; declare mcpServers with the path to server.py.

Specialized LinkedIn MCP servers

stickerdaniel/linkedin-mcp-server (uvx linkedin-scraper-mcp@latest) — profiles, companies, jobs, recommended roles; authentication via the li_at cookie.

Rayyan9477/linkedin_mcp — FastMCP, 13 tools: filtered search, resume/cover letter generation from a LinkedIn profile (3 templates), local application tracking.

adhikasp/mcp-linkedin — unofficial LinkedIn API (feed + jobs), install via Smithery.

Rom7699/linkedin-jobs-mcp-server — jobs only, via the RapidAPI LinkedIn Data API; requires a paid key.

0xDAEF0F/job-searchoor — a minimal MCP (npx job-searchoor), filters by recency and keywords.

sakshee5/jobapply-mcp-server — an MCP for JD analysis and resume/cover-letter optimization; scrape a JD by URL, read PDF/Word.

Hacker News MCP

devabdultech/hn-mcp, erithwik/mcp-hn, rawveg/hacker-news-mcp — search across «Who is Hiring» threads (story type job/ask, Algolia). Useful for startup jobs without an ATS.

levels.fyi (salaries)

The official MCP/API is available on Premium/Enterprise tiers. Unofficially — an Apify scraper through mcp.apify.com (~$1.50 / 1000 results). Used for compensation benchmarking before negotiations, not for search.

proficiently

Repository: proficientlyjobs/proficiently-claude-skills; install with claude install-skill.

Commands: /proficiently:setup, /proficiently:job-search, /proficiently:tailor-resume, /proficiently:cover-letter, /proficiently:apply. Auto-fills Greenhouse / Lever / Workday application forms via patterns in references/ats-patterns.md. New sources — edit the skill's files.


CV tailoring tools

Each accepts a job as a URL or pasted text — none is tied to a specific job board.

olegvg/resume-tailor-plugin

Repository: github.com/olegvg/resume-tailor-plugin.

ATS scoring uses an explicit formula: required_skills × 0.4 + nice_to_have × 0.2 + quantification × 0.2 + completeness × 0.1 + keyword_distribution × 0.1. Thresholds: 85%+ — submit, 70–84% — revise, below 70% — do not submit.

Supports EN/US (chronological order, achievements-first, no personal data) and RU/CIS (full contact info, education at the top, neutral tone) locales. The master profile is stored separately; for each job, a DOCX is generated via pandoc. Experience is split into visibility categories: always / variant-specific / on-request / reference-only.

varunr89/resume-tailoring-skill

Repository: github.com/varunr89/resume-tailoring-skill (MIT); install by copying into ~/.claude/skills/.

Deep research on the company before generation. Conversational discovery: Claude asks questions to fill gaps in the resume. Confidence-scored content selection with transparent gap analysis. Batches 3–5 similar jobs at once. Output: MD / DOCX / PDF + an interview-prep report.

javiera-vasquez/claude-code-job-tailor

Repository: github.com/javiera-vasquez/claude-code-job-tailor.

Experience is described once in a YAML file. For each job, Claude ranks the JD's requirements, picks relevant items from the YAML, and generates an ATS-PDF via React-PDF. Generating one CV takes under 60 seconds.

farhan0167/cv-claw

Repository: github.com/farhan0167/cv-claw.

A CLI + Claude Skill. The resume is structured JSON + a visual Jinja2/CSS template, rendered to self-contained HTML → PDF. One skill covers 4 tasks: ingest (PDF/screenshot/text → JSON), tailor (adapt to a JD), tweak-template (restyle), create-template (a new layout — Claude writes the template itself). Strict separation of «content (JSON) ↔ styling (template)».

Install: pip install cv-claw (or uv tool install cv-claw); the skill — extract cv-claw-skill.zip into ~/.claude/skills.

ARPeeketi/claude-resume-kit

Repository: github.com/ARPeeketi/claude-resume-kit.

Targeted at engineers and researchers with published work. Slash commands: /setup-extract, /setup-build-kb, /make-resume, /make-cl, /critique, /edit-resume. A knowledge base in place of «rewriting»; each step is a separate Claude Code session (fresh context). Anti-fabrication control with provenance flags (published / under review / internal) and verb discipline. AI-fingerprint avoidance: ban lists of words and a 12-point scan for AI markers. Multi-persona critique: 5 reader personas, 8 dimensions. Output in LaTeX.

MadeByTokens/resume-helper

Repository: github.com/MadeByTokens/resume-helper.

An adversarial multi-agent Claude Code plugin. Four agents iterate over files in working/: Writer (advocate), Fact-Checker (validates against the source resume, catches hallucinations), Interviewer (skeptic, sees only the final resume), Coach (mediator). The /resume-helper:resume-loop command takes --job, --max-pages, --max-iterations flags. A 3-strike rule against fabrication; information isolation between agents.

Install: git clone https://github.com/MadeByTokens/resume-helper.git, then claude --plugin-dir /path/to/resume-helper.

yuyu-2026/resume-tailoranddesign-skill

Repository: github.com/yuyu-2026/resume-tailoranddesign-skill.

A Claude skill: tailor and rewrite a resume for a job with a choice from 3 design variants (or keep the existing one). Gap analysis, keyword optimization, ATS-compatibility. Output as .docx (optionally PDF). Install by copying the resume-tailor/ folder into .claude/skills/.

Paramchoudhary/ResumeSkills

Repository: github.com/Paramchoudhary/ResumeSkills.

A collection of 20 skills: resume-ats-optimizer, resume-bullet-writer, job-description-analyzer, cover-letter-generator, interview-prep-generator, and others. Works on pasted resume/job text — no board search.

Install: npx skills add Paramchoudhary/ResumeSkills -g -y.

melodic-software/claude-code-plugins (resume-optimization)

Repository: github.com/melodic-software/claude-code-plugins.

A skill for software engineers: structure, ATS rules, achievement bullets, gap analysis, optionally applies edits directly to the resume file. Looks for the resume in standard locations (docs/, ~/.claude/temp/).

Install: npx skills add https://github.com/melodic-software/claude-code-plugins --skill resume-optimization.

jezweb/claude-skills (resume-cover-letter)

Repository: github.com/jezweb/claude-skills.

A skill from a larger set: generates a resume/CV and a cover letter for a specific role. Regional formats (AU/NZ, US, UK), ATS rules, achievement bullets in CAR (Context–Action–Result) format.

ailabs-393/ai-labs-claude-skills (resume-manager)

Catalog: agentskills.so — ailabs-393/ai-labs-claude-skills.

Turns Claude into a resume management system: extracts data from an existing resume, maintains a structured DB of experience/projects/education/skills (resume_db.py), and generates styled 1-page PDFs for a role (pdf_generator.py). Persistent DB + CLI scripts for export and backup.

adamenger/claude-resume-builder

Repository: github.com/adamenger/claude-resume-builder.

Interactive assembly of an ATS-friendly resume in Claude Code. Dark terminal theme by default, customizable via config.yaml. make build (theme + PDF via headless Chrome), make test (WCAG and ATS parseability via test_ats.py and pa11y). Focus on design and automated accessibility testing.

smchughinfo/JobSquirrel

Repository: github.com/smchughinfo/JobSquirrel.

A browser extension copies the HTML of the job page into the clipboard → a terminal app detects a «JobSquirrel» message → Claude Code runs /WoodlandDirectives/ThePlan.txt. Resumes are generated in HTML and converted to PDF via Puppeteer; parsing — Cheerio. A clipboard bridge between the browser and Claude Code; built for Windows WSL.

6figr JobGPT

Repository: 6figr-com/skills — a thin client for the 6figr.com SaaS. Install via claude skill add --url plus connecting the mcp.6figr.com MCP server with an API key.

34 server-side tools: search_jobs, match_jobs, generate_resume_for_job, apply_to_job, send_outreach, and others. import_job_by_url supports LinkedIn, Greenhouse, Lever, and Workday. 5 free auto-apply credits; paid plans start at $34.99/mo.

Limits: closed SaaS, boards are hardcoded server-side.


Interview preparation

noamseg/interview-coach-skill

Repository: github.com/noamseg/interview-coach-skill.

A Claude Code skill for the full job-search lifecycle, with 23 commands: from JD analysis and resume optimization through mock interviews to post-offer negotiations. Answers are scored across 5 dimensions (Substance, Structure, Relevance, Credibility, Differentiation), with root-cause diagnostics, storybank construction, and adaptation to the user's patterns. State is persisted in coaching_state.md. Works in Claude Code, Cursor, Codex.


Source extensibility — summary

Sorted from most extensible to fully hardcoded.

JobSpy MCP — 8 boards selected by parameter; a new board requires an upstream scraper; open source.

career-ops — 45+ companies plus arbitrary site: queries; a new board — edit portals.yml; open source.

suxrobGM/jobpilot — any boards; a new board — a new entry in profile.json (JSON, no code change); open source.

go-job — 12 sources; a new board — Go file + rebuild; open source.

ApplyPilot — 5 boards (JobSpy) + YAML configs for Workday/sites; the 5 base boards are pinned; AGPL.

MadsLorentzen/ai-job-search — 4 boards (Denmark); a new board — a TypeScript CLI following the explicit pattern; open source.

proficiently — Greenhouse / Lever / Workday; a new source — edit the skill's files; open source.

neonwatty/job-apply-plugin — LinkedIn / Greenhouse / Ashby / Lever / Workday; fixed list; open source.

ua-job-search/job-search-skill — Djinni / Work.ua / Robota.ua; fixed list; open source.

headhunter-mcp-server — hh.ru only; no extensions; open source.

workopia-mcp — career pages + Lever/Greenhouse ATS feeds; extensions land on the hosted-server side; MIT/hosted.

LinkedIn MCP — LinkedIn only; no extensions; open source / partial.

6figr JobGPT — LinkedIn / Greenhouse / Lever / Workday; no extensions; closed SaaS.


Base stack (≈1 hour to set up): JobSpy MCP for broad coverage (8 boards by parameter) + go-job for remote boards, HN/YC, and freelance + olegvg/resume-tailor-plugin for ATS tailoring with RU/EN locale support + stickerdaniel/linkedin-mcp-server for authenticated LinkedIn access.

Maximum automation: career-ops as the core (scan portals.yml → scoring → batch CV → PDF → form navigation) + JobSpy MCP for searching boards without an ATS + levels.fyi for salary benchmarking.

Maximum board coverage with minimal code: jobpilot (JSON board config, no code) + MadeByTokens/resume-helper (adversarial tailoring) + noamseg/interview-coach-skill (interview prep and negotiations).

CV tailoring only: varunr89/resume-tailoring-skill when deep research and anti-fabrication matter; farhan0167/cv-claw when strict content/design separation is required; ARPeeketi/claude-resume-kit for a research/engineering profile with publications; claude-code-job-tailor for fast pipeline PDF generation.

CIS market: gmen1057/headhunter-mcp-server (hh.ru) + ua-job-search/job-search-skill (Djinni/Work.ua/Robota.ua) + olegvg/resume-tailor-plugin (RU/CIS locale).


Installation and configuration

MCP servers are added with claude mcp add <name> -- <command> or via an entry in ~/.claude/claude_mcp_settings.json.

Skills are installed by copying a directory containing SKILL.md into ~/.claude/skills/<skill-name>/, via claude install-skill <url> for plugins with a plugin.json, or via npx skills add <repo> for npm packages.

Every tailoring tool expects the master profile — a free-form Markdown file (cv.md) with Experience and Skills sections plus a brief role description. Every experience entry must include a measurable outcome; the tools pick the items relevant to a specific JD.


Limitations and risks

LinkedIn rate limiting — ~10 pages per IP; proxies are required under active use.

Job-board ToS — scraping violates the ToS of most platforms; the risk sits with the user. Workopia and headhunter-mcp-server use official APIs, which lowers the risk.

Auto-applycareer-ops and proficiently stop before Submit; ApplyPilot and jobpilot submit autonomously — use deliberately.

Fabricationresume-helper, claude-resume-kit, and varunr89 explicitly forbid generating fictitious experience; verify the output of any tailoring tool.

--dangerously-skip-permissions — several skills (ua-job-search, job-hunt-skill) require disabling guard prompts; run only in an isolated environment.

Project maturity — go-job (v1.3.2, 1 star), ai-job-search (1 commit), ApplyPilot (first commit 2026-02-17) are at early stages; do not use in critical pipelines without prior vetting.

6figr JobGPT / Rezi / Workopia — partly or fully hosted/SaaS; functionality depends on the external service.


Commercial and partner MCPs (not open source)

Rezi MCP (https://api.rezi.ai/mcp) — list/read/write_resume, search_jobs, get_job_details, JD tailoring; requires Rezi Pro.

Indeed MCP — an official beta connector in Claude.

TheirStack MCP — 180M+ jobs from 325,000+ sources across 195 countries; targeted at B2B/sales intelligence.

Dice MCP — a tech-only board, 13+ filters.

Aakash Gupta «Claude Code Job Search OS» — 18 skills, end-to-end pipeline; $49, closed source.


45 views

More from this blog

Java-паттерны и анти-паттерны для агентской разработки, часть 3: логирование

Статья — продолжение первой части «Концептуальные основы» и второй части «Паттерны раннего обнаружения ошибок». Она адресована техническим лидам и архитекторам, которые внедряют LLM-агентов (в первую

May 28, 202650 min read19
Java-паттерны и анти-паттерны для агентской разработки, часть 3: логирование
K

krocodl

10 posts