@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 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 |