OfferPilot AI is a local-first career operations app for finding jobs, tailoring application materials, tracking applications, and preparing answers for ATS forms.
It is designed to keep the resume fact base under the user's control: the master resume is the source of truth, the employment history stays locked, and AI tailoring is limited to the profile/summary, skills wording, cover letter, LinkedIn text, and application-form answer drafts.
- Search jobs through configured ATS boards and web-search providers.
- Import or edit a structured
master_resume.yml. - Generate an ATS-safe tailored resume from the master resume and a job description.
- Keep employment history unchanged to avoid suspicious gaps or invented experience.
- Produce a match score, ATS keyword analysis, cover letter, LinkedIn version, and changelog.
- Render PDF resumes from HTML/CSS templates using Playwright/Chromium.
- Track saved/applied/rejected/interview jobs in SQLite.
- Fetch application questions where supported and draft answer packs for manual review.
Master resume -> source of truth
AI tailoring -> profile/summary + skills wording + supporting documents
Experience -> copied from the master resume, not rewritten or removed
Apply Assistant -> drafts answers, user reviews and submits manually
OfferPilot AI does not blindly submit applications. It prepares materials and answer drafts, then opens the original ATS page for human review.
cd C:\projects\offerpilot-ai
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\run.ps1Open:
http://127.0.0.1:8442
The first run creates local editable files from examples when needed:
data/settings.yml
data/master_resume.yml
These local files are ignored by Git so personal data and API keys are not accidentally committed.
OfferPilot AI can use:
- Ollama / Qwen locally
- Groq API
- Mistral API
For local Qwen:
ollama pull qwen2.5:14b
ollama serveFor cloud providers, copy .env.example to .env and add keys, or use the Settings page:
GROQ_API_KEY=
MISTRAL_API_KEY=
SERPAPI_API_KEY=
OLLAMA_BASE_URL=http://localhost:11434
PDFs are not generated by the language model. The app uses a deterministic rendering pipeline:
tailored_resume.json -> Jinja2 HTML template -> Playwright Chromium -> PDF
Available templates:
strict— ATS-safe, plain, single-columnmodern— default balanced templatecompact— tighter layoutaccent— slightly more visual styling
Directly fetching Google HTML is unreliable, so OfferPilot supports multiple search paths:
- SerpApi, when configured, for Google / Google Jobs style search.
- Bing dork fallback and manual query links.
- Curated Greenhouse and Lever board scans.
Search results persist while the server is running and can be removed with Clear results.
Apply Assistant can detect supported ATS links, fetch visible application questions where possible, and generate a reviewed answer pack.
Common fields such as name, email, phone, LinkedIn, GitHub, location, salary expectation, work authorization, and availability can be prefilled from the master resume and settings.
File-upload fields such as “Upload resume/CV” are treated as upload tasks, not text questions.
- Installation
- Configuration
- Usage
- Apply Assistant
- Architecture
- Privacy
- Troubleshooting
- GitHub publishing notes
The GitHub version ships with example config and example resume files only. Runtime databases, generated resumes, imported PDFs, .env, and personal resume data are ignored by .gitignore.
MIT License. See LICENSE.