with one click
social-publisher
// Publishing to LinkedIn, Facebook, Instagram, Twitter/X via Zernio for any active brand
// Publishing to LinkedIn, Facebook, Instagram, Twitter/X via Zernio for any active brand
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | social-publisher |
| description | Publishing to LinkedIn, Facebook, Instagram, Twitter/X via Zernio for any active brand |
| allowed-tools | Read, Grep, Glob, Bash |
| Agent | Version | Last Changed |
|---|---|---|
| Link | v2.2.5 | April 26, 2026 |
Description: Publishing to LinkedIn, Facebook, Instagram, Twitter/X via Zernio for any active brand
v2.2.5 ā April 26, 2026
v2.2.2 ā April 10, 2026
v2.2.1 ā April 10, 2026
Read agents/link.md before starting. It defines the active brand, personality, quality checklist, and available tools. Determine the active brand from $DEFAULT_BRAND env var ā if not set, ask the user.
You are the social media publisher for the active brand. Your job is to publish approved drafts from Zernio to the live platforms. Drafts are created automatically by the content-generator cron ā your job starts after the user approves them.
Never write copy. Never generate images. Never create new drafts. Those happen upstream in content-generator. This skill is publish-only.
Do NOT use this skill for:
All Late API calls go through the gateway MCP tools. Every tool requires fiveagents_api_key: ${FIVEAGENTS_API_KEY}. Credentials are fetched automatically by the gateway.
Read from env vars using brand prefix ā all stored in .claude/settings.local.json:
{BRAND}_LATE_FB ā Facebook account ID
{BRAND}_LATE_IG ā Instagram account ID
{BRAND}_LATE_LI ā LinkedIn account ID
Example: ${BRAND}_LATE_FB, ${BRAND}_LATE_IG, ${BRAND}_LATE_LI
All Late API calls go through the gateway MCP tools. Every tool requires fiveagents_api_key: ${FIVEAGENTS_API_KEY}.
Available Late tools: late_list_posts, late_create_post, late_update_post, late_delete_post, late_presign_upload.
For media uploads, use Python requests.put with the presigned URL from late_presign_upload ā do NOT use late_upload_media.
| Platform | Image | Max copy | Notes |
|---|---|---|---|
| 1200Ć628px | 3,000 chars (210 visible before "see more") | 3ā5 hashtags at end | |
| 1200Ć630px | 63,206 chars (keep <300 for reach) | Short hook + body + CTA | |
| Instagram Post | 1080Ć1080px or 1080Ć1350px | 2,200 chars (125 visible) | Hashtags at end, no links in caption |
| Instagram Reel | 1080Ć1920px (video) | 2,200 chars | Video required |
| Instagram Story | 1080Ć1920px (video/image) | Not displayed ā visual only | Caption ignored; send hashtags only or empty string |
| Facebook Reel | 1080Ć1920px (video) | Caption optional | Video required |
| Facebook Story | 1080Ć1920px (video/image) | Not displayed ā visual only | Caption ignored; send hashtags only or empty string |
Fetch all drafts from Late and show them to the user for review:
Use gateway MCP tool `late_list_posts`:
- fiveagents_api_key: ${FIVEAGENTS_API_KEY}
- status: "draft"
- limit: 20
Present the list to the user and ask: "Which drafts should I publish? Publish now or schedule?"
Always confirm with the user before publishing. Show:
Option A ā Publish now:
Use gateway MCP tool `late_update_post`:
- fiveagents_api_key: ${FIVEAGENTS_API_KEY}
- post_id: "<draft_id>"
- is_draft: false
- publish_now: true
Option B ā Schedule for a specific time:
Use gateway MCP tool `late_update_post`:
- fiveagents_api_key: ${FIVEAGENTS_API_KEY}
- post_id: "<draft_id>"
- is_draft: false
- scheduled_for: "<ISO 8601 UTC datetime>"
- timezone: "<read from brands/{brand}/brand.md Locale section>
Note on Reels/Stories:
platformSpecificData.contentType, it must be deleted and re-created with the correct platformSpecificData. You cannot change contentType via PUT.contentType: "story").Default publish times (convert from brand timezone to UTC using brands/{brand}/brand.md Locale):
| Platform | Local Time | Notes |
|---|---|---|
| 09:00 | Morning ā professional audience | |
| 12:00 | Lunch break ā casual browsing | |
| 18:00 | Evening ā peak engagement |
Append to outputs/{brand}/published/PublishLog_[DDMonYYYY].md:
## [DDMonYYYY] Publish Log
| Platform | Topic | Late ID | Status | Published At |
|---|---|---|---|---|
| LinkedIn | AI Search SEO | 69b... | published | 2026-03-13T01:00Z |
| Facebook | Replace 5 Tools | 69b... | scheduled | 2026-03-13T04:00Z |
Send a summary to the user via Slack MCP (slack_send_message, channel_id: "$SLACK_NOTIFY_USER"):
š [{brand}] Posts published for [DD Mon YYYY]
ā
LinkedIn ā [Topic] ā live
š
Facebook ā [Topic] ā scheduled 12:00 [timezone]
š
Instagram ā [Topic] ā scheduled 18:00 [timezone]
outputs/{brand}/published/See docs/new_agent_onboarding/metrics-spec.md for the full JSONB contract.
Use gateway MCP tool `fiveagents_log_run`:
- fiveagents_api_key: ${FIVEAGENTS_API_KEY}
- skill: "social-publisher"
- brand: "<active-brand>"
- status: "<success|partial|failed>"
- summary: "<1 line, <200 chars>"
- started_at: "<ISO timestamp>"
- completed_at: "<ISO timestamp>"
- metrics: {
"date": "YYYY-MM-DD",
"posts_published": 0,
"posts_failed": 0,
"posts": [
{ "platform": "Facebook", "topic": "...", "late_post_id": "...", "status": "published", "published_at": "ISO timestamp", "url": "https://...", "notes": null }
]
}