.agents/skills/compose-outreach/SKILL.md
Generate personalized outreach messages using Common Room signals. Triggers on 'draft outreach to [person]', 'write an email to [name]', 'compose a message for [contact]', or any outreach drafting request.
npx skillsauth add mmahalwy/cooper compose-outreachInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate three personalized outreach formats — email, call script, and LinkedIn message — grounded in Common Room signals for a specific company or contact.
Use Common Room MCP tools to find and retrieve data for the target (company and/or specific contact). Pull:
If the user specified a person, run contact-level research. If only a company was given, identify the best contact to target based on title, engagement, and role.
If CR returned strong signals (recent activity, engagement, product usage), those should drive personalization — skip web search. If CR signals are thin or the prospect has little CR activity, run a web search for external hooks:
What to search:
"[company name]" funding OR acquisition OR launch OR announcement — last 30 days"[contact full name]" "[company name]" — look for recent articles, interviews, LinkedIn posts, or conference talksPrioritize external hooks that are:
If the user explicitly asks for web search or external hooks, run it regardless of CR signal richness.
If Spark is available, run enrichment on the target contact to get persona classification, background, and influence signals. Use this to calibrate tone and message angle.
From the signal data, identify the 1–3 strongest personalization hooks. Rank by:
Good hooks: posted a question in the community about X, just hired 5 engineers, recently started using [feature], company just raised Series B, trial nearing expiration, champion just changed jobs.
Bad hooks: "I noticed you're a customer" or generic industry trends.
Use the strongest hooks to write all three formats. Each format has different constraints and conventions — follow the format-specific guidelines in references/outreach-formats-guide.md.
Always produce all three, clearly labeled.
When the user's company context is available (see references/my-company-context.md), ground the value bridge and pitch in the user's specific product and positioning.
After the three drafts, include a brief note (2–4 sentences) explaining:
## Outreach for [Name / Company]
### 📧 Email
**Subject:** [Subject line]
[Email body — 3–5 sentences]
---
### 📞 Call Script
**Opening:**
[Opening line — conversational, 1–2 sentences]
**Value Bridge:**
[Why you're calling and why now — 2–3 sentences tied to a signal]
**Ask:**
[Single, low-friction ask — e.g., 15-minute call, specific question]
---
### 💼 LinkedIn Message
[Under 300 characters. Warm, personal, no pitch.]
---
### Signal Notes
[2–4 sentences: which signals were used, why, and any alternative angles]
If Common Room returns minimal data on the target (e.g., just name, title, tags — no activity, no scores, no Spark):
## Outreach for [Name / Company] — Limited Data
**What I found:**
[Only the real data from CR and web search]
**I don't have enough signal to draft personalized outreach yet.** To write something strong, I'd need:
- Recent activity or engagement signals
- Context you have from prior conversations
- A specific reason for reaching out now
Can you share any of the above?
references/outreach-formats-guide.md — detailed format rules, examples, and tone guidelines for each channeldevelopment
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
content-media
Interactive PDF viewer. Use when the user wants to open, show, or view a PDF and collaborate on it visually — annotate, highlight, stamp, fill form fields, place signature/initials, or review markup together. Not for summarization or text extraction (use native Read instead).
documentation
Write or review UX copy — microcopy, error messages, empty states, CTAs. Trigger with "write copy for", "what should this button say?", "review this error message", or when naming a CTA, wording a confirmation dialog, filling an empty state, or writing onboarding text.
development
Rapidly triage an incoming NDA and classify it as GREEN (standard approval), YELLOW (counsel review), or RED (full legal review). Use when a new NDA arrives from sales or business development, when screening for embedded non-solicits, non-competes, or missing carveouts, or when deciding whether an NDA can be signed under standard delegation.