write-cover-letter
Produce a job-specific, profile-grounded cover letter in markdown — ≤ 350 words, ≤ 1 page, three paragraphs (hook → two quantified proofs → fit close). Reuses keywords from a prior tailor-resume sidecar when present. Writes a JSON sidecar reserved for a future /render-resume --kind cover-letter (rendercv).
- License 许可
- MIT
- 最近更新
- 2026-06-09
- Stars
- ★ 7
- Forks
- 1
01 前言 Front Matter
- name
- write-cover-letter
- description
- Produce a job-specific, profile-grounded cover letter in markdown — ≤ 350 words, ≤ 1 page, three paragraphs (hook → two quantified proofs → fit close). Reuses keywords from a prior tailor-resume sidecar when present. Writes a JSON sidecar reserved for a future /render-resume --kind cover-letter (rendercv).
- when_to_use
- Use when the user wants a cover letter for a specific job — typically after score-fit recommends applying and tailor-resume has produced a tailored resume.
- allowed-tools
- Read, Write, WebFetch
- user-invocable
- true
03 SKILL.md 正文
write-cover-letter
Earn the reader the next 30 seconds. Open with one concrete reason this candidate fits this role at this company. Hard rules: ../_shared/RULES.md. Use Communication / Management / Creative verbs from ../tailor-resume/reference/action-verbs.md.
Inputs
- Profile:
profile/master-profile.md. Readcontext:for direction only — never quote. - Job: pasted JD text, a URL (use
WebFetch), or an entry fromjobs/found-<date>.json. Known-info gate (RULES §6): if no job is given inline, readjobs/current.jsonand use itsjd_text/company/role— do not re-ask for the JD when it's already captured upstream. - Tone:
enthusiastic | confident | concise | warm(default:confident). - Optional sidecar:
resumes/<slug>.tailor.jsonfrom a priortailor-resumerun — reuse its keyword list andbasics_overrides.summaryso the letter and the resume sing the same notes. - Optional score-fit sidecar:
scores/<job-id>.score.json— reusemissing_keywordsto know what the resume already incorporated.
If no job is supplied and jobs/current.json is absent, ask for it; the tone has a safe default.
Method
-
Region note. Read the target region pack:
- US: cover letters role-dependent — stronger for senior, mission-driven, career-change roles. Surface this in the rationale so the user decides whether to send.
- IN: cover letters less emphasized; usually a 2–3 sentence email body suffices. Offer a "short form" alternative if the user wants.
-
Read the JD for 3–5 must-have themes, the JD's tone of voice (formal / casual / mission-led), and any explicit asks ("tell us why you want to work here").
-
Pick two flagship achievements from the profile that map to those themes — each quantified. No invention; if the profile lacks a quantified match, pick the closest qualitative win and flag the gap rather than fabricating a number.
-
Draft three paragraphs (≤ 350 words total):
- Opening hook (~60 words) — concrete reason you/this role fit, anchored to a specific JD theme. Not "I am writing to apply for…". Not "I admire your mission…".
- Two proof points (~180 words) — each a 2–3 sentence story tying one flagship achievement to one JD must-have. Verb-led, metric-led, no resume restating.
- Fit close (~110 words) — what specifically excites you about this role (not the company in general). One CTA-style close.
-
Apply tone modifier + region spelling (US American · IN British) + region date format (if you reference dates).
-
No salary. No street address. No "References available on request." No
context:echo.
Output
resumes/<company-slug>-<role-slug>.cover-letter.md— body only (signed with the candidate's name; no address blocks).resumes/<company-slug>-<role-slug>.cover-letter.json— sidecar:
Reserved for{ "company": "...", "role": "...", "tone": "confident", "body_md": "...", "themes_used": ["..."], "source_profile_path": "profile/master-profile.md", "source_sidecar_path": "resumes/<slug>.tailor.json" /* or null */ }/render-resume --kind cover-letteronce rendercv cover-letter support lands.- Console: 2-line rationale (themes hit · what you cut) + region prevalence note.
- Final line: "Future: pass to /render-resume --kind cover-letter when rendercv cover-letter support lands."
Anti-patterns
- "I am writing to apply for the X position at Y." Cut the opener cliché.
- First-paragraph flattery about the company.
- Restating the resume in narrative form.
- Salary / current-CTC / expected-CTC in the body (US: never; IN: only if the JD explicitly asks).
- Quoting
context.career_goal/context.additional_info. - Filler ("I believe", "I feel", "I think", "I am passionate about").
- Emoji.
Rubric (one-page self-check)
- [ ] ≤ 350 words; exactly 3 paragraphs.
- [ ] ≥ 2 quantified proof points.
- [ ] Each proof point ties to a specific JD theme.
- [ ] 1 explicit "why this role" sentence (specific, not generic).
- [ ] No salary, no address, no clichés.
- [ ] Spelling matches region.
- [ ] Verb openers vary across the 6–10 sentences that have them.
Next steps
Cover letter ready. Next: /answer-application-questions for the form, then submit.
04 同仓库更多 Skills
write-outreach
Write a short, profile-grounded cold outreach message to a recruiter, hiring manager, or potential referrer — LinkedIn DM or email — with one clear CTA and no flattery.
triage-inbox
Classify a recruiting email (or a batch) into one of the 10 canonical email classes, extract structured fields (company / role / dates / links / asks / deadline / sentiment), and suggest the next action. Writes inbox/triage-<YYYY-MM-DD>.json — consumed by infer-status and draft-reply.
tailor-resume
Produce a job-specific, ATS-optimized resume from the user's master profile and a target job — reordering, reframing, and surfacing the most relevant real experience and keywords. Enforces a content rubric (bullet shape, length, parallel grammar, metric coverage), then renders a polished PDF by default (via render-resume) and visually QAs it. Never fabricates.
score-fit
Score how well the user's master profile fits a specific job — an ATS-style match percentage with matched/missing keywords, strengths, gaps, and a clear apply-or-skip recommendation. Optionally writes a structured sidecar that tailor-resume consumes.
review-render
Visually QA a rendered resume PDF and auto-fix layout/content defects in a bounded loop: render → screenshot → deterministic gate → vision rubric → apply one fix → re-render, until it passes or hits a pass cap. Catches widows, under-fill, overflow, orphaned headers, and imbalance that text-only logic can't see.
research-company
Build a structured company × role brief — compensation, day-to-day, career growth, recent news, community sentiment (Reddit / Blind / Glassdoor), red flags, and a "fit for this user" view. Heavy reasoning — runs forked. Writes companies/<slug>.{md,json} sidecars consumed by prep-interview and coach-negotiation.