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.
- License 许可
- MIT
- 最近更新
- 2026-06-09
- Stars
- ★ 7
- Forks
- 1
01 前言 Front Matter
- name
- write-outreach
- description
- 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.
- when_to_use
- Use when the user wants to reach out cold for a referral, info chat, recruiter intro, or post-event/post-interview follow-up — targeted at a specific person at a specific company.
- allowed-tools
- Read, Write
- user-invocable
- true
03 SKILL.md 正文
write-outreach
Compose a short outreach message that earns a reply. Hard rules: see ../_shared/RULES.md — non-negotiable. Use the Communication verbs in ../tailor-resume/reference/action-verbs.md.
Inputs
- Profile: read
profile/master-profile.md(esp.Notes / voice,target.tracks, and thecontext:block for direction only — never echo). - Recipient:
{ name, role, company }. Optional: known mutual, a recent post/work they did, prior touch. - Platform:
linkedin(≤ 120 words, no subject) oremail(≤ 180 words, with subject). - Goal:
intro(be known) ·referral(ask for an internal referral) ·info(informational chat) ·follow-up(post-application / post-interview / post-event).
If recipient / platform / goal is missing, ask once, batched.
Method
-
Region note. Read the target region pack — outreach norms differ slightly (US: direct; IN: referrals matter more, lead with mutuals/track when possible).
-
Pick the hook. One verifiable, profile-grounded fact connecting candidate → company / role / recipient. Examples that work: same OSS project, alum overlap, identifiable recent work overlap, shared track. Examples that don't: generic "I admire your mission", company-name flattery in the opener.
-
One CTA only. Schedule 15 min · share a referral · answer a specific question · introduce a third party. No multi-CTA messages — they get ignored.
-
Draft.
- LinkedIn — ≤ 120 words. No "Dear", no "Hope this finds you well." Open with the hook in ≤ 1 sentence. One CTA. Sign with first name.
- Email — ≤ 180 words. Subject = 4–8 specific words ("Quick question on Mercury API roadmap", not "Quick question"). Body = 2 short paragraphs (hook+credential → CTA). Sign with full name + 1-line current credential.
-
Self-check against the anti-patterns and rubric before output.
Output
- Console: the message (and subject if email).
- Write
outreach/<company-slug>-<role-slug>-<platform>.md(createoutreach/if needed). Include the subject as the H1 for email. - 2-line rationale: what hook you chose · what CTA you set. Helps the user judge before sending.
- Region tip when relevant (e.g., IN: "open with the mutual / IIT-batch line — converts far harder than the cold version").
Anti-patterns (do not ship)
- Generic flattery ("I admire X's mission", "your work is incredible"). Cut.
- Naming the recipient's company in the first 5 words of the body. Sounds canned.
- Multi-CTA ("would you be open to a chat, OR willing to refer me, OR share advice?"). Pick one.
- First-person filler at the start: "I am writing to you because…" / "I wanted to reach out…". Remove.
- Echoing
context.career_goal/context.additional_info. Direction only. - Emoji.
Rubric (one-page self-check)
- [ ] Hook is profile-grounded and verifiable (not flattery).
- [ ] Exactly one CTA.
- [ ] LinkedIn ≤ 120 words · Email ≤ 180 words.
- [ ] No company name in the first 5 words.
- [ ] No
context:echo. - [ ] Verb openers vary across the body (Communication / Leadership categories).
- [ ] Tone matches profile
Notes / voice.
Next steps
Message ready — you send it. After you reach out, /infer-status to track the touch.
04 同仓库更多 Skills
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).
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.