Privacy-first Chrome extension for job applications. Knight parses your resume locally or through your chosen provider, autofills common ATS portals, logs applications, syncs Gmail status updates, and drafts follow-ups without forcing your profile through a hosted AI workflow.
Website: sir-ad.github.io/knight
- Local-first resume parsing for
PDF,DOCX, andTXT - LangExtract-powered local resume parser sidecar with
PyMuPDFand optionalTesseract OCR - AI provider support for
Ollama,OpenAI,Anthropic,Google Gemini, andOpenRouter - Smart defaults that auto-discover installed Ollama models and recommend the best reachable provider/model
- Autofill support for
Workday,Greenhouse,Lever,Naukri,iCIMS,SmartRecruiters,Taleo,SuccessFactors, plus a generic fallback - In-page review overlay before filling
- Local application log with status history
- Gmail read-only sync for confirmations, interviews, rejections, and offers
- Follow-up email draft generation with the active provider
- careerflow: browser extension source
- docs: GitHub Pages marketing/docs site
- .github/workflows: CI, Pages deployment, and release packaging
git clone git@github.com:sir-ad/knight.git
cd knight/resume-parser-sidecar
./scripts/setup-venv.sh
./scripts/run.shIn another terminal:
cd knight/careerflow
npm install
npm run buildThen load careerflow/build/chrome-mv3-prod in chrome://extensions with Developer Mode enabled.
- Node.js 20+
- Python
3.11+ - The local resume parser sidecar running on
http://127.0.0.1:43118 - Ollama running locally for the privacy-first path
- A pulled model such as
llama3.2:3b tesseractinstalled locally if you want OCR for scanned PDF resumes- Optional cloud provider API key for
OpenAI,Anthropic,Google Gemini, orOpenRouter - Optional Gmail OAuth setup using
PLASMO_PUBLIC_GOOGLE_CLIENT_ID
cd resume-parser-sidecar
./scripts/setup-venv.sh
./scripts/run.sh
cd ../careerflow
OLLAMA_ORIGINS=chrome-extension://* ollama serve
ollama pull llama3.2:3bKnight expects the Ollama endpoint as the host root only, for example http://localhost:11434. Do not add /api to the saved endpoint.
Knight expects the resume parser service to stay on the default local URL unless you explicitly move it: http://127.0.0.1:43118.
- Workday via
*.myworkdayjobs.com - Greenhouse via
boards.greenhouse.ioand*.greenhouse.io - Lever via
jobs.lever.coand*.lever.co - Naukri via
*.naukri.com - iCIMS via
*.icims.com - SmartRecruiters via
*.smartrecruiters.com - Oracle Taleo via
*.taleo.net - SAP SuccessFactors via
*successfactors*and*.jobs2web.com - Generic fallback for employer-hosted forms that expose standard labels, placeholders, or aria metadata
From careerflow:
npx tsc --noEmit
npm test -- --runInBand
npm run build
npm run packageFrom resume-parser-sidecar:
source .venv/bin/activate
pytest tests -q- CI verifies typecheck, tests, build, and packaged extension output
- CI also installs
tesseract-ocrand runs the sidecarpytestsuite - Release workflow attaches the packaged Chrome extension zip to GitHub Releases
- Pages workflow deploys the docs site from
docs
chrome-extension job-search ats-autofill ollama openai anthropic gemini openrouter gmail privacy-first plasmo typescript
- Confidential research docs are intentionally excluded from version control.
- Local tool settings in
.claude/are also ignored. - Product and implementation details for the extension live in
careerflow/README.md. - Local parser service details live in
resume-parser-sidecar/README.md.