Build JD-specific resumes with AI, keep everything structured, and export exact PDFs locally using the real Reactive Resume renderer.
This project started from a simple annoyance:
AI can help tailor a resume, but the last mile usually sucks.
- You get Markdown instead of a real resume format.
- The PDF looks different every time.
- You still end up clicking around in some UI to make it usable.
- "ATS-friendly" usually means "trust me bro".
This repo fixes that flow.
You keep your base resume in Reactive Resume JSON, let an agent rewrite it for a target job description, and then render the final PDF locally using the actual upstream Reactive Resume pipeline.
- Bun
gitpnpm- Docker with
docker-composeordocker compose - Chrome, Chromium, or Edge installed locally
git clone https://github.com/mohiwalla/agentic-reactive-resume.git
cd agentic-reactive-resume
bun installBasic usage:
bun pdf jsons/resume-base.jsonBy default:
- if
USERNAMEexists, the output filename becomesUSERNAME (random).pdf - otherwise it falls back to
<input-basename>.pdf - output files are written into
pdfs/
Examples:
bun pdf jsons/resume-base.json
bun pdf jsons/resume-base.json -o pdfs/company-role.pdf
bun pdf jsons/resume-base.json --output-dir build/pdfs
bun pdf jsons/resume-base.json --printer-mode browserlessHelp:
bun pdf -h- Takes a structured resume JSON as input
- Lets an agent or script tailor that resume for a specific job description
- Preserves the result in machine-editable Reactive Resume JSON
- Exports an exact PDF locally without depending on a hosted resume builder
So this is not just some prompt taped to an agent to spit out Markdown. It is an end-to-end resume building pipeline.
Most AI resume workflows break in one of two places:
- The content becomes unstructured too early.
- The export step is inconsistent or manual.
I wanted a pipeline where:
- My base resume stays structured.
- An agent can tailor it for a job description.
- The output remains editable JSON.
- The final PDF comes out clean and predictable.
That makes it really useful for role-specific resumes.
- A way to generate JD-specific resumes without going back to a hosted UI
- A reliable final step for agentic resume generation
- A local CLI for rendering Reactive Resume JSON to PDF
- It is not a built-in LLM resume writer
- It does not scrape job boards for you
- It does not reimplement Reactive Resume templates
You pair it with any agent, script, or workflow that can edit JSON.
- Keep a truthful base resume in
jsons/resume-base.json - Paste in a target job description
- Ask an agent to tailor the resume JSON
- Render the result to PDF with this CLI
That is the whole idea.
You can use any coding agent or LLM workflow that can safely edit JSON.
Take jsons/resume-base.json as the source resume.
Tailor it for this job description:
<paste JD here>
Constraints:
- Keep all claims truthful
- Strengthen wording only when the source supports it
- Add JD-relevant keywords naturally
- Reorder bullets and skills to match the role
- Keep the output valid Reactive Resume JSON
- Write the result to jsons/resume-<job-title>.json
Then export it:
bun pdf "jsons/resume-<job-title>.json"Or write to a specific file:
bun pdf "jsons/resume-<job-title>.json" -o pdfs/company-role.pdf- Exact PDF output using the real Reactive Resume renderer
- Local CLI that works well for humans, scripts, and coding agents
- Chrome/Chromium/Edge auto-discovery on macOS, Linux, and Windows
- Local Chrome printing by default, with browserless fallback support
- No
rxresu.medependency at runtime
-h, --help: show help-V, --version: show version-o, --output <file>: write to an explicit PDF path--output-dir <dir>: write into a custom output directory--keep-resume: keep the imported upstream resume instead of deleting it--printer-mode <auto|chrome|browserless>: choose printer backend--chrome-path <path>: override detected Chrome/Chromium executable
This project does not fake the template.
It:
- boots a local Reactive Resume runtime
- imports your Reactive Resume JSON through the upstream API
- asks Reactive Resume to generate the PDF
- downloads the generated PDF to your local filesystem
That is why the output matches the real renderer instead of being some close-enough HTML copy.
- First run is slower because the upstream Reactive Resume repo is cloned and dependencies are installed under
.cache/reactive-resume/ - Postgres is started locally through Docker
- Local Chrome is preferred over browserless so you do not need a heavy printer image pull on first run
- If browser auto-detection fails, set
CHROME_EXECUTABLE_PATH=/absolute/path/to/chrome
bun test
bun typecheck