Skip to content
Productivity
Skill

/outreach

Draft personalized outreach messages for LinkedIn connections, hiring managers, or recruiters. Creates targeted messages using a hook + proof + proposal structure. Under 300 characters for connection requests. Use when someone says 'draft outreach', 'message the recruiter',

From plugin
andrew-shwetzer-career-ops
50710 skills1 agent2 commands

Claude Code

$ npx -y skills add andrew-shwetzer/career-ops-plugin-do-not-fork-currently-updating-v2- --skill outreach --agent claude-code

SKILL.md

outreach.SKILL.md
name: outreach
description: "Draft personalized outreach messages for LinkedIn connections, hiring managers, or recruiters. Creates targeted messages using a hook + proof + proposal structure. Under 300 characters for connection requests. Use when someone says 'draft outreach', 'message the recruiter', 'reach out to', or 'write a LinkedIn message'."
argument-hint: "<contact name and company, or 'outreach for Company'>"
user-invocable: true
allowed-tools:
  - Read
  - Write
  - WebSearch
  - Glob

Draft Outreach

Create personalized outreach messages for job search networking.

Step 0: Load Context

1. Read `data/profile.yml` 2. Check `data/research/{company}.md` for company intelligence 3. Check `data/evaluations/` for any evaluation at this company

If no company research exists: > "I don't have research on {company} yet. Better outreach comes from > better intel. Want me to research them first, or should I draft > something with what I know?"

Step 1: Identify the Contact

Parse user input for: contact name, title, company, platform.

If no specific contact named, suggest based on research file: > "Based on my research, here are contacts at {company}: > {list from research} > Who would you like to reach out to?"

Step 2: Determine Message Type

| Type | When | Length | |---|---|---| | LinkedIn connection request | No existing connection | Under 300 characters | | LinkedIn message | Already connected | 100-200 words | | Cold email | Have their email | 100-150 words | | Follow-up | Already reached out, no response 5+ days | 50-75 words |

Ask the user which type if not clear from context.

Step 3: Generate Using 3-Part Structure

Part 1: Hook (about THEM, not you)

Reference something specific about the company, their work, or a recent event.

Bad: "I'm really interested in your company" (about you) Bad: "I'd love to connect" (generic) Good: "Your team's work on {specific project/launch} caught my attention" Good: "I noticed {company} just {recent event from research}"

Part 2: Proof (one quantifiable thing about you)

One sentence. One number. Directly relevant to their world.

Bad: "I have 10 years of experience in marketing" Good: "I grew organic traffic 3x at {Company} in 8 months" Good: "I managed a $2M portfolio with 98% client retention"

Pull the most relevant proof point from the user's profile that connects to the target company's needs.

Part 3: Proposal (low-pressure ask)

Bad: "Can you refer me?" (presumptuous) Bad: "I'd love to pick your brain" (vague, one-sided) Good: "Would you be open to a 15-minute chat about what {team} looks for?" Good: "I'd appreciate any advice on standing out for the {role} opening"

Step 4: Output

## Outreach: {Contact Name} at {Company}

**Platform:** {LinkedIn connection / LinkedIn message / Email / Follow-up}
**Context:** {role or department}

---

{the message, properly formatted}

---

**Character count:** {n} / {limit for platform}
**Tone:** {Professional / Warm / Direct}

Step 5: Offer Variations

> "Want me to: > - **Adjust the tone?** (more formal / more casual / more direct) > - **Write for a different platform?** (email instead of LinkedIn) > - **Draft a follow-up** for if they don't respond in a week?"

Rules

  • NEVER draft messages that misrepresent the user's background
  • NEVER suggest the user claim a connection that doesn't exist
  • NEVER draft overly flattering or sycophantic messages
  • Keep LinkedIn connection requests under 300 characters (hard limit)
  • Every message must contain something specific (not a template)
  • If no company research and no web search available, be honest:

"This message would be stronger with specific company context. Consider researching them first."

Read more
@andrew-shwetzer
Ships withandrew-shwetzer-career-ops

A Claude Cowork plugin that turns your job search into a system. Evaluate job postings, generate ATS-optimized resumes, scan career portals, track applications, and more.

50710 skills1 agent
Get the whole plugin

Stars on GitHub

Momentum

stars in total
507
Star history of andrew-shwetzer/career-ops-plugin-do-not-fork-currently-updating-v2- on GitHub, a chart by star-history.com

More skills from other plugins.

i-have-adhd

i-have-adhd

Shape output for a reader with ADHD: lead with the next action, number multi-step work, restate state across turns, suppress…

@ayghri@ayghriInstall Skill
ab-test-analysis

ab-test-analysis

Analyze A/B test results with statistical significance, sample size validation, confidence intervals, and ship/extend/stop…

@phuryn@phurynInstall Skill
distilly

distilly

Set up the owner profile so a personal agent knows who it works for (first-run setup, \"get to know me\"), or distill colleague,…

Questions about outreach.

Which coding agents can use outreach?
outreach installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.