A Claude Code skill that layers on top of career-ops.
career-ops scores the role and renders the PDF. This skill adds the parts it has no equivalent for, and chains everything into one repeatable run:
- Keyword-coverage scoring (CV ↔ JD) with a before/after lift you can see
- A hard fact gate so no metric reaches the PDF unless your CV supports it
- ATS character hygiene — em/en dashes, smart quotes, ligatures,
×vsx - A conservative salary ask, checked against a floor you set once
mkdir -p ~/.claude/skills && git clone https://github.com/donsamoylov/tailor-skill ~/.claude/skills/tailorRequires Claude Code and Node.js 18+. You do not need career-ops beforehand — the skill installs it on first run.
Open a terminal in any folder, run claude, then send one message:
/tailor
<paste the full job description>
…and attach your resume (PDF, DOCX, or text) if this is the first run in that folder. After that the folder remembers your CV; send only the next posting.
0. Takes stock: JD? resume or cv.md? Asks for whatever is missing — before
installing anything, so you never wait on a run that cannot finish
1. Installs career-ops if absent; resume → cv.md, posting → jds/<slug>.md
2. EVALUATION with career-ops' A-G rubric → report, 1-5 score, tracker row
3. Score below 3.5 → says so plainly and asks whether to continue
4. Keyword target — gaps from the evaluation are marked `!` and never enter the CV
5. Payload built from the evaluation's customization plan
6. Gates: baseline → fact gate → keyword match → ATS lint → PDF
7. Analytics: coverage before vs after, and the honest ceiling
8. Salary ask vs your floor, with the reasoning
9. Cover letter (optional)
| Output | What it is |
|---|---|
reports/NNN-<company>-<date>.md |
A-G evaluation: score, requirement-by-requirement match, gaps, comp read, posting legitimacy, apply-or-skip |
output/cv-<name>-<company>-<date>.pdf |
Tailored CV: monochrome, single column, ATS-clean |
| Analytics table | Coverage before and after tailoring, the lift in points, and which requirements you genuinely lack |
| Salary recommendation | Employer band vs your floor, one defensible number, and what to confirm |
| Cover letter PDF | Optional, after four questions |
It never lies on your CV. It surfaces skills you really have in the posting's own vocabulary — aggressively, because that is what gets past filters — but it does not invent metrics, employers, titles, or experience.
A fact gate blocks any figure your source CV does not support: the build stops rather than shipping an invented number. Requirements you genuinely lack stay out of the CV entirely; they belong in the cover letter as transferable framing, or in an honest interview answer.
That is also why coverage sometimes stops short of 100%. A ceiling made of real gaps is the correct result, not a failure.
| File | Purpose |
|---|---|
SKILL.md |
The flow Claude follows |
assets/cv-jd-match.mjs |
Keyword-coverage scorer, zero LLM. Curated target list or raw JD |
assets/cv-ats-lint.mjs |
ATS character linter with --fix |
assets/tailor-cv.sh |
Gate-stack runner with before/after coverage |
assets/*.mono.html |
Monochrome CV and cover-letter templates |
The two .mjs tools and the shell runner work standalone if you want them
outside the skill:
node cv-jd-match.mjs cv.md --keywords jds/acme.keywords.txt --summary
node cv-ats-lint.mjs cv.md --fixBuilt on career-ops by Santiago
Fernández de Valderrama (MIT). No career-ops code is redistributed here — the
skill calls it where installed. The monochrome templates are restyled from
career-ops templates and carry that project's licence; see NOTICE.md.
MIT licensed.