/resume-export
Render a resume config to a clean, ATS-safe Word (.docx) and a text-based (ATS-readable) PDF. Use when producing resume output files. Covers the JSON config schema, the generator/converter scripts, dependency setup, and conversion fallbacks.
Claude Code
$ npx -y skills add snehag01/rebound --skill resume-export --agent claude-code
Codex
$ npx skills add snehag01/rebound --skill resume-export -a codex -y
Cursor
$ npx skills add snehag01/rebound --skill resume-export -a cursor -y
Gemini CLI
$ npx skills add snehag01/rebound --skill resume-export -a gemini-cli -y
GitHub Copilot
$ npx skills add snehag01/rebound --skill resume-export -a github-copilot -y
OpenCode
$ npx skills add snehag01/rebound --skill resume-export -a opencode -y
Windsurf
$ npx skills add snehag01/rebound --skill resume-export -a windsurf -y
SKILL.md
resume-export.SKILL.mdname: resume-export
description: Render a resume config to a clean, ATS-safe Word (.docx) and a text-based (ATS-readable) PDF. Use when producing resume output files. Covers the JSON config schema, the generator/converter scripts, dependency setup, and conversion fallbacks.
Resume Export — .docx + ATS-safe .pdf
Turn a tailored resume config into files. Layout is intentionally **ATS-safe**: single column, real text (no tables, text boxes, columns, or images-of-text), standard fonts, navy section rules.
Scripts (in this skill's `scripts/`)
- `build_resume.py <config.json>` → writes the `.docx`.
- `to_pdf.py <in.docx> [out.pdf]` → converts and **verifies a real text layer** (ATS-readable), trying LibreOffice → macOS Word → docx2pdf.
Run them with the plugin root env var:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/resume-export/scripts/build_resume.py" /path/config.json
python3 "${CLAUDE_PLUGIN_ROOT}/skills/resume-export/scripts/to_pdf.py" /path/out.docx /path/out.pdfDependency: python-docx
The generator needs `python-docx`. Install once into a bundled dir and point the scripts at it:
python3 -m pip install --target="$HOME/.rebound/pylibs" python-docx >/dev/null 2>&1
export REBOUND_PYLIBS="$HOME/.rebound/pylibs"
`build_resume.py` auto-adds `$REBOUND_PYLIBS` (and `~/.rebound/pylibs`, `/tmp/pylibs`) to its path.
Config schema (fully generic — assemble it from the base resume + JD)
{
"out": "/abs/path/<JobId>_<Init>.docx",
"name": "FIRST LAST",
"title": "Senior Software Engineer | Focus A · Focus B · Focus C",
"contact": "+1 ... | email | linkedin.com/in/... | City, ST",
"accent": "1F3A5F",
"summary": "3-4 sentences, JD-mirrored, truthful.",
"sections": [
{"heading": "Work Experience", "type": "experience",
"roles": [{"title": "Senior Engineer — Company", "meta": "City, ST | 2022 – Present",
"bullets": ["**Bolded outcome** then detail with a metric.", "..."]}]},
{"heading": "Selected Highlights", "type": "bullets", "bullets": ["**Thing** ...", "..."]},
{"heading": "Technical Skills", "type": "skills",
"skills": [{"label": "Languages", "items": "Java, Go, Python"},
{"label": "Cloud & DevOps", "items": "AWS, Kubernetes, CI/CD"}]},
{"heading": "Education", "type": "roles_only",
"roles": [{"title": "B.S. Computer Science — University", "meta": "GPA 3.9 | 2016"}]},
{"heading": "Certifications & Achievements", "type": "bullets", "bullets": ["**AWS ...**", "..."]}
]
}- Section `type`: `experience` (title/meta + bullets), `bullets` (heading + list), `skills` (label: items), `roles_only` (title + right-aligned meta, no bullets — for education).
- Inline markup in any string: `**bold**`, `*italic*`.
Conversion fallbacks
`to_pdf.py` tries, in order: **LibreOffice** (`soffice --headless --convert-to pdf`, best for headless/CI), **macOS Microsoft Word** (AppleScript, pixel-perfect), then **docx2pdf**. If none exist, tell the user to `brew install --cask libreoffice`.
If running the converter directly is blocked in a sandbox, the equivalent macOS+Word one-liner also works from a granted shell:
osascript -e 'tell application "Microsoft Word" to open (POSIX file "/abs/in.docx")' \
-e 'tell application "Microsoft Word" to save as active document file name "/abs/out.pdf" file format format PDF' \
-e 'tell application "Microsoft Word" to close active document saving no'Always verify
A resume PDF must be **text-based**, never a scanned image — `to_pdf.py` confirms this by finding `BT`/`Tj` operators in the (decompressed) content streams. If verification fails, re-convert with a different engine before delivering.
Read more
name: resume-export description: Render a resume config to a clean, ATS-safe Word (.docx) and a text-based (ATS-readable) PDF. Use when producing resume output files. Covers the JSON config schema, the generator/converter scripts, dependency setup, and conversion fallbacks.
Resume Export — .docx + ATS-safe .pdf
Turn a tailored resume config into files. Layout is intentionally **ATS-safe**: single column, real text (no tables, text boxes, columns, or images-of-text), standard fonts, navy section rules.
Scripts (in this skill's `scripts/`)
- `build_resume.py <config.json>` → writes the `.docx`.
- `to_pdf.py <in.docx> [out.pdf]` → converts and **verifies a real text layer** (ATS-readable), trying LibreOffice → macOS Word → docx2pdf.
Run them with the plugin root env var:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/resume-export/scripts/build_resume.py" /path/config.json
python3 "${CLAUDE_PLUGIN_ROOT}/skills/resume-export/scripts/to_pdf.py" /path/out.docx /path/out.pdfDependency: python-docx
The generator needs `python-docx`. Install once into a bundled dir and point the scripts at it:
python3 -m pip install --target="$HOME/.rebound/pylibs" python-docx >/dev/null 2>&1 export REBOUND_PYLIBS="$HOME/.rebound/pylibs"
`build_resume.py` auto-adds `$REBOUND_PYLIBS` (and `~/.rebound/pylibs`, `/tmp/pylibs`) to its path.
Config schema (fully generic — assemble it from the base resume + JD)
{
"out": "/abs/path/<JobId>_<Init>.docx",
"name": "FIRST LAST",
"title": "Senior Software Engineer | Focus A · Focus B · Focus C",
"contact": "+1 ... | email | linkedin.com/in/... | City, ST",
"accent": "1F3A5F",
"summary": "3-4 sentences, JD-mirrored, truthful.",
"sections": [
{"heading": "Work Experience", "type": "experience",
"roles": [{"title": "Senior Engineer — Company", "meta": "City, ST | 2022 – Present",
"bullets": ["**Bolded outcome** then detail with a metric.", "..."]}]},
{"heading": "Selected Highlights", "type": "bullets", "bullets": ["**Thing** ...", "..."]},
{"heading": "Technical Skills", "type": "skills",
"skills": [{"label": "Languages", "items": "Java, Go, Python"},
{"label": "Cloud & DevOps", "items": "AWS, Kubernetes, CI/CD"}]},
{"heading": "Education", "type": "roles_only",
"roles": [{"title": "B.S. Computer Science — University", "meta": "GPA 3.9 | 2016"}]},
{"heading": "Certifications & Achievements", "type": "bullets", "bullets": ["**AWS ...**", "..."]}
]
}- Section `type`: `experience` (title/meta + bullets), `bullets` (heading + list), `skills` (label: items), `roles_only` (title + right-aligned meta, no bullets — for education).
- Inline markup in any string: `**bold**`, `*italic*`.
Conversion fallbacks
`to_pdf.py` tries, in order: **LibreOffice** (`soffice --headless --convert-to pdf`, best for headless/CI), **macOS Microsoft Word** (AppleScript, pixel-perfect), then **docx2pdf**. If none exist, tell the user to `brew install --cask libreoffice`.
If running the converter directly is blocked in a sandbox, the equivalent macOS+Word one-liner also works from a granted shell:
osascript -e 'tell application "Microsoft Word" to open (POSIX file "/abs/in.docx")' \
-e 'tell application "Microsoft Word" to save as active document file name "/abs/out.pdf" file format format PDF' \
-e 'tell application "Microsoft Word" to close active document saving no'Always verify
A resume PDF must be **text-based**, never a scanned image — `to_pdf.py` confirms this by finding `BT`/`Tj` operators in the (decompressed) content streams. If verification fails, re-convert with a different engine before delivering.
Knocked down. Not out. A Claude Code plugin that turns a job description into a tailored, honest, ATS-safe résumé (Word + PDF) in one command — then remembers who you are so the next one takes seconds.
Other skills on rebound.
More skills from other plugins.
prompt-lookup
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
ppt-master
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
morph-ppt
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
frontend-slides
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…
Questions about resume-export.
- Which coding agents can use resume-export?
- resume-export installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

