ClaudeMap

job-search-tool

A local-first job-hunt pipeline that fetches roles straight from ATS APIs, dedupes in SQLite, and lets Claude score each fit 0–100 against your profile.

Plugins & Agentsjob-searchautomationatssqliteclaude-api

Three data stages run without any AI. Fetch pulls open roles from company ATS APIs (Greenhouse, Ashby, Workable, Lever, SmartRecruiters) plus aggregators (Adzuna, Remotive). Filter drops non-engineering titles, out-of-location roles and excluded stacks. Dedup stores everything in a local SQLite database keyed by URL and normalized company+title, so re-runs only ever surface genuinely new postings. The optional fourth stage sends each surviving candidate plus your profile.yaml to Claude, which returns a 0–100 fit score with concrete gaps, transferable strengths, risk factors and an apply/consider/skip recommendation; re-running never re-pays for an already-scored job. Results land in a local Next.js review board that reads and writes the same SQLite directly, where you track applied / interview / rejected / skipped / silence with your own notes. Nothing here talks to any service beyond the job sources you configure and the Anthropic API.

What it does

  • companies.yaml queries ATS APIs directly (Greenhouse, Ashby, Workable, Lever, SmartRecruiters) for low noise; aggregators.yaml runs keyword search (Adzuna, Remotive) for reach — both file-driven, retarget by editing the file; filters.yaml holds title, location and stack rules with no code changes
  • profile.yaml is gitignored by design and never committed; profile.sample.yaml shows the level of quantified evidence each bullet should carry
  • AI step is optional and per-candidate: python -m app.ai_evaluate --dry-run queues nothing and costs nothing, --limit 20 sanity-checks quality and cost; scored results land in data/scored_candidates.csv sorted best-match-first
  • make web starts the Next.js board reading and writing data/seen_jobs.sqlite3 directly — no export/import step; Remotive needs no auth but covers remote roles only, Adzuna needs a free developer key

When to use it

Engineers running a targeted, weeks-long search who want genuinely new matching roles surfaced automatically each run without job-board noise — and a written fit rationale before spending an application.

Getting started

git clone https://github.com/fedorchenko-juli/job_search_tool.git
cd job_search_tool
pip install -r requirements.txt
cp .env.example .env                    # fill in the keys you need
cp profile.example.yaml profile.yaml    # then edit in your own background
python -m app.main                      # fetch + filter + dedup
python -m app.ai_evaluate --dry-run     # preview the AI step, no cost
make web                                # review board on localhost:3000

Things to know

The repo ships pre-configured for the author's own search (Alberta/Canada, Python/JS stack) — edit companies.yaml, aggregators.yaml, filters.yaml and profile.yaml before the first run or you will fetch their search. The AI evaluation step costs money per candidate. Company ATS endpoints and aggregator APIs can change without notice. MIT.

Repository

fedorchenko-juli/job_search_tool

Charted

Related on the map

  • CometixCode

    Plugin / Agent

    An unofficial Rust 1:1 reimplementation of the Claude Code terminal UI, ported file-for-file onto an iocraft TUI framework.

    • terminal-ui
    • rust
    • reimplementation
    • unofficial
  • Abide

    Plugin / Agent

    Hook-level enforcement for the natural-language rules in AGENTS.md and CLAUDE.md — every edit is judged and violations are repaired in the same turn.

    • hooks
    • code-review
    • rules
    • agents-md
  • fast-jev-compaction

    Plugin / Agent

    A Claude Code plugin that replaces the lossy compaction summary with Jev-scored pruning: stale tool calls are dropped, and everything kept stays verbatim.

    • plugin
    • context-management
    • compaction
    • function-hooks