Skip to main content

AI-powered job scanner, scorer, and application drafter. Finds jobs while you sleep.

Project description

autopilot-jobhunt

Your AI job agent. Finds, scores, and drafts applications — while you sleep.

Scans 130+ company careers pages nightly → scores every role against your resume with an LLM → sends you the top matches on Telegram → drafts a tailored resume + cover letter on demand.

PyPI version Python 3.11+ License: MIT GitHub Stars

📖 Full setup guide with Claude Code MCP integration → SETUP.md


How it works

flowchart LR
    A["🌐 130+ Careers Pages"] -->|TinyFish API| B["Job Discovery"]
    B --> C["LLM Batch Scorer\n(0–100 fit score)"]
    C -->|score ≥ min| D["📱 Telegram Alert\nTop N matches"]
    C -->|on demand| E["✉️ Cover Letter\n+ Resume Bullets"]
    C --> F["📊 CSV Export"]

The scoring prompt uses your actual resume — not keywords. The LLM reads your full work history and the job description, then explains in one sentence why you fit or don't. No more guessing.

What a scan result looks like

Scanning Mistral AI...
  3 new job URLs. Fetching details...
  Scoring jobs...
  Saved 2 jobs from Mistral AI

Scanning HuggingFace...
  5 new job URLs. Fetching details...
  Scoring jobs...
  Saved 3 jobs from HuggingFace

Scanning Stripe...
  No new jobs found
...
Scan complete.
Top 5 sent to Telegram.

What the Telegram notification looks like

Job Hunt — 06 Jun 2026
5 matches found

#1 | Mistral AI | Applied AI Engineer, ML Infrastructure
📍 Paris/London/Marseille, On-site
🔧 Python, LLMs, RAG, AWS, MLOps, DevOps
✅ Role combines applied AI + ML infrastructure in EU, aligns with MLOps/RAG expertise and relocation goal
Score: 85/100  →  https://jobs.lever.co/mistral/...

#2 | HuggingFace | Staff ML Engineer
📍 Remote (EU)
🔧 Python, PyTorch, Transformers, CUDA, MLOps
✅ Open-source ML role matches deep learning and distributed training background
Score: 80/100  →  https://apply.workable.com/huggingface/...

...

Reply "apply to #N" to draft a tailored application.

What it does

Every night at 2:30 AM:
  ┌─────────────────────────────────────────────────────────┐
  │  Scans careers pages  →  Scores with LLM  →  Notifies  │
  │       (130+ cos)           (0–100 fit)       (Telegram) │
  └─────────────────────────────────────────────────────────┘

On demand:
  autopilot draft 1  →  tailored resume + cover letter in 60s

Usage modes

Mode 1: Standalone CLI (no Claude Code required)
  pip install autopilot-jobhunt
  autopilot scan / autopilot draft 1 / autopilot export

Mode 2: Claude Code MCP (control via natural language)
  pip install 'autopilot-jobhunt[mcp]'
  claude mcp add autopilot-jobhunt ...
  → "Scan for ML jobs" / "Draft application for job #2"

Both modes use the same config and produce the same output.

Quick start

Option A — pip install

pip install autopilot-jobhunt        # or: pip install 'autopilot-jobhunt[mcp]' for Claude Code
mkdir my-job-hunt && cd my-job-hunt
autopilot init                       # creates config.json, companies.json, resume/, .env
# Fill in config.json (API keys + your profile) and resume/YOUR_RESUME.md, then:
autopilot scan

Option B — clone (recommended if you want to customize companies or contribute)

git clone https://github.com/tarunlnmiit/autopilot-jobhunt.git
cd autopilot-jobhunt
pip install -e '.'               # standalone CLI
# pip install -e '.[mcp]'       # + Claude Code MCP integration
cp config.example.json config.json && cp .env.example .env
# Fill in your API keys and candidate profile, then:
autopilot scan

For the full walkthrough — API key setup, Claude Code MCP registration, rate limit details, and troubleshooting — see SETUP.md.

API keys needed

Service Cost Where to get it
TinyFish Free — no credit card agent.tinyfish.ai
OpenRouter Free — 4-model fallback chain openrouter.ai
Telegram Free — optional @BotFather on Telegram

Claude Code / MCP integration

Use autopilot-jobhunt as an MCP server inside Claude Code (CLI) or Claude Desktop.

Step 1: Install with MCP support

git clone https://github.com/tarunlnmiit/autopilot-jobhunt.git
cd autopilot-jobhunt
pip install -e '.[mcp]'

Step 2: Register with Claude Code

Option A — one command:

claude mcp add autopilot-jobhunt \
  --env TINYFISH_API_KEY=your_key \
  --env OPENROUTER_API_KEY=your_key \
  --env TELEGRAM_TOKEN=your_token \
  --env TELEGRAM_CHAT_ID=your_chat_id \
  -- python -m job_hunt.mcp_server

Option B — edit ~/.claude.json manually:

{
  "mcpServers": {
    "autopilot-jobhunt": {
      "command": "python",
      "args": ["-m", "job_hunt.mcp_server"],
      "cwd": "/absolute/path/to/autopilot-jobhunt",
      "env": {
        "TINYFISH_API_KEY": "your_key",
        "OPENROUTER_API_KEY": "your_key",
        "TELEGRAM_TOKEN": "your_token",
        "TELEGRAM_CHAT_ID": "your_chat_id"
      }
    }
  }
}

Note: cwd must point to the cloned repo — the server reads config.json and companies.json from there.

Step 3: Use it

In any Claude Code session:

"Scan for ML jobs"
"Draft an application for job #2"
"Export jobs from the last 7 days with score above 70"

Claude Desktop

Same JSON block — add it under mcpServers in Claude Desktop → Settings → Developer.


Customize your target companies

Edit companies.json. Each entry needs:

{
  "name": "Stripe",
  "careers_url": "https://stripe.com/jobs",
  "search_domain": "stripe.com",
  "location": "Remote / San Francisco, CA",
  "region": "Remote"
}

The repo ships with 130+ pre-configured EU, NZ, and remote-friendly tech companies. Add or remove as you like.


How scoring works

The LLM reads your full resume + the full job description and assigns a score 0–100:

Score Meaning
80–100 Near-perfect fit — apply immediately
60–79 Good fit — worth applying
40–59 Partial fit — apply if pipeline is thin
< 40 Poor fit — skipped

Set min_score in config to filter. Default: 60.


Project structure

autopilot-jobhunt/
├── job_hunt/
│   ├── main.py          # CLI entry point
│   ├── scanner.py       # Job discovery + LLM scoring
│   ├── drafter.py       # Resume tailoring + cover letter
│   ├── notifier.py      # Telegram notifications
│   ├── llm_utils.py     # OpenRouter wrapper with fallback
│   ├── tools.py         # Protocol-agnostic tool layer
│   └── mcp_server.py    # MCP server (Claude/AI assistant integration)
├── demo/                # Demo scripts for recording GIF
├── resume/              # Put your resume here (gitignored)
├── state/               # Scan state (gitignored)
├── output/              # Generated applications (gitignored)
├── companies.json       # 130+ target companies
├── config.example.json  # Config template (copy to config.json — gitignored)
└── config.json          # Your config (gitignored — never committed)

LLM options

Default: OpenRouter (free)

Uses a 4-model fallback chain — all free, no credit card needed:

Model Role
meta-llama/llama-3.3-70b-instruct:free Primary — best quality
nvidia/nemotron-3-super-120b-a12b:free Fallback 1 — 120B
google/gemma-4-31b-it:free Fallback 2
qwen/qwen3-coder:free Fallback 3

If one model hits its daily free-tier quota, the tool automatically tries the next. Zero LLM cost by default.

Alternative: Claude (Anthropic)

If you have an Anthropic API key or Claude Pro:

pip install 'autopilot-jobhunt[claude]'

In config.json:

"llm_provider": "anthropic",
"anthropic_api_key": "sk-ant-...",
"anthropic_model": "claude-haiku-4-5-20251001"

claude-haiku-4-5-20251001 is fast and cheap; claude-sonnet-4-6 gives higher quality scores. A nightly scan uses ~5–15 LLM calls total (jobs scored in batches of 10).


Contributing

See CONTRIBUTING.md. PRs welcome for:

  • Adding companies to companies.json
  • New ATS platform support (Rippling, Lever variants, Workday)
  • OpenAI / Gemini MCP adapters
  • Better scoring prompts

License

MIT — see LICENSE.


Built by @tarunlnmiit. If this saved you hours of job searching, a ⭐ means a lot.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

autopilot_jobhunt-0.2.1.tar.gz (770.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

autopilot_jobhunt-0.2.1-py3-none-any.whl (27.5 kB view details)

Uploaded Python 3

File details

Details for the file autopilot_jobhunt-0.2.1.tar.gz.

File metadata

  • Download URL: autopilot_jobhunt-0.2.1.tar.gz
  • Upload date:
  • Size: 770.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for autopilot_jobhunt-0.2.1.tar.gz
Algorithm Hash digest
SHA256 205c6d92680e5ad0f7b6b99b4395f4d725c832361225ebf795ed5c2ccf286562
MD5 b4401e8681de65dd09aa05f3743ad267
BLAKE2b-256 768e2a3f9ab4f97b5e5cab0d4814fbc3d584f0c0ad4937e26dd92107e355a4d6

See more details on using hashes here.

File details

Details for the file autopilot_jobhunt-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for autopilot_jobhunt-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 430d1b8934ce0d60429fb234e97efeee8030384e6a94110be9b723502de9d4f8
MD5 f37e2b8b69b4c33eaa234ea128ce96e4
BLAKE2b-256 9cb389a2bb53fa808df18137f830fb9fe650f1b4547604fa028d5cb69d61c053

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page