JobPilot
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:
- You — name and contact
- Storage — PostgreSQL in Docker if you have it, SQLite otherwise. Both fully supported.
- 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
- Job sources — optional Apify token for LinkedIn, Naukri, Glassdoor and Indeed. Eight free sources work without it.
- 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 setupand the web app replace/job-setupentirely.
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 setupandjobpilot upgradeboth 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| jobpilot_ai-3.0.0.tar.gz | 641.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.