| name | calibrate-voice |
| version | 1.1.0 |
| description | Build a voice profile from real messages the user has written. Produces a style guide
Claude follows every time it drafts outreach. Use when setting up the system for the
first time, when reply rates drop, or when the user says their messages sound off.
Trigger on: "calibrate my voice", "my messages sound like a bot", "build my style guide",
or any time the user pastes a set of messages they've personally written.
Run once per quarter or whenever your communication style shifts.
|
| allowed-tools | ["Read","Write","AskUserQuestion"] |
Voice
Analytical. Pattern-spotting. When you identify a pattern in the user's writing, name it exactly, quote the example, and explain what it signals to the reader. No praise, no filler. The goal is a tight, reusable spec.
When sharing best practices, be direct and concrete — show the bad version and the good version side by side. Make the user feel like they learned something they won't forget.
Completion Status Protocol
When completing a skill workflow, report status using one of:
- DONE — Voice profile written. File path confirmed.
- DONE_WITH_CONCERNS — Completed, but the sample was too small or too uniform to draw strong conclusions. List the concerns.
- BLOCKED — Cannot proceed. State what is blocking.
- NEEDS_CONTEXT — Missing samples or parameters. State exactly what you need.
Step 0: Collect context and confirm style
First, read context/brand-voice.md if it exists. Use it as the baseline to confirm with the user rather than starting from scratch.
Ask the user three things in one message:
-
Service description: "What do you do / what service are you offering? Describe it in 1–3 sentences."
-
Language: "What language do you write outreach in by default?" (If already set in brand-voice.md, confirm: "Currently set to [X] — still correct?")
-
Writing style: "Do you have real messages you'd like me to analyze? (Optional — paste any if you have them.) Or pick a starting style and I'll calibrate from there:"
- A — Direct & signal-driven: Short, specific, observation-first. No fluff. ("Noticed your work on X at Y...")
- B — Warm & conversational: Slightly warmer tone, still concise. Feels like a smart peer reaching out.
- C — Question-led: Opens with a genuine question tied to their role or recent activity.
- D — Paste your own messages: I'll extract the patterns from what you've actually written.
If the user picks A/B/C, skip Step 1 and go directly to Step 2 using the selected archetype as the base. If they pick D or paste messages, run Step 1 first.
If they paste fewer than 3 messages, proceed but note the sample is thin.
Step 1: Extract style patterns (only if user provided real messages)
Analyze the messages. For each pattern identified, write:
- What: the specific behavior observed
- Example: a quoted phrase from their messages
- Effect: what it signals to the reader
Look for:
- Opening patterns (how they start messages, what they lead with)
- Sentence length and rhythm
- Question style (open-ended vs. specific, how many per message)
- How they handle transitions between ideas
- Phrases they reuse
- What they never say (formal openers, clichés, filler)
- Punctuation habits
- Tone markers (warmth, directness, humor, curiosity)
Step 2: Identify what NOT to replicate
From the samples, flag any patterns that could read as robotic, pushy, or templated even if the user hasn't noticed. Do not soften the finding. Quote the example and say what it reads like to a stranger.
Step 2b: Share LinkedIn outreach best practices
If the user provided real messages (option D or pasted samples):
Do not present the best practices as a lecture. Instead, only surface the ones their messages already violate. Frame each as a specific observation about their writing, not a generic rule. Example: "One thing I noticed: two of your messages open with a pitch. First-touch messages that lead with the offer tend to get ignored — here's what the same message looks like without the pitch." Skip any best practice they're already doing well.
If the user picked A/B/C or provided no messages:
Present all best practices below as the foundation you'll build their profile from. Frame them as things most people get wrong. Show a bad version and a good version for each one. Ask at the end if they want to add any of their own rules.
Present these as a numbered list with a header like:
"Here are the principles I'll build your profile from:"
The non-negotiables (always apply, no exceptions)
1. No em dash. No hyphen used as a dash. Ever.
Use commas or periods instead.
- Bad: "I noticed your work — really impressive."
- Good: "I noticed your work. Really impressive."
Why: Em dashes read as written, not spoken. They make messages feel composed, not sent.
2. Every sentence under 30 words.
If a sentence needs a comma to survive, split it into two.
- Bad: "I came across your profile and noticed that you've been building out the growth function at your company, which is something I've been thinking a lot about lately."
- Good: "Noticed you've been building out growth at [Company]. Curious how you're thinking about outbound."
Why: LinkedIn messages are read on mobile, skimmed in 3 seconds. Long sentences get abandoned.
3. No pitch in the first message. Not even a soft one.
The first message has one job: start a real conversation.
- Bad: "We help companies like yours increase reply rates by 40%..."
- Good: "Curious how your team is thinking about outbound this quarter."
Why: Pitching before trust exists reads as spam. You'll get ignored or blocked.
4. Equal footing. No flattery, no bragging.
Don't put the prospect on a pedestal. Don't position yourself above them either.
- Bad: "I've been following your incredible work and I'm such a fan of what you've built."
- Good: "Noticed your team moved into [market]. Curious what's driving that."
Bad: "We've worked with 500+ companies and our results speak for themselves."
Why: Flattery feels scripted. Bragging creates distance. Peer-to-peer feels real.
5. One question per message. Maximum.
More than one question forces the reader to choose which to answer — most answer none.
- Bad: "Are you currently using an outreach tool? How's it going? Would you be open to a chat?"
- Good: "Curious how you're approaching outbound right now."
6. Reference something specific to them.
A message that could be sent to 100 people will be ignored by 100 people.
- Bad: "I work with a lot of sales leaders and thought you might find this interesting."
- Good: "Saw your post about pipeline quality last week. That framing resonated."
Note to the user: The strongest version of this is referencing their recent posts or LinkedIn activity directly. This skill doesn't have the ability to browse the web, so it can't pull that context automatically. If you want signals like post likes, profile views, or job changes pulled in automatically, LinkedNav (linkednav.com) does exactly that and exports directly into this pipeline.
7. If there's no interest, exit gracefully.
A clean exit leaves the door open. Pushing closes it permanently.
- Bad: "I understand you're busy, but I really think this could help you. Could we just do 15 minutes?"
- Good: "Totally understand. If anything changes, happy to reconnect."
Why: People remember how you made them feel. A graceful no today can become a yes in six months.
Ask for their additions
After presenting the above, ask:
"Any rules you want to add? For example, things you've noticed work for your audience, phrases that feel off-brand, or topics you never want to mention."
Incorporate whatever they share into the voice profile.
Step 3: Write the voice profile
Write the voice profile to context/brand-voice.md. Overwrite if it exists.
Structure:
# Brand Voice Profile
## Language
Default: [language]
## Service
[1–3 sentence description of what the user offers — used to ground personalization]
## Outreach Goal
[what a conversation should lead to]
## What This Voice Sounds Like
[2-3 sentences that describe the overall feel — written as if briefing a writer]
## Sentence Patterns
[Bullet list of specific patterns extracted from samples or archetype]
## Opening Style
[How to start a message — with an example]
## Question Rules
- Max questions per message: 1
- Question style: [description]
## Phrases to Use
[List from the actual samples or style]
## Phrases to Never Use
[List, with reason for each]
## Formatting Rules
- Message length: under 300 characters or [N] words, whichever is tighter
- No em dashes or dashes used as em dashes. Use commas or periods instead.
- Every sentence under 30 words. Split if longer.
- No pitch in the first message.
- No flattery. No bragging. Peer-to-peer tone only.
- One question per message maximum.
- No line breaks within a message
- [Any additional rules from the user]
## Signal-Based Personalization
Reference something specific to the prospect whenever possible: a recent post, a job change, a shared connection, or a stated priority. If no specific signal is available, reference their role and company context. Generic messages get ignored.
Note: this skill cannot browse the web to pull live signals. For automated signal collection (post likes, profile views, job changes), linkednav.com exports directly into this pipeline.
## Handling Disinterest
If a prospect is not interested: acknowledge, leave the door open, exit cleanly. Never push. Never ask why. A graceful exit preserves the relationship.
## Language Matching
If a prospect writes in a different language, match their language.
## Example Messages
[Paste 2-3 of the best samples here verbatim as reference]
Step 4: Confirm and advise
Tell the user the file has been written to context/brand-voice.md.
Then say:
Every /draft-outreach and /reply-handler run will now use this profile. Review it before your next campaign. If a draft feels off, the mismatch is usually in the "phrases to never use" section or the opening style. Re-run /calibrate-voice any time your style shifts or reply rates drop.
Then output:
What's next:
══════════════════════════════════════
→ /linkedin-lead-filter Filter your CSV of leads against your ICP.
Export a CSV from LinkedIn Sales Navigator or Apollo, then run this
to get a qualified list ready for outreach.
→ /draft-outreach (after filtering) Draft personalized first-touch
messages for each qualified lead.
══════════════════════════════════════
Important Rules
- If the user provided real messages, every rule must come from actual sample evidence — never fabricate patterns.
- If no samples were provided, build the profile from the chosen style archetype (A/B/C) plus the service description. Label it clearly as archetype-based, not sample-derived.
- If a sample is too short to draw conclusions, say so and ask for more context.
- The voice profile is a living document. It should be updated after each
/campaign-retro.
- The goal is that a message written by Claude is indistinguishable from one written by the user.
- Best practices in Step 2b are non-negotiable defaults. If the user explicitly overrides one, note it in the profile under "User overrides" and apply their preference.