agentleFS
juanASPjuanASP/mercury/skills/resume-tailor/SKILL.md

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

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-codeSkill

    application-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

  • proficientlyjobsSkill

    job-search

    Search for jobs matching my resume and preferences

    Also in 3 projects that use this

  • AnthropicSkill

    interview-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

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
  1. Very specific:

    All artifacts live in .mercury/ at the workspace root:

    line 24
  2. Very specific:

    Base resume: Read from .mercury/base/resume.typ (or init from user-provided path)

    line 51
  3. Very specific:

    Experience bank: Read all entries in .mercury/experience/ (if present).

    line 53
  4. Distinctive:

    Write a full cover letter (~250-400 words):

    line 108
  5. Very specific:

    Write a run log to .mercury/logs/{ISO-timestamp}.md:

    line 119
  6. Distinctive:

    NEVER: add skills the candidate doesn't demonstrably have

    line 148
  7. Distinctive:

    If a requirement is a genuine miss, say so in the report and suggest addressing it transparently in the cover letter

    line 153

“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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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)
  • 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 the experience-bank skill. 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:

CategoryMeaning
✅ Strong matchDirect experience with this skill/domain, in resume or experience bank
🟡 TransferableAdjacent experience that can be framed toward this requirement
❌ GapGenuine 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:

  1. Reorder experience bullets — lead with role-relevant work
  2. 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.
  3. Rephrase descriptions — echo job description language for ATS matching
  4. Adjust summary/objective — target the specific role and company
  5. Surface relevant projects — pull from LinkedIn projects/OSS that match
  6. Keyword injection — ensure critical ATS terms appear naturally
  7. 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:

RoleCompanyKeyword ScoreStrengthsGapsFiles
SWEAirbnb87%Java, AWS, Dist SysGraphQLtailored/airbnb-123.typ

Truthfulness Guardrails

These are non-negotiable:

  1. NEVER add skills the candidate doesn't demonstrably have
  2. NEVER fabricate experience, projects, or inflate titles
  3. NEVER claim certifications not held
  4. Flag gaps honestly — suggest framing for adjacent experience, not invention
  5. Cover letters must only claim experience backed by resume/profile/experience-bank data
  6. 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-bank skill)
  • 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 table

Download now (ZIP)

Does 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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.