Tailors one resume to one specific job posting. Builds a must-have/nice-to-have requirement table, an evidence map, gap questions instead of invention, a tailored copy (headline, summary, bullet order, skills), honest ATS guidance, and an optional cover letter for that posting. Use when the user says "tailor my resume to this job", "customize my CV for this posting", "match my resume to this job description", "what keywords am I missing", "make my resume ATS-friendly for this role", "will this get past the ATS", "the job asks for X and I don't have it", or pastes a job ad with a resume. Works from pasted text; uses Reactive Resume MCP tools when connected. Not for bullets with no target job (resume-bullet-writer), what belongs on a resume or a general audit (resume-content-guide), tracking or follow-ups (job-application-manager), or interview prep and practice (interview-prep, mock-interview).
Permissions
Files
Tailors one resume to one specific job posting. Builds a must-have/nice-to-have requirement table, an evidence map, gap questions instead of invention, a tailored copy (headline, summary, bullet order, skills), honest ATS guidance, and an optional cover letter for that posting. Use when the user says "tailor my resume to this job", "customize my CV for this posting", "match my resume to this job description", "what keywords am I missing", "make my resume ATS-friendly for this role", "will this get past the ATS", "the job asks for X and I don't have it", or pastes a job ad with a resume. Works from pasted text; uses Reactive Resume MCP tools when connected. Not for bullets with no target job (resume-bullet-writer), what belongs on a resume or a general audit (resume-content-guide), tracking or follow-ups (job-application-manager), or interview prep and practice (interview-prep, mock-interview).
Version history
Tailor one resume to one job description (JD). The core artifact is a requirement → evidence table. It is close to what current screening tools (Workday HiredScore, Greenhouse Talent Matching, Ashby) build when they grade a candidate, and what a recruiter checks by eye. Tailoring changes emphasis, order and wording. It never changes facts.
[x]% is fine in a draft; never deliver a final copy that still has one.When asked to fabricate (add a skill they lack, inflate a title, round years up, invent a metric), decline in one sentence and offer the honest alternative in the same reply:
User: The JD asks for Kubernetes. I've never used it. Just add it to my skills.
Agent: I won't list Kubernetes, because it isn't true yet and it is exactly what an interviewer would probe. Here is what works instead: (1) if it is only "nice to have", leave it off; you can still be a strong match. (2) If you have run containers with Docker, ECS or another orchestrator, I'll name that honestly as adjacent experience. (3) If you start learning it with a concrete step (a course, a booked exam, a repo), I can list "Learning: Kubernetes (CKAD exam booked Nov 2026)". (4) One honest line in the cover letter can bridge it. Which of these fits?
If there is no table yet, ask first: "Is Kubernetes listed as required or preferred? Have you used Docker, ECS, Nomad or similar?" If the user insists, say it once without repeating the case ("It's your resume, so you can add it yourself; I won't write it, because a technical screen will test it. Shall I carry on with the rest?") and carry on. Never refuse the whole task over one line. Read references/evidence-and-gaps.md §5 whenever the user asks you to add, round up or reword something beyond what they confirmed.
First reply. When the JD and the resume are both present, the first reply contains: one line naming the tier ("Standard; say quick or deep to change"), the requirement table, the coverage line, and one numbered batch of at most 5 questions, knockouts first. Don't send a reply that only asks questions when you already have both documents.
No posting yet? Answer ATS questions from the "How ATS screening actually works" section below, run the parse-safety items from step 8, and offer to tailor once they have a JD.
Default to Standard and name the tier in the first reply. For an impatient user: "Paste the JD and your resume; I'll come back with the table and at most five questions in one message."
| Tier | Use for | Steps |
|---|---|---|
| Quick (~5 min) | High-volume, lower-priority applications | Knockout check; top-5 must-have table; headline; first summary line; reorder the top 6–8 skills. No bullet rewrites |
| Standard (~20 min) | A normal application (default) | Everything in Quick, plus: full table; positioning line; 3–5 gap questions; reorder and rephrase bullets in the two most recent relevant roles; summary rewrite; hide 1–3 irrelevant items; skills; name the copy |
| Deep (45–90 min) | Top choice, referral, senior role | Everything in Standard, plus a hidden-requirements read (references/jd-analysis.md §3), a company brief (only with web access), a full gap interview, a cover letter, and a final skim as the hiring manager |
Ask only for what is missing, inside the first question batch:
List the posting's likely knockouts and ask about any that are unclear: work authorization or sponsorship, location and on-site days, travel, a legally required license or clearance, a minimum degree (versus "or equivalent experience"), a stated minimum number of years in a function, language fluency, shift or start date.
Hard automatic rejections mostly fire on answers to application-form questions, not on resume prose, so tailoring cannot fix a failed knockout. If one fails, say so plainly and let the user decide. Form answers must be truthful; numeric "years of X" questions are often filters. Work authorization goes on the resume only where that is the local norm.
Classify every requirement:
Weight each row: 3 = central (in the title, repeated, or listed first), 2 = important, 1 = generic ("team player", "detail-oriented"). Cap the table at 5–8 musts plus up to 5 nice-to-haves. Mark the 4–6 weight-3 rows: they drive both recruiter search and AI grading.
Read references/jd-analysis.md when the posting is long, vague or senior, when you need hidden-requirement cues, or when the user asks "should I even apply?".
For each row, point to the best evidence on the resume (section → item → bullet) and rate it:
| Strength | Meaning | Default action |
|---|---|---|
| Direct+ | Did it, in a real setting, with an outcome or number | Promote; align the wording to the JD |
| Direct | Did it, no number | Quantify: ask for a number or honest range |
| Adjacent | Same concept, different tool or domain | Ask whether they used the JD's version; else name the real tool |
| Transferable | Same competency, different context | Promote with specifics |
| Unstated | Probably true but not on the resume | Ask; add only after confirmation |
| Learning | A concrete step in progress (course, exam date, repo) | List it as learning, with the date or link |
| None | The user lacks it | Omit; address in the letter only if weight 3 and a credible bridge exists |
"We" hides ownership, and choosing, reviewing or supporting a thing is not doing it: ask what the user did before rating a row Direct.
Actions: Promote (move up), Rephrase (use the JD's term), Quantify, Ask, Add (from an answer), Hide, Letter, Omit.
Output the table with columns # | Requirement (JD wording) | Type | Wt | Evidence | Strength | Action, then one coverage line:
Knockouts 1/1 · Musts 4/5 covered (weighted 82%) · Nice 1/3 · Label: Strong
Coverage % = the sum of weights of Must and Implicit rows rated Direct+, Direct, Adjacent or Transferable, divided by the sum of weights of all Must and Implicit rows. Unstated, Learning and None count as not covered. Labels (an internal heuristic, not research; say so if asked): Strong = all knockouts met and coverage at least 80%; Reasonable stretch = 50–79%; Long shot = below 50% or any knockout unmet. Never present a percentage "match score" as a target.
Ask 3–5 questions per batch, highest weight first, with knockout and letter questions counted in the same cap of 5, and wait for the answers:
Read references/evidence-and-gaps.md when a gap type isn't covered above (years, credentials, domain change, leadership without the title), or the moment the user asks you to add or inflate something.
Positioning line first. Once the answers are in, write one sentence from the weight-3 rows and the team's likely problem (the responsibility verbs; jd-analysis.md §3): "{who} who {does the core job}, proven by {best evidence}." Show it with the updated table. The headline, summary, first two bullets and the letter's hook all serve it, so they tell one story instead of listing matched keywords.
| Element | Do | Don't |
|---|---|---|
| Headline | Real title or the role family the work belongs to, plus 1–2 true differentiators in the JD's terms | Imply a title or seniority never held |
| Summary | 2–4 lines: who (role family, true years or scope), the top 2–3 musts with proof, the domain | Generic adjectives ("results-driven", "passionate") |
| Bullets | Within each role, put weight-3 evidence first; use the JD's nouns; quantify | Reorder roles (keep reverse-chronological); paste JD sentences |
| Items | Hide irrelevant items in the copy. Net length stays the same: for every line added, cut or hide a weaker one; keep the master's page count | Delete from the master; drop sections that show transferable skills |
| Skills | JD order and wording, grouped; only skills a bullet or project backs | Add skills the user lacks; bare soft-skill lists |
| Titles | Keep the official title; a function clarifier is fine: "Analyst II (Product Analytics)" | Retitle a past job to the target title; add a rank never held |
| Section order | Lift Certifications when one is a knockout; for "degree or equivalent", lead with experience | Invent non-standard headings |
| Layout | One column for portal applications | Text in images; skill bars as the only signal |
Term rules:
Review gate. With MCP, show a before/after for every change, summarise the decisions, and get an explicit yes before any write (copy, patch, letter save). Without MCP there is nothing to write: go straight to step 7 and put the before/after pairs in the change log; the user's edits are the review. Read references/rewrite-playbook.md for headline and summary patterns, more before/after pairs, and the no-MCP delivery format.
Agent checks (silent; fix before delivering):
Defensibility (one question to the user): list the changed or new bullets and ask, "Could you talk about each of these for two minutes if asked: what you did, how, and the result? Tell me any you'd hesitate on." Soften or cut those lines. The weight-3 bullets become story prompts for interview-prep.
Tell the user (at most 3 lines): "Before sending: read the whole copy. Export to PDF, select all, paste into a text editor and check that everything is there in reading order with dates next to the right roles. Keep the file under 2.5 MB."
Write one when it is required or the user asks for it, for a career change, relocation or gap, for a stretch on a weight-3 must, or for a referral, small company or named hiring manager. For an optional high-volume portal, suggest skipping it or keeping it under ~180 words; skip it when the posting says no cover letters (tell the user if they asked for one).
When a letter is wanted, add up to 2 letter questions to the gap batch (still at most 5 in total): "What draws you to this team specifically: something you read, used or heard?" and "Hiring manager's name, start date or relocation details to mention?" With no real reason given, open with the strongest evidence paragraph; never invent motivation.
Shape: 150–300 words, shorter when the evidence is thin; never pad to reach a length. A hook with a specific reason tied to the team's problem plus one line of proof; one or two evidence paragraphs, each tied to a weight-3 requirement (situation, what the user did, result); an optional single honest sentence bridging the main gap; a close with the next step. Draft only from the table and the user's answers, then ask the user to add or edit at least one line in their own voice. Since AI-written letters became common, polished JD-matching counts for much less (on one platform its link to callbacks fell by about half); specific, verifiable content and work history count for more.
Read references/cover-letter.md before drafting: template, phrases to avoid, and a worked example.
Sibling skills may not be installed; when one is missing, do the light version yourself and say so.
apply_resume_patch on the master. Without MCP: give a block the user can paste into their master.Tell the user this briefly when they worry about "beating the ATS" (as of 2026; vendor features change, so verify when it matters):
Correct these myths when the user repeats them: "75% of resumes are rejected by ATS before a human sees them" (a 2012 vendor sales pitch with no method); "ATS can't read PDFs" (text PDFs are fine; image-only scans fail); "copy the JD word for word / hit an 80% match score"; "recruiters spend six seconds" (small vendor study, first glance only); "keyword frequency drives ranking"; "white text gets interviews".
Read references/ats-reality.md when the user asks how a specific system works (Workday, Greenhouse, Taleo, Lever, iCIMS, LinkedIn), worries about auto-rejection, asks about PDF vs DOCX or columns, or when an imported resume contains hidden or invisible text.
Input. JD excerpt, "Data Analyst, Growth": Required: 3+ years SQL; experience with dbt; partner with Product to define KPIs; A/B testing. Preferred: Snowflake, Python. On-site in Austin 3 days a week. Resume: headline "Analyst"; "Marketing Analyst, Acme Subscriptions, 2021–present. Created weekly reports for marketing using SQL and Tableau. Worked on data pipelines. Onboarded 2 interns."
First reply. "Standard; say quick or deep to change." Then:
| # | Requirement (JD wording) | Type | Wt | Evidence | Strength | Action |
|---|---|---|---|---|---|---|
| 1 | On-site in Austin 3 days a week | Knockout | – | — | ? | Ask |
| 2 | 3+ years SQL | Must | 3 | Acme → b1 (2021–present) | Direct | Rephrase |
| 3 | Experience with dbt | Must | 3 | Acme → b2 "data pipelines" | Unstated? | Ask |
| 4 | Partner with Product to define KPIs | Must | 3 | — | None | Ask |
| 5 | A/B testing | Must | 2 | — | None | Ask |
| 6 | Snowflake | Nice | 1 | — | None | Ask, else Omit |
| 7 | Python | Nice | 1 | — | None | Ask, else Omit |
Knockouts ?/1 · Musts 1/4 covered (weighted 27%) · Nice 0/2 · Label: pending answers
Questions: 1) Can you be on-site in Austin three days a week? 2) What were the "data pipelines" built in, and roughly how many models or jobs? Did anything get faster? 3) Did you define any of the marketing KPIs, and with whom? 4) Did those reports feed experiments or A/B tests? About how many, and did you design or analyse any of them yourself? 5) Any Snowflake or Python, at work or on a side project?
Answers. On-site is fine. The pipelines were ~40 dbt models on BigQuery; dashboard refresh went from about 6 h to 45 min. Defined 5 funnel KPIs with the Product and Marketing leads. The weekly review picked ~10 A/B tests a quarter; I sized and analysed about half of them myself. No Snowflake; no Python at work.
Second reply (delivered directly; the before/after pairs form the change log).
Knockouts 1/1 · Musts 4/4 covered (weighted 100%) · Nice 0/2 · Label: Strong.Every verb above matches the user's answer (defined, built, sized, analysed), and every "~" survives. Had the user only picked tests, row 5 would stay Adjacent, and "A/B testing" would stay out of the headline and Skills.
Use these tools only when the Reactive Resume MCP server is connected. Read before writing, show the before/after, and get a yes before any change to the user's data. Read references/mcp-recipes.md before the first write, and when the application has no JD or no linked resume.
| Situation | Path |
|---|---|
Application exists with a linked resume and a JD, and sentResumeVersionId is empty | A: api_documents_copy_for_job, then patch the copy |
| Same, and the user wants only a quick AI pass | A-quick: tailor_resume_for_application. It rewrites the summary only, uses the user's AI provider, relinks the application to the new copy and adds a timeline note. Check the new summary claim by claim against the base resume, then continue with path A's patching for anything else |
| No application record | B: duplicate_resume, then patch the copy. Offer to create the application (job-application-manager skill) |
sentResumeVersionId is set (already submitted) | Don't relink: the recorded sent resume can't be replaced, and tailor_resume_for_application would fail after making an orphan copy. Use path B for interview prep or a future application |
Steps:
list_applications (page with offset; match company and role); if more than one matches, ask which. read_application {id} and check resumeId, jobDescription, requirements, status and sentResumeVersionId. Without an application, find the base with list_resumes. Then read_resume {id}.api_rest_match_resume {id: <base resume id>, jobDescription} returns found and missing terms (up to 35, many of them generic phrases). Use missing to check your table, not as a question list: ask only about missing terms that match a weight-2 or weight-3 row, inside the normal batch of at most 5. Never add a missing term without a confirmed answer.api_documents_copy_for_job {resumeId, applicationId, name}. The copy becomes the application's resume only if no sent version exists and either no resume is linked or the stage is saved; otherwise, with the user's agreement, call update_application {id, resumeId: <copy id>}. When the application now points at the copy, tell the user: "Application X now uses the copy '{name}'; your original is unchanged." Path B: duplicate_resume {id, name}. Name copies {Company} — {Role} — YYYY-MM-DD and keep names under ~60 characters so they stay readable in lists (api_documents_copy_for_job accepts up to 100).read_resume on the copy, take updatedAt, then apply_resume_patch {id, operations, expectedUpdatedAt}. Guard edits with test ops, write HTML (never Markdown), always write dates rather than period, and hide with hidden: true. On 409 RESUME_VERSION_CONFLICT, read again and recompute. On 403 RESUME_LOCKED, ask before unlock_resume.api_rest_check_resume {id} on the copy. List its findings one line each; fix layout and date errors the approved plan already covers, and ask before any wording change. download_resume_pdf gives a signed URL for the copy-paste test; it expires after 10 minutes and works for anyone holding it, so don't post it anywhere.score_application_match {id} uses AI and overwrites the saved match score. Use its gaps and strengths as a cross-check, not the number as a target.create_cover_letter {name, content, applicationId, resumeId, layout: "structured"} (body HTML only; the structured layout adds the greeting and sign-off). Or call draft_application_message {id, kind: "cover-letter"} (AI; saves a letter named "{company} — {role}"), review it against the table, and fix it with update_cover_letter {id, expectedRevision, …}.Tools marked AI (tailor_resume_for_application, score_application_match, draft_application_message) send the full resume and JD to the user's configured AI provider: ask first. With no provider set they fail with "No AI provider is configured"; carry on without them, since every core step above works without AI. Keep the copy private unless the user asks otherwise.
In these kits
More from @amruthpillai
Works with
Claude, Codex, Cursor & more