Local-first, PII-safe job-hunting copilot. Scrapes boards, kanban-tracks applications, auto-fills ATS forms, tailors resumes per JD.
View on GitHub βSelf-hosted job-search command center distributed as a Claude Code skill, CLI, and local webapp. Scrapes 11 job boards into a local SQLite pipeline, tracks every application kanban-style, fills ATS forms in shadow or auto mode, and tailors Reactive Resume JSON per JD β without sending PII or session cookies to any model.
| Layer | Stack |
|---|---|
| Skill | Claude Code plugin β slash commands for discover, apply, dig, tailor-resume |
| CLI | Python 3.12 + uv β scrapers, form-fill, salary aggregation |
| Webapp | FastAPI + HTMX on 127.0.0.1:8765 β kanban tracker, metrics, JD viewer |
| Storage | SQLite jobs.db mirrored to human-readable tracking.md |
| Forms | Playwright + YAML adapters (Gupy, Greenhouse, Lever, Workday, Ashby) |
learn.py adapter that drafts YAML from any unknown formdiscovered β queued β applying β applied β screening β technical β behavioral β offer / rejected / withdrawnshadow pauses before submit; auto requires 5 reliability gates + explicit consentPersonal data (national ID, phone, address, session cookies) lives in ~/.config/job-hunter/secrets/personal.env at chmod 600. The model is explicitly forbidden to read it via Read tool, cat/head/tail/grep, or any pipe whose output enters the conversation. The CLI loads it via python-dotenv in a child process; the model only sees field schemas. CI runs lint_secret_leaks.py to block any PR that would echo PII into logs or screenshots.