Tailor and polish an existing resume in Google Docs for a particular job without inventing qualifications, experience, metrics, or outcomes. Use when the user provides an editable GDocs resume link plus either direct recruiter feedback for the hiring role or a direct link to the role description
记忆
resume-story-spinr
试用Turn 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.
它能做什么
Turn 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.
技能文档
Resume Story Spinr
Resumes 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.
Overview
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 data
This 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.
When to Use
- Writing/updating a resume or CV, or preparing bullet points
- Tailoring a resume to a specific job posting (run
atsbefore and after) - Converting a duties-listed resume into an achievements resume
- Preparing interview stories from resume bullets (STAR practice)
- Reviewing someone else's resume (structured critique with specifics)
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.
How It Works
- Weak-opener library: 17 weak phrases mapped to strong verbs ("responsible for"→"Owned", "helped with"→"Drove", "tasked with"→"Led").
- Gerund normalization: "Worked on improving test coverage" → "Improved test coverage".
- Action/Result split: bullets are split on
;,—, "which resulted in", "reducing" — the first half is the Action, the rest becomes the Result clause, joined with " — ". - Quantification regex: detects %, currency, min/sec/ms, hours/days/weeks/months/years, user/customer/request counts, team sizes, 2.1M-style scales, req/s.
- ATS scoring: tokenizes JD minus stop-words (no "looking", "experience", "team" noise), computes coverage, flags missing core terms, counts weak openers and filler phrases.
- Follow-up generation: quantified bullets get "how did you measure it"; leadership bullets get conflict questions; migrations get "what went wrong".
Quick Start
# 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
Steps (Agent Workflow)
- Collect the user's current bullets (paste, file, or read from their resume text).
- Run
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?"). - Re-run
transform --metrics "serving 2.1M req/day"or rewrite with user-supplied figures. - Get the target job description; run
ats. Add true statements covering missing core terms (never stuff keywords — 100% coverage is a red flag, 60–75% is strong). - For the 3–5 strongest bullets, run
interviewand have the user answer the follow-up questions out loud — the resume now makes promises the interview must keep. - Final human pass: tense consistency, no first person, one page per decade of experience.
Output Shape
[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
...
Common Pitfalls
- Inventing metrics. The tool flags missing numbers; the user must supply real ones. A fabricated "38% latency cut" collapses in the interview when asked "how did you measure it?" — which the tool deliberately also generates.
- Keyword stuffing to 100%. ATS coverage above ~75% with terms not backed by real experience gets flagged by recruiters and destroyed in screening calls. Mirror only true statements.
- Keeping "Responsible for". It's the single most common resume verb and says nothing about impact. Every weak opener has a stronger replacement in the library.
- One-line wonders with no Result. "Owned the payments API" is still a duty without an outcome. Every bullet needs Action — Result; the split heuristics show where the result should go.
- Resume promises the interview can't keep. Every quantified bullet invites "walk me through it". Run
interviewon each final bullet; if the user can't tell the story, soften the bullet or practice the story. - Fancy formatting. Tables, text boxes, multi-column layouts, and non-standard bullets silently scramble ATS parsers. Plain single-column, standard headers, hyphen bullets.
- Sending the same resume everywhere. Run
atsper posting; 10 minutes of tailoring (core terms + reorder bullets) is the highest-ROI time in a job search.
Verification Checklist
- No weak openers remain (
transformsummary shows 0 unfixed) - Every bullet quantified or consciously excepted (rare, e.g. people management)
- Every bullet reads Action — Result
- ATS coverage 60–75%+ on core terms for the target posting
- No filler phrases ("team player", "hard worker") detected
- Interview stories rehearsed for the top bullets
- Final format: single column, standard section headers, .docx or clean PDF
One-Shot Recipes
"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
references/ats-guide.md— how ATS parsers actually work, keyword strategy, formatting rules that survive parsing, before/after examples
相关技能
Build, edit, and format professional resumes with PDF import, styled HTML/PDF export, and multi-language support. Use this skill whenever a user mentions res...
先研究目标岗位再下笔的简历与求职文书生成器。
Tailor and polish an existing cover letter in Google Docs for a specific role while keeping every claim consistent with the resume that will accompany it. Use when the user provides an editable GDoc cover-letter link, the associated resume, and a role description.
Reverse-engineer job descriptions: translate jargon ("5 years" → 3), infer company culture (red flags, vibes), match to your resume, detect negotiation signa...
Optimise a LinkedIn profile to be found and to convert. Use when asked to write or improve a LinkedIn headline, About section, or profile, or to make a profi...