Resume Generator
Generate and tailor one-page resume PDFs from RenderCV YAML.
The package provides two CLI paths:
- Render an existing RenderCV YAML file to PDF.
- Tailor a resume from a public job URL and local Markdown source material, then validate generated claims before rendering.
Install
uv tool install evidence-resume-tailor
For local development:
uv sync
Render A Resume
uv run resume-generator examples/basic.yaml
The PDF is written to:
output/resumes/basic.pdf
RenderCV also writes a .typ build artifact next to the PDF. Generated resumes are capped at one page; oversized PDFs fail the command so the resume stays targeted. When local PDF rasterization is available, the CLI also reports page fill, for example 88% page height reached.
The render command can also be called explicitly:
uv run resume-generator render examples/basic.yaml --output-dir output/resumes
Use --keep-supporting-formats when you also want RenderCV's Markdown and HTML outputs.
Tailor A Resume
The tailoring flow uses local Markdown files as the source of truth, fetches a public job page, asks Codex CLI to produce structured tailored resume content, validates generated resume claims against cited source text, then renders the final one-page PDF with RenderCV.
uv run resume-generator tailor \
--job-url "https://company.com/jobs/123" \
--content-dir content \
--out-dir generated/company-role
Artifacts are written under the output directory:
job.md
prompt.md
tailored_resume.json
resume.yaml
evidence.json
resume.pdf
resume.typ
Each run writes to a staging directory first. Existing final artifacts are only replaced after evidence validation and one-page PDF rendering both succeed. If a valid one-page draft uses too little vertical space, the tailor flow gives Codex one bounded revision attempt with the measured page-use percentage and asks it to add only stronger job-matched, evidence-backed content. If a run fails after writing diagnostics, the CLI reports the staging path.
Tailoring requires the codex CLI to be installed and authenticated. Plain YAML rendering does not require Codex.
Local Source Material
Put private source material in Markdown files under content/. Nested folders are fine, and each file becomes an evidence source keyed by its relative path.
content/
profile.md
projects/
resume-generator.md
Optional YAML frontmatter is supported:
---
kind: project
---
Built a RenderCV-based resume generator.
The AI is instructed to use only these files and to choose only the strongest material for the specific job. Substantive generated resume claims in summaries, highlights, bullet-style entries, section fields such as company/project names and dates, skill details, and cv.headline must be cited in evidence.json. Short display labels such as skill group names are treated as presentation, not claims. The validator also checks that cited source files contain the claim or the claim's key terms and numbers; otherwise the PDF render is blocked.
content/, generated/, output/, tmp/, and PDF/Typst render artifacts are ignored by git so personal material stays local by default.
Development
uv run pytest
uv build --wheel --sdist
To verify the local Codex CLI integration:
RUN_LIVE_CODEX_SMOKE=1 uv run pytest tests/test_codex_smoke.py
Release Automation
The repository includes a GitHub Actions workflow that can publish to PyPI through trusted publishing.
The scheduled publish workflow runs around 1:00 AM Eastern. It checks package-relevant files against the most recent v* tag. If no package changes are found, it exits without publishing. If package changes are found, it bumps the patch version, commits the version update, creates a tag, builds the wheel and source distribution, publishes to PyPI, and creates a GitHub release.
PyPI trusted publishing must be configured for this repository before the first automated publish can succeed. Configure the PyPI project with:
PyPI Project Name: evidence-resume-tailor
Owner: the-Drunken-coder
Repository name: resume-generator
Workflow filename: publish.yml
Environment name: pypi
If the PyPI project does not exist yet, create a pending trusted publisher with the same values in PyPI before running the workflow.
Metadata
Release files for evidence-resume-tailor 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| evidence_resume_tailor-0.1.0.tar.gz | 50.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| evidence_resume_tailor-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.2 kB
Release files / evidence_resume_tailor-0.1.0.tar.gz
| Download URL | evidence_resume_tailor-0.1.0.tar.gz |
|---|---|
| Size | 50.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35fac74dd6fb9473ce4d0fcef6c0026ceb000daa200cef2f8e4a4586d24afcc3
|
|
BLAKE2b-256 checksum How to use checksums |
4e174867308b1eb0811ff128168df0a60abb1db051e442bd71d3440857effba4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / evidence_resume_tailor-0.1.0-py3-none-any.whl
| Download URL | evidence_resume_tailor-0.1.0-py3-none-any.whl |
|---|---|
| Size | 22.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5dd755bf8a16f1c59e9e575c6c347890f6def985e1a57a184c269ed6efdb0f0a
|
|
BLAKE2b-256 checksum How to use checksums |
e370c91ea81307e7686d5460e2221243f0fc4c3d929b99b2326a8c70105b4c1d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|