⚠️ BETA — Work in Progress JobForge is still in active beta development. APIs, CLI commands, scoring rubrics, and config schemas may change without notice. Expect rough edges, breaking changes between commits, and features that are half-wired. Use at your own risk and do not rely on it for production job hunts yet.
Autonomous job search automation system.
A personal, local-first tool for scanning 50+ company job boards, evaluating fit with LLMs, generating tailored application materials, and (eventually) auto- submitting applications with stealth capabilities.
┌─────────────────────────────────────┐
│ J O B F O R G E │
│ Autonomous Job Search Automation │
└──────────────┬──────────────────────┘
│
┌──────────────────────────┼──────────────────────────┐
│ │ │
┌───────▼───────┐ ┌───────▼───────┐ ┌──────▼────────┐
│ LAYER 1 │ │ LAYER 2 │ │ LAYER 3 │
│ Ingest/Filter │──────► │ Eval/Tailor │──────► │ Auto-Apply │
│ │ │ │ │ │
│ Greenhouse │ │ Sonnet 4.6 │ │ Playwright │
│ Lever │ │ 6-Block Eval │ │ +Stealth │
│ Ashby │ │ 10-Dim Score │ │ +Humanizer │
│ Workday │ │ RAG Corpus │ │ +Captcha │
│ Playwright │ │ CV/CL/Answer │ │ +Rate Limit │
│ │ │ PDF Gen │ │ +Proxy │
│ Haiku Filter │ │ │ │ │
│ ~80% Kill │ │ Hard Floor 4.0│ │ 4.4+ → Opus │
│ │ │ │ │ Deep Dive │
└───────────────┘ └───────────────┘ └───────────────┘
│
┌──────────▼──────────┐
│ COMPOUNDING │
│ │
│ Outcome Tracking │
│ Auto-Tune Rubric │
│ Neo4j Story Graph │
│ Weekly Learning │
└─────────────────────┘
| Layer | State | Notes |
|---|---|---|
| Layer 1: Ingest | 🟡 beta | Greenhouse/Lever/Ashby stable; Workday flaky |
| Layer 2: Eval & Tailor | 🟡 beta | Sonnet eval works; rubric still tuning |
| Layer 3: Auto-Apply | 🔴 experimental | Stealth stack incomplete — manual review required |
| Dashboard (web) | 🟡 beta | Next.js app, read-only views working |
| Compounding / tuning | 🔴 experimental | Outcome logging works; auto-tune untested |
Python 3.12 · uv · asyncio · httpx · Playwright · SQLite (FTS5) · ChromaDB · Neo4j · OpenRouter (Haiku / Sonnet / Opus) · FastAPI · WeasyPrint · Pydantic v2 · Click · Rich · Next.js (dashboard)
You will need your own API keys. No keys are included in this repo. Copy
.env.exampleto.envand fill in the values you have.
# 1. Clone & enter
git clone https://github.com/thisisvk45/Jobforge.git
cd Jobforge
# 2. Setup Python env
chmod +x scripts/*.sh
./scripts/setup.sh
# 3. Configure
cp .env.example .env
# then edit .env and add at minimum: OPENROUTER_API_KEY
# drop your resume, READMEs, project docs into corpus/
# 4. Scan job boards
jobforge scan
# 5. Evaluate top candidates
jobforge eval
# 6. (Beta — review carefully before enabling) auto-apply
jobforge apply| Command | Description |
|---|---|
jobforge init |
Initialize database and index corpus |
jobforge scan |
Scan all configured company job boards |
jobforge scan -c Anthropic |
Scan a specific company |
jobforge eval |
Batch evaluate filtered jobs |
jobforge eval -j 42 |
Evaluate a specific job |
jobforge apply |
Auto-apply to top-scoring jobs (beta) |
jobforge apply -j 42 |
Apply to a specific job |
jobforge review -a 1 -s offer |
Log an application outcome |
jobforge tune |
Auto-tune rubric weights from outcomes |
jobforge stats |
Show pipeline statistics |
jobforge dashboard |
Launch FastAPI dashboard on :8000 |
- Async scanning of Greenhouse, Lever, Ashby, Workday APIs + Playwright fallback
- Content-hash deduplication (SHA-256)
- Haiku 4.5 quick scoring on 5 dimensions: role fit, seniority, location/visa, domain, red flags
- ~80% of jobs killed before Layer 2
- Sonnet 4.6 runs a 6-block evaluation: role summary, CV match, level strategy, comp research, personalization, STAR+R stories
- 10-dimension weighted scoring with a configurable rubric
- RAG over your corpus (ChromaDB) for personalization
- Generates per-job: tailored CV PDF, cover letter PDF, Q&A drafts, eval report
- Playwright with
playwright-stealth+ fingerprint randomization - Human behavior simulation: Bezier mouse curves, variable typing with typos, random scrolling
- Session warming: LinkedIn → Google → company homepage referrer chain
- 2Captcha integration for reCAPTCHA, hCaptcha, Turnstile
- Per-domain rate limiting (3–5 apps/day, 20+ min intervals)
- Persistent cookie jars per company
- Full screenshot + form data logging
- For 4.4+ scores: Opus deep dive + cold email to hiring manager
⚠️ Layer 3 is not production-ready. Keep a human in the loop and always review generated artifacts before anything is sent anywhere.
- Outcome tracking: applied → screen → interview → offer pipeline
- Weekly auto-tuning: Sonnet analyzes which scoring dimensions correlate with success
- Neo4j story graph: STAR+R stories linked to skills, question types, companies, outcomes
config/profile.yml— Your background, skills, targetsconfig/companies.yml— 50+ companies with ATS slugsconfig/rubric.yml— 10-dimension scoring weights (auto-tuned)config/stealth.yml— Proxy, rate limits, behavior tuningcorpus/— Drop your resume, READMEs, blog posts for RAG
All secrets are loaded from .env at runtime — see .env.example for the full
list. At a minimum you need:
OPENROUTER_API_KEY— required for Haiku / Sonnet / Opus calls
Optional integrations: CAPTCHA_API_KEY, APOLLO_API_KEY, HUNTER_API_KEY,
SERPAPI_KEY, THEIRSTACK_API_KEY, JOBDATAAPI_KEY, Neo4j, Twilio, Slack,
proxy credentials.
- Install Neo4j Desktop
- Create a local database, start it on
bolt://localhost:7687 - Set
NEO4J_URI,NEO4J_USER,NEO4J_PASSin.env - The story graph schema auto-initializes on first use
jobforge dashboard
# GET /health — Health check
# GET /jobs — List jobs with filters
# GET /jobs/{id} — Job detail with evaluation
# GET /apps — List applications
# GET /outcomes — Stats and recent outcomes
# GET /stories — STAR+R story bank
# GET /pipeline — Pipeline status countsA Next.js front-end lives in dashboard-web/ (also beta).
- Workday scraping is flaky on some tenants
- Auto-tune rubric can produce weird weights when outcome data is sparse
- Layer 3 stealth stack is incomplete and not safe to run unattended
- Dashboard endpoints may change shape between commits
- Test coverage is uneven across layers
This is a personal project in beta. Issues and small PRs are welcome, but expect the architecture to keep shifting for a while.
This tool is built for personal use to automate the mechanical parts of job searching. It does not:
- Misrepresent the candidate's qualifications
- Generate false information
- Spam companies beyond reasonable application rates
- Circumvent explicit anti-automation measures without consent
Rate limits are configured conservatively. All generated materials are based on the candidate's real background. Use responsibly.
TBD — currently all rights reserved while the project is in beta.
Built by Vikas · MSBA, Wake Forest 2026 · AI/ML Engineering Status: 🟡 Beta — expect breakage