agentleFS
JakeschincariolJakeschincariol/hunter-skill/skills/hunter-cover/SKILL.md

hunter-cover

Skill12 starsChanged 29 days agoMITView on GitHub

Cover Letter Writer. Writes a specific cover letter for every application: addressed to the hiring manager or the team, opening with something real about the company or the team from the research brief, one paragraph of proof from the tailored resume (a result with a number), why this team, and a clear ask, in 150 to 400 words. Then checks it with cover.py: company, role and team named, at least one concrete proof point, no banned cliches, no leftover placeholders, no other company's name pasted in, every number traceable to the resume, reading level. Use when the user says "write a cover letter", "cover letter for Google", "do I need a cover letter", "make this letter better", "check my cover letter", or after /hunter-resume.

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 8 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read the role and contact from hunter/pipeline.json, the brief from hunter/companies/<company>.md and the tailored resume.

    line 59
  2. Distinctive:

    Ask the user one question: why this team, in their own words.

    line 62
  3. Very specific:

    Run cover.py check with --company, --role, --team, --resume and --pipeline.

    line 65
  4. Very specific:

    When they approve, it goes into the application with /hunter-apply, which fills the form and stops before Submit.

    line 68
  5. Distinctive:

    Never invents an achievement, a number, a reason or a connection to the company.

    line 111
  6. Distinctive:

    Never reuses a letter with the company name swapped: the "other names" check is there for that.

    line 112
  7. Distinctive:

    Never flatters with claims about the company that are not in the research brief.

    line 114
  8. Distinctive:

    Never sends or submits the letter.

    line 115
  9. Distinctive:

    No bulk or automated messaging, no scraping behind logins, no tricks around a site's limits.

    line 124
  10. Distinctive:

    Stop rules: stop at the first "no" or any sign of disinterest, max 2 follow-ups, no message after 21 days of silence, and a request to stop …

    line 130
  11. Distinctive:

    Never invent experience, titles, degrees, dates or numbers: rewrite and reorder what is true, and ask when something is missing.

    line 132

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “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

hunter-cover

The Cover Letter Writer writes one letter per application, never a template with the company name swapped. A recruiter should be able to tell in two lines that it was written for this team, by someone who did the work on the resume.

${CLAUDE_SKILL_DIR} below is this skill's folder (where this SKILL.md lives).

python3 "${CLAUDE_SKILL_DIR}/cover.py" check hunter/covers/<role-id>.md \
    --company Google --role "Software Engineer" --team "Google Cloud, Infrastructure" \
    --resume hunter/resumes/<role-id>.md --pipeline hunter/pipeline.json
python3 "${CLAUDE_SKILL_DIR}/cover.py" cliches

What it reads and writes

filewhat
hunter/pipeline.jsonthe role (company, title), the contact (the hiring manager's name), other companies (to catch copy-paste)
hunter/companies/<company>.mdthe research brief from /hunter-research: what the team does, recent news
hunter/resumes/<role-id>.mdthe tailored resume: the only source of proof points
hunter/covers/<role-id>.mdthe letter

The shape (150 to 400 words)

  1. Greeting to a person. "Hi Maya," when the hiring manager is known (from the pipeline contact), otherwise "Dear <team name> team,". Never "To whom it may concern".
  2. Why you are writing, specifically. One or two sentences tying something real (their public post, a product the team ships, a fact from the research brief) to something you did. Name the role and the team.
  3. Proof. Two or three results from the tailored resume, with their numbers, chosen for the posting's top requirements. Copy the numbers exactly.
  4. Why this team. What about their work fits what you want to do next, from the research brief, in your words. Facts about the company must be in the brief with their source.
  5. The ask. A next step: a short call, a conversation about the team's plans.
  6. Sign-off with your name.

Steps

  1. Read the role and contact from hunter/pipeline.json, the brief from hunter/companies/<company>.md and the tailored resume. If there is no tailored resume yet, run /hunter-resume first.
  2. Ask the user one question: why this team, in their own words. The best opening lines come from their answer, not from Claude.
  3. Draft the letter to hunter/covers/<role-id>.md.
  4. Run cover.py check with --company, --role, --team, --resume and --pipeline. Fix every FAIL. Read every WARN and fix it unless there is a reason.
  5. Show the user the letter and the check. They edit; run the check again.
  6. When they approve, it goes into the application with /hunter-apply, which fills the form and stops before Submit. Note it in the pipeline with /hunter-tracker.

The checks (exit 0 when nothing FAILs)

checkrule
length150 to 400 words
greetingto a person or a team; "To whom it may concern" fails
company, role, teameach named (the team: any one part of --team)
proofa sentence with a number and an action or result word
clichesnone from the banned list (cover.py cliches): "team player", "passionate about", "perfect fit", "I am writing to express my interest" and more
placeholdersnothing like [Company], {role}, XXX, TODO
other namesno other company from your pipeline (a letter copied from another application)
numbersevery number is in the resume: nothing invented
readingFlesch-Kincaid grade 12 or lower (WARN)
askthe last paragraph asks for a next step (WARN)
openersunder half the sentences start with "I" (WARN)

Example: Jordan Reyes to Maya C. at Google

example-cover.md in this folder is Jordan's letter for the Software Engineer role on the Google Cloud Infrastructure team. Maya C. is the fictional hiring manager from the reel; the opening ties her public post about design reviews to Jordan's payments rebuild.

python3 "${CLAUDE_SKILL_DIR}/cover.py" check "${CLAUDE_SKILL_DIR}/example-cover.md" \
    --company Google --role "Software Engineer" --team "Google Cloud, Infrastructure" \
    --resume "${CLAUDE_SKILL_DIR}/../hunter-resume/examples/jordan-after.md"
Cover letter check (example-cover.md): READY
  PASS  length        217 words
  PASS  greeting      Hi Maya,
  PASS  proof         4 proof point(s), e.g. I rebuilt the payments API, cutting p99 latency 38% across 4M requests a day.
  PASS  numbers       every number is in the resume
  PASS  reading       grade 6.7 (Flesch-Kincaid), 16.5 words a sentence

What it never does

  • Never invents an achievement, a number, a reason or a connection to the company.
  • Never reuses a letter with the company name swapped: the "other names" check is there for that.
  • Never flatters with claims about the company that are not in the research brief.
  • Never sends or submits the letter. The user does, inside the application.

Consent and truth

  • Nothing is sent or submitted without the user's explicit yes for that exact message or application. Claude drafts, the user approves, then it goes out from the user's own accounts: email as a Gmail draft first; LinkedIn messages through Claude in Chrome with the user present, one at a time, at human pace, the user clicking Send; application forms filled and left for the user to submit.
  • No bulk or automated messaging, no scraping behind logins, no tricks around a site's limits. LinkedIn's terms forbid bots and automated messaging.
  • Contact research uses public professional information only (the person's public profile, talks, posts, papers, the company site), never personal life, family, home address or private accounts. Email addresses are guesses from public patterns, marked with a confidence, never called verified unless found published.
  • Stop rules: stop at the first "no" or any sign of disinterest, max 2 follow-ups, no message after 21 days of silence, and a request to stop is honoured forever.
  • Never invent experience, titles, degrees, dates or numbers: rewrite and reorder what is true, and ask when something is missing.
  • Salary benchmarks and interview material cite their sources. Nothing here guarantees an offer or an outcome.

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.