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
jobpilot upgrade    update to the latest release (--check just reports what's new)

jobpilot upgrade does more than swap the code: it applies any new database migrations, re-exports preferences.json / profile.json so the skills see new keys, and re-checks your tools — offering to install the PDF compiler if it's still missing.

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). jobpilot setup and jobpilot upgrade both offer to install it into ~/.local/bin, no admin rights required.
  • 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.

Metadata

Release files for jobpilot-ai 3.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jobpilot-ai 3.0.0
File Size Uploaded Provenance
jobpilot_ai-3.0.0.tar.gz 641.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for jobpilot-ai 3.0.0
File Interpreter ABI Platform
jobpilot_ai-3.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / jobpilot_ai-3.0.0.tar.gz

Download URL jobpilot_ai-3.0.0.tar.gz
Size 641.8 kB
Tags Source
SHA-256 checksum
How to use checksums
3345081768b9cfb0d9a6b12ff3969d90943706972a18d5dc94d10bc6a0a3d1f3
BLAKE2b-256 checksum
How to use checksums
2adbd54967927ade66d2772508d88405299ed1e2b6e6df42c8eb00319d3a1de0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Release files / jobpilot_ai-3.0.0-py3-none-any.whl

Download URL jobpilot_ai-3.0.0-py3-none-any.whl
Size 612.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ae4571e39c30c2a969315655ee2477e9b9b08ca3868946417b01ef5697aaafa2
BLAKE2b-256 checksum
How to use checksums
e4cb5b935e209610983aca1cc7f1f63704c3367e4edbdcb2e06f818443d68da4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

Security for jobpilot-ai 3.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for jobpilot_ai-3.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 6, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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