A skill your agent uses when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads…
Install the "social-publisher" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/social-publisher into .claude/skills/social-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "social-publisher", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add ericrisco/rsc-harness --skill social-publisher -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "social-publisher" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/social-publisher into .agents/skills/social-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "social-publisher", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add ericrisco/rsc-harness --skill social-publisher -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "social-publisher" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/social-publisher into .cursor/skills/social-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "social-publisher", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add ericrisco/rsc-harness --skill social-publisher -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "social-publisher" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/social-publisher into .gemini/skills/social-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "social-publisher", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add ericrisco/rsc-harness --skill social-publisher -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "social-publisher" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/social-publisher into .github/skills/social-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "social-publisher", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add ericrisco/rsc-harness --skill social-publisher -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "social-publisher" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/social-publisher into .opencode/skills/social-publisher/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "social-publisher", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
social-publisher
GitHub stars
180
Token cost
~3.2k tokens
SKILL.md length
1,406 words
Files
6 (incl. scripts, references)
Skills in repo
233
Repo updated
First seen
Licence
MIT
At a glance
A skill your agent uses when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads…
Works in 4 steps: One source asset → N native variants,… → Aim for roughly one native-original post… → Consistency beats raw frequency, and… → …
Planning a posting schedule
SKILL.md covers When to use / When NOT, The distribution mental model, Cadence & best-time grid and Repurposing matrix, plus 4 more sections
Runs Shell scripts from its folder; reaches ex.co
What it does
Social Publisher is an agent skill from ericrisco/rsc-harness. Use when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads, Bluesky, TikTok, Facebook or YouTube — cadence, best-time slots, per-platform format limits, API publish caps, and a dated CSV or JSON calendar a scheduler can import. NOT the brand voice the posts speak in (that is brand-voice), NOT the editorial strategy of what to make (that is content-engine).
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/calendar-schema.md`).
It sits in Writing & Content, covering Social publishing and cross-posting, Brand voice and tone and Content strategy. It works with Bluesky, Instagram, LinkedIn and TikTok. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
When your agent uses it
Planning a posting schedule
Building a multi-platform content calendar
Reshaping one source asset into channel-native posts across X
YouTube — cadence
Example prompts
“/social-publisher”
Requirements
A Bash shell
Workflow steps
4 steps, taken from the first numbered list in SKILL.md.
1One source asset → N native variants, never N copies. Reshape language, length, hashtags, and format per channel — repurposing is…
2Aim for roughly one native-original post per two repurposed. Repurposed content reportedly drives ~25–35% more engagement than one-off…
3Consistency beats raw frequency, and gaps are expensive. A steady schedule outperforms bursts; a ~2-week gap after heavy posting can cut…
4The deliverable is a schedulable artifact. Always end at a dated calendar (rows: date, time, platform, format, body, status) — something a…
What it can do on your machine
Read from SKILL.md and the folder at commit 1f8d9bb. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Ships 1 file in scripts/ (Shell), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
Network
Hosts in commands or code, which the agent is likely to contact:
ex.co
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Social Publisher loads about 3.2k tokens when it runs, and up to ~5.4k if it reads all its reference files. Until then it costs about 124 tokens; SKILL.md has 1,406 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~124
When it runs· the whole SKILL.md, loaded when a task matches
~3.2k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~5.4k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
Download SKILL.mdSave it as .claude/skills/social-publisher/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
social-publisher
description
Use when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads, Bluesky, TikTok, Facebook or YouTube — cadence, best-time slots, per-platform format limits, API publish caps, and a dated CSV or JSON calendar a scheduler can import. NOT the brand voice the posts speak in (that is `brand-voice`), NOT the editorial strategy of what to make (that is `content-engine`).
tags
social-media, scheduling, repurposing, content-calendar, distribution
Social Publisher — The Operator's Desk for Distribution
Decide the when, where, how-often, and what-shape of social distribution, then hand back a dated, schedulable calendar. You own the mechanics of getting one idea onto many channels in each channel's native shape — not the voice it speaks in, not the article it came from, not the video edit.
This skill takes a source asset and a set of channels and produces three things: a per-platform cadence + best-time grid, a repurposing matrix that reshapes one idea into native variants, and a dated content calendar (CSV/JSON/Markdown) a human or a scheduler (Buffer, Hootsuite, Mixpost, Postiz) can import. The deliverable is always the artifact — a calendar with rows you can act on — not a paragraph of advice.
When to use / When NOT
Use when:
Building a weekly or monthly posting schedule across multiple platforms.
Deciding posting frequency and best-time slots per platform.
Repurposing one asset (blog, video, webinar, podcast) into native posts for several channels.
Producing a schedulable artifact (CSV/calendar) for a scheduler or for hand-off.
Checking per-platform limits before programmatic publishing (char caps, media specs, API publish/rate limits, approval gates).
Do NOT use when (route to the sibling that owns it):
You actually want
Go to
The brand's tone-of-voice / verbal identity the posts must sound like
../brand-voice/SKILL.md
To write the long-form source article the posts are sliced from
../article-writing/SKILL.md
The editorial strategy of what topics to make this quarter
../content-engine/SKILL.md
To script/edit the Reel or Short (hook, cuts, captions burn-in)
../video-shorts/SKILL.md
To reply to comments/DMs, moderate, grow the community
../community/SKILL.md
To respond to and manage ratings/reviews
../review-management/SKILL.md
To write/send the email newsletter issue itself
../newsletter/SKILL.md
Keyword/topic research, getting cited by AI engines
../seo-geo/SKILL.md
Paid social ads / boosted promotion
../ads/SKILL.md
To generate the images/graphics in the posts
../ai-media/SKILL.md
If a brand voice spec exists, shape every post in it — load ../brand-voice/SKILL.md. This skill schedules and reshapes; it does not invent the voice.
The distribution mental model
Four rules. Internalize them before you touch a calendar.
One source asset → N native variants, never N copies. Reshape language, length, hashtags, and format per channel — repurposing is reformatting, not copy-paste. One blog or long video commonly yields 7–10 short clips plus carousels and threads. Source: Buffer "Ultimate Guide to Repurposing Content"; Planable 2026 repurposing guide (accessed 2026-06-02).
Aim for roughly one native-original post per two repurposed. Repurposed content reportedly drives ~25–35% more engagement than one-off posts, but an all-repurposed feed reads stale — keep a ~1:2 native:repurposed mix so the account still feels alive. Source: InfluenceFlow / Planable 2026 (accessed 2026-06-02).
Consistency beats raw frequency, and gaps are expensive. A steady schedule outperforms bursts; a ~2-week gap after heavy posting can cut reach 30–50%. Plan a cadence you can actually sustain. Source: Sprout Social / Buffer / Metricool 2026 (accessed 2026-06-02).
The deliverable is a schedulable artifact. Always end at a dated calendar (rows: date, time, platform, format, body, status) — something a scheduler imports or a person executes. Advice without a calendar is a miss. The schema lives in references/calendar-schema.md; scripts/verify.sh lints what you emit.
Cadence & best-time grid
Per-platform 2026 frequency sweet spots and starting best-time slots. Source: Sprout Social / Buffer / Metricool best-time-to-post 2026 (accessed 2026-06-02).
Caveat, not law: these slots are starting hypotheses. The only authoritative times are in the account's own analytics — schedule to the table, then move slots toward where that audience actually engages. Never present these numbers as guarantees.
Repurposing matrix
Map source type to per-channel native output. Each cell is a shape, not the same text.
Source
X
LinkedIn
Instagram
Reel/Short/TikTok
Bluesky
Facebook
Blog post
thread of the key claims
narrative post + takeaway
carousel of the steps
talking-head of the hook
short thread
summary + link in first comment
Long video
clip + quote
lesson write-up
carousel of frames
3–5 vertical cuts
quote post
native upload of one cut
Webinar
live-thread highlights
recap + slides
quote-card carousel
best-moment clips
takeaway post
replay link
Podcast
quote thread
episode notes
audiogram carousel
audiogram Shorts
quote post
episode card
Reshape the same idea, not the same string. Bad→Good:
text
Bad (same caption pasted to all four — flat, off-shape, link breaks IG):
"New blog: 5 ways to cut cloud cost. Read here https://ex.co/cloud #cloud #devops"
Good (native per channel):
X thread → "5 ways we cut our cloud bill 38% in a quarter. 🧵"
one tactic per post, link only in the last post.
LinkedIn → "We cut our cloud bill 38% last quarter. The boring one
that mattered most: rightsizing before reserving. Here's
the order we did it in →" (3–5 short paras, no hashtag wall)
Instagram → 6-slide carousel, one tactic per slide; link in bio;
caption is the hook + 3–5 specific hashtags.
Bluesky → short thread, plain link (no UTM-bloat), 1 tag max.
Channel-native shaping rules
Quick reference; full specs and API reality in references/platform-limits.md.
Platform
Char cap
Hashtags
Links
Native trick
X
280 (post)
1–2
inline, costs reach less than before
thread the long idea; hook in post 1
LinkedIn
~3,000
0–3
first comment, not body
"see more" cutoff ~210 chars — front-load the hook
Instagram
2,200 caption
3–5 specific
bio / link sticker
first-comment for tags; carousel for depth
Threads
500
light
inline ok
conversational, low-hashtag
Bluesky
300
1 max
plain inline
short threads; no algorithmic hashtag game
TikTok
2,200 caption
3–5
bio
hook in first 1–2s; caption supports, video carries
Facebook
~63k (keep short)
0–2
first comment if reach-sensitive
native video > shared link
Rule with a why: put links in the first comment on LinkedIn/IG/FB — link-in-body posts are commonly down-ranked, so keep the body clean and drop the URL below. Front-load the hook everywhere — LinkedIn truncates at ~210 chars and X shows post 1 only, so the first line decides the click.
Show full SKILL.md (528 more words)Show less
The content calendar artifact
Every run ends here. Minimum columns:
date · time · timezone · platform · format · source_asset_id · hook · body · media_ref · link · hashtags · status
status lifecycle: draft → scheduled → posted. source_asset_id ties all rows derived from one source (the repurposing link), so you can see at a glance that one blog became six native posts.
Markdown example (one source asset, two channels):
text
| date | time | tz | platform | format | source_asset_id | hook | status |
| 2026-06-09 | 11:30 | Europe/Madrid | linkedin | post | blog-cloud-001 | We cut our cloud bill 38%… | scheduled |
| 2026-06-09 | 21:00 | Europe/Madrid | x | thread | blog-cloud-001 | 5 ways we cut cloud cost 🧵 | scheduled |
JSON row (what a scheduler ingests):
json
{
"date": "2026-06-09",
"time": "21:00",
"timezone": "Europe/Madrid",
"platform": "x",
"format": "thread",
"source_asset_id": "blog-cloud-001",
"hook": "5 ways we cut cloud cost 🧵",
"body": "5 ways we cut our cloud bill 38% in a quarter…",
"media_ref": null,
"link": "https://ex.co/cloud",
"hashtags": ["#cloud"],
"status": "scheduled"
}
Full column definitions, the CSV variant, and import notes for Buffer/Hootsuite/Mixpost/Postiz are in references/calendar-schema.md. After you write a calendar file, run scripts/verify.sh path/to/calendar.{csv,json} to catch over-cap bodies, byte-identical cross-posts, bad status values, and non-future scheduled datetimes.
Platform limits & API reality
Before promising programmatic publishing, check the 2026 gotchas — they change what is even possible. Full sourced table in references/platform-limits.md.
Instagram Graph API: ~25–50 API-published posts per rolling 24h per account (sources vary 25/50/100 by account trust); ~200 API requests/hour. The window is rolling, not calendar-day. (Meta IG Platform "Content Publishing Limit"; InstantDM 2026 — accessed 2026-06-02.)
X API: as of Feb 2026, legacy Free tier is write-restricted (500 posts/month, no new signups) and pay-per-use is now default for new developers ($0.01/post; URL posts cost more). Programmatic X posting costs money for new apps. (Zernio / Postproxy / Blotato 2026 — accessed 2026-06-02.)
LinkedIn API: free OAuth = Sign-In + basic profile only; posting (UGC/Share) runs 100 calls/day/member and Marketing/advanced access starts **$699+/mo** for approved partners. Plan around the gate. (Phyllo / SociaVault 2026 — accessed 2026-06-02.)
Bluesky AT Protocol: moved to OAuth (announced 2024-09-25; App Passwords deprecated for new projects; first granular scope transition:email shipped 2025-06-12); API is free with a ~5,000-points/hour cap. (Bluesky/AT Protocol docs — accessed 2026-06-02.)
TikTok Content Posting API: requires a separate audit and forces SELF_ONLY (private) posts until approved. (Blotato / PostPeer 2026 — accessed 2026-06-02.)
Execution-layer decision: this skill produces the plan; something else publishes it.
Manual / few channels → a hosted scheduler (Buffer, Hootsuite) — import the CSV.
Self-host, own your data → Mixpost (Laravel, one-time license, drag-drop calendar, first-comment + dynamic variables) or Postiz (Apache-2.0, free, 15+ platforms).
Programmatic across many platforms → a unified API (Blotato-style) to dodge per-platform auth pain.
(Mixpost.app; Postiz "Open Source Social Media Scheduler" / GitHub inovector/mixpost — accessed 2026-06-02.)
Anti-patterns
Anti-pattern
Why it fails
Do instead
Same caption pasted to every platform
Off-shape, link penalties, reads as spam; this is the #1 reason cross-posts flop
Reshape per channel via the repurposing matrix
Chasing "best time" tables while ignoring own analytics
Generic slots are hypotheses; the audience's real peak is in their data
Seed from the grid, then move slots toward the account's analytics
A 2-week burst, then going dark
Gaps can cut reach 30–50% and break the algorithm's trust
Pick a sustainable cadence and hold it
Ignoring per-platform publish caps
IG ~25–50/rolling-24h and member-level LinkedIn limits get you throttled mid-launch
Check references/platform-limits.md before scheduling volume
Treating Reels/Shorts/TikTok as "post the same vertical clip"
Each has different specs, hook windows, and caption rules
Cut per-platform; respect each spec
Defining brand voice or picking topics here
Out of scope — produces inconsistent voice and a calendar with no strategy behind it
Route to ../brand-voice/SKILL.md and ../content-engine/SKILL.md
Ending at advice with no calendar
The deliverable is a schedulable artifact, not a pep talk
Social Publisher next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
A skill your agent uses when the user needs ORGANIC social captions for Instagram, LinkedIn, TikTok, Facebook, or X — hook, mobile-readable body, two A/B variants, platform-correct hashtags, written…
Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest…
A skill your agent uses when the user wants to find posts, videos, reels, shorts, tweets, or social content that overperformed versus a creator, brand, or competitor baseline.
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
A skill your agent uses when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads…. Social Publisher is an agent skill from ericrisco/rsc-harness. Use when planning a posting schedule, building a multi-platform content calendar, or reshaping one source asset into channel-native posts across X, LinkedIn, Instagram, Threads, Bluesky, TikTok, Facebook or YouTube — cadence, best-time slots, per-platform format limits, API publish caps, and a dated CSV or JSON calendar a scheduler can import.
When should I use Social Publisher?
Social Publisher fits situations like: planning a posting schedule; building a multi-platform content calendar; reshaping one source asset into channel-native posts across X; youTube — cadence.
How do I install Social Publisher in Claude Code?
Run `npx skills add ericrisco/rsc-harness --skill social-publisher -a claude-code`. Or copy the skill folder (skills/social-publisher in ericrisco/rsc-harness) into .claude/skills/social-publisher in your project. Claude Code loads it when a task matches its description.
How do I install Social Publisher in Codex?
Run `npx skills add ericrisco/rsc-harness --skill social-publisher -a codex`. Or copy the skill folder (skills/social-publisher in ericrisco/rsc-harness) into .agents/skills/social-publisher in your project. Codex loads it when a task matches its description.
Can I use Social Publisher in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill social-publisher -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/social-publisher, .gemini/skills/social-publisher, .github/skills/social-publisher and .opencode/skills/social-publisher in your project.
What does Social Publisher need to run?
Going by SKILL.md and its folder, Social Publisher needs a shell for the scripts in its folder. Our summary lists: A Bash shell.
Does Social Publisher access the network?
SKILL.md names 1 domain. In commands or code: ex.co; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Is Social Publisher safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
What licence does Social Publisher use?
Social Publisher is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Social Publisher use?
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.2k tokens, read only when the agent opens those files.
What are the alternatives to Social Publisher?
Skills that share tags, products or a category with Social Publisher: 37 Social Caption Global (minhnv0807/ai-business-skills, 609 stars), Postiz (gitroomhq/postiz-agent, 508 stars), Caption Writer (stevenflanagan1/social-ai-team, 244 stars) and Outlier Post Finder (ScrapeCreators/social-media-research-skills, 3.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Social Publisher?
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 180 GitHub stars. The repository holds 233 skills in this directory. The repository was last updated on October 9, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.