@getkrafter/resume-toolkit 1.0.3 → 1.0.5
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 +2 -17
- package/package.json +1 -1
- package/skills/score/SKILL.md +29 -5
- package/skills/tailor/SKILL.md +28 -16
package/README.md
CHANGED
|
@@ -6,29 +6,14 @@ Deterministic resume scoring, ATS keyword matching, and AI-powered resume tailor
|
|
|
6
6
|
|
|
7
7
|
## Quick Start — Skills (no account needed)
|
|
8
8
|
|
|
9
|
-
### Claude Code
|
|
9
|
+
### All platforms (Claude Code, Cursor, Windsurf, OpenCode, Codex)
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
|
|
12
|
+
npx skills add getkrafter/resume-toolkit
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
Then use `/score` or `/tailor` in any conversation.
|
|
16
16
|
|
|
17
|
-
### Cursor
|
|
18
|
-
|
|
19
|
-
Add to Settings → Remote Rule:
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
https://github.com/getkrafter/resume-toolkit/blob/master/skills/score/SKILL.md
|
|
23
|
-
https://github.com/getkrafter/resume-toolkit/blob/master/skills/tailor/SKILL.md
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
Or copy the `skills/` directory to `.cursor/skills/` in your project.
|
|
27
|
-
|
|
28
|
-
### Windsurf
|
|
29
|
-
|
|
30
|
-
Copy the `skills/` directory to `.windsurf/skills/` or `.agents/skills/` in your project.
|
|
31
|
-
|
|
32
17
|
## Quick Start — MCP Server
|
|
33
18
|
|
|
34
19
|
### Without API key (scoring tools only)
|
package/package.json
CHANGED
package/skills/score/SKILL.md
CHANGED
|
@@ -69,9 +69,11 @@ You do NOT need to do this manually. The `score_resume` MCP tool handles parsing
|
|
|
69
69
|
|
|
70
70
|
---
|
|
71
71
|
|
|
72
|
-
## Step 5 —
|
|
72
|
+
## Step 5 — Score the Resume
|
|
73
73
|
|
|
74
|
-
|
|
74
|
+
Choose the method that matches your environment:
|
|
75
|
+
|
|
76
|
+
**Option A — MCP tools available** (user has the MCP server configured):
|
|
75
77
|
|
|
76
78
|
Call the `score_resume` MCP tool:
|
|
77
79
|
```json
|
|
@@ -81,9 +83,7 @@ Call the `score_resume` MCP tool:
|
|
|
81
83
|
}
|
|
82
84
|
```
|
|
83
85
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
Call the `score_krafter_resume` MCP tool:
|
|
86
|
+
Or for Krafter resumes, call `score_krafter_resume`:
|
|
87
87
|
```json
|
|
88
88
|
{
|
|
89
89
|
"id": "<the resume ID from list_resumes>",
|
|
@@ -91,6 +91,30 @@ Call the `score_krafter_resume` MCP tool:
|
|
|
91
91
|
}
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
**Option B — No MCP server** (skill installed without MCP):
|
|
95
|
+
|
|
96
|
+
Run this inline script to score the resume. Replace the `resumeText` and `jdText` values with the actual content:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
node --input-type=module -e "
|
|
100
|
+
import { scoreResume, scoreATS } from '@getkrafter/resume-toolkit';
|
|
101
|
+
|
|
102
|
+
const resumeText = process.env.RESUME_TEXT;
|
|
103
|
+
const jdText = process.env.JD_TEXT || '';
|
|
104
|
+
|
|
105
|
+
const lines = resumeText.split('\n');
|
|
106
|
+
const bullets = lines.filter(l => /^\s*[-*•]|\d+[.)]/.test(l)).map(l => l.replace(/^\s*[-*•]\s*|\d+[.)]\s*/, '').trim());
|
|
107
|
+
const sections = lines.filter(l => l.trim().length < 50 && l.trim().length > 0 && !(/^\s*[-*•]|\d+[.)]/.test(l)) && (l.trim() === l.trim().toUpperCase() || /^[A-Z][a-z]/.test(l.trim()))).map(l => l.trim().toLowerCase());
|
|
108
|
+
|
|
109
|
+
const result = scoreResume({ rawText: resumeText, bullets, sections }, jdText || undefined);
|
|
110
|
+
console.log(JSON.stringify(result, null, 2));
|
|
111
|
+
" <<< ""
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Pass `RESUME_TEXT` and `JD_TEXT` as environment variables containing the resume and job description text. Parse the JSON output and present results per Step 6.
|
|
115
|
+
|
|
116
|
+
If `@getkrafter/resume-toolkit` is not installed as a dependency, install it first: `npm install @getkrafter/resume-toolkit`
|
|
117
|
+
|
|
94
118
|
---
|
|
95
119
|
|
|
96
120
|
## Step 6 — Present the Results
|
package/skills/tailor/SKILL.md
CHANGED
|
@@ -56,27 +56,39 @@ transformation internally via `toResumeData`.
|
|
|
56
56
|
|
|
57
57
|
### Step 4 -- Run Scoring Tools
|
|
58
58
|
|
|
59
|
-
Run **both** scoring tools to get the full picture:
|
|
59
|
+
Run **both** scoring tools to get the full picture. Choose the method that matches your environment:
|
|
60
60
|
|
|
61
|
-
**
|
|
61
|
+
**Option A — MCP tools available** (user has the MCP server configured):
|
|
62
62
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- `missing` keywords (array)
|
|
67
|
-
- `details.bigramsMatched`, `details.unigramsMatched`, `details.bigramsMissing`, `details.unigramsMissing`
|
|
63
|
+
For pasted/file resumes:
|
|
64
|
+
1. `score_ats` with `{ resumeText, jdText }` -- returns `ATSResult` with `score`, `matched`, `missing`, and `details` breakdown.
|
|
65
|
+
2. `score_resume` with `{ resumeText, jdText }` -- returns `ResumeScore` with `total`, `mode`, `breakdown`, `ats`, and `flags`.
|
|
68
66
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
- `mode` ("with-jd")
|
|
72
|
-
- `breakdown` per dimension (quantification, verbStrength, ats, bulletStructure, sectionCompleteness)
|
|
73
|
-
- `ats` (embedded ATSResult)
|
|
74
|
-
- `flags` (diagnostic messages)
|
|
67
|
+
For Krafter resumes:
|
|
68
|
+
1. `score_krafter_resume` with `{ id, jdText }` -- returns the full `ResumeScore` including the embedded `ATSResult`.
|
|
75
69
|
|
|
76
|
-
**
|
|
70
|
+
**Option B — No MCP server** (skill installed without MCP):
|
|
77
71
|
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
Run this inline script. Pass `RESUME_TEXT` and `JD_TEXT` as environment variables:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
node --input-type=module -e "
|
|
76
|
+
import { scoreResume, scoreATS } from '@getkrafter/resume-toolkit';
|
|
77
|
+
|
|
78
|
+
const resumeText = process.env.RESUME_TEXT;
|
|
79
|
+
const jdText = process.env.JD_TEXT;
|
|
80
|
+
|
|
81
|
+
const lines = resumeText.split('\n');
|
|
82
|
+
const bullets = lines.filter(l => /^\s*[-*•]|\d+[.)]/.test(l)).map(l => l.replace(/^\s*[-*•]\s*|\d+[.)]\s*/, '').trim());
|
|
83
|
+
const sections = lines.filter(l => l.trim().length < 50 && l.trim().length > 0 && !(/^\s*[-*•]|\d+[.)]/.test(l)) && (l.trim() === l.trim().toUpperCase() || /^[A-Z][a-z]/.test(l.trim()))).map(l => l.trim().toLowerCase());
|
|
84
|
+
|
|
85
|
+
const atsResult = scoreATS(resumeText, jdText);
|
|
86
|
+
const scoreResult = scoreResume({ rawText: resumeText, bullets, sections }, jdText);
|
|
87
|
+
console.log(JSON.stringify({ atsResult, scoreResult }, null, 2));
|
|
88
|
+
" <<< ""
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
If `@getkrafter/resume-toolkit` is not installed, run `npm install @getkrafter/resume-toolkit` first. Parse the JSON output and continue to Step 5.
|
|
80
92
|
|
|
81
93
|
### Step 5 -- Gap Analysis
|
|
82
94
|
|