resuml 1.18.1 → 1.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -338
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<h1 align="center">✨
|
|
2
|
-
<p align="center"><strong>
|
|
1
|
+
<h1 align="center">✨ resuml</h1>
|
|
2
|
+
<p align="center"><strong>Resume as code. YAML in, beautiful resume out.</strong></p>
|
|
3
3
|
|
|
4
4
|
<p align="center">
|
|
5
5
|
<a href="https://www.npmjs.com/package/resuml"><img src="https://img.shields.io/npm/v/resuml.svg" alt="npm version"></a>
|
|
@@ -9,305 +9,40 @@
|
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
|
|
13
|
-
<img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" width="150" />
|
|
14
|
-
</a>
|
|
12
|
+
<a href="https://resuml.app"><strong>👉 Try it in your browser at resuml.app</strong></a>
|
|
15
13
|
</p>
|
|
16
14
|
|
|
17
15
|
---
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
## Two ways to use it
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
# resume.yaml
|
|
23
|
-
basics:
|
|
24
|
-
name: Jane Smith
|
|
25
|
-
label: Senior Software Engineer
|
|
26
|
-
email: jane@example.com
|
|
27
|
-
summary: >-
|
|
28
|
-
Passionate engineer with 8+ years
|
|
29
|
-
building scalable distributed systems.
|
|
30
|
-
work:
|
|
31
|
-
- name: Acme Corp
|
|
32
|
-
position: Lead Engineer
|
|
33
|
-
startDate: 2020-01-15
|
|
34
|
-
highlights:
|
|
35
|
-
- Reduced deploy time by 60%
|
|
36
|
-
- Led team of 12 engineers
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
resuml render --resume resume.yaml --theme stackoverflow --output resume.html
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
Your YAML becomes a polished, professional resume — ready to share, print, or export to PDF.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Why YAML?
|
|
48
|
-
|
|
49
|
-
| | YAML | JSON |
|
|
50
|
-
|---|---|---|
|
|
51
|
-
| **Comments** | ✅ `# explain your choices` | ❌ Not supported |
|
|
52
|
-
| **Multi-line strings** | ✅ `summary: >-` block syntax | ❌ Escape everything |
|
|
53
|
-
| **Readability** | ✅ Clean, minimal syntax | ⚠️ Brackets & quotes everywhere |
|
|
54
|
-
| **Diffing** | ✅ Clean git diffs | ⚠️ Noisy diffs |
|
|
55
|
-
| **Compatibility** | ✅ Valid JSON Resume schema | ✅ Native |
|
|
19
|
+
### 🌐 [resuml.app](https://resuml.app) — the web app
|
|
56
20
|
|
|
57
|
-
|
|
21
|
+
Free, open source, no signup. Your resume data stays in your browser — we don't store or track anything. Write in YAML or use the form editor, pick from 300+ themes, check your ATS match against a job description, and export to PDF.
|
|
58
22
|
|
|
59
|
-
|
|
23
|
+
### 🤖 With Claude Code / AI agents (MCP)
|
|
60
24
|
|
|
61
|
-
-
|
|
62
|
-
- npm >= 10.0.0
|
|
25
|
+
resuml ships with a built-in [MCP server](https://modelcontextprotocol.io/) so Claude Code can read your resume, tailor it to a job description, check the ATS score, and render it — all from a chat.
|
|
63
26
|
|
|
64
|
-
|
|
27
|
+
**One-command setup (recommended):**
|
|
65
28
|
|
|
66
29
|
```bash
|
|
67
|
-
|
|
30
|
+
claude mcp add resuml -- npx resuml mcp
|
|
68
31
|
```
|
|
69
32
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
1. Create a YAML file for your resume (e.g., `resume.yaml`)
|
|
73
|
-
2. Validate your resume data:
|
|
74
|
-
```bash
|
|
75
|
-
resuml validate --resume resume.yaml
|
|
76
|
-
```
|
|
77
|
-
3. Convert to JSON:
|
|
78
|
-
```bash
|
|
79
|
-
resuml tojson --resume resume.yaml --output resume.json
|
|
80
|
-
```
|
|
81
|
-
4. Render with a theme:
|
|
82
|
-
```bash
|
|
83
|
-
resuml render --resume resume.yaml --theme stackoverflow --output resume.html
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Commands
|
|
87
|
-
|
|
88
|
-
| Command | Description |
|
|
89
|
-
|---------|-------------|
|
|
90
|
-
| `validate` | Validate resume data against the JSON Resume schema |
|
|
91
|
-
| `validate --ats` | Run ATS (Applicant Tracking System) compatibility analysis |
|
|
92
|
-
| `tojson` | Convert YAML resume data to JSON format |
|
|
93
|
-
| `render` | Render the resume using a specified theme |
|
|
94
|
-
| `dev` | Start a development server with hot-reload |
|
|
95
|
-
|
|
96
|
-
## Options
|
|
97
|
-
|
|
98
|
-
| Option | Alias | Description |
|
|
99
|
-
|--------|-------|-------------|
|
|
100
|
-
| `--resume` | `-r` | Input YAML file(s) or directory |
|
|
101
|
-
| `--output` | `-o` | Output file path |
|
|
102
|
-
| `--theme` | `-t` | Theme to use for rendering |
|
|
103
|
-
| `--port` | `-p` | Port for dev server (default: 3000) |
|
|
104
|
-
| `--language` | | Language code for localization (default: `en`) |
|
|
105
|
-
| `--debug` | | Enable debug mode for detailed errors |
|
|
106
|
-
| `--ats` | | Run ATS compatibility analysis (with `validate`) |
|
|
107
|
-
| `--jd` | | Path to job description file for keyword matching (with `--ats`) |
|
|
108
|
-
| `--ats-threshold` | | Minimum ATS score (0-100); exits with code 1 if below |
|
|
109
|
-
|
|
110
|
-
## ATS Analysis
|
|
111
|
-
|
|
112
|
-
Resumls built-in ATS (Applicant Tracking System) analysis helps ensure your resume passes automated screening. Fully offline and deterministic — no API keys or LLMs required.
|
|
113
|
-
|
|
114
|
-
### Quick Start
|
|
33
|
+
That registers resuml for the current project. Add `--scope user` to make it available across all projects:
|
|
115
34
|
|
|
116
35
|
```bash
|
|
117
|
-
|
|
118
|
-
resuml validate --resume resume.yaml --ats
|
|
119
|
-
|
|
120
|
-
# Match against a specific job description
|
|
121
|
-
resuml validate --resume resume.yaml --ats --jd job-description.txt
|
|
122
|
-
|
|
123
|
-
# CI/CD gate: fail if score is below threshold
|
|
124
|
-
resuml validate --resume resume.yaml --ats --ats-threshold 75
|
|
125
|
-
|
|
126
|
-
# Machine-readable JSON output
|
|
127
|
-
resuml validate --resume resume.yaml --ats --format json
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### What It Checks
|
|
131
|
-
|
|
132
|
-
The ATS engine runs 11 deterministic checks across 3 categories:
|
|
133
|
-
|
|
134
|
-
**Contact Information**
|
|
135
|
-
- Complete contact details (name, email, phone, city)
|
|
136
|
-
- LinkedIn profile present
|
|
137
|
-
|
|
138
|
-
**Content Quality**
|
|
139
|
-
- Professional summary (length and presence)
|
|
140
|
-
- Work highlights (minimum 2 per entry)
|
|
141
|
-
- Action verbs (highlights start with strong verbs)
|
|
142
|
-
- Quantified impact (numbers, percentages, metrics in highlights)
|
|
143
|
-
- No first-person pronouns
|
|
144
|
-
|
|
145
|
-
**Resume Structure**
|
|
146
|
-
- Date consistency (no unexplained gaps > 6 months)
|
|
147
|
-
- Skills populated (≥ 3 categories with keywords)
|
|
148
|
-
- Education completeness
|
|
149
|
-
- Essential sections present (basics, work, education, skills)
|
|
150
|
-
|
|
151
|
-
### Job Description Matching
|
|
152
|
-
|
|
153
|
-
Provide a job description file to get keyword matching:
|
|
154
|
-
|
|
155
|
-
```bash
|
|
156
|
-
resuml validate --resume resume.yaml --ats --jd job.txt
|
|
36
|
+
claude mcp add --scope user resuml -- npx resuml mcp
|
|
157
37
|
```
|
|
158
38
|
|
|
159
|
-
|
|
160
|
-
- **Match percentage** — how many JD keywords appear in your resume
|
|
161
|
-
- **Matched keywords** — what you already cover
|
|
162
|
-
- **Missing keywords** — what to consider adding
|
|
163
|
-
|
|
164
|
-
### Scoring
|
|
165
|
-
|
|
166
|
-
| Score | Rating | Meaning |
|
|
167
|
-
|-------|--------|-------------|
|
|
168
|
-
| 90-100 | Excellent | Resume is well-optimized for ATS |
|
|
169
|
-
| 75-89 | Good | Minor improvements possible |
|
|
170
|
-
| 60-74 | Needs Work | Several issues to address |
|
|
171
|
-
| 0-59 | Poor | Significant improvements needed |
|
|
172
|
-
|
|
173
|
-
When a job description is provided, the final score is 60% generic checks + 40% keyword match.
|
|
174
|
-
|
|
175
|
-
### Multi-Language Support
|
|
176
|
-
|
|
177
|
-
ATS checks support English and German, with language-specific action verb lists and pronoun detection. Use the `--language` flag:
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
resuml validate --resume lebenslauf.yaml --ats --language de
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
## Compatible Themes
|
|
184
|
-
|
|
185
|
-
Resuml supports themes from the JSON Resume ecosystem. Install a theme, then pass its name to `--theme`:
|
|
39
|
+
Verify it's wired up:
|
|
186
40
|
|
|
187
41
|
```bash
|
|
188
|
-
|
|
189
|
-
resuml render --resume resume.yaml --theme stackoverflow
|
|
42
|
+
claude mcp list
|
|
190
43
|
```
|
|
191
44
|
|
|
192
|
-
|
|
193
|
-
|-------|---------|-------|
|
|
194
|
-
| [stackoverflow](https://github.com/francoislaberge/jsonresume-theme-stackoverflow) | `npm i jsonresume-theme-stackoverflow` | Clean, professional |
|
|
195
|
-
| [elegant](https://github.com/mudassir0909/jsonresume-theme-elegant) | `npm i jsonresume-theme-elegant` | Modern, elegant |
|
|
196
|
-
| [kendall](https://github.com/LinuxBozo/jsonresume-theme-kendall) | `npm i jsonresume-theme-kendall` | Minimal, classic |
|
|
197
|
-
| [flat](https://github.com/erming/jsonresume-theme-flat) | `npm i jsonresume-theme-flat` | Flat design |
|
|
198
|
-
| [onepage](https://github.com/aonemd/jsonresume-theme-onepage) | `npm i jsonresume-theme-onepage` | Single page |
|
|
199
|
-
|
|
200
|
-
> Browse all themes at [jsonresume.org/themes](https://jsonresume.org/themes/) — any `jsonresume-theme-*` package works with resuml.
|
|
201
|
-
|
|
202
|
-
## Examples
|
|
203
|
-
|
|
204
|
-
For detailed examples and usage instructions, see the [examples/README.md](examples/README.md) file.
|
|
205
|
-
|
|
206
|
-
## Example YAML Structure
|
|
207
|
-
|
|
208
|
-
```yaml
|
|
209
|
-
basics:
|
|
210
|
-
name: John Doe
|
|
211
|
-
label: Software Engineer
|
|
212
|
-
email: john@example.com
|
|
213
|
-
summary: Experienced software engineer...
|
|
214
|
-
location:
|
|
215
|
-
city: San Francisco
|
|
216
|
-
countryCode: US
|
|
217
|
-
profiles:
|
|
218
|
-
- network: GitHub
|
|
219
|
-
url: https://github.com/johndoe
|
|
220
|
-
|
|
221
|
-
work:
|
|
222
|
-
- company: Tech Corp
|
|
223
|
-
position: Senior Engineer
|
|
224
|
-
startDate: 2020-01
|
|
225
|
-
endDate: Present
|
|
226
|
-
summary: Led development of...
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## CI/CD: Auto-build on Push
|
|
230
|
-
|
|
231
|
-
Use GitHub Actions to automatically rebuild your resume when you push changes:
|
|
232
|
-
|
|
233
|
-
```yaml
|
|
234
|
-
# .github/workflows/resume.yml
|
|
235
|
-
name: Build Resume
|
|
236
|
-
|
|
237
|
-
on:
|
|
238
|
-
push:
|
|
239
|
-
paths: ['resume.yaml', 'resume/*.yaml']
|
|
240
|
-
|
|
241
|
-
jobs:
|
|
242
|
-
build:
|
|
243
|
-
runs-on: ubuntu-latest
|
|
244
|
-
steps:
|
|
245
|
-
- uses: actions/checkout@v4
|
|
246
|
-
|
|
247
|
-
- uses: actions/setup-node@v4
|
|
248
|
-
with:
|
|
249
|
-
node-version: 20
|
|
250
|
-
|
|
251
|
-
- run: npm install -g resuml
|
|
252
|
-
- run: npm install jsonresume-theme-stackoverflow
|
|
253
|
-
|
|
254
|
-
# Validate and check ATS score (fails if below 75)
|
|
255
|
-
- run: resuml validate --resume resume.yaml --ats --ats-threshold 75
|
|
256
|
-
|
|
257
|
-
- run: resuml render --resume resume.yaml --theme stackoverflow --output resume.html
|
|
258
|
-
- run: resuml tojson --resume resume.yaml --output resume.json
|
|
259
|
-
|
|
260
|
-
- uses: actions/upload-artifact@v4
|
|
261
|
-
with:
|
|
262
|
-
name: resume
|
|
263
|
-
path: |
|
|
264
|
-
resume.html
|
|
265
|
-
resume.json
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
## Node.js API Usage
|
|
269
|
-
|
|
270
|
-
You can use resuml programmatically from Node.js:
|
|
271
|
-
|
|
272
|
-
```js
|
|
273
|
-
import {
|
|
274
|
-
processResumeData,
|
|
275
|
-
loadResumeFiles,
|
|
276
|
-
loadTheme,
|
|
277
|
-
themeRender,
|
|
278
|
-
analyzeAts
|
|
279
|
-
} from 'resuml';
|
|
280
|
-
|
|
281
|
-
// Load YAML files
|
|
282
|
-
const { yamlContents } = await loadResumeFiles('resume.yaml');
|
|
283
|
-
// Validate and merge
|
|
284
|
-
const resume = await processResumeData(yamlContents);
|
|
285
|
-
// Load a theme
|
|
286
|
-
const theme = await loadTheme('stackoverflow');
|
|
287
|
-
// Render HTML
|
|
288
|
-
const html = await theme.render(resume, { locale: 'en' });
|
|
289
|
-
|
|
290
|
-
// ATS analysis
|
|
291
|
-
const atsResult = analyzeAts(resume, { language: 'en' });
|
|
292
|
-
console.log(`ATS Score: ${atsResult.score}/100`);
|
|
293
|
-
|
|
294
|
-
// With job description matching
|
|
295
|
-
const jdResult = analyzeAts(resume, {
|
|
296
|
-
language: 'en',
|
|
297
|
-
jobDescription: 'Looking for a senior TypeScript developer...'
|
|
298
|
-
});
|
|
299
|
-
console.log(`Matched keywords: ${jdResult.keywords?.matched.join(', ')}`);
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
See the CLI and API for more details.
|
|
303
|
-
|
|
304
|
-
## AI Agent Integration (MCP)
|
|
305
|
-
|
|
306
|
-
Resuml includes a built-in [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server, making it the first resume tool with native AI agent support. Use it with Claude, GitHub Copilot, Cursor, or any MCP-compatible client.
|
|
307
|
-
|
|
308
|
-
### Setup
|
|
309
|
-
|
|
310
|
-
Add to your Claude Desktop or MCP client config:
|
|
45
|
+
**Or, for teams sharing the config via git**, create `.mcp.json` at the repo root:
|
|
311
46
|
|
|
312
47
|
```json
|
|
313
48
|
{
|
|
@@ -320,79 +55,55 @@ Add to your Claude Desktop or MCP client config:
|
|
|
320
55
|
}
|
|
321
56
|
```
|
|
322
57
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
```bash
|
|
326
|
-
resuml mcp
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
### Available Tools
|
|
58
|
+
Then ask Claude Code things like:
|
|
330
59
|
|
|
331
|
-
|
|
332
|
-
|------|---------|
|
|
333
|
-
| `resuml_init_resume` | Generate a starter YAML template |
|
|
334
|
-
| `resuml_validate` | Validate resume YAML against JSON Resume schema |
|
|
335
|
-
| `resuml_ats_check` | ATS analysis + job description keyword matching |
|
|
336
|
-
| `resuml_render` | Render resume to HTML using a theme |
|
|
337
|
-
| `resuml_list_themes` | List available themes and install status |
|
|
338
|
-
| `resuml_export_pdf` | Export resume as PDF (requires Playwright) |
|
|
60
|
+
> "Tailor my resume at `resume.yaml` to this job description, hit ATS score ≥ 80, and render it with the stackoverflow theme."
|
|
339
61
|
|
|
340
|
-
|
|
62
|
+
Claude will generate the YAML, validate it, iterate until the score clears, and render the final HTML. See **[DOCS.md](DOCS.md#ai-agent-integration-mcp)** for all tools, resources, and prompts.
|
|
341
63
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
| Resource | URI | Description |
|
|
345
|
-
|----------|-----|-------------|
|
|
346
|
-
| JSON Resume Schema | `resuml://schema/json-resume` | Full schema reference with all sections and field types |
|
|
347
|
-
| ATS Scoring Rubric | `resuml://docs/ats-scoring` | Scoring system, checks performed, and optimization tips |
|
|
348
|
-
| Theme Catalog | `resuml://themes/catalog` | Available themes with descriptions and install status |
|
|
349
|
-
|
|
350
|
-
### Prompts
|
|
351
|
-
|
|
352
|
-
Pre-built workflows for common tasks:
|
|
353
|
-
|
|
354
|
-
| Prompt | Description |
|
|
355
|
-
|--------|-------------|
|
|
356
|
-
| `tailor-resume-to-jd` | Generate a tailored resume optimized for a specific job description |
|
|
357
|
-
| `optimize-ats-score` | Analyze and improve an existing resume to maximize ATS score |
|
|
358
|
-
| `review-resume` | Comprehensive review with ATS analysis and improvement suggestions |
|
|
64
|
+
---
|
|
359
65
|
|
|
360
|
-
|
|
66
|
+
## Or use the CLI
|
|
361
67
|
|
|
362
|
-
|
|
68
|
+
```bash
|
|
69
|
+
npm install -g resuml
|
|
363
70
|
|
|
364
|
-
|
|
71
|
+
resuml validate --resume resume.yaml --ats --jd job.txt
|
|
72
|
+
resuml render --resume resume.yaml --theme stackoverflow --output resume.html
|
|
73
|
+
resuml pdf --resume resume.yaml --theme stackoverflow --output resume.pdf
|
|
74
|
+
```
|
|
365
75
|
|
|
366
|
-
|
|
367
|
-
1. Generate tailored resume YAML matching the job description keywords
|
|
368
|
-
2. Validate it against the JSON Resume schema
|
|
369
|
-
3. Run ATS analysis targeting score ≥ 75
|
|
370
|
-
4. Iterate until the score meets the target
|
|
371
|
-
5. Render the final result with a professional theme
|
|
76
|
+
**Minimal `resume.yaml`:**
|
|
372
77
|
|
|
373
|
-
|
|
78
|
+
```yaml
|
|
79
|
+
basics:
|
|
80
|
+
name: Jane Smith
|
|
81
|
+
label: Senior Software Engineer
|
|
82
|
+
email: jane@example.com
|
|
83
|
+
summary: >-
|
|
84
|
+
Engineer with 8+ years building scalable distributed systems.
|
|
85
|
+
work:
|
|
86
|
+
- name: Acme Corp
|
|
87
|
+
position: Lead Engineer
|
|
88
|
+
startDate: 2020-01-15
|
|
89
|
+
highlights:
|
|
90
|
+
- Reduced deploy time by 60%
|
|
91
|
+
- Led team of 12 engineers
|
|
92
|
+
```
|
|
374
93
|
|
|
375
|
-
|
|
94
|
+
Full CLI reference, Node.js API, ATS rubric, CI/CD setup, and every MCP tool live in **[DOCS.md](DOCS.md)**.
|
|
376
95
|
|
|
377
|
-
|
|
378
|
-
- Ensure your YAML follows the JSON Resume schema
|
|
379
|
-
- Check for proper indentation in your YAML file
|
|
380
|
-
- Verify all required fields are present
|
|
96
|
+
---
|
|
381
97
|
|
|
382
|
-
|
|
383
|
-
- Make sure the theme is properly installed
|
|
384
|
-
- Check if all required theme dependencies are installed
|
|
385
|
-
- Try running with `--debug` flag for more information
|
|
98
|
+
## Requirements
|
|
386
99
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
- Check if you have proper permissions to access the port
|
|
390
|
-
- Try a different port if the default is blocked
|
|
100
|
+
- Node.js ≥ 20, npm ≥ 10
|
|
101
|
+
- Nothing else — validation, ATS, rendering, and PDF all run locally
|
|
391
102
|
|
|
392
103
|
## Contributing
|
|
393
104
|
|
|
394
|
-
|
|
105
|
+
PRs welcome. See [DOCS.md](DOCS.md) for architecture and dev setup.
|
|
395
106
|
|
|
396
107
|
## License
|
|
397
108
|
|
|
398
|
-
ISC
|
|
109
|
+
ISC. Support the project: <a href="https://www.buymeacoffee.com/leekbeds55j">☕ Buy me a coffee</a>.
|