Skip to main content

JobPilot

License: MIT

Automated, personal job-hunting pipeline for Claude Code.

1. What it does

JobPilot scrapes roughly a dozen job sources (LinkedIn, Indeed, Glassdoor, Google Jobs, Naukri, Internshala, Wellfound, plus Hacker News "Who is hiring", YC, and Telegram job channels) through Apify and free native scrapers, then scores every posting against your resume. The strongest matches get a tailored resume and land in a dated, styled XLSX report. A digest of the top picks — with the report and resumes attached — is pushed to Telegram (or Discord) automatically on whatever schedule you set. You can drive it from a chat, or run it headless on a schedule via the local control service (§5a).

2. Prerequisites

  • Claude Desktop Pro (the scheduled task runs under your Pro subscription).
  • Apify account — free tier is fine (~$5 credit/month).
  • Telegram bot — create one with @BotFather and grab your chat ID.
  • Python 3.11+.
  • tectonic (optional) — only needed to compile LaTeX resumes to PDF.

New here? Follow GETTING_STARTED.md for a full step-by-step walkthrough — how to get your Apify token, create a Telegram bot, find your chat ID, fill in .env, and verify each piece before scheduling.

3. Install

JobPilot is two pieces: the Claude Code skills (/job-search, /job-setup, …) and a Python backend (pipeline scripts + optional web UI). Pick the path that fits — all are cross-platform (Linux / macOS / Windows).

a. Claude Code plugin (recommended for the skills)

/plugin marketplace add ashlesh-t/jobpilot
/plugin install jobpilot@jobpilot

This registers the skills in Claude Code on any OS. Then install the Python backend once with either (b) or (c) below so the scripts have their dependencies.

b. pipx — the backend + web UI, one command on every OS

pipx install jobpilot-ai   # or: pip install jobpilot-ai — installs the pipeline + web UI
jobpilot setup                            # configure data dir + secrets (cross-platform)
jobpilot serve                            # optional local web UI → http://127.0.0.1:8787

Or run jobpilot start instead of setup + serve separately — it runs setup only if not already configured, asks for schedule slots (24h HH:MM, one at a time), then launches serve and opens the web UI in your browser. Safe to re-run: it skips the wizard on an already-configured install unless you pass --reconfigure.

macOS: brew install ashlesh-t/tap/jobpilot · Windows: scoop bucket add ashlesh-t https://github.com/ashlesh-t/scoop-bucket && scoop install jobpilot · Arch (AUR): pending — new AUR account registrations are temporarily disabled (details); the PKGBUILD is ready in packaging/aur/ and will be pushed once registration reopens. All are thin wrappers over the same PyPI package (see packaging/).

Note: jobpilot start (and setup) only bootstrap the Python backend — they cannot run step (a) for you. /plugin install jobpilot@jobpilot happens inside Claude Code, not the shell, so it stays a separate, one-time, manual step regardless of which backend install path you use.

c. From source (contributors)

git clone https://github.com/ashlesh-t/jobpilot ~/projects/jobpilot
cd ~/projects/jobpilot
./setup.sh                       # Linux/macOS
python scripts/jobpilot_setup.py # Windows (or any OS — identical, no bash needed)

4. One-time setup

a. Configure JobPilotjobpilot setup (or ./setup.sh / python scripts/jobpilot_setup.py) creates ~/.claude/job-hunt-ai/, initialises the SQLite cache (via Python's stdlib, so no sqlite3 CLI is needed on Windows), and runs an interactive wizard that collects your Apify token, Telegram bot token, and chat ID (validates each live before saving).

b. Connect Google Drive in Claude Desktop → Settings → Connections.

c. Create a folder named jobpilot-resume in your Google Drive and upload your resume as a PDF file into it.

d. Run /job-setup in Claude Desktop. It checks that secrets and Google Drive are ready, lets you pick your resume PDF from the Drive folder (shows a numbered list if there are several), downloads and parses it, then asks for your job preferences (locations, CTC floor, role types, experience, degree, optional tech stack).

Everything personal — secrets, preferences, cached resume, reports — lives in ~/.claude/job-hunt-ai/, never in the repo. The resume source of truth stays in Google Drive.

5. Daily use

Once the scheduled task is set up, you do nothing. It fires on your cadence, runs the full pipeline, and pushes results to your notify channel. Just check Telegram (or Discord) for the digest, the attached XLSX report, and any tailored resumes.

5a. Local control service + UI (optional)

Instead of a chat, you can run JobPilot as a small local web app that schedules runs, lets you pick an execution engine, wires up Discord/Telegram in the browser, and shows a live, harness-style view of each run (stages lighting up, per-source counts, the final digest).

pip install -r requirements-server.txt   # fastapi/uvicorn/apscheduler/… (separate from core)
python -m server                         # → http://127.0.0.1:8787
  • Engine choice (Setup tab). Claude Code runs the pipeline under your Pro/Max subscription (no per-token cost, needs the claude CLI logged in). Anthropic API runs it metered via the Claude Agent SDK (ANTHROPIC_API_KEY). Gemini/Antigravity is interface-ready for a future release. The UI greys out any engine that isn't usable yet and tells you why.
  • Schedule tab. Add/remove IST time slots; the service fires /job-search at each and the skill alternates full ⇄ native to stretch Apify credit. python -m server install-service writes a systemd/launchd unit so it survives reboot.
  • Connections tab. Telegram sign-in is a phone → OTP form (no terminal); Discord is a webhook paste + test. A ✅/⚠️/❌ health check tells you which sources are live.

The same health check is available from the CLI, without the web UI:

jobpilot doctor              # full engines/notifiers/sources table
jobpilot doctor --live       # also runs each native scraper with a tiny cap
jobpilot view Apify          # just the one row (name, or unique substring), e.g. Apify/Discord
jobpilot view Apify --live   # same, with the live probe where applicable
  • Delivery is pluggable: set notify_channels (e.g. ["telegram","discord"]) in preferences or the UI.

The service only drives the existing pipeline — all scoring/tailoring logic still lives in skills/job-search/SKILL.md, the single source of truth for every engine.

6. Slash command reference

Command What it does When to use
/job-setup Collect preferences + parse resume into a profile Once, at first install, or to change criteria
/job-search Full pipeline: scrape -> dedupe -> filter -> score -> research -> report -> tailor -> notify Manually, or via scheduled task
/job-tailor <job_id|URL|JD> Tailor resume to one job; ATS score before vs after When you want to apply to a specific role
/jobpilot-clear Wipe seen-job cache, score cache, and reports (keeps prefs + resume) To reset history and re-surface old jobs

7. Resume versioning

Keep your master resume as ~/.claude/job-hunt-ai/resumes/base.tex (LaTeX) or base.docx. JobPilot reads from it and writes tailored copies into resumes/tailored/. Use git as your version control for the base resume — commit changes there and JobPilot will re-parse when the file hash changes.

8. Editing preferences

Either hand-edit ~/.claude/job-hunt-ai/options/preferences.json, or just ask Claude in natural language (e.g. "raise my CTC floor to 18 LPA and add Remote") and it will update the file for you.

9. Cost

Layer A (scraping + filtering) costs nothing in LLM tokens — it is pure Python. The only spend is Apify usage; the free tier (~$5 credit/month) covers roughly one run per day. Tune schedule_slots_ist to a single daily slot to stay free. LLM usage in Layer B is covered by your Claude Pro subscription.

10. Contributing / marketplace listing

PRs welcome. To list in a Claude plugin marketplace, publish this repo publicly and share the claude plugin install github:ashlesh-t/jobpilot one-liner. A .mcpb bundle and pip-installable helper package are on the roadmap.

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-1.7.0.tar.gz (143.2 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-1.7.0-py3-none-any.whl (166.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for jobpilot_ai-1.7.0.tar.gz
Algorithm Hash digest
SHA256 b22d253c31b1c9ed898a88c57df3a00493a0223ebb2ef3bb2aebfa54571bd2c5
MD5 75e4653e0f4a3b0d799cc872e2210741
BLAKE2b-256 1fba8a9aaed41b5863add341d87771e43696fc61aff66c69e78e55100ecc7b06

See more details on using hashes here.

Provenance

The following attestation bundles were made for jobpilot_ai-1.7.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-1.7.0-py3-none-any.whl.

File metadata

  • Download URL: jobpilot_ai-1.7.0-py3-none-any.whl
  • Upload date:
  • Size: 166.2 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-1.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 77b057bdfd292c1e785b47e829922f2d5a3ec6362b6da2fa5cd3daed880a3acd
MD5 9f077bb5b4dd130c8866310fc5e3e94d
BLAKE2b-256 9ecb705c94b353dfaf4404d360c3e3e0727a59be0f0bf5375b7e5d21eec512ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for jobpilot_ai-1.7.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

2.0.0

2 files

This release

1.7.0 This release

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