Skip to content
Content
Skill

/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.

From plugin
rebound
53 skills7 commands

Claude Code

$ npx -y skills add snehag01/rebound --skill resume-export --agent claude-code

SKILL.md

resume-export.SKILL.md
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.pdf

Dependency: 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
@snehag01
Ships withrebound

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.

Stars on GitHub

Momentum

stars in total
5
Star history of snehag01/rebound on GitHub, a chart by star-history.com

Other skills on rebound.

profile-memory

profile-memory

How Rebound stores and reuses the user's career profile, including the private "situation" (work authorization, timeline). Use…

@snehag01@snehag01Install Skill
resume-tailoring

resume-tailoring

Methodology for tailoring a resume to a job description honestly and effectively — fit analysis, gap handling, keyword mirroring,…

@snehag01@snehag01Install Skill

More skills from other plugins.

prompt-lookup

prompt-lookup

Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…

@gh-f@gh-fInstall Skill
ppt-master

ppt-master

AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…

@hugohe3@hugohe3Install Skill
morph-ppt

morph-ppt

Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…

officecli11d33k
@iofficeai@iofficeaiInstall Skill

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.