From resume-builder
Generate a tailored cover letter for a job description. Use when: 'write cover letter', 'cover letter', 'application letter', 'write a letter for this job'.
How this skill is triggered — by the user, by Claude, or both
Slash command
/resume-builder:cover-letter [path to job description or paste JD text][path to job description or paste JD text]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate a cover letter tailored to a specific job description using wilson-resume.yml as the source of truth. Every factual claim must trace back to wilson-resume.yml; narrative synthesis is allowed, fabrication is not.
Generate a cover letter tailored to a specific job description using wilson-resume.yml as the source of truth. Every factual claim must trace back to wilson-resume.yml; narrative synthesis is allowed, fabrication is not.
wilson-resume.yml from the project root.knowledge/sessions/{slug}/company.yaml for an existing CompanyProfile. If found, load it — this replaces the need to ask the user for company research. Use CompanyProfile.pain_points for problem-solver hooks, CompanyProfile.recent_news for specific-company-knowledge hooks, and CompanyProfile.mission_vision + CompanyProfile.culture_signals for the closing paragraph.knowledge/sessions/{slug}/{role-slug}/ for existing /match sessions (*_match.yaml, latest by date). If found, read the match analysis to leverage gap data, transferable skills, and tailoring recommendations.knowledge/sessions/{slug}/{role-slug}/ for existing /qualify sessions (*_qualify.yaml, latest by date). If found, use the strategic brief to strengthen positioning — lead with pain-solution match evidence, use leverage signals for confident tone, and reference ROI potential metrics in the qualification paragraph.If no existing match session found for this company/role, run /match analysis against the JD. This provides:
Based on match analysis and user inputs, create a plan:
Hook type: Select the strongest opening based on available context — company pain points, referrals, standout achievements, or domain expertise. Leverage CompanyProfile data if available. If a /qualify session exists with a high pain-solution match score, prefer the problem-solver hook.
Strongest qualification: Identify the 1-2 resume bullets that best match the JD's top requirements. If a /qualify session exists, use its ROI potential evidence to select bullets with the strongest metric-to-pain-point mapping.
Gap mitigation: For significant gaps from /match, plan how to address them — frame transferable skills, pivot to strengths. If /qualify scored leverage_position highly, lean into what makes you uniquely qualified rather than apologizing for gaps.
Closing strategy: Strong match -> confident ask. Stretch role -> emphasize eagerness and adjacent experience.
Present the plan to the user for approval before drafting.
Write the cover letter following this structure (250-400 words total):
For every factual claim in the draft, verify it traces to wilson-resume.yml:
## Claim Verification
- [VERIFIED] "reduced p99 latency by 76%" <- wilson-resume.yml > Company > Role > bullet
- [VERIFIED] "built event pipeline handling 2M events/day" <- wilson-resume.yml > Company > Role > bullet
- [NARRATIVE] "This combination of API optimization and event-driven architecture..." <- synthesis of verified claims
- [COMPANY] "Your team's recent work on [X]..." <- user-provided research, not a resume claim
Flag any claim that cannot be traced. Do not proceed until all factual claims are verified or removed.
Read agents/cover-letter-reviewer.agent.md and evaluate the draft from a hiring manager's perspective.
Output a brief check:
If a CompanyProfile exists for the target company, also read agents/sales-strategist.agent.md and evaluate whether the cover letter sells solutions or features:
If any item is flagged, note the issue and suggest a revision. Do not block output.
Save the cover letter to knowledge/sessions/{company-slug}/{role-slug}/tailored/cover_letter.md — all application materials stay co-located. Create the tailored/ directory if it doesn't exist.
Save to knowledge/sessions/{company-slug}/{role-slug}/{date}_cover-letter.yaml:
date: YYYY-MM-DD
type: cover-letter
company: Company Name
slug: company-slug
role: Role Title
role_slug: role-slug
sources_used:
company_profile: true | false
match_session: session-filename or null
qualify_session: session-filename or null
match_score: { required: XX, preferred: XX, overall: XX }
hook_type: specific-company-knowledge | mutual-connection | problem-solver | impressive-achievement | industry-insight
gaps_addressed: [list of gaps mitigated]
claims_verified: X
claims_narrative: X
claims_company: X
reviewer_flags: [list of any flagged items]
word_count: XXX
output_file: knowledge/sessions/{company-slug}/{role-slug}/tailored/cover_letter.md
Append to knowledge/sessions/{company-slug}/{role-slug}/summary.md (create with # {Company Name} — {Role Title} header if it doesn't exist):
---
## {date} cover-letter
**Hook**: {hook_type} — "{paraphrase of opening hook}"
**Structure**: {what each paragraph establishes — e.g., "Opens with JD quote re: X, maps Y experience to their Z problem, addresses W gap via transferable skill, closes with ask about team"}
**Gaps mitigated**: {which match gaps the cover letter addresses and how}
**Claims**: {verified} verified, {narrative} narrative | **Word count**: {XXX}
**Reviewer check**: {any flags, or "all clear"}
**Output**: knowledge/sessions/{company-slug}/{role-slug}/tailored/cover_letter.md
When running multiple cover letters in sequence, log EACH run individually as you complete it. Do not batch logging or defer it until after presentation.
Present the full cover letter to the user with:
/cover-letter path/to/jd.txt/cover-letter (then paste JD when prompted)Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub wilsonkichoi/resume-builder --plugin resume-builder