html-resume helps AI agents turn resumes exported from job platforms, existing PDFs, and career notes into independently editable, recruiter-friendly resumes, CVs, executive profiles, professional biographies, and portfolio summaries. It supports Chinese-to-English, English-to-Chinese, and same-language rewriting while preserving the source facts. The workflow combines factual content rewriting, restrained editorial hierarchy, exact A4 layout, print-safe CSS, and PDF validation.

中文摘要

html-resume 是一個可重複使用的 Agent Skill,協助 AI 將任何求職平台匯出的履歷、既有 PDF 或職涯資料,快速整理成可自行修改的履歷。它支援中翻英、英翻中與同語言重寫,且不會虛構經歷或數據。主要交付物永遠是 HTML;需要 PDF 時,會由同一份 HTML 產生精確 A4 文件並完成頁面驗證。

What it does

  • Creates or redesigns resumes, CVs, executive profiles, professional biographies, and portfolio summaries.
  • Converts resumes exported from any job platform or existing PDF into an independently editable document instead of locking the information to the original platform or layout.
  • Translates between Chinese and English, or rewrites in the original language, while preserving facts and using natural recruiter-facing language.
  • Rewrites content for clarity and recruiter scanability without inventing facts, metrics, ownership, or qualifications.
  • Uses restrained editorial hierarchy instead of dashboard-like, card-heavy layouts.
  • Adapts section order and page count to the candidate rather than forcing every resume into two pages.
  • Uses the color palette supplied or approved by the user instead of imposing a fixed Skill palette.
  • Keeps the portrait and identity Header open and unboxed, with restrained color bands framing the physical pages.
  • Always delivers production-ready HTML as the source of truth.
  • Generates exact A4 PDF output with Chromium or Playwright when requested, then validates page size, overflow, clipping, and visual rendering.
  • Preserves readable typography and selectable text for English and Chinese content.

Why HTML first

  • HTML gives both AI agents and people a structured, editable source. Agents can target semantic sections and CSS instead of recreating an entire document from scratch.
  • Unlike generating a PDF directly, the HTML source remains practical to edit by hand after generation. The PDF is treated as the validated delivery format, not the only source file.
  • Unlike generating an image, HTML keeps text selectable, searchable, and easier to validate. Image-generated text can contain unstable wording, spelling, character, or layout errors and is difficult to revise precisely.
  • The same HTML can be exported to PDF after editing, so the workflow preserves source-level editability while still producing a polished final document.

Writing recommendations

For language polishing during drafting, you can optionally use:

These tools can help make wording more natural, but they do not replace fact-checking. Keep employers, dates, metrics, ownership, qualifications, and contact details grounded in the source information.

Example

The sample content is fictional and is included to demonstrate the expected input and output shape. The sample explicitly requests two pages and a business-oriented navy and steel-blue palette; those colors are not Skill defaults.

Installation

Option 1: Personal Skill in ChatGPT

Personal use does not require publishing this repository as a Plugin. ChatGPT can create or upload a custom Personal Skill directly. Follow the official Skills in ChatGPT workflow:

  1. In the ChatGPT sidebar, select Plugins.
  2. In the Plugin Directory, open the Skills tab.
  3. Select Create, then Upload from your computer.
  4. Upload the complete skills/html-resume/ Skill package. Keep SKILL.md, agents/, and references/ together so all instructions and supporting resources remain available.
  5. After ChatGPT finishes scanning the upload, install the Skill. Upload an existing resume and use Path 1 below, or provide career notes and use Path 2.

You can also choose Create with chat or Create with editor and use this repository as the source material. Personal Skills are generally available for ChatGPT Business, Enterprise, Healthcare, and Edu. Enterprise and Edu workspaces may require an admin to enable Skills and Skill uploads. Personal Skills must be added separately on desktop and web/mobile and do not automatically sync across those surfaces.

Option 2: Local agents

The portable Skill is located at skills/html-resume/. Copy the complete folder into the local agent's Skill directory.

For Codex CLI or the Codex IDE extension, install it for the current repository:

mkdir -p .agents/skills
cp -R skills/html-resume .agents/skills/html-resume

Or install it for the current user:

mkdir -p ~/.agents/skills
cp -R skills/html-resume ~/.agents/skills/html-resume

Then start a new agent session if the Skill does not appear automatically. Invoke it explicitly with $html-resume, or allow implicit invocation when the request matches its description.

For other agents that implement the Agent Skills standard, point the agent to skills/html-resume/SKILL.md or copy the entire skills/html-resume/ directory into that agent's documented Skill directory. Keep both SKILL.md and agents/openai.yaml together.

Optional: extract an existing PDF with MarkItDown

If a local agent cannot read an attached PDF directly, Microsoft MarkItDown can extract the resume into LLM-friendly Markdown. Install its PDF support as an isolated command-line tool with uv:

uv tool install 'markitdown[pdf]'
markitdown path/to/existing-resume.pdf -o existing-resume.md

Give the resulting Markdown to the agent together with the original PDF when possible. MarkItDown is an ingestion aid, not the final resume converter: check names, dates, metrics, links, and section order against the original file. Image-only or scanned PDFs may require a separate OCR step.

Option 3: PDF conversion environment with uv

This repository includes pyproject.toml and uv.lock for the Playwright-based PDF converter. After installing uv, create the project environment and install Chromium:

uv sync
uv run playwright install chromium

uv sync creates the local .venv and installs the locked Python dependencies. The Chromium installation is managed separately by Playwright.

Usage

Path 1: start from a job-platform resume or existing PDF

Upload the original resume where the agent supports PDF input. For a local workflow that cannot read PDFs directly, first convert it with MarkItDown as described above. The source and output can be Chinese or English in either direction.

Use $html-resume to turn the attached resume exported from a job platform or existing PDF into my own independently editable A4 HTML resume.
Use [English / Traditional Chinese / Simplified Chinese] as the output language, translating from the source language when needed.
Preserve employers, titles, dates, metrics, skills, contact details, and the original meaning. Rewrite naturally for recruiters instead of translating line by line. Ask me about ambiguous or missing information rather than inventing facts.
Choose the page count based on the content and use a [preferred palette] color palette.
Also export and validate the PDF.

Path 2: start from career history

The Skill can also be invoked explicitly with career notes:

Use $html-resume to create a polished A4 HTML resume from the attached career history.
Use a professional navy and steel-blue palette.

Or use natural language:

Turn this work history into a PDF-ready HTML resume for an AI application engineer.
Choose the page count based on the strength and amount of content.
Use English section headings with concise Traditional Chinese content where appropriate.
Use a charcoal and muted teal color palette.

The Skill does not impose a default resume color. Include your preferred palette or brand direction in the prompt; if you omit it, the agent should ask you to choose one before applying visual styling.

Before generating the document, provide or confirm:

  • Target document type.
  • Source language, output language, and audience.
  • Target role or positioning.
  • Page-count preference or hard limit, if any.
  • Required sections.
  • Color palette or brand direction.
  • Avatar or portrait availability.
  • HTML-only or HTML plus PDF output.

Export to PDF

The recommended conversion path uses Playwright (a browser automation tool) + Chromium (the browser engine behind Chrome) through html_to_pdf.py. The script opens the local HTML in Chromium and calls page.pdf() with:

  • print_background=True
  • prefer_css_page_size=True
  • format="A4"

This preserves CSS such as @page { size: A4; }, millimeter-based dimensions, and background colors more faithfully. Because Chromium renders the HTML and CSS directly, the result is generally more stable than converting through LibreOffice's document layout model.

With the uv environment described in the Installation section, convert an HTML file with:

uv run python html_to_pdf.py examples/sample-output/resume.html resume.pdf

If you prefer not to use uv, install Playwright and Chromium directly, then run the same script with Python:

python3 -m pip install playwright
python3 -m playwright install chromium
python3 html_to_pdf.py examples/sample-output/resume.html resume.pdf

The output path is optional. When omitted, the script writes the PDF beside the input HTML using the same base filename.

Always verify the PDF page size, render every page to an image, and inspect clipping, orphan headings, footer overlap, contrast, and font rendering before sharing it.

Repository structure

.
├── .codex-plugin/
│   └── plugin.json              # Plugin metadata and bundled Skill path
├── assets/
│   └── html-resume-banner.svg   # README banner
├── skills/
│   └── html-resume/
│       ├── SKILL.md             # Agent workflow and design rules
│       ├── agents/
│       │   └── openai.yaml      # Optional Codex UI metadata
│       └── references/
│           └── a4-layout-and-validation.md
├── examples/
│   ├── README.md
│   ├── sample-input.md
│   └── sample-output/
│       └── resume.html
├── html_to_pdf.py               # Playwright-based HTML-to-PDF converter
├── LICENSE
├── pyproject.toml               # Python project and Playwright dependency
├── README.md
├── README_zh.md
└── uv.lock                      # Reproducible Python dependency lockfile

Design scope

This Skill is designed for:

  • Professional resumes and CVs.
  • Personal and executive profiles.
  • Portfolio summaries.
  • PDF-ready HTML career documents.

It is not a replacement for fact-checking, career coaching, or a human review of employment dates, metrics, contact details, and claims. Agents should treat user-provided career information as the source of truth and ask before inventing missing facts.

Contributing

Keep the Skill focused on resume and professional-document workflows. When changing the Skill:

  1. Update skills/html-resume/SKILL.md.
  2. Update the sample input or output when behavior changes.
  3. Validate the YAML front matter and plugin manifest.
  4. Check that the sample HTML remains printable on A4 pages.

License

Released under the MIT License.