| name | social-article-writer |
| platforms | ["cowork","claude-code"] |
| description | Convert blog posts and Tiger Den content into native long-form articles for LinkedIn, X (Twitter), or both — with matching social posts. Produces platform-appropriate outputs: LinkedIn gets an SEO title, SEO description, article body with closing CTA, and a social post; X gets an article body and a companion post. Handles both Tiger Den content items and raw blog drafts. Use this skill when the user asks to turn a blog post into a LinkedIn article, write an X article, write a Twitter article, create long-form content for social platforms, or says 'social article,' 'LinkedIn article,' 'X article,' or 'repurpose this for LinkedIn/Twitter.' For short social posts only (not articles), use social-post-writer instead. |
| references | ["brand-voice-guide"] |
Social Article Writer
Convert blog posts and other content into first-person long-form articles for LinkedIn, X (Twitter), or both — with voice-matched writing and a companion social post for each platform. Works with two input types: Tiger Den content items (published or indexed) and raw blog drafts (pasted text, uploaded files, Google Docs).
When to use this skill
- Turning a published blog post or Tiger Den content item into a LinkedIn article, X article, or both
- Converting a blog draft (not yet in Tiger Den) into long-form social content
- When someone says "LinkedIn article," "X article," "Twitter article," "long-form LinkedIn," "repurpose for LinkedIn/Twitter," or "social article"
- When social-post-writer hands off a long-form article request
When NOT to use this skill
- Short LinkedIn or X posts (under 300 words) — use social-post-writer
- Social media campaign planning — use social-post-writer
- Writing a blog post from scratch — use brand-voice-writer
Step 0: Pre-flight check
Read REFERENCES.md from the plugin root and run the pre-flight check described there. Call list_marketing_references() to verify Tiger Den is reachable. If it fails or the tool is not found, STOP — do not continue. Follow the error handling in REFERENCES.md.
Also fetch the No Fly List before doing any work:
get_marketing_reference(slug: "no-fly-list")
This is a list of customers who cannot be publicly referenced. Load these names as a hard constraint: never include any No Fly List customer in any output — not as named examples, proof points, customer quotes, case study references, or any other mention. If the user requests content featuring or referencing a No Fly List customer, stop and inform them that this customer cannot be publicly referenced. If a No Fly List name appears in source material you are working from, omit it from all outputs.
Instructions
1. Gather inputs
Ask upfront for anything not provided. Specifically:
Platform selection (required):
Ask: "Which platform(s)? LinkedIn, X, or both?"
If X is selected, add this note: "Heads up — posting X Articles requires an X Premium subscription."
Source content — one of:
- Tiger Den content item: The user provides a content ID, title, or URL. Search Tiger Den with
search_content if they give a topic or partial title. Fetch the full text with get_content_text once identified.
- Raw blog draft: The user pastes text, uploads a file, or shares a Google Doc link. Work from the provided text directly.
Author voice profile:
- Ask who the article is "from" (who's posting it). If not specified, ask.
- Call
list_voice_profiles to check available profiles, then get_voice_profile with the matching name slug.
- If no voice profile exists for the person, proceed with brand voice only and note the limitation.
Optional inputs (ask if not provided, offer sensible defaults):
- Target audience: Who is this article for? Default: infer from the content.
- Angle: Any specific emphasis or perspective? Default: let the content guide it.
- Word count: Target for article body. Default: LinkedIn 1000 words, X 600-800 words.
- CTA URL: Ask: "What URL should the CTA link to?" Always a live URL — the blog post itself, a related asset, or a product page. Do not assume or default. Always ask.
2. Load brand context
Fetch reference docs before writing:
get_marketing_context(slugs: ["brand-voice-guide"])
Read the brand voice guide and internalize the absolute rules (no em dashes, active voice, lead with the problem, short paragraphs). The voice profile from Step 1 takes precedence for sentence rhythm, tone, humor, and personality. The brand voice guide governs terminology and structural guardrails.
If Tiger Den is not connected, do not proceed. Tell the user: "This skill needs Tiger Den to load the brand voice guide and voice profiles. Run /setup to get it configured."
3. Gather context from Tiger Den (Tiger Den content only)
When the source is a Tiger Den content item, use build_linkedin_prompt to assemble context:
build_linkedin_prompt(
content_id: "<content UUID>",
voice_profile: "<author name slug>",
audience: "<audience if specified>",
angle: "<angle if specified>",
word_count: <target word count>,
cta_type: "<CTA label>",
cta_url: "<CTA URL>"
)
This returns a structured prompt with the voice profile, content text, suggested related links, and target details pre-assembled. Do not output this prompt to the user. Extract the useful context from it:
- The author's voice notes, anti-patterns, and writing samples
- The full blog post text
- Suggested links
- Target details
For raw blog drafts: Skip build_linkedin_prompt. You already have the text from the user and the voice profile from Step 1. Use search_content to find 3-5 related Tiger Den content items for reference:
search_content(query: "<topic keywords from the draft>", limit: 5)
4. Write the outputs
Produce outputs for each selected platform. If both platforms are selected, complete LinkedIn first, then X.
LinkedIn outputs
Output L1: LinkedIn SEO Title
- Under 70 characters
- Clear and specific, no clickbait
- Uses the author's natural phrasing
- Test: would this person actually title their own article this way?
Output L2: LinkedIn SEO Description
- 1-2 sentences, under 200 characters total
- Summarizes the article's core takeaway
- Written in the author's voice
Output L3: LinkedIn Article Body
Target word count (default 900-1100 words). This is a first-person LinkedIn article, not a blog repost. It should feel like the author wrote it natively for LinkedIn.
Structure:
-
Opening hook: 2-3 sentences max. No "I was sitting at my desk..." cliches. Start with an insight, a surprising fact, or a direct statement that earns the reader's attention.
-
3-5 sections with clear subheadings: Each subheading should be specific and descriptive. Each section follows: insight, evidence or example, implication.
-
Closing CTA section: End the article with a short, clearly labeled section (e.g., "Want to go deeper?" or "Read the full breakdown"). Include the UTM-tagged CTA link here:
generate_utm_link(url: "<CTA URL>", source: "linkedin", medium: "article", campaign: "<topic slug>")
manage_tracked_links(action: "create", description: "<article title> — LinkedIn article CTA", url: "<CTA URL>", utm_source: "linkedin", utm_medium: "article", utm_campaign: "<topic slug>")
manage_tracked_links(action: "attach_shortlink", tracked_link_id: "<id from previous call>")
Use the bl.ink shortlink returned by attach_shortlink as the final CTA link in the article. Keep the CTA section to 2-3 sentences max. It should feel like a natural next step, not a sales pitch.
Paragraph rules: 2-4 sentences max per paragraph. No walls of text. Explain jargon on first use. No other links anywhere in the article body.
Output L4: LinkedIn Social Post
The post that accompanies the article when sharing. 150-250 words. No links in the post body — LinkedIn's algorithm deprioritizes posts with outbound links, and the CTA is already in the article itself.
Post body structure:
- Hook line: The first line people see before "...see more." Must create enough curiosity to click.
- 2-3 short paragraphs: Expand the hook. Give a taste of the article's value without giving it all away.
- Closing line: A natural prompt to read the article. Keep it conversational. Do not use "Link in bio."
- 3-5 hashtags: Mix of broad and niche. No #ThoughtLeadership. No more than 5.
X outputs
Output X1: X Article Body
Target word count (default 600-800 words). X articles are more conversational and punchy than LinkedIn — closer to a smart Substack post than polished thought leadership. Up to 25,000 characters are allowed, but shorter performs better.
Structure:
-
Opening: Get to the point in the first sentence. No warm-up. No "I've been thinking about..."
-
2-4 sections with short, direct headings: Tighter than LinkedIn. Each section should make one clear point.
-
Closing CTA section: Same as LinkedIn — a short labeled section with the UTM-tagged link:
generate_utm_link(url: "<CTA URL>", source: "twitter", medium: "article", campaign: "<topic slug>")
manage_tracked_links(action: "create", description: "<article title> — X article CTA", url: "<CTA URL>", utm_source: "twitter", utm_medium: "article", utm_campaign: "<topic slug>")
manage_tracked_links(action: "attach_shortlink", tracked_link_id: "<id from previous call>")
Use the bl.ink shortlink returned by attach_shortlink as the final CTA link in the article. 2-3 sentences max. Direct and low-pressure.
Rich formatting is supported (bold, italic, headings, lists, embedded posts). Use it. X readers expect a more dynamic reading experience than a wall of text.
After the X article, include this note for the user:
X Articles surface as cards in the feed — you don't need a separate post to drive traffic to it. Just publish the article and let it stand on its own. If you want to amplify it, copy your X Article URL after publishing and send a short post linking to it.
5. Voice matching rules
These apply to all outputs across both platforms. Follow them exactly.
- Read all writing samples from the voice profile before writing anything
- Match the author's sentence length patterns, punctuation habits, and paragraph rhythm
- Use their vocabulary and phrasing, not generic business writing
- If they use contractions, use contractions. If they don't, don't.
- Mirror their level of formality, humor, and directness
- The voice notes and anti-patterns from the profile are authoritative
- X output should feel slightly looser and more direct than LinkedIn — but same person, same voice
6. Anti-patterns (never do these)
Scan every output and remove any of the following before delivering:
- "In today's rapidly evolving landscape" or similar AI-sounding openers
- "Let's dive in," "Here's the thing," "Let me be clear," "At the end of the day"
- Em dashes (—) — replace with commas, periods, or parentheses
- Rhetorical questions as section transitions
- Bullet-point lists longer than 5 items in the article body
- "I'm excited to announce" or "Thrilled to share"
- Hashtags anywhere in the article body (only in social posts)
- "What do you think? Let me know in the comments" or engagement bait
- Corporate jargon: "synergy," "leverage," "ecosystem," "paradigm shift"
- More than one exclamation mark in the entire article
- "As [famous person] once said" quotes
- Three consecutive sentences starting the same way
- Negative seesaws: "It's not X. It's Y." / "Not just X, but Y."
- Forced triples: compulsively grouping things in threes
- Copula dodging: "serves as," "stands as," "functions as" when the sentence means "is"
- AI vocabulary cluster: "delve," "landscape," "crucial," "showcase," "underscore," "tapestry," "foster," "bolster"
- Hallmark-card endings: "The future looks bright." "This is just the beginning."
7. Quality checklist
Verify all of the following before delivering. Fix anything that fails.
Output format
After all outputs are written, automatically save a Markdown file without waiting for the user to ask. Name it [topic-slug]-social-articles.md and save it to the workspace folder. Do not create an artifact — the user needs to copy-paste sections directly, and a plain markdown file works best for that.
Structure the file with clear platform sections:
# [Article Title]
Generated: [date]
Author: [name]
Source: [content title or "raw draft"]
---
## LinkedIn
### SEO Title
[title]
### SEO Description
[description]
### Article Body
[article with closing CTA and bl.ink shortlink]
### Social Post
[post body with hashtags — no links]
---
## X (Twitter)
### Article Body
[article with closing CTA and bl.ink shortlink]
> X Articles surface as cards in the feed — you don't need a separate post to drive traffic to it. Just publish the article and let it stand on its own. If you want to amplify it, copy your X Article URL after publishing and send a short post linking to it.
Omit any platform section that wasn't requested.
Also present the outputs in chat with the same structure so the user can review inline.
Hand-off
After delivering, offer to:
- Adjust angle, tone, or word count and regenerate
- Run
/de-slop for an additional AI-pattern scrub
- Run
/content-reviewer to evaluate against the quality rubric
Do not auto-trigger other skills. Wait for the user to confirm the output looks good first.
Dependencies
- Required: Tiger Den MCP server (for voice profiles, brand voice guide, content search, UTM generation)
- Optional: Google Drive access (if the user provides a Google Doc link for a raw draft)