career-development
Analyzes skill gaps against your tracked jobs or a single posting, then builds a prioritized learning plan with real, web-searched resources. Activates on:…
Searches configured job portals via web search, deduplicates against seen jobs and the tracker, quick-rates fit, and presents new matches for evaluation. Country-agnostic — all portal/geography targeting comes from the user's config. Activates on: search for jobs, find new
$ npx -y skills add suraj-davariya/ai-job-search --skill job-scraper --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/job-scraperContext preview
The summary Claude sees to decide when to auto-load this skill.
Searches configured job portals via web search, deduplicates against seen jobs and the tracker, quick-rates fit, and presents new matches for evaluation. Country-agnostic — all portal/geography targeting comes from the user's config. Activates on: search for jobs, find new
name: job-scraper description: "Searches configured job portals via web search, deduplicates against seen jobs and the tracker, quick-rates fit, and presents new matches for evaluation. Country-agnostic — all portal/geography targeting comes from the user's config. Activates on: search for jobs, find new postings, scrape job boards, /search, /scrape." allowed-tools: - Read - Write - WebSearch - WebFetch
This file is the Plane 1 knowledge anchor for the job search workflow (ARCH-0008, ARCH-0010). As a Plane 1 skill it lives under `.claude/skills/job-scraper/` and provides the AI assistant with structured knowledge — it does not execute binaries or scrape via compiled code. The skill queries whatever job portals the user has configured, deduplicates results, performs a lightweight fit assessment, and presents new matches sorted by relevance. It covers REQ-1001 through REQ-1012.
The search core is **country-agnostic** (DEC-012, ADR-0004, NFR-0007): web search is the universal mechanism. No portal, country, locale, or `site:` string is hardcoded here — every target comes from the companion `search-queries.md` config. Pasted postings are a first-class input, never a fallback (DEC-011). The skill never fabricates postings (REQ-1012, ARCH-0007).
| File | When to Read | |------|--------------| | `search-queries.md` (this skill's folder) | Always — the query strategy, portals, geography, and location-filter tiers come from here (data-req §17) | | `job_scraper/seen_jobs.json` | Always — the deduplication registry (data-req §10); create `{"seen": {}}` if missing | | `job_search_tracker.csv` (repo root) | Always — extract already-applied company+role pairs for dedup (REQ-1002) | | `01-candidate-profile.md` (job-application-assistant skill) | When forming the quick-fit signal — to know the user's core skills |
This skill never modifies `search-queries.md`; it only reads it.
---
Before searching, load all three sources:
1. `job_scraper/seen_jobs.json` — the seen registry. If the file is missing, create it with exactly `{"seen": {}}` (data-req §10). 2. `job_search_tracker.csv` (repo root) — extract the set of already-applied **company + role** pairs. 3. `search-queries.md` — the query strategy: Search Sites, Date Filter Rule, Priority 1–4 query groups, and Location Filter Tiers.
If `search-queries.md` still contains `[UPPER_SNAKE_CASE]` placeholder tokens, the profile has not been set up — tell the user to run `/setup --section search` rather than searching against template text.
If a configured portal has an adapter (ADR-0004) exposing a deterministic `list()` pass, **prefer it**: it returns structured postings (title, company, location, URL, date) **without spending tokens**, pre-filtering candidates before any LLM work. Feed its results into the same dedup + quick-fit steps below. Adapters are optional — when none exists, web search (above) is the universal fallback (ARCH-0005). Prefer the cheap deterministic pass over LLM calls for the listing stage wherever available (cost-aware search, NFR-0021).
> "I couldn't fetch that posting. Paste it here and I'll use that."
Pasted postings are processed **identically** to fetched ones (DEC-011) — paste is first-class input.
Assign each new job a lightweight **three-level** signal used only for sorting:
This is explicitly **NOT** the full 5-dimension evaluation and **NOT** a numeric score — it is a sorting signal only. The full evaluation happens later in `/apply`.
Alongside the fit signal, run a **ch
An AI job-search assistant that finds postings, writes tailored CVs and cover letters, and compiles them to print-ready PDFs — all on your own machine.
Repo: suraj-davariya/ai-job-search
Analyzes skill gaps against your tracked jobs or a single posting, then builds a prioritized learning plan with real, web-searched resources. Activates on:…
Tailors CVs and cover letters, evaluates job fit, and prepares interviews. Activates on: applying to a job, evaluating a posting, writing a CV/cover letter,…