Command reference

All commands are invoked as ./jobpilot <command> [flags] from the project root.

Discovery

./jobpilot scan

Run both scanners in parallel. Prompts you to confirm Chrome is closed before starting (India scanner needs the profile).

Writes to: outputs/<date>/jobs-raw.jsonl

./jobpilot scan-ats

Only the ATS scanner (Greenhouse/Ashby/Lever/Workable). No Chrome required.

./jobpilot scan-india

Only the India scanner. Quit Chrome first.

Scoring

./jobpilot score

Loads jobs-raw.jsonl, runs filter + heuristic + semantic scoring, writes review-batch.csv.

FlagEffect
--no-semanticSkip the ML step (faster — useful if sentence-transformers isn't installed)

Status

./jobpilot status

Print all pipelines' state for today.

FlagEffect
--date YYYY-MM-DDInspect a previous day instead of today

Apply

./jobpilot apply

Opens each APPROVED URL in your default browser, 1.5s apart.

./jobpilot auto-apply

Launches visible Chromium, autofills name/email/phone/resume on Greenhouse/Ashby/Lever forms. Pauses at submit step.

Contact finder

./jobpilot find-contacts

For each APPROVED row missing Contact_Email, hit Apollo API. Saves results back to the CSV.

FlagEffect
--company "X"Look up one company without touching CSV

Email drafting

./jobpilot draft-emails

Generates one draft per APPROVED row that has Contact_Email filled. Drafts saved to outputs/<date>/drafts/draft-<slug>-<date>.txt.

./jobpilot draft-one

Generate one draft outside the CSV:

./jobpilot draft-one \
  --company "Razorpay" \
  --name "Priya Sharma" \
  --email priya@razorpay.com \
  --role "SDE-2" \
  --project jobpilot      # pitches your jobpilot project

Sending

./jobpilot send-emails

Reads outputs/<date>/drafts/draft-*.txt. Shows each draft, asks y/n/q per email. Sends via Gmail API with resume attached.

FlagEffect
--dry-runPreview only — never actually send

Inbox tracking

./jobpilot inbox

Scans your Gmail (last 14 days), matches replies to companies in your review CSV, updates the Status column. Writes a detail report to outputs/<date>/inbox-matches.csv.

Everything at once

./jobpilot run-all

Runs scan → score → status. Stops before any side-effects (apply, draft, send). Use this every morning, then review the CSV.

Operating on a different day

Most commands accept --date YYYY-MM-DD to operate on a previous day's data instead of today's:

# Inspect yesterday's pipeline
./jobpilot status --date 2026-06-27

# Re-score yesterday's raw jobs
./jobpilot score --date 2026-06-27

Help

./jobpilot --help
./jobpilot <command> --help