@arkone_ai/cv-screen 1.0.0
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 +28 -0
- package/install/install.js +38 -0
- package/package.json +27 -0
- package/skill.md +184 -0
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# @arkone_ai/cv-screen
|
|
2
|
+
|
|
3
|
+
A [Claude Code](https://claude.ai/code) skill that screens a candidate's CV/resume against a job description and produces a structured fit analysis.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @arkone_ai/cv-screen
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
In any Claude Code session:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
/cv-screen
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## What it does
|
|
20
|
+
|
|
21
|
+
- Reads a CV (PDF, DOCX, image, or text) and a job description
|
|
22
|
+
- Scores the candidate across 5 categories: skills match, experience, education, career trajectory, and role alignment
|
|
23
|
+
- Detects red flags (job hopping, gaps, overqualification) neutrally as interview discussion points
|
|
24
|
+
- Produces a structured report with overall score, recommendation (advance/hold/pass), and suggested interview focus areas
|
|
25
|
+
|
|
26
|
+
## License
|
|
27
|
+
|
|
28
|
+
MIT
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { copyFileSync, mkdirSync, existsSync } from 'fs';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { homedir } from 'os';
|
|
6
|
+
|
|
7
|
+
const root = join(import.meta.dirname, '..');
|
|
8
|
+
const home = homedir();
|
|
9
|
+
|
|
10
|
+
const agents = [
|
|
11
|
+
{ name: 'Claude Code', dir: join(home, '.claude', 'skills') },
|
|
12
|
+
{ name: 'Codex', dir: join(home, '.codex', 'skills') },
|
|
13
|
+
{ name: 'Kiro', dir: join(home, '.kiro', 'skills') },
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
const files = [
|
|
17
|
+
{ src: join(root, 'skill.md'), dest: 'cv-screen.md' },
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
let installed = 0;
|
|
21
|
+
for (const agent of agents) {
|
|
22
|
+
if (!existsSync(agent.dir)) continue;
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
copyFileSync(file.src, join(agent.dir, file.dest));
|
|
25
|
+
}
|
|
26
|
+
console.log(`✓ ${agent.name}: ${agent.dir}`);
|
|
27
|
+
installed++;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (installed === 0) {
|
|
31
|
+
mkdirSync(agents[0].dir, { recursive: true });
|
|
32
|
+
for (const file of files) {
|
|
33
|
+
copyFileSync(file.src, join(agents[0].dir, file.dest));
|
|
34
|
+
}
|
|
35
|
+
console.log(`✓ Claude Code: ${agents[0].dir}`);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
console.log('\nUse /cv-screen in any supported AI session.');
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@arkone_ai/cv-screen",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Claude Code skill: screen a candidate CV against a job description with structured fit analysis",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"postinstall": "node install/install.js"
|
|
8
|
+
},
|
|
9
|
+
"bin": {
|
|
10
|
+
"cv-screen": "install/install.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"skill.md",
|
|
14
|
+
"install/"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"claude",
|
|
18
|
+
"claude-code",
|
|
19
|
+
"arkone",
|
|
20
|
+
"hr-ops",
|
|
21
|
+
"cv-screen"
|
|
22
|
+
],
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=18"
|
|
26
|
+
}
|
|
27
|
+
}
|
package/skill.md
ADDED
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cv-screen
|
|
3
|
+
description: "Screen a single candidate CV/resume against a job description and produce a structured fit analysis. Use this skill when: 'screen this CV', 'review this resume', 'check candidate fit', 'analyze this CV against JD', 'evaluate this candidate'. Also trigger for: 'resume review', 'candidate assessment', 'CV analysis'."
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Designed for Claude Code
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Skill: cv-screen
|
|
9
|
+
|
|
10
|
+
Screen a single candidate's CV/resume against a job description and produce a detailed, structured fit analysis.
|
|
11
|
+
|
|
12
|
+
## When to use
|
|
13
|
+
|
|
14
|
+
- User provides a CV and a JD and wants to know if the candidate is a fit
|
|
15
|
+
- User asks to review or evaluate a resume
|
|
16
|
+
- User wants interview focus areas based on a CV
|
|
17
|
+
|
|
18
|
+
## Step 1: Gather inputs
|
|
19
|
+
|
|
20
|
+
### Required
|
|
21
|
+
|
|
22
|
+
| Input | Accepts |
|
|
23
|
+
|---|---|
|
|
24
|
+
| CV / Resume | File path (PDF, DOCX, TXT, image) or pasted text |
|
|
25
|
+
| Job Description | File path (PDF, DOCX, TXT) or pasted text or URL |
|
|
26
|
+
|
|
27
|
+
### Optional
|
|
28
|
+
|
|
29
|
+
| Input | Default | Purpose |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| Must-have skills | Extracted from JD | Override or supplement skills parsed from JD |
|
|
32
|
+
| Experience minimum | Extracted from JD | Override min years of experience |
|
|
33
|
+
| Priority weights | Equal weight | Weight categories differently (e.g., skills 40%, experience 30%, education 20%, culture 10%) |
|
|
34
|
+
| Screening strictness | Standard | `strict` = hard cutoffs, `standard` = balanced, `lenient` = focus on potential |
|
|
35
|
+
|
|
36
|
+
### Reading the documents
|
|
37
|
+
|
|
38
|
+
- **PDF**: Read directly using the Read tool (Claude can read PDFs natively)
|
|
39
|
+
- **DOCX**: Use `python3 -c "import docx; ..."` or `textutil -convert txt <file>` (macOS) to extract text
|
|
40
|
+
- **Image** (photo of CV): Read directly using the Read tool (Claude can read images natively)
|
|
41
|
+
- **Pasted text**: Use as-is
|
|
42
|
+
|
|
43
|
+
## Step 2: Parse the job description
|
|
44
|
+
|
|
45
|
+
Extract and structure these elements from the JD:
|
|
46
|
+
|
|
47
|
+
| Element | What to extract |
|
|
48
|
+
|---|---|
|
|
49
|
+
| Role title | Exact title |
|
|
50
|
+
| Level / seniority | Junior, Mid, Senior, Lead, Manager, Director |
|
|
51
|
+
| Must-have skills | Hard requirements (languages, frameworks, certifications) |
|
|
52
|
+
| Nice-to-have skills | Preferred but not required |
|
|
53
|
+
| Experience requirement | Minimum and preferred years |
|
|
54
|
+
| Education requirement | Degree level, field |
|
|
55
|
+
| Location / remote | Where the role is based |
|
|
56
|
+
| Key responsibilities | Top 5-7 responsibilities |
|
|
57
|
+
| Team / department | Context about the team |
|
|
58
|
+
|
|
59
|
+
## Step 3: Parse the CV
|
|
60
|
+
|
|
61
|
+
Extract and structure:
|
|
62
|
+
|
|
63
|
+
| Element | What to extract |
|
|
64
|
+
|---|---|
|
|
65
|
+
| Name | Candidate's full name |
|
|
66
|
+
| Current role + company | Most recent position |
|
|
67
|
+
| Total experience | Calculated from work history |
|
|
68
|
+
| Skills | Technical and soft skills (stated + inferred from experience) |
|
|
69
|
+
| Education | Degrees, institutions, graduation years |
|
|
70
|
+
| Certifications | Professional certifications |
|
|
71
|
+
| Work history | Companies, roles, durations, key achievements |
|
|
72
|
+
| Career trajectory | Progression pattern (upward, lateral, mixed) |
|
|
73
|
+
| Location | Current location |
|
|
74
|
+
|
|
75
|
+
## Step 4: Analyze fit
|
|
76
|
+
|
|
77
|
+
Score each category and provide evidence:
|
|
78
|
+
|
|
79
|
+
### Scoring rubric
|
|
80
|
+
|
|
81
|
+
| Category | Weight (default) | Scoring criteria |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| **Skills match** | 30% | % of must-have skills present; bonus for nice-to-haves |
|
|
84
|
+
| **Experience** | 25% | Years + relevance of experience to role responsibilities |
|
|
85
|
+
| **Education** | 15% | Meets requirements; relevant field bonus |
|
|
86
|
+
| **Career trajectory** | 15% | Growth pattern, role progression, company caliber |
|
|
87
|
+
| **Role alignment** | 15% | How well current/recent work maps to this role's responsibilities |
|
|
88
|
+
|
|
89
|
+
### Scoring scale
|
|
90
|
+
|
|
91
|
+
| Score | Label | Meaning |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| 90-100 | Excellent | Exceeds requirements — strong hire signal |
|
|
94
|
+
| 75-89 | Good | Meets most requirements — worth advancing |
|
|
95
|
+
| 60-74 | Moderate | Meets some requirements — gaps need discussion |
|
|
96
|
+
| 40-59 | Weak | Significant gaps — consider only if pipeline is thin |
|
|
97
|
+
| 0-39 | Poor | Does not meet key requirements |
|
|
98
|
+
|
|
99
|
+
### Red flag detection
|
|
100
|
+
|
|
101
|
+
Flag these if found:
|
|
102
|
+
|
|
103
|
+
| Red flag | What to look for |
|
|
104
|
+
|---|---|
|
|
105
|
+
| Job hopping | 3+ roles < 1 year without clear reason (contracting, startups) |
|
|
106
|
+
| Gaps | Unexplained gaps > 6 months |
|
|
107
|
+
| Overqualification | Significantly above the role level — flight risk |
|
|
108
|
+
| Title inflation | Senior/Lead titles at very small or unknown companies with scope that doesn't match |
|
|
109
|
+
| Skills mismatch | Core tech stack is completely different |
|
|
110
|
+
| Stale skills | Required skills only used 5+ years ago |
|
|
111
|
+
|
|
112
|
+
Important: Flag these neutrally as "items to explore in interview" — not as disqualifiers. Many have innocent explanations.
|
|
113
|
+
|
|
114
|
+
## Step 5: Generate output
|
|
115
|
+
|
|
116
|
+
Produce this structured report:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
📋 CV Screening Report
|
|
120
|
+
━━━━━━━━━━━━━━━━━━━━━━
|
|
121
|
+
|
|
122
|
+
Candidate: [Name]
|
|
123
|
+
Role: [JD title]
|
|
124
|
+
Date: [Today]
|
|
125
|
+
|
|
126
|
+
── Overall Score: [XX]/100 — [Label] ──
|
|
127
|
+
|
|
128
|
+
Recommendation: ✅ Advance / ⚠️ Hold / ❌ Pass
|
|
129
|
+
|
|
130
|
+
── Category Breakdown ──
|
|
131
|
+
|
|
132
|
+
| Category | Score | Notes |
|
|
133
|
+
|--------------------|-------|---------------------------------|
|
|
134
|
+
| Skills match | XX/30 | [brief evidence] |
|
|
135
|
+
| Experience | XX/25 | [brief evidence] |
|
|
136
|
+
| Education | XX/15 | [brief evidence] |
|
|
137
|
+
| Career trajectory | XX/15 | [brief evidence] |
|
|
138
|
+
| Role alignment | XX/15 | [brief evidence] |
|
|
139
|
+
|
|
140
|
+
── Skills Analysis ──
|
|
141
|
+
|
|
142
|
+
Must-have skills:
|
|
143
|
+
✅ Python — 5 years, used at [Company]
|
|
144
|
+
✅ AWS — certified, 3 years
|
|
145
|
+
❌ Kubernetes — not mentioned
|
|
146
|
+
⚠️ SQL — mentioned but limited evidence
|
|
147
|
+
|
|
148
|
+
Nice-to-have skills:
|
|
149
|
+
✅ Terraform — 2 years
|
|
150
|
+
❌ Go — not found
|
|
151
|
+
|
|
152
|
+
── Strengths ──
|
|
153
|
+
• [Strength 1 with evidence]
|
|
154
|
+
• [Strength 2 with evidence]
|
|
155
|
+
• [Strength 3 with evidence]
|
|
156
|
+
|
|
157
|
+
── Gaps & Risks ──
|
|
158
|
+
• [Gap 1 — impact assessment]
|
|
159
|
+
• [Gap 2 — impact assessment]
|
|
160
|
+
|
|
161
|
+
── Interview Focus Areas ──
|
|
162
|
+
1. [Question topic] — to probe [specific gap or claim]
|
|
163
|
+
2. [Question topic] — to verify [specific experience]
|
|
164
|
+
3. [Question topic] — to assess [specific skill depth]
|
|
165
|
+
|
|
166
|
+
── Red Flags ──
|
|
167
|
+
• [Flag] — [neutral explanation of what to explore]
|
|
168
|
+
(or "None identified")
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Save report
|
|
172
|
+
|
|
173
|
+
Save to: `./cv-screen-<candidate-last-name>-<date>.md`
|
|
174
|
+
|
|
175
|
+
If the user doesn't specify an output format, default to Markdown. Also support `--format pdf` (generate via HTML→PDF like the offer-letter skill) or `--format json` for programmatic use.
|
|
176
|
+
|
|
177
|
+
## Error handling
|
|
178
|
+
|
|
179
|
+
| Issue | What to do |
|
|
180
|
+
|---|---|
|
|
181
|
+
| CV file unreadable | Try alternative extraction methods, then ask user to provide text |
|
|
182
|
+
| JD is vague / missing details | Note which categories couldn't be scored, score what's available |
|
|
183
|
+
| CV has no dates | Flag as a red flag, estimate from context |
|
|
184
|
+
| Multiple roles in JD | Ask user which role to screen against |
|