Skip to main content

📄 JSON-Resume

Prepare JSON. Generate your resume.

Works with 🤖 AI Agent · Codex OpenClaw WorkBuddy

Python 3.11 DOCX and PDF output AI Agent Skill JSON-Resume × Offer-Rain workflow

Resume style · How to use · Project structure · Workflow · License · Pair with Offer-Rain

中文 | English

An abstract illustration of structured JSON becoming a professional resume

Writing a resume should not mean hand-tuning Word, copying formatting, or worrying about breaking the last good file. JSON-Resume stores resume content in strict JSON while the generator handles Word styles, bullets, links, and a two-column layout—then produces a composed, restrained DOCX resume.

Resume style

  • Minimal decoration, content first
  • Monochrome and restrained
  • High information density with a clear hierarchy
  • Well suited to finance, academic research, technical roles, and similar applications
  • See the full style specification

Generated resume preview

English resume PDF preview; click to open the PDF

View the DOCX · View the JSON

How to use

JSON-Resume offers three ways to work: have an Agent create a resume, generate one from the command line, or call it from a Python script.

Agent-assisted resume workflow

The project includes SKILL.md, which Codex, OpenClaw, WorkBuddy, and other compatible Agents can use to create or render resumes.

  • Give an existing JSON file to an Agent and have it render the resume.
  • Give resume materials to an Agent and have it create the resume.

Install the Skill

Send this directly to your Agent:

Install this Skill to help me create my resume:
https://github.com/Eric-Zhou-0302/JSON-Resume

A better workflow

Do not repeatedly edit the previous resume. And do not cram every experience into one universal resume.

Career source

Maintain a complete personal Career Source in Markdown or plain text: education, employment, projects, and other career facts. It is the source material for each resume.

Role tailoring

For each application, give the target job description to the Agent. It will use only the facts in the Career Source, foregrounding your most relevant strengths to create the best-fitting resume for that role.

Agent delivery standard

The Skill does more than put text into Word. It owns the complete delivery path from factual material to the final resume and follows these standards:

  • One-page resume standard: In professional authoring mode, the Agent selects and refines content for the target role, producing a naturally dense resume of exactly one page. If content is excessive, it removes weaker or repetitive information first; if content is thin, it only adds facts from authorized source materials.
  • Full acceptance: The Agent must generate the DOCX and PDF through the CLI, check the actual PDF page count, and inspect every page for clipping, overlap, table alignment, line breaks, characters, and whitespace. Creating files alone is not completion.
  • Factual boundary: The Agent uses only materials you provide or explicitly authorize: Career Sources, prior resumes, and project records. It does not invent experience, dates, titles, grades, metrics, skills, or contact details. A job description may guide selection and wording, but is never evidence of personal facts.
  • File protection: Without explicit authorization, the Agent does not overwrite existing JSON, DOCX, or PDF files.
  • When you provide JSON directly: The Agent only renders it, preserving its content and order without rewriting or removing anything.

Command line and Python

Write the JSON

Create a JSON file and fill in your resume content according to the JSON contract. See the example JSON file.

Expand to view the JSON contract
Field Rule
locale Required: zh-CN, en-US, en-GB, or en-EU. It selects paper size only: en-US is Letter; the rest are A4. It does not translate content.
basics Must contain exactly name and contacts.
contacts At least one item. label is visible text and href is an optional link target; provide complete mailto: / tel: values yourself.
sections Contains at least one section and renders in JSON order. Each section may contain only title and entries; title must be nonblank and entries needs at least one item.
entries Each entry needs at least one nonblank title, position, location, start_date / end_date, or bullets.
bullets Optional; when present, a flat list[str] with at least one nonblank string. Nested lists, objects, and hierarchy inferred from prefixes are not supported.

Dates must be valid YYYY-MM values. end_date may also use status text such as Present; calendar date ranges render as YYYY.MM - YYYY.MM.

Render the resume

You can generate a DOCX or PDF from a resume JSON in three ways.

Run the installed package from the command line

pip install json-resume
json-resume resume.json

Render in a Python script

After installing the package, import render_json_file_to_docx() to render a resume in a Python script.

from resume_generator import render_json_file_to_docx

docx_path = render_json_file_to_docx(
    "resume.json",
    "resume.docx",
)

print(docx_path)

main.py entry point

pip install -r requirements.txt
python main.py resume.json

Command-line options

Both json-resume and python main.py support:

-o OUTPUT, --output OUTPUT  # Set the output path and filename
--pdf                        # Generate a PDF
--force                      # Replace existing output files

The Python API accepts the corresponding output_path, pdf=True, and force=True arguments.

Project structure

JSON-Resume/
├── README.md                          # Chinese user documentation
├── README_EN.md                       # English user documentation
├── CHANGELOG.md                       # Release notes
├── SKILL.md                           # Built-in Skill for Agents
├── LICENSE                            # MIT License
├── MANIFEST.in                        # Source-distribution content boundary
├── main.py                            # Traditional CLI entry point
├── pyproject.toml                     # Package metadata, dependencies, and installed command
├── requirements.txt                   # Python dependencies
├── assets/
│   ├── example/                       # Example JSON, DOCX, PDF, and preview images
│   ├── buy-me-a-coffee.jpg
│   └── json-resume-hero.png
├── docs/
│   └── ARCHITECTURE.md                # Developer architecture documentation
├── resume_generator/
│   ├── cli.py                         # Command-line arguments and main flow
│   ├── validator.py                   # JSON validation and model parsing
│   ├── renderer.py                    # DOCX content rendering
│   ├── styles.py                      # Page, style, and table specifications
│   ├── layout.py                      # Two-column entry layout
│   ├── helpers.py                     # OOXML, link, and font helpers
│   ├── config.py                      # Locale and paper configuration
│   ├── models.py                      # Pure data models
│   ├── output.py                      # Output-target checks and atomic writes
│   ├── service.py                     # In-memory and file-level public service APIs
│   └── pdf.py                         # PDF export and page-count check
└── tests/                             # Tests

Workflow

flowchart TD
    A[Prepare JSON yourself] --> B[Generate directly with the CLI]
    B --> C[DOCX]
    C --> D[Optional PDF]

    E[Career Source + optional JD] --> F[Agent professional authoring]
    F --> G[Generate JSON]
    G --> H[CLI generates DOCX and PDF]
    H --> I[Page-count check + PDF visual review]
    I --> J[One-page tailored resume]

    K[User provides JSON] --> L[Agent faithful rendering]
    L --> M[Preserve content and order]
    M --> H

Pair with Offer-Rain

JSON-Resume focuses on creating resumes, not sending applications. If you need to apply by email, use Offer-Rain.

License

MIT @ 2026 Eric Zhou


Buy the author a coffee

If this project helped you finish your first, fifth, or fiftieth resume,
consider buying the author a coffee.

May your next resume tell your real experience clearly and look great,
while my cup gets a small refill of hot Americano.

Buy the author a coffee

Entirely optional. It does not affect features or your ability to keep generating resumes.


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

json_resume-1.1.0.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

json_resume-1.1.0-py3-none-any.whl (25.2 kB view details)

Uploaded Python 3

File details

Details for the file json_resume-1.1.0.tar.gz.

File metadata

  • Download URL: json_resume-1.1.0.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for json_resume-1.1.0.tar.gz
Algorithm Hash digest
SHA256 06398e16f9772ea87cd261eb07c65a2cb389c5ba1711b3f9aee9e63e004ed529
MD5 4f5776e39b0d1e219798729c43a4d10e
BLAKE2b-256 3fbbe6e2153fa21fcaa599bd0229a9ff433e81d1c2a712a8d4e93aa0e74103f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for json_resume-1.1.0.tar.gz:

Publisher: release.yml on Eric-Zhou-0302/JSON-Resume

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file json_resume-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: json_resume-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for json_resume-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f275954c0173ea0ce7189648dee155b1874387539fffcbdbf9faf50a2a18df75
MD5 c6a05af793c266ecd073c9c15fb8eb18
BLAKE2b-256 8444aab448884287336ffed4ca32be5c79d94ddf1376e48a1d7d8e155fed04da

See more details on using hashes here.

Provenance

The following attestation bundles were made for json_resume-1.1.0-py3-none-any.whl:

Publisher: release.yml on Eric-Zhou-0302/JSON-Resume

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.1.2

2 files

1.1.1

2 files

This release

1.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page