From resume-typesetter
Shared reference for working with JSON Resume schema data and Typst resume templates. Invoke when editing the resume JSON or a Typst template under this plugin, or when the user asks how the pieces fit together.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin resume-typesetterThis skill uses the workspace's default tool permissions.
- **Data**: a single `resume.json` file conforming to the [JSON Resume schema](https://jsonresume.org/schema/). Optional variants live under `data/variants/<name>.json`.
Conducts multi-round deep research on GitHub repos via API and web searches, generating markdown reports with executive summaries, timelines, metrics, and Mermaid diagrams.
Share bugs, ideas, or general feedback.
resume.json file conforming to the JSON Resume schema. Optional variants live under data/variants/<name>.json.templates/<name>/template.typ. Each template reads the JSON via json(sys.inputs.resume) — the path is passed at compile time with --input resume=<path>.<plugin-data-dir>/config.json stores dataRepo (absolute path to the user's resume data repo). The plugin data directory resolves as $CLAUDE_USER_DATA/resume-typesetter/ if CLAUDE_USER_DATA is set; otherwise $XDG_DATA_HOME/claude-plugins/resume-typesetter/ if XDG_DATA_HOME is set; otherwise ~/.local/share/claude-plugins/resume-typesetter/. See the canonical convention in the claude-rudder:plugin-data-storage skill.basics — name, label, email, phone, url, summary, location, profiles[]
work — name, position, url, startDate, endDate, summary, highlights[]
volunteer — organization, position, url, startDate, endDate, summary, highlights[]
education — institution, url, area, studyType, startDate, endDate, score, courses[]
awards — title, date, awarder, summary
certificates — name, date, issuer, url
publications — name, publisher, releaseDate, url, summary
skills — name, level, keywords[]
languages — language, fluency
interests — name, keywords[]
references — name, reference
projects — name, description, highlights[], keywords[], startDate, endDate, url, roles[], entity, type
Dates are ISO 8601 (YYYY-MM-DD or YYYY-MM). Omit endDate for current positions.
A template entry point looks like:
#let resume = json(sys.inputs.resume)
#let basics = resume.basics
= #basics.name
#basics.label
#basics.email · #basics.phone
== Experience
#for job in resume.work {
[*#job.position*, #job.name \\
#job.startDate -- #job.at("endDate", default: "Present") \\
#for h in job.at("highlights", default: ()) [- #h]]
}
Always use .at("key", default: …) for optional JSON Resume fields — strict key access fails if the user hasn't filled in that section.
resume.json. If a user wants a field JSON Resume doesn't cover, discuss adding it to a separate extension file rather than polluting the schema.resume.json when working on a variant, and vice versa.<dataRepo>/renders/, never into the plugin directory.templates/<name>/template.typ.json(sys.inputs.resume)..at(..., default: ...) for optional sections./resume:render <name>.