AI-powered job application agent. Auto-applies to LinkedIn, Naukri, and more. Score jobs with AI, fill forms, track applications.
Project description
ApplyPilot
Local-first AI job search copilot.
ApplyPilot is the product-grade rewrite of the working LinkedIn agent. The core idea is simple: keep risky browser/session work on the user's machine, put paid product value in the SaaS layer, and expose the same agent through CLI, desktop, MCP, and ChatGPT/Codex distribution.
Product Positioning
ApplyPilot is not a spam auto-apply bot. It is a job-hunt operating system:
- import jobs from local connectors
- score fit against a user's resume and preferences
- build a review queue
- draft application answers and outreach
- track applications and outcomes
- run local browser automation, including auto-submit, when explicitly enabled
Why Local-First
Users should not give a random SaaS their LinkedIn password. The local agent keeps cookies, browser sessions, resumes, and API keys on the user's device. The SaaS handles subscription, sync, analytics, premium prompts, and product UX.
Current MVP
This first slice is intentionally useful without touching LinkedIn:
- imports job JSON from the existing working agent
- normalizes jobs into a queue
- scores jobs with a safe local rules provider
- prints a review queue
- exports a markdown report
- exports SaaS dashboard data for the web control plane
Quick Start
cd /Users/rishal/Desktop/bed_rock/applypilot
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
applypilot init
applypilot import-linkedin --source /Users/rishal/Desktop/bed_rock/linkedin-agent/output/linkedin_jobs.json
applypilot score
applypilot review --limit 20
applypilot report
No API key is required for the default rules provider.
Working Agent Replica Mode
ApplyPilot includes a native copy of the current production-grade local agent. This is the fastest path to making the SaaS product match the tool already working on this desktop while keeping logs and outputs inside the ApplyPilot workspace.
cd /Users/rishal/Desktop/bed_rock/applypilot
PYTHONPATH=src python3 -m applypilot --workspace . status
PYTHONPATH=src python3 -m applypilot --workspace . sync-legacy
PYTHONPATH=src python3 -m applypilot --workspace . dashboard
PYTHONPATH=src python3 -m applypilot --workspace . daily --mode apply
Replica modes:
daily --mode linkedin: run LinkedIn Easy Applydaily --mode naukri: run Naukri Applydaily --mode leads: run Lead Hunterdaily --mode apply: run LinkedIn + Naukridaily --mode all: run LinkedIn + Naukri + Lead Hunter
By default daily runs native ApplyPilot modules copied from the working agent:
applypilot.working_agent.auto_apply_chromeapplypilot.working_agent.auto_apply_naukriapplypilot.working_agent.lead_hunter
Use --use-legacy only when you intentionally want to run the old sibling folder:
/Users/rishal/Desktop/bed_rock/linkedin-agent
SaaS Dashboard
The dashboard is a static web control plane fed by local ApplyPilot data. It shows applied totals, policy gates, source performance, AI provider mix, review queue, and recent run audit history.
cd /Users/rishal/Desktop/bed_rock/applypilot
PYTHONPATH=src python3 -m applypilot --workspace . dashboard
cd apps/web
python3 -m http.server 4173
SaaS MVP Flow
ApplyPilot now has a real SaaS spine for the protected product model:
SaaS account/license -> desktop activation -> local agent run -> dashboard sync -> SaaS dashboard
Run the API and hosted dashboard:
cd /Users/rishal/Desktop/bed_rock/applypilot
pip install -e '.[server]'
PYTHONPATH=src python3 -m applypilot --workspace . serve --host 127.0.0.1 --port 8787
Create a customer/license in the dev database:
PYTHONPATH=src python3 -m applypilot --workspace . saas-create-customer \
--email user@example.com \
--name "Test User" \
--plan pro_byok \
--ai-mode byok_local \
--seats 1
Activate the desktop and sync local data:
PYTHONPATH=src python3 -m applypilot --workspace . saas-activate \
--endpoint http://127.0.0.1:8787 \
--license-key ap_live_...
PYTHONPATH=src python3 -m applypilot --workspace . saas-sync
PYTHONPATH=src python3 -m applypilot --workspace . saas-me
Production billing can replace saas-create-customer with a Stripe/Razorpay webhook that creates the customer and license after payment.
The production billing flow is now implemented. Configure provider products and webhook secrets from .env.example, then open:
http://127.0.0.1:8787/checkout.html
See docs/billing.md.
Providers
Working now:
rules: no key, local heuristic scoringollama: local model through Ollamaopenai: OpenAI-compatible chat completions endpoint
Examples:
applypilot score --provider rules
OLLAMA_MODEL=llama3.1 applypilot score --provider ollama
OPENAI_API_KEY=... OPENAI_MODEL=... applypilot score --provider openai
Reserved for the next provider pass:
- Anthropic / Claude
- Gemini
- Hugging Face
Commands
applypilot init
applypilot import-linkedin --source path/to/linkedin_jobs.json
applypilot score --provider rules
applypilot score --provider ollama
applypilot score --provider openai
applypilot review --min-score 50 --limit 25
applypilot report --out .applypilot/reports/review.md
applypilot policy
applypilot policy --mode auto-submit --daily-limit 25 --min-score 70
applypilot run --provider rules --connector linkedin-browser --interval-minutes 60
applypilot daily --mode all
applypilot sync-legacy
applypilot status
applypilot dashboard
applypilot serve
applypilot saas-create-customer --email user@example.com
applypilot saas-activate --license-key ap_live_...
applypilot saas-sync
applypilot saas-me
Desktop App
Run the local desktop control center:
pip install -e '.[desktop]'
applypilot-desktop
Build compiled macOS/Windows artifacts:
pip install -e '.[desktop,package]'
python3 packaging/build_desktop.py --clean
Deploy SaaS
Run the production-shaped container locally:
cp .env.example .env
docker compose up --build
The SQLite SaaS database is persisted in the applypilot-data Docker volume. For public deployment, configure HTTPS, provider secrets, allowed origins, and webhook URLs.
GitHub Actions are included for tests and native macOS/Windows desktop builds.
Automation Modes
ApplyPilot supports three product modes:
review-only: score and prepare jobs, no form fillingfill-only: fill applications locally, stop before the final submit buttonauto-submit: fill and click the final application submit button when policy rules pass
Auto-submit means application submission. It is a real product requirement, but it must be explicit because it changes the user's external accounts.
Unattended Desktop Agent
The user can run ApplyPilot on their own desktop while away:
pip install -e '.[desktop]'
applypilot policy --mode auto-submit --daily-limit 25 --min-score 70
applypilot run --provider rules --connector linkedin-browser --interval-minutes 60
On macOS, ApplyPilot uses the user's existing logged-in Google Chrome profile. It does not open a separate Chromium profile for submission.
Product Surfaces
src/applypilot: local core packagesrc/applypilot/server.py: SaaS API serversrc/applypilot/saas_store.py: customers, licenses, devices, sync storesrc/applypilot/saas_client.py: desktop activation and sync clientdocs/architecture.md: SaaS + local agent architecturedocs/product-strategy.md: launch and monetization plandocs/mcp-and-openai-app.md: MCP, Claude Code, Codex, and ChatGPT Apps strategydocs/security.md: trust, secrets, and review-before-submit rulesapps/desktop: desktop packaging planapps/web: static SaaS dashboard and command center
Hard Rule
Application submission must be explicit, limited, logged, and controlled by local policy.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file applypilot_ai-0.1.0.tar.gz.
File metadata
- Download URL: applypilot_ai-0.1.0.tar.gz
- Upload date:
- Size: 78.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c00bd497c031282dc05de0aca640703f0c99da726946e42d667eb38f8644e394
|
|
| MD5 |
629f0876d742f1f1e8b4d39b89c928ba
|
|
| BLAKE2b-256 |
6721731b56fcfbdd6a69ed59477d2c359c3ee4bb22623a2c10e1c82593a2fd35
|
File details
Details for the file applypilot_ai-0.1.0-py3-none-any.whl.
File metadata
- Download URL: applypilot_ai-0.1.0-py3-none-any.whl
- Upload date:
- Size: 86.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db62cfbd22b6e1df9cd374cc794e2cf71d2759eb44dbcbaa675bf42102aeee70
|
|
| MD5 |
027729e8616759d1c6c9f29419035cfc
|
|
| BLAKE2b-256 |
efb9cb1fa38ca561177118bb13a92f5b3b04130f538a29d1dc08d1707c180cbd
|