Rewrite Resume
Tailor the resume to one target role. Interview first, write second — every strengthened claim has to be true.
Output location
Everything for one target role lives in one folder:
$JOB_SEARCH_DIR/<company>-<role-slug>/
├── inputs/ # raw job posts, the resume you provided
├── keyword-report-2026-08-24.md # every output is dated; newest wins
├── linkedin-rewrite-2026-08-24.md
└── resume-rewrite-2026-08-24.md
JOB_SEARCH_DIR is the environment variable if the user has set one, otherwise ~/job-search. Resolve it once with Bash — echo "${JOB_SEARCH_DIR:-$HOME/job-search}" — and never hardcode a path. Create the folder on first run and tell the user where it went.
The newest report is whichever keyword-report-*.md sorts last: ls "$DIR"/keyword-report-*.md | tail -1.
This skill writes resume-rewrite-<YYYY-MM-DD>.md. Dated by run, never overwritten — a second run the same day gets a -2 suffix, so the folder keeps every version you've sent.
Provided resumes and pasted JDs go in that folder's inputs/.
Step 1 — Get the keyword report
Check $JOB_SEARCH_DIR for an existing <slug>/keyword-report-*.md — reports are dated; use the most recent. If one matches the target role, read it and confirm the target with the user.
No report? Ask for the job link(s) and mine them first:
- Fetch chain (never ask for LinkedIn credentials): logged-in Chrome → WebFetch → ask the user to paste the JD.
For Chrome, load tools with
ToolSearch query select:mcp__claude-in-chrome__tabs_context_mcp,mcp__claude-in-chrome__navigate,mcp__claude-in-chrome__get_page_text,mcp__claude-in-chrome__computer.
- Extract per job: title, seniority, years, hard skills, tools, soft skills, certs, exact recurring phrases, responsibilities, must-have vs nice-to-have.
- Aggregate into a keyword frequency table (keyword | count | category | where to showcase), top 10 keywords, and phrases to mirror verbatim.
- Save as
keyword-report-<YYYY-MM-DD>.md in the role folder so the LinkedIn skill can reuse it.
Step 2 — Ingest the current resume
- Markdown / text — read it directly.
- PDF — use the Read tool (it handles PDFs with a page range).
- DOCX — use the built-in
docx skill to extract the content.
- No resume — offer to build one from scratch through the interview in step 3. Say so plainly; don't silently invent a starting point.
Copy whatever they provide into inputs/ so the run is reproducible.
Step 3 — Interview loop (do not skip)
Ask before writing:
- Quantify — every achievement bullet that has no number: "How much, how many, how fast, compared to what?"
- Scope — team size, budget, users, revenue, systems owned
- Tools — for each tool the JD names: production use, dabbled, or never? Ask directly.
- Verify — for each claim you want to sharpen: "Is this accurate, and to what degree?"
- Missing wins — "What did you ship that never made it onto the resume?"
- Gaps and dates — employment gaps, overlapping roles, contract vs full-time. Get the facts; don't paper over them.
Batch with AskUserQuestion where answers are choosable; plain chat for numbers and stories.
Honesty rules — non-negotiable:
- Never invent experience, metrics, titles, dates, or employers.
- Every claim traces to the resume, provided context, or a user answer.
- Unverified suggestions are marked
[CONFIRM] in the draft.
- Sharper wording, yes. Inflated facts, no.
Step 4 — Section-by-section rewrite
Each section as:
Current → what's there now
Suggested → the rewrite
Why → which report keywords it hits and what got stronger, in one plain line.
Cover:
- Summary / headline — 2–3 lines, targeted at this role, leading with the strongest true claim.
- Skills section — mirrored to the JD's own language (if they say "CI/CD pipelines", don't write "build automation"). Group by category, order by report frequency.
- Experience bullets — action verb + what you did + measurable outcome + JD keyword. One idea per bullet. Cut bullets that serve no keyword and show no outcome.
- Projects — keep the ones that prove a top-10 keyword; cut or shrink the rest.
- Education & certifications — placement (top if recent grad, bottom otherwise), and which report-named certs are worth pursuing.
Beyond wording, give structural recommendations:
- Reorder — which sections move up for this specific role
- Cut — stale roles, obsolete tech, anything older than ~10–15 years that isn't load-bearing
- Add — missing sections the JD implies (publications, speaking, open source, languages)
- Length — one page under ~10 years experience, two pages beyond; say which applies and what to cut to get there
Step 5 — ATS pass
- Keyword coverage table — top report keywords vs where they now appear. Flag every miss and say whether it's fillable honestly.
- Formatting warnings — call out anything that breaks resume parsers: tables, multi-column layouts, text in headers/footers, graphics and icons, text inside images, non-standard section headings, unusual fonts. Recommend a standard single-column layout with conventional headings ("Experience", "Education", "Skills").
Step 6 — Save and report
Write the dated resume-rewrite-<YYYY-MM-DD>.md containing:
- The clean final draft, ready to copy out
- A change log — what moved, what was cut, what was added, and why
In chat print the new summary and the top 5 changes only. Point at the file for the rest.
Offer: "Want the LinkedIn profile matched to this? Run rewrite-linkedin-profile — it'll reuse the same report."
1---2name: rewrite-resume3description: Rewrites and upgrades the user's resume section by section for a specific target job, with ATS keyword coverage and formatting checks. Use when the user says "rewrite my resume", "tailor my resume to this job", "resume for this JD", or runs /rewrite-resume. For the LinkedIn profile version use rewrite-linkedin-profile; for keyword mining alone use jd-keyword-miner.4---56# Rewrite Resume78Tailor the resume to one target role. Interview first, write second — every strengthened claim has to be true.910## Output location1112Everything for one target role lives in one folder:1314```15$JOB_SEARCH_DIR/<company>-<role-slug>/16├── inputs/ # raw job posts, the resume you provided17├── keyword-report-2026-08-24.md # every output is dated; newest wins18├── linkedin-rewrite-2026-08-24.md19└── resume-rewrite-2026-08-24.md20```2122`JOB_SEARCH_DIR` is the environment variable if the user has set one, otherwise `~/job-search`. Resolve it once with Bash — `echo "${JOB_SEARCH_DIR:-$HOME/job-search}"` — and never hardcode a path. Create the folder on first run and tell the user where it went.2324The newest report is whichever `keyword-report-*.md` sorts last: `ls "$DIR"/keyword-report-*.md | tail -1`.2526This skill writes `resume-rewrite-<YYYY-MM-DD>.md`. Dated by run, never overwritten — a second run the same day gets a `-2` suffix, so the folder keeps every version you've sent.27Provided resumes and pasted JDs go in that folder's `inputs/`.2829## Step 1 — Get the keyword report3031Check `$JOB_SEARCH_DIR` for an existing `<slug>/keyword-report-*.md` — reports are dated; use the most recent. If one matches the target role, read it and confirm the target with the user.3233No report? Ask for the job link(s) and mine them first:34- Fetch chain (never ask for LinkedIn credentials): logged-in Chrome → WebFetch → ask the user to paste the JD.35 For Chrome, load tools with `ToolSearch` query `select:mcp__claude-in-chrome__tabs_context_mcp,mcp__claude-in-chrome__navigate,mcp__claude-in-chrome__get_page_text,mcp__claude-in-chrome__computer`.36- Extract per job: title, seniority, years, hard skills, tools, soft skills, certs, exact recurring phrases, responsibilities, must-have vs nice-to-have.37- Aggregate into a keyword frequency table (keyword | count | category | where to showcase), top 10 keywords, and phrases to mirror verbatim.38- Save as `keyword-report-<YYYY-MM-DD>.md` in the role folder so the LinkedIn skill can reuse it.3940## Step 2 — Ingest the current resume4142- **Markdown / text** — read it directly.43- **PDF** — use the Read tool (it handles PDFs with a page range).44- **DOCX** — use the built-in `docx` skill to extract the content.45- **No resume** — offer to build one from scratch through the interview in step 3. Say so plainly; don't silently invent a starting point.4647Copy whatever they provide into `inputs/` so the run is reproducible.4849## Step 3 — Interview loop (do not skip)5051Ask before writing:5253- **Quantify** — every achievement bullet that has no number: "How much, how many, how fast, compared to what?"54- **Scope** — team size, budget, users, revenue, systems owned55- **Tools** — for each tool the JD names: production use, dabbled, or never? Ask directly.56- **Verify** — for each claim you want to sharpen: "Is this accurate, and to what degree?"57- **Missing wins** — "What did you ship that never made it onto the resume?"58- **Gaps and dates** — employment gaps, overlapping roles, contract vs full-time. Get the facts; don't paper over them.5960Batch with `AskUserQuestion` where answers are choosable; plain chat for numbers and stories.6162**Honesty rules — non-negotiable:**63- Never invent experience, metrics, titles, dates, or employers.64- Every claim traces to the resume, provided context, or a user answer.65- Unverified suggestions are marked `[CONFIRM]` in the draft.66- Sharper wording, yes. Inflated facts, no.6768## Step 4 — Section-by-section rewrite6970Each section as:7172**Current** → what's there now73**Suggested** → the rewrite74**Why** → which report keywords it hits and what got stronger, in one plain line.7576Cover:771. **Summary / headline** — 2–3 lines, targeted at this role, leading with the strongest true claim.782. **Skills section** — mirrored to the JD's own language (if they say "CI/CD pipelines", don't write "build automation"). Group by category, order by report frequency.793. **Experience bullets** — action verb + what you did + measurable outcome + JD keyword. One idea per bullet. Cut bullets that serve no keyword and show no outcome.804. **Projects** — keep the ones that prove a top-10 keyword; cut or shrink the rest.815. **Education & certifications** — placement (top if recent grad, bottom otherwise), and which report-named certs are worth pursuing.8283Beyond wording, give structural recommendations:84- **Reorder** — which sections move up for this specific role85- **Cut** — stale roles, obsolete tech, anything older than ~10–15 years that isn't load-bearing86- **Add** — missing sections the JD implies (publications, speaking, open source, languages)87- **Length** — one page under ~10 years experience, two pages beyond; say which applies and what to cut to get there8889## Step 5 — ATS pass9091- **Keyword coverage table** — top report keywords vs where they now appear. Flag every miss and say whether it's fillable honestly.92- **Formatting warnings** — call out anything that breaks resume parsers: tables, multi-column layouts, text in headers/footers, graphics and icons, text inside images, non-standard section headings, unusual fonts. Recommend a standard single-column layout with conventional headings ("Experience", "Education", "Skills").9394## Step 6 — Save and report9596Write the dated `resume-rewrite-<YYYY-MM-DD>.md` containing:971. The clean final draft, ready to copy out982. A change log — what moved, what was cut, what was added, and why99100In chat print the new summary and the top 5 changes only. Point at the file for the rest.101102Offer: "Want the LinkedIn profile matched to this? Run **rewrite-linkedin-profile** — it'll reuse the same report."