resume-tailor
Skill0 starsChanged 5 months agoUnlicenseView on GitHub
Tailor a candidate's resume to specific scouted roles using their base resume and LinkedIn profile data. Produces role-specific Typst resumes, cover letters, and gap/match reports. Supports batch tailoring to multiple roles in one pass. Use when user wants to customize their resume for a specific job application. Part of the Mercury job search toolkit.
29 other projects use a version of this.
Adopted by
Most recently taken up by
- gkmr/career-agent-kittheir own version, first seen Nov 8, 2026
- sunil-kumarr/JobIttheir own version, first seen Nov 8, 2026
- Mahashwetha/Job-search-email-system-claudetheir own version, first seen Nov 5, 2026
- KinomotoMio/resumakertheir own version, first seen Nov 1, 2026
- keeea/resume-match-tailortheir own version, first seen Nov 1, 2026
- pepperworks/Job-Search-Skillstheir own version, first seen Nov 1, 2026
Used with
Projects with it also use application-tracker, job-search and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
xiding-codeSkillapplication-tracker
Automatically log and track all job applications submitted. Use this skill after every application submission to record the details in a tracking spreadsheet and save relevant documents. Also trigger when the user asks "application status", "what have I applied to", "tracking", or wants to review their application history. Maintains a single source of truth for all job search activity.
Also in 3 projects that use this
proficientlyjobsSkilljob-search
Search for jobs matching my resume and preferences
Also in 3 projects that use this
AnthropicSkillinterview-prep
Create structured interview plans with competency-based questions and scorecards. Trigger with "interview plan for", "interview questions for", "how should we interview", "scorecard for", or when the user is preparing to interview candidates.
Also in 3 projects that use this
Other versions29 projects use a version of this.
Word for word · 1
- FlavioZanoni/mercury★ 8100% same
Edited · 0
None found.
Wrote their own version · 28
- claude-office-skills/skills★ 433same name
- olegvg/resume-tailor-plugin★ 44same name
- Mahashwetha/Job-search-email-system-claude★ 12same name
- tstapler/dotfiles★ 8same name
- opencue/cuecards★ 6same name
- vignzpie/resume-agent-skills★ 6same name
- KinomotoMio/resumaker★ 5same name
- wexxwuther/job-hunter★ 4same name
- ZoolCoder/scoutjobs★ 4same name
- landedjobs/ai-job-hunt-os★ 3same name
18 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- AGENTS.mdAGENTS.md
- experience-bankSkill
- job-scoutSkill
- outreach-trackerSkill
- portal-fillerSkill
- profile-optimizerSkill
- recruiter-outreachSkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 3 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 25 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 24
All artifacts live in .mercury/ at the workspace root:
- Very specific: line 51
Base resume: Read from .mercury/base/resume.typ (or init from user-provided path)
- Very specific: line 53
Experience bank: Read all entries in .mercury/experience/ (if present).
- Distinctive: line 108
Write a full cover letter (~250-400 words):
- Very specific: line 119
Write a run log to .mercury/logs/{ISO-timestamp}.md:
- Distinctive: line 148
NEVER: add skills the candidate doesn't demonstrably have
- Distinctive: line 153
If a requirement is a genuine miss, say so in the report and suggest addressing it transparently in the cover letter
“Common” is measured: kept by at least 6 in 10 of the 25 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Resume Tailor
Take a candidate's existing resume + one or more scouted job listings and produce role-tailored versions with gap analysis, ATS keyword alignment, and full cover letters.
Prerequisites
- LinkedIn MCP —
get_person_profile,get_job_details - User's base resume (Typst preferred, also supports MD/txt/PDF)
Data Directory
All artifacts live in .mercury/ at the workspace root:
.mercury/
├── base/
│ └── resume.typ # Canonical base resume (copied on first run)
├── tailored/
│ ├── {company}-{jobId}.typ # Tailored resume per role
│ └── ...
├── cover-letters/
│ ├── {company}-{jobId}.md # Full cover letter per role
│ └── ...
├── reports/
│ ├── {company}-{jobId}.md # Gap/match report per role
│ └── ...
├── logs/
│ ├── {ISO-timestamp}.md # Run log with changes, scores, diffs
│ └── ...
└── config.toml # Preferences (base path, format, defaults)On first run, create .mercury/ and copy the user's base resume into base/.
Workflow
1. Gather Inputs
- Base resume: Read from
.mercury/base/resume.typ(or init from user-provided path)- Supported formats:
.typ,.md,.txt,.pdf(PDF → text extraction)
- Supported formats:
- Experience bank: Read all entries in
.mercury/experience/(if present). This is the deep, tagged pool of achievements that don't fit on the short base resume — built by theexperience-bankskill. Read-only here. - LinkedIn profile: Fetch via
get_person_profile(username, sections: "experience,education,skills,projects,certifications") - Target roles: Accept one or more job IDs → fetch each via
get_job_details(job_id)
Batch mode: accepts a list of job IDs and processes all in one pass.
2. Extract Job Requirements (per role)
For each job description, extract:
- Required skills (languages, frameworks, tools)
- Nice-to-have skills
- Years of experience asked
- Domain/industry keywords
- ATS-critical terms (exact technology names, methodologies, certifications)
- Level signals (IC vs lead, team size, scope descriptors)
Normalize into a structured requirements object.
3. Gap/Match Analysis (per role)
Cross-reference candidate's profile + resume + experience bank against requirements:
| Category | Meaning |
| ✅ Strong match | Direct experience with this skill/domain, in resume or experience bank |
| 🟡 Transferable | Adjacent experience that can be framed toward this requirement |
| ❌ Gap | Genuine miss — not present in resume, profile, or experience bank |
Output a markdown table per role → saved to .mercury/reports/{company}-{jobId}.md
Include:
- Overall keyword coverage score (% of ATS terms present)
- Top 3 strengths to emphasize
- Top gaps with suggested framing (if transferable) or honest acknowledgment
- Bank pulls: relevant experience-bank entries NOT on the base resume — flag these as "you have this, it's in your bank" rather than gaps
4. Tailor the Resume (per role)
Transform the base resume for the specific role:
- Reorder experience bullets — lead with role-relevant work
- Pull from the experience bank — inject the highest-matching
.mercury/experience/entries (by tag overlap with the job's requirements/stack) that strengthen this role, even if absent from the base resume. Keep the resume concise: swap weaker base bullets for stronger bank-backed ones rather than just appending. - Rephrase descriptions — echo job description language for ATS matching
- Adjust summary/objective — target the specific role and company
- Surface relevant projects — pull from LinkedIn projects/OSS that match
- Keyword injection — ensure critical ATS terms appear naturally
- Preserve format — maintain the user's Typst structure, tone, and style
Only use bank entries the candidate actually has. The bank is pre-vetted as truthful by
experience-bank; never invent or embellish beyond what's stored.
Output → .mercury/tailored/{company}-{jobId}.typ
5. Generate Cover Letter (per role)
Write a full cover letter (~250-400 words):
- Hook — tied to the company, team, or product (not generic)
- Body — maps candidate's top 3-4 experiences to role requirements
- Gaps — acknowledge honestly with growth framing (if any)
- Close — concrete interest statement + availability
Output → .mercury/cover-letters/{company}-{jobId}.md
6. Log & Report
Write a run log to .mercury/logs/{ISO-timestamp}.md:
- Jobs processed (company, ID, title)
- Keyword coverage scores per role
- Changes made vs base resume (diff summary)
- Gaps flagged
Also persist each tailored application to the Mercury database (powers the dashboard's Applications section):
mercury application add \
--job-id {db job id, if saved via job-scout} \
--resume-path ".mercury/tailored/{company}-{jobId}.typ" \
--cover-path ".mercury/cover-letters/{company}-{jobId}.md" \
--report-path ".mercury/reports/{company}-{jobId}.md" \
--keyword-score {0-100} --status draft
mercury activity log --skill resume-tailor --summary "Tailored resume for {N} roles"Print a summary table to the user:
| Role | Company | Keyword Score | Strengths | Gaps | Files |
| SWE | Airbnb | 87% | Java, AWS, Dist Sys | GraphQL | tailored/airbnb-123.typ |
Truthfulness Guardrails
These are non-negotiable:
- NEVER add skills the candidate doesn't demonstrably have
- NEVER fabricate experience, projects, or inflate titles
- NEVER claim certifications not held
- Flag gaps honestly — suggest framing for adjacent experience, not invention
- Cover letters must only claim experience backed by resume/profile/experience-bank data
- If a requirement is a genuine miss, say so in the report and suggest addressing it transparently in the cover letter
Integration Points
- experience-bank → the deep, tagged achievement pool read-only at step 1; lets tailoring go beyond the short base resume (run periodically via the
experience-bankskill) - job-scout → feeds job IDs directly into resume-tailor (batch mode)
- profile-optimizer → complementary (profile = inbound discovery, resume = outbound applications)
- recruiter-outreach → cover letter content can be adapted as connection note material
Example Usage
User: "Tailor my resume for these roles: 4393940374, 3969556398, 4380982336"
Agent:
1. Reads .mercury/base/resume.typ
2. Reads .mercury/experience/ bank entries
3. Fetches LinkedIn profile
4. Fetches all 3 job details in parallel
5. Produces 3 tailored resumes (pulling role-relevant bank entries), 3 cover letters, 3 gap reports
6. Logs the run
7. Presents summary tableDoes it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

