Install
openclaw skills install @voronindenis5/resume-story-spinrTurn flat resume bullets ('Responsible for X') into quantified STAR-method achievement narratives, score resumes against job descriptions for ATS keyword coverage and weak-phrase hazards, and expand each bullet into interview-ready stories with likely follow-up questions. Use when the user is writing or updating a resume/CV, preparing bullets for a job application, tailoring a resume to a specific job posting, or preparing interview stories from their experience.
openclaw skills install @voronindenis5/resume-story-spinrResumes fail two filters: the ATS robot (keyword match) and the 6-second human skim (weak verbs, no numbers). Then whatever survives gets interrogated in the interview — and "Responsible for the payments API" has no story behind it. This skill transforms duty-bullets into quantified achievements, scores the resume against the target job description, and pre-builds the STAR stories an interviewer will dig for.
scripts/resume_spinr.py (offline, stdlib-only):
transform — weak → strong verb rewrites ("Responsible for" → "Owned", "Worked on improving" → "Improved"), Action–Result splitting on semicolons/dashes, quantification detection, and metric hints for every unquantified bullet (what to measure for APIs, migrations, leadership, support…)ats — keyword coverage of resume vs job description with stop-word filtering, missing-term list, weak-opener counts, filler-phrase and formatting hazard detectioninterview — expands each bullet into S/T/A/R story scaffolding plus likely follow-up questions ("How did you measure that number?", "What was YOUR contribution vs the team's?")demo — all three on sample dataThis is the structure engine — it fixes grammar, verbs, metrics detection, and scoring deterministically. The agent (you) uses its skeletons to draft final wording with the user's real numbers.
ats before and after)Don't use for: cover letters (different document, different job), LinkedIn profile summaries (though bullets transfer), or academic CVs where duties-listing is the convention.
;, —, "which resulted in", "reducing" — the first half is the Action, the rest becomes the Result clause, joined with " — ".# Transform weak bullets
python3 scripts/resume_spinr.py transform --bullets "Responsible for the payments API
Helped with migration of legacy services to Kubernetes
Worked on improving test coverage"
# Same, from a file (one bullet per line)
python3 scripts/resume_spinr.py transform --file bullets.txt
# Score against a job description
python3 scripts/resume_spinr.py ats --resume resume.txt --job posting.txt
# Build the interview story behind a bullet
python3 scripts/resume_spinr.py interview --bullet \
"Led migration of 14 services; cut deploy time from 40min to 6min"
python3 scripts/resume_spinr.py demo
transform. For each ⚠-flagged bullet, ask the user for the real number using the printed metric hints ("What was the request volume? latency before/after?").transform --metrics "serving 2.1M req/day" or rewrite with user-supplied figures.ats. Add true statements covering missing core terms (never stuff keywords — 100% coverage is a red flag, 60–75% is strong).interview and have the user answer the follow-up questions out loud — the resume now makes promises the interview must keep.[1] BEFORE: Responsible for the payments API
AFTER: Owned the payments API.
⚠ No metric — add: requests/sec served, p95/p99 latency change, error-rate delta
Interview follow-up: What was YOUR specific contribution vs the team's?
[2] BEFORE: Led migration of 14 services; cut deploy time from 40min to 6min
AFTER: Led migration of 14 services — cut deploy time from 40min to 6min.
ATS MATCH REPORT
Keyword coverage: 44% (4/9 job terms found)
[████████░░░░░░░░░░░░]
Missing from resume (5):
- grpc
- observability
...
interview on each final bullet; if the user can't tell the story, soften the bullet or practice the story.ats per posting; 10 minutes of tailoring (core terms + reorder bullets) is the highest-ROI time in a job search.transform summary shows 0 unfixed)"Fix my resume for this posting"
python3 scripts/resume_spinr.py ats --resume resume.txt --job posting.txt
python3 scripts/resume_spinr.py transform --file resume_bullets.txt
# add true statements for missing core terms, re-run ats → 60-75%+
"I have a list of duties, need achievements"
python3 scripts/resume_spinr.py transform --file duties.txt
# for each ⚠ bullet, extract the real number from the user, rewrite
"Interview is tomorrow, stories from my resume"
python3 scripts/resume_spinr.py interview --file resume_bullets.txt
# user answers each follow-up out loud; fix bullets they can't defend
references/ats-guide.md — how ATS parsers actually work, keyword strategy, formatting rules that survive parsing, before/after examples