AI-powered CV tailor. Generates a job-specific CV from your master CV and a job posting. LaTeX to PDF.
Project description
cv4offer-tailor
AI-powered CV tailor. Give it your master CV and a job posting. Get a perfectly matched, ATS-optimized PDF.
No more manually tweaking your CV for every application. Write your experience once (with variants), and let AI pick the best combination for each job.
How it works
- You create a master CV in LaTeX with tagged content pools (skill variants, bullet variants, multiple summaries)
- You paste a job posting into a text file
- cv4offer analyzes the posting and selects the optimal content: which skills to highlight, which bullet variants to use, which achievements match the industry
- Out comes a compiled PDF tailored to that specific job
cv4offer generate posting.md --master my_cv.tex
The tag system
Your master CV uses simple comment tags that cv4offer reads:
% Skills pool (cv4offer picks 12-18 that match the job)
% %%SKILL:eng_python :: \item Python (Django, FastAPI)
% %%SKILL:eng_docker :: \item Docker, CI/CD pipelines
% Bullet variants (v1=standard, v2=expanded, v3=short)
% %%BULLET:acme_1_v1 :: \item Led migration, reducing deploy time by \textbf{70\%}
% %%BULLET:acme_1_v2 :: \item Architected migration from monolith to 12 microservices...
% %%BULLET:acme_1_v3 :: \item Monolith to microservices: deploy time \textbf{-70\%}
% Achievement variants (AI picks the best for the industry)
% %%ACHIEVEMENT_3:A_infra :: \item CI/CD pipeline: releases from 2 weeks to \textbf{2 hours}
% %%ACHIEVEMENT_3:B_ml :: \item Recommendation engine: engagement \textbf{+35\%}
% Frozen sections (never changed, copied verbatim)
% %%FROZEN_SECTION:start:education
\textbf{B.Sc. Computer Science} \\ MIT, 2018--2022
% %%FROZEN_SECTION:end:education
Features
- ATS optimization — keywords from the job posting appear naturally in your CV (never copied verbatim)
- Visual quality checker — detects orphan lines, overfull text, page fill issues
- 2-page enforcement — automatically trims or expands content to fit exactly 2 pages
- Frozen sections — education, references, achievements that must never change
- Multiple bullet variants — same achievement in 3 lengths (standard, expanded, short)
Install
pip install cv4offer
Requirements:
- Python 3.10+
- pdflatex (TeX Live or MiKTeX)
- Anthropic API key (
ANTHROPIC_API_KEYenv var)
Quick start
# 1. Copy the example template
cp $(python -c "import cv4offer; print(cv4offer.__file__.replace('__init__.py', 'templates/example_master.tex'))") my_cv.tex
# 2. Edit my_cv.tex with YOUR data (follow the tag system)
# 3. Save a job posting as text
cat > posting.md << 'EOF'
Senior Python Developer at TechCorp
Requirements: Python, Django, PostgreSQL, Docker, CI/CD...
EOF
# 4. Generate tailored CV
export ANTHROPIC_API_KEY=sk-ant-...
cv4offer generate posting.md --master my_cv.tex
# 5. Check visual quality of compiled PDF
cv4offer check cv_techcorp.tex
Commands
| Command | What it does |
|---|---|
cv4offer generate posting.md -m master.tex |
Analyze posting, select content, generate CV |
cv4offer check cv_output.tex |
Visual quality check (orphans, overfull, page fill) |
cv4offer parse master.tex |
Show all content pools in your master CV |
cv4offer parse master.tex -v |
Same, but list every item |
Quality checker
The built-in checker catches issues that pdflatex won't tell you about:
$ cv4offer check cv_techcorp.tex
{
"pages": 2,
"page_fill": [98.3, 91.7],
"issues": [
{"type": "orphan_line", "page": 1, "text": "month", "width_pct": 12.3, "severity": "WARNING"},
{"type": "overfull_hbox", "page": 2, "excess_pt": 3.41, "severity": "WARNING"}
],
"summary": {"critical": 0, "warning": 2, "info": 0}
}
Why not just use ChatGPT to rewrite my CV?
Because rewriting from scratch every time is slow, inconsistent, and loses your best formulations. cv4offer keeps your proven content (metrics, achievements, bullet variants you've refined over months) and just selects the right combination. The AI picks. You wrote the content.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cv4offer-0.1.0.tar.gz.
File metadata
- Download URL: cv4offer-0.1.0.tar.gz
- Upload date:
- Size: 17.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4068f1067a5e4dd58eae8ca41f81dc77e5762a0d4b1a05670e32ada0a5a86d6
|
|
| MD5 |
608da4e1c8b2c3ad6fbbb2526e34af9c
|
|
| BLAKE2b-256 |
f765238852c09fd8d2d069e2a171137bb409083c64f7b425c2b8df26f98628f3
|
File details
Details for the file cv4offer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: cv4offer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
126c8263f2c1f944248a266b964c6fb58802fb61db02b689e8f73e0675075d6b
|
|
| MD5 |
4cc5c03c97a8399075e581420f7ee423
|
|
| BLAKE2b-256 |
ed02cb2070d15bffea93125af958aea898d5f548db2c35a5e1347e1ba2f59fdf
|