Researches a topic across platforms and publishes a LinkedIn post in your voice. Uses AnySite MCP for research, sub-agents, and Unipile MCP for publishing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-personal-os-skills:linkedin-research-postThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You help the user research a topic and publish a LinkedIn post backed by multi-source research. The full pipeline: Research -> Analyze -> Draft -> Review -> Publish.
You help the user research a topic and publish a LinkedIn post backed by multi-source research. The full pipeline: Research -> Analyze -> Draft -> Review -> Publish.
Before launching any agents, run these checks:
1. AnySite MCP canary check:
Call mcp__anysite-mcp__duckduckgo_search with query "test" and count 1. If it returns results, AnySite is connected. If it errors, tell the user:
claude mcp add anysite -s user -- npx -y @anthropic/anysite-mcpDO NOT launch research agents until this check passes.
2. Voice profile: Check for voice/style in this order:
SOUL.md in project root or home directoryuser-profile.md in project root3. Unipile MCP (optional - check only at publish time):
claude mcp add-json unipile '{"type":"http","url":"https://developer.unipile.com/mcp","headers":{"X-API-KEY":"YOUR_API_KEY"}}'If the topic was provided via $ARGUMENTS, use it directly.
Otherwise ask: "What topic should your LinkedIn post be about?"
If too broad, narrow it:
Launch 3 parallel sub-agents. Each agent prompt MUST include the exact MCP tool names below. Do NOT say "use AnySite MCP" - agents don't know what that means.
CRITICAL: Include these exact instructions in each agent prompt:
Sub-agent 1 - LinkedIn perspective:
Research "[TOPIC]" on LinkedIn.
You MUST use these exact MCP tools (not WebSearch, not WebFetch):
- mcp__anysite-mcp__search_linkedin_posts(keywords="[TOPIC]", count=10, date_posted="past-week")
- mcp__anysite-mcp__get_linkedin_post_comments(urn="[post_urn]", count=5) for top posts
Find the 5 most engaged posts. For each note:
- Author name and headline
- Post text (first 200 chars)
- Reaction count and comment count
- The angle/take they used
Summarize: what angles get traction, what's overdone, what's missing.
PRIORITY: Try mcp__anysite-mcp tools first. If they fail, fall back to WebSearch/WebFetch.
At the end of your report, note which tools you actually used (MCP vs fallback).
Sub-agent 2 - Community perspective:
Research "[TOPIC]" on Reddit and Twitter.
You MUST use these exact MCP tools (not WebSearch, not WebFetch):
- mcp__anysite-mcp__search_reddit_posts(query="[TOPIC]", count=10, sort="top", time_filter="month")
- mcp__anysite-mcp__search_twitter_posts(query="[TOPIC]", count=10)
- mcp__anysite-mcp__get_reddit_post_comments(post_url="[url]") for top 2-3 posts
Find honest opinions, complaints, praised solutions.
Note where community sentiment DIFFERS from LinkedIn's polished narrative.
PRIORITY: Try mcp__anysite-mcp tools first. If they fail, fall back to WebSearch/WebFetch.
At the end of your report, note which tools you actually used (MCP vs fallback).
Sub-agent 3 - Deep content:
Research "[TOPIC]" on YouTube and the web.
You MUST use these exact MCP tools (not WebSearch, not WebFetch):
- mcp__anysite-mcp__search_youtube_videos(query="[TOPIC]", count=5)
- mcp__anysite-mcp__get_youtube_video_subtitles(video="[video_id]") for the top result
- mcp__anysite-mcp__duckduckgo_search(query="[TOPIC]", count=5) for web articles
- mcp__anysite-mcp__parse_webpage(url="[article_url]") to read top articles
Extract key frameworks, data points, expert claims.
PRIORITY: Try mcp__anysite-mcp tools first. If they fail, fall back to WebSearch/WebFetch.
At the end of your report, note which tools you actually used (MCP vs fallback).
After launching agents: Check their output within 15-20 seconds to verify they are using the MCP tools, not WebSearch/WebFetch. If any agent is using the wrong tools, send a corrective message immediately via SendMessage with the exact tool names.
Synthesis: Present to the user:
Ask the user which angle and template they prefer:
A: "Lesson Learned" - Hook -> Mistake -> Learning -> 3-5 Takeaways -> Question B: "Curated Insight" - I found X -> 3 insights with context -> My take -> What are you seeing? C: "How I Do X" - Problem everyone faces -> My setup (3 steps) -> Result with numbers
Read the user's voice profile (SOUL.md, user-profile.md, or memory) to match their tone.
Draft the post following these LinkedIn best practices:
Present the draft to the user. Ask:
If the user wants a second opinion, offer to run /council:
/council "Should I publish this LinkedIn post? Is the angle compelling? What would make it stronger?"
Incorporate feedback. Iterate until the user is satisfied.
When the user approves, publish via Unipile MCP.
Unipile MCP is an OpenAPI proxy with these tools:
mcp__unipile__search-endpoints - find the right API endpointmcp__unipile__get-endpoint - get endpoint details (params, auth)mcp__unipile__execute-request - execute the API call via HAR formatTo publish a LinkedIn post:
First, get the user's Unipile base URL and API key. Ask them for:
https://api1.unipile.com:13118) - subdomain and port are user-specificList their LinkedIn accounts to get the account_id:
mcp__unipile__execute-request({
"harRequest": {
"method": "GET",
"url": "https://{subdomain}.unipile.com:{port}/api/v1/accounts",
"headers": [{"name": "X-API-KEY", "value": "{their_key}"}]
}
})
Create the post using multipart/form-data (CRITICAL - JSON body does NOT work):
mcp__unipile__execute-request({
"harRequest": {
"method": "POST",
"url": "https://{subdomain}.unipile.com:{port}/api/v1/posts",
"headers": [
{"name": "X-API-KEY", "value": "{their_key}"},
{"name": "Content-Type", "value": "multipart/form-data; boundary=Boundary123"}
],
"postData": {
"mimeType": "multipart/form-data",
"text": "--Boundary123\r\nContent-Disposition: form-data; name=\"account_id\"\r\n\r\n{account_id}\r\n--Boundary123\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\n{post_text}\r\n--Boundary123--\r\n"
}
}
})
Successful response: {"object":"PostCreated","post_id":"..."}
If Unipile is not connected:
After publishing, suggest:
When SOUL.md exists, use it as the primary voice reference. When it doesn't, use these defaults:
npx claudepluginhub bayramannakov/ai-personal-os-skills --plugin slide-inspectorGenerates LinkedIn posts in your voice by building an author profile via interviews and scraping, then drafts with news and humanizes. Automates personal content creation.
Writes LinkedIn posts to frame published articles, investigations, or media projects as thought leadership, driving clicks and credibility.
Generates two viral LinkedIn posts in proven formats, matched to the founder's voice, using battle-tested templates. Auto-selects formats based on topic.