Skip to main content

JobPilot

License: MIT

Your job hunt, automated — running entirely on your own machine.

JobPilot scrapes a dozen job sources, reads every posting against your actual resume, scores the matches, researches what they pay, tailors your resume to the ones worth applying to, and tracks every application from first click to offer. It runs on a schedule, in the background, and shows you all of it in a local web app.

Nothing is uploaded anywhere. Your resume, your job history and your API keys stay on your machine.

pipx install jobpilot-ai
jobpilot setup
jobpilot start

What a run actually does

A run is eleven steps you can watch, stop, resume, and re-run individually:

Step What happens Who does it
Scrape Fetch postings from every configured source Python — free, no LLM
Remove duplicates Drop what you've already seen Python
Apply hard filters Location, deadline, experience cap Python
Search for more Company career pages and targeted searches AI
Check relevance Drop off-domain roles; recover missing descriptions AI
Score the matches Compare each description against your profile AI
Company intelligence How each company actually interviews AI
Salary research Real market ranges for your top matches AI
Save results Into your database Python
Build the spreadsheet Styled XLSX of the top matches Python
Send the digest Telegram, Discord, or neither Python

Scraping, filtering and reporting never touch the LLM, which is why a run is cheap. The reasoning steps are where the AI earns its keep.

Stop finishes the current step cleanly and keeps everything already done. Resume picks up from exactly there. Re-run on a single step redoes just that step and the ones that depend on it.

How scoring works

Every job gets a score out of 100:

  • half from which of the skills the job asks for you actually have — measured against what that description asks for, not your whole skill list
  • half from an overall judgement of fit — stack, seniority, project relevance, the kind of company

That score drives every threshold. A separate effective_score handles ordering only: it adjusts for how much you want that location, how well you fit the company's interview style, and what your past application outcomes have taught JobPilot.

Setup

jobpilot setup walks you through it in the terminal:

  1. You — name and contact
  2. Storage — PostgreSQL in Docker if you have it, SQLite otherwise. Both fully supported.
  3. AI backend — Claude Code on a Pro/Max subscription (no per-token cost), an Anthropic API key (metered, with an exact cost meter), Gemini, or any headless agent CLI
  4. Job sources — optional Apify token for LinkedIn, Naukri, Glassdoor and Indeed. Eight free sources work without it.
  5. Delivery — Telegram (scan a QR, press Start, and the chat is linked automatically) and Discord

Then jobpilot start and finish in the browser: upload your resume, confirm the extracted profile, set your preferences.

The web app

Page What it's for
Home Dashboard, charts, and the full filterable job table with CSV/XLSX export
Job Hunt Start a run and watch it step by step; manage your resumes
Applications Board and table view of everything you've applied to, with a dated history
Tailored Resumes Every resume rewritten for a specific job, with the Overleaf source
Scheduler Run times, the background service, and what happens after downtime
My Info Profile, preferences, credentials, health checks
Assistant Ask about your own jobs, scores and runs

Light and dark, works offline, no external requests.

Resume tailoring

Open any job and choose Tailor resume. JobPilot rewrites your active resume to emphasise what that job asks for — it reorders and rewords, and never invents experience, employers or dates.

Output lands in resumes/tailored/<JOBID>-<COMPANY>/:

FirstName_LastName_Resume.pdf
FirstName_LastName_Resume.tex     # compiles unchanged on Overleaf
meta.json                         # skills matched, ATS score before and after

The template is ATS-safe by construction — single column, no tables or images, standard section names — because that is what survives automated parsing. Every generated document is validated against those rules before it is compiled.

Always read a tailored resume before sending it. Automated tailoring can shift spacing and page breaks.

Scheduling

Add run times on the Scheduler page and install the background service. JobPilot then starts with your machine.

If the machine was off when a run was due, JobPilot runs it once when it comes back — not once per missed slot, and not at all if the miss is older than your grace window. No network at run time means a retry ladder (1, 5, 15, 30 minutes), not a recorded failure.

Cost

On a Claude Pro or Max subscription, runs cost nothing per token — the meter shows tokens used and no dollar amount, because there is no per-token charge.

With an Anthropic API key, every phase, tailoring job and assistant answer is priced into a cost ledger you can see per run and per month.

Apify is optional and has a free tier.

Commands

jobpilot setup      guided setup
jobpilot start      setup if needed, then serve and open the UI
jobpilot serve      run the service without opening a browser
jobpilot stop       stop a running service
jobpilot doctor     health check (--live also verifies your login and probes sources)
jobpilot logs -f    tail the service log
jobpilot db         up | down | status | url
jobpilot service    install | uninstall | status
jobpilot migrate    import state from JobPilot v1

Job sources

Free, no token needed: Internshala, RemoteOK, We Work Remotely, Remotive, Arbeitnow, Jobicy, Hacker News "Who is hiring", YC startups, and Telegram job channels.

With an Apify token: LinkedIn, Naukri, Glassdoor, Indeed, Wellfound, Cutshort — sources that block direct access. If credit runs out, JobPilot rotates through your other token slots and then degrades to free sources rather than failing the run.

Where things live

~/.claude/job-hunt-ai/
├── cache/            database, profile, caches
├── options/          preferences.json
├── resumes/          your resumes, and tailored/ output
├── reports/          generated spreadsheets
├── runs/<run_id>/    per-run artifacts, kept so any step can be re-run later
└── logs/             service log

Credentials are not in there — they go into your operating system's keyring.

Upgrading from v1

jobpilot setup detects v1 data and offers to import it: preferences, profile, job history, score cache, feedback and run history. The import is idempotent and never deletes or modifies your v1 files. You can also run it directly with jobpilot migrate.

Two things changed that you will notice:

  • Google Drive is gone. Resumes are uploaded in the web app instead. Nothing to connect, nothing to authorise.
  • Setup no longer happens inside Claude Desktop. jobpilot setup and the web app replace /job-setup entirely.

The Claude Code plugin still works if you prefer driving it from chat — see GETTING_STARTED.md.

Requirements

  • Python 3.11+
  • Optional: Docker (for PostgreSQL — SQLite is used otherwise)
  • Optional: tectonic (to compile tailored resumes to PDF locally — otherwise you get the Overleaf-ready source)
  • An AI backend: a Claude Pro/Max subscription, or an Anthropic API key

Contributing

git clone https://github.com/ashlesh-t/jobpilot && cd jobpilot
python -m venv venv && venv/bin/pip install -e ".[dev]"
npm --prefix ui install && npm --prefix ui run build
venv/bin/pytest

The built UI in ui/dist is committed so a source install needs no Node toolchain.

MIT licensed.

Download files

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

Source Distribution

jobpilot_ai-2.0.0.tar.gz (548.1 kB view details)

Uploaded Source

Built Distribution

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

jobpilot_ai-2.0.0-py3-none-any.whl (514.8 kB view details)

Uploaded Python 3

File details

Details for the file jobpilot_ai-2.0.0.tar.gz.

File metadata

  • Download URL: jobpilot_ai-2.0.0.tar.gz
  • Upload date:
  • Size: 548.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for jobpilot_ai-2.0.0.tar.gz
Algorithm Hash digest
SHA256 e738f53e5756986fe654b7773bb4379732dea4a60982cc07f2ef5b1e9a555096
MD5 7868b7c39f720982a4f0d470c77dba5b
BLAKE2b-256 7ddbd2902521e5ab6210f370c74f1e866c391f448bcc2b6ab506fe70be912bb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for jobpilot_ai-2.0.0.tar.gz:

Publisher: release.yml on ashlesh-t/jobpilot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jobpilot_ai-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: jobpilot_ai-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 514.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for jobpilot_ai-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e964a62b4718b74e1f9430a96dee0d6791f38d6f9b54644b686e636e65cb940a
MD5 a196336e55f48fb14dbe6660bca1d5a5
BLAKE2b-256 8ca7dae57729333e559d8373ba1cdf6e53cdb040d85b974abb1d263c98e9777a

See more details on using hashes here.

Provenance

The following attestation bundles were made for jobpilot_ai-2.0.0-py3-none-any.whl:

Publisher: release.yml on ashlesh-t/jobpilot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

3.0.0

2 files

This release

2.0.0 This release

2 files

1.7.0

2 files

1.6.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page