happycapy-social-publisher
Skill137 starsChanged 6 months agoMITView on GitHub
HappyCapy-specific skill for publishing content to 13+ social media platforms (Instagram, Twitter, LinkedIn, Threads, Facebook, TikTok, YouTube, Pinterest, Reddit, Telegram, Discord, etc.) simultaneously with platform-optimized styles, optional AI-generated media (video/image), and smart error handling. Uses Late MCP integration available in HappyCapy environment. Use when you need to cross-post to social media, create multi-platform marketing content, share announcements across platforms, publish with platform-specific adaptations, generate AI media for posts, or manage social media publishing workflows. Supports interactive content creation with user-guided platform selection, media generation choices, preview before publish, and automatic retry with character limit adjustments.
- Pipes a download into a shell
- Reads credentials
We split this skill into the rules it gives an agent
31 rules. About 0 are common, 23 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈23
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 20
Read /home/node/.mcp.json to verify Late MCP is configured.
- Distinctive: line 37
Ask user via AskUserQuestion tool:
- Very specific: line 49
Ask user to provide the key (format: sk_xxxxxxxxxxxxxxxx)
- Distinctive: line 57
Read and intelligently merge configurations:
- Distinctive: line 174
Ask user to select which platforms to publish to:
- Distinctive: line 181
Ask user if they want AI-generated media:
- Very specific: line 184
Use /generate-video skill with appropriate prompt
- Distinctive: line 195
Ask user to provide media URL or file path
- Distinctive: line 225
NO hashtags (they don't work on Threads)
- Distinctive: line 226
Keep under 450 chars for safety buffer
- Distinctive: line 255
If user requests edits, modify specific platform content and re-preview.
- Distinctive: line 285
If Threads post fails with "text too long" error:
- Distinctive: line 287
First retry: Remove adjectives, condense sentences (target: 400 chars)
- Distinctive: line 288
Second retry: Remove line breaks, simplify further (target: 350 chars)
- Distinctive: line 290
Manual fallback: Ask user to manually edit content
- Distinctive: line 301
After publishing, show results:
- Distinctive: line 374
Always count characters INCLUDING:
- Distinctive: line 401
Multiple platforms: Use MP4 video or JPG/PNG images
- Very specific: line 501
Verify ~/.mcp.json configuration is correct
- Very specific: line 502
Check API key format: sk_xxxxxxxxxxxxxxxx
- Very specific: line 503
Verify uvx is installed: uvx --version
- Distinctive: line 504
Start a new conversation in HappyCapy
- Very specific: line 505
Check ~/.claude/settings.local.json has "late" in enabledMcpjsonServers
- Distinctive: line 512
Wait for connection confirmation
- Distinctive: line 517
Verify media URL is publicly accessible
- Distinctive: line 518
Check file size (under 100MB for video)
- Distinctive: line 519
Verify format: MP4 for video, JPG/PNG for images
- Distinctive: line 524
Always count characters including newlines.
- Distinctive: line 532
Check Late API dashboard: https://getlate.dev
- Very specific: line 533
Verify MCP configuration in ~/.mcp.json
- Distinctive: line 535
Check platform-specific requirements in references/
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
HappyCapy Social Media Publisher
Publish content to 13+ social media platforms with platform-optimized styles, optional AI-generated media, and smart error handling.
Environment Note: This skill is designed for HappyCapy environment with fixed paths:
- Claude config:
/home/node/.claude.json - MCP config:
/home/node/.mcp.json - Claude settings:
/home/node/.claude/settings.local.json - User home:
/home/node
Prerequisites Check
1. Check Late MCP Configuration
Read /home/node/.mcp.json to verify Late MCP is configured.
If Late MCP not configured, execute automatic setup:
Automatic Setup Flow
Step 1: Install uv (if needed)
# Check if uv is installed
uvx --version
# If not found, install it
curl -LsSf https://astral.sh/uv/install.sh | shStep 2: Interactive API Key Setup
Ask user via AskUserQuestion tool:
Question: "Do you have a Late API Key?"
Options:
- "Yes, I have one" → Ask for API Key input
- "No, need to register" → Guide to registrationIf user needs to register:
- Guide user to visit https://getlate.dev (free tier: 20 posts/month)
- Instruct: Settings → API Keys → Create API key
- Ask user to provide the key (format:
sk_xxxxxxxxxxxxxxxx)
If user has key:
- Request API Key input via AskUserQuestion
- Validate format starts with
sk_
Step 3: Auto-Configure Files
Read and intelligently merge configurations:
For /home/node/.mcp.json:
# Read existing config
config = read_json("/home/node/.mcp.json") or {"mcpServers": {}}
# Add late server
config["mcpServers"]["late"] = {
"command": "/home/node/.local/bin/uvx",
"args": ["--from", "late-sdk[mcp]", "late-mcp"],
"env": {
"LATE_API_KEY": api_key_from_user
}
}
# Write back
write_json("/home/node/.mcp.json", config)For /home/node/.claude.json:
# Read existing config
claude_config = read_json("/home/node/.claude.json") or {"mcpServers": {}}
# Add late server (same as .mcp.json)
claude_config["mcpServers"]["late"] = {
"command": "/home/node/.local/bin/uvx",
"args": ["--from", "late-sdk[mcp]", "late-mcp"],
"env": {
"LATE_API_KEY": api_key_from_user
}
}
# Write back
write_json("/home/node/.claude.json", claude_config)For /home/node/.claude/settings.local.json:
# Read existing settings
settings = read_json("/home/node/.claude/settings.local.json") or {}
# Add "late" to enabledMcpjsonServers if not present
if "enabledMcpjsonServers" not in settings:
settings["enabledMcpjsonServers"] = []
if "late" not in settings["enabledMcpjsonServers"]:
settings["enabledMcpjsonServers"].append("late")
# Write back
write_json("/home/node/.claude/settings.local.json", settings)Step 4: Restart Prompt
Display message:
✅ Late MCP configured successfully!
Please start a new conversation for the configuration to take effect.
After starting new conversation, I will verify the setup and guide you to connect social media accounts.2. Verify Setup and Connected Platforms
In the new conversation, verify configuration:
Call mcp__late__accounts_listHandle results:
- Success with accounts: Proceed to platform selection workflow
- Success but no accounts: Guide user to connect platforms
- Error: Display error message, suggest checking API key validity
If no accounts found:
Your Late API is configured, but no social media accounts are connected yet.
Please visit: https://getlate.dev/accounts
Connect your desired platforms:
- LinkedIn (Direct OAuth)
- X/Twitter (Direct OAuth)
- Instagram (Professional/Creator account via Facebook)
- Threads (via Instagram)
- Facebook, TikTok, YouTube, Pinterest, Reddit, Telegram, Discord, etc.
After connecting accounts, call me again to start publishing!Workflow
Step 1: Analyze Content
Extract from user's input:
- Core message: Main topic or announcement
- Key points: 3-5 bullet points to emphasize
- Tone: Professional, casual, inspiring, technical, etc.
- Call-to-action: Link, question, or engagement prompt
- Media suggestion: Does content benefit from video or image?
Step 2: Platform Selection
Show user their connected platforms from accounts_list result.
Late API supports 13+ platforms including:
- Instagram, Twitter/X, LinkedIn, Threads
- Facebook, TikTok, YouTube, Pinterest
- Reddit, Telegram, Discord, Mastodon
- And more
Display the platforms that the user has actually connected (from accounts_list).
Ask user to select which platforms to publish to:
- List all their connected platforms dynamically
- Allow selecting all or specific subset
- Explain any platform-specific requirements if needed
Step 3: Media Generation (Optional)
Ask user if they want AI-generated media:
Option A: Generate AI Video
- Use
/generate-videoskill with appropriate prompt - Duration: 6-8 seconds (optimal for social media)
- Save to
./outputs/directory - Get video URL for publishing
Option B: Generate AI Image
- Use
/generate-imageskill - Save to
./outputs/directory - Get image URL for publishing
Option C: User Upload
- Ask user to provide media URL or file path
Option D: Text Only
- Proceed without media
Step 4: Content Adaptation
Generate platform-specific versions of content following these guidelines:
Instagram (max 2,200 chars):
- Visual storytelling style
- Emoji-rich, engaging narrative
- 8 relevant hashtags (mix popular + niche)
- Emphasize visual elements
Twitter (max 280 chars):
- Concise and punchy
- Conversational tone
- 1-2 hashtags only
- Strong opening hook
LinkedIn (max 3,000 chars):
- Professional insights and analysis
- Value-driven content
- 3-5 industry hashtags
- Thought leadership angle
Threads (max 500 chars - STRICT):
- Casual, authentic story
- Personal touch and relatability
- NO hashtags (they don't work on Threads)
- Keep under 450 chars for safety buffer
For detailed platform strategies, see references/platform-styles.md
Step 5: Preview & Approval
Display all generated content to user:
## Preview
### Instagram (348 chars)
[content]
### Twitter (276 chars)
[content]
### LinkedIn (689 chars)
[content]
### Threads (413 chars)
[content]Ask user:
- Approve all and publish?
- Edit specific platform content?
- Cancel?
If user requests edits, modify specific platform content and re-preview.
Step 6: Publish
Once approved, publish to selected platforms:
For multiple platforms simultaneously:
Call mcp__late__posts_cross_post with:
{
"profiles": ["profile_id_1", "profile_id_2", ...],
"text": "platform-specific content",
"media_urls": ["https://...video.mp4"] (if media exists)
}For single platform:
Call mcp__late__posts_create with:
{
"profile_id": "specific_profile_id",
"text": "content",
"media_urls": ["..."] (optional)
}Step 7: Error Handling
Threads Character Limit Error:
If Threads post fails with "text too long" error:
- First retry: Remove adjectives, condense sentences (target: 400 chars)
- Second retry: Remove line breaks, simplify further (target: 350 chars)
- Third retry: Rewrite to essential message only (target: 300 chars)
- Manual fallback: Ask user to manually edit content
Each retry should maintain core message while shortening length.
Other Platform Errors:
- Media upload failures: Retry once, then fallback to text-only
- Rate limits: Show error, suggest trying again later
- Authentication errors: Guide user to reconnect platform at https://getlate.dev/accounts
Step 8: Results Report
After publishing, show results:
## Publishing Results
✅ Instagram: Posted successfully
→ https://instagram.com/p/xxxxx
✅ Twitter: Posted successfully
→ https://twitter.com/user/status/xxxxx
✅ LinkedIn: Posted successfully
→ https://linkedin.com/feed/update/xxxxx
⚠️ Threads: Failed (text too long)
→ Retrying with shortened content...
→ ✅ Posted on second attemptSave results to ./outputs/{timestamp}_report.json for reference.
MCP Tools Reference
List Connected Accounts
mcp__late__accounts_listReturns array of connected platforms with:
id: Profile ID for publishingplatform: instagram, twitter, linkedin, threadsusername: Account username/handle
Create Single Post
mcp__late__posts_create({
"profile_id": "prof_xxx",
"text": "Post content here",
"media_urls": ["https://..."] (optional)
})Cross-Post to Multiple Platforms
mcp__late__posts_cross_post({
"profiles": ["prof_1", "prof_2", "prof_3"],
"text": "Content for all platforms",
"media_urls": ["https://..."] (optional)
})Check Post Status
mcp__late__posts_get({
"post_id": "post_xxx"
})Returns post status: pending, published, failed
Upload Media
mcp__late__media_generate_upload_link({
"filename": "video.mp4"
})Returns upload URL. After uploading, get media URL for publishing.
Best Practices
Character Count Guidelines
Always count characters INCLUDING:
- Newlines (
\n= 1 char) - Spaces
- Punctuation
- Emojis (some count as 2 chars)
For Threads, aim for 400-450 chars to provide safety buffer.
Content Adaptation Strategy
- Maintain core message across all platforms
- Adapt style and tone to platform culture
- Adjust length to platform limits
- Use platform-appropriate hashtags
- Keep authentic voice (avoid AI clichés)
Hashtag Strategy
- Instagram: 8 hashtags (mix trending + niche)
- Twitter: 1-2 hashtags max
- LinkedIn: 3-5 professional hashtags
- Threads: 0 hashtags (they don't function)
Media Recommendations
- Video: 6-8 seconds, 16:9 ratio, under 100MB
- Image: 1080x1080px (square) or 1080x1350px (portrait)
- Multiple platforms: Use MP4 video or JPG/PNG images
Common Pitfalls
❌ Threads posts >500 chars - Always fails ✅ Keep under 450 chars with buffer
❌ Same content for all platforms - Low engagement ✅ Adapt style and hashtags per platform
❌ AI writing tells - "Excited to announce", "Dive deep" ✅ Natural, conversational language
❌ Too many hashtags on Twitter - Looks spammy ✅ 1-2 relevant hashtags maximum
❌ Using hashtags on Threads - They don't work ✅ No hashtags on Threads
Examples
Product Launch Example
User Input: "Launched HappyCapy - cloud-native AI platform. No more local setup!"
Instagram (348 chars):
🚀 从养claw到养capy的进化!
有点点生物背景的我突然意识到:这不就像从甲壳类进化到哺乳类吗?
Claw = 需要硬件、本地部署、不安全
Capy = 云端运行、零部署、更安全
HappyCapy 让一切变简单,告别本地配置的痛苦!
✨ 30万+ AI能力组合
☁️ 云端一键启动
🔒 更安全的环境
#AI工具 #云端开发 #HappyCapy #开发者工具 #AI平台 #CloudNative #NoCode #进化Twitter (276 chars):
从养claw到养capy!🦞→🐹
有点点生物背景的我发现:Claw需要硬件+本地部署,Capy云端运行零配置。就像从甲壳类进化到哺乳类!
HappyCapy = 30万+ AI能力,云端一键启动 ☁️
告别配置地狱!
#AI #CloudDevLinkedIn (689 chars):
From "养claw" to "养capy": An Evolution in AI Development Tools
As someone with a bit of biology background, I realized something interesting: the shift from Claude Code (Claw) to HappyCapy mirrors biological evolution - from crustaceans to mammals.
Key differences:
• Claw: Hardware-dependent, local deployment, security concerns
• Capy: Cloud-native, zero setup, enhanced security
Why this matters for developers:
✓ 300,000+ AI capability combinations
✓ Instant cloud deployment
✓ No local environment configuration
✓ Safer execution environment
The local-first approach is evolving. Just as mammals adapted better to diverse environments than crustaceans, cloud-native platforms offer flexibility and safety that hardware-dependent tools can't match.
Ready to evolve your development workflow?
#AITools #CloudDevelopment #DeveloperExperience #CloudNative #AIplatformThreads (413 chars):
从养claw到养capy的感悟 🦞→🐹
有点点生物背景的我突然发现:这简直就是从甲壳类到哺乳类的进化啊!
Claw时代:需要硬件、本地部署、各种配置头疼
Capy时代:云端运行、零部署、打开就用
就像生物进化一样,哺乳类比甲壳类更高级,云端工具也比本地工具更方便更安全。
HappyCapy = 30万+ AI能力,告别配置地狱 ☁️
你还在养claw吗?Troubleshooting
Late MCP Not Loading
- Verify
~/.mcp.jsonconfiguration is correct - Check API key format:
sk_xxxxxxxxxxxxxxxx - Verify
uvxis installed:uvx --version - Start a new conversation in HappyCapy
- Check
~/.claude/settings.local.jsonhas"late"inenabledMcpjsonServers
No Connected Accounts
- Visit https://getlate.dev/accounts
- Click "Connect Account" for each platform
- Complete OAuth authorization
- Wait for connection confirmation
- Verify with
mcp__late__accounts_list
Media Upload Failures
- Verify media URL is publicly accessible
- Check file size (under 100MB for video)
- Verify format: MP4 for video, JPG/PNG for images
- Try uploading directly via
mcp__late__media_generate_upload_link
Threads Character Limit
Always count characters including newlines. Use auto-retry logic:
- Retry 1: Remove adjectives (target 400 chars)
- Retry 2: Condense sentences (target 350 chars)
- Retry 3: Essential message only (target 300 chars)
Support
For configuration issues:
- Check Late API dashboard: https://getlate.dev
- Verify MCP configuration in
~/.mcp.json - Review error messages from MCP tools
- Check platform-specific requirements in references/
In this repository59 other files it gives its agents.
- skills/supabase-postgres-best-practices/AGENTS.mdAGENTS.md
- skills/supabase-postgres-best-practices/CLAUDE.mdCLAUDE.md
- 360-panorama-viewerSkill
- 3d-web-experienceSkill
- acid-labels-pptxSkill
- ai-image-generationSkill
- ai-video-generationSkill
- apricot-ritual-pptxSkill
- azure-host-pptxSkill
- better-auth-best-practicesSkill
- botanical-blur-pptxSkill
- building-native-uiSkill
- canvas-designSkill
- capy-cortexSkill
- capy-video-gen-skillSkill
- claude-code-templatesSkill
- contract-first-agentsSkill
- coral-geyser-pptxSkill
- create-design-system-rulesSkill
- data-storytellingSkill
- film-creatorSkill
- find-skillsSkill
- frontend-slidesSkill
- gbro-collage-brollSkill
- generate-imageSkill
- goplacesSkill
- gradient-calendar-pptxSkill
- happycapy-feishuSkill
- happycapy-skill-creatorSkill
- html-over-markdownSkill
- image-enhancerSkill
- latex-documentSkill
- llm-councilSkill
- mobile-app-developerSkill
- mobile-designSkill
- nano-banana-proSkill
- neon-motion-pptxSkill
- next-best-practicesSkill
- olive-rose-pptxSkill
- oss-contributor-swarmSkill
- pdfSkill
- pptxSkill
- prompt-improverSkill
- redbook-creator-publishSkill
- reddit-post-writerSkill
- reddit-post-writerSkill
- resume-assistantSkill
- signal-green-pptxSkill
- skill-creatorSkill
- slack-gif-creatorSkill
- supabase-postgres-best-practicesSkill
- treatment-plansSkill
- video-downloaderSkill
- video-framesSkill
- weatherSkill
- world-class-carouselSkill
- writing-clearly-and-conciselySkill
- xiaohongshu-recruiterSkill
- youtube-musicSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

