Tailors your LaTeX resume to a job description using a two-pass LLM pipeline. Outputs a 1-page PDF with bullets rewritten to mirror exact JD language.
- Scrapes the job description (URL,
.txt, or inline text) - Pass 1 : LLM extracts required skills and key terms from the JD
- Pass 2 : LLM rewrites every bullet in XYZ format using those terms
- Compiles LaTeX → PDF; trims spacing and cuts bullets until exactly 1 page
- Saves output to
outputs/YYYY-MM-DD_<company>/: source resume never touched
git clone https://github.com/Micsushi/ResumeWriter.git
cd ResumeWriter
pip install -r requirements.txt
cp .env.example .env # add OLLAMA_HOST and/or GEMINI_API_KEY# From a URL
python resume_writer/main.py resume.tex --jd https://jobs.example.com/123
# From a file
python resume_writer/main.py resume.tex --jd job.txt
# Use Gemini instead of Ollama
python resume_writer/main.py resume.tex --jd job.txt --api gemini| Flag | Model | Requires |
|---|---|---|
| (default) | qwen3:8b via Ollama |
OLLAMA_HOST in .env |
--api gemini |
gemini-2.5-flash |
GEMINI_API_KEY in .env |
make fix # lint + format fixes, then tests
make check # lint + format check only (no fixes) : same as CI
make test # tests onlybash scripts/setup_linux.sh # installs Python, texlive, poppler, pulls qwen3:8bSee docs/setup.md for full setup and docs/plan.md for the build phases.
[Ansible] → provisions Linux server + Ollama
[Job scraper] → populates jobs.db every 10 min
[ResumeWriter] → reads job, outputs targeted PDF
[Agent] → submits application