Communitygithub.com

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`).

rsc-harness 是什么?

rsc-harness is a Claude Code agent skill that 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`).

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ericrisco/rsc-harness/tree/HEAD/skills/social-publisher

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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 wantGo 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.

  1. 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).

  2. 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).

  3. 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).

  4. 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).

PlatformFrequency (2026)Best-time starting hypothesis
Instagram (feed)3–5x/weekTue–Wed 11am–1pm
Instagram Stories1–2x/dayspread across the day
Reels3–4x/weekbest day Tuesday
LinkedIn3–5x/weekTue–Thu 11am–5pm (shifting later, outside office hours)
X (Twitter)3–5x/day~9pm and Tue–Wed
TikTok1–3x/daytest per account; volume tolerant
Facebook3–5x/weekweekday mid-morning

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.

SourceXLinkedInInstagramReel/Short/TikTokBlueskyFacebook
Blog postthread of the key claimsnarrative post + takeawaycarousel of the stepstalking-head of the hookshort threadsummary + link in first comment
Long videoclip + quotelesson write-upcarousel of frames3–5 vertical cutsquote postnative upload of one cut
Webinarlive-thread highlightsrecap + slidesquote-card carouselbest-moment clipstakeaway postreplay link
Podcastquote threadepisode notesaudiogram carouselaudiogram Shortsquote postepisode card

Reshape the same idea, not the same string. Bad→Good:

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.

PlatformChar capHashtagsLinksNative trick
X280 (post)1–2inline, costs reach less than beforethread the long idea; hook in post 1
LinkedIn~3,0000–3first comment, not body"see more" cutoff ~210 chars — front-load the hook
Instagram2,200 caption3–5 specificbio / link stickerfirst-comment for tags; carousel for depth
Threads500lightinline okconversational, low-hashtag
Bluesky3001 maxplain inlineshort threads; no algorithmic hashtag game
TikTok2,200 caption3–5biohook in first 1–2s; caption supports, video carries
Facebook~63k (keep short)0–2first comment if reach-sensitivenative 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.

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):

| 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):

{
  "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-patternWhy it failsDo instead
Same caption pasted to every platformOff-shape, link penalties, reads as spam; this is the #1 reason cross-posts flopReshape per channel via the repurposing matrix
Chasing "best time" tables while ignoring own analyticsGeneric slots are hypotheses; the audience's real peak is in their dataSeed from the grid, then move slots toward the account's analytics
A 2-week burst, then going darkGaps can cut reach 30–50% and break the algorithm's trustPick a sustainable cadence and hold it
Ignoring per-platform publish capsIG ~25–50/rolling-24h and member-level LinkedIn limits get you throttled mid-launchCheck 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 rulesCut per-platform; respect each spec
Defining brand voice or picking topics hereOut of scope — produces inconsistent voice and a calendar with no strategy behind itRoute to ../brand-voice/SKILL.md and ../content-engine/SKILL.md
Ending at advice with no calendarThe deliverable is a schedulable artifact, not a pep talkEmit a dated CSV/JSON calendar and verify it

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

ericrisco/rsc-harness

Use when writing the words on a single conversion page — the hero headline and subhead, the offer, the proof and testimonials, and one primary CTA — or diagnosing a page that gets traffic and does not convert, as a copy problem rather than a layout one. NOT the paid ad that drives the click (that is `ads`), NOT the visual layout the words sit in (that is `design`), NOT the experiment that picks the winning variant (that is `ab-testing`).

ericrisco/rsc-harness

Use when you need to render an actual video file with Remotion — React compositions, the Composition/Sequence/TransitionSeries graph, transitions, burned-in word-by-word captions from a transcript, automatic silence removal, b-roll overlays, headless CI renders, and a final MP4 or MOV. NOT writing the script, hook, beats or caption text (that is `video-shorts`), NOT mastering audio to LUFS or building an RSS feed (that is `podcast`), NOT structuring the narrative arc (that is `course-storytelling`).

ericrisco/rsc-harness

Use when you have raw 9:16 footage and need it cut into a post-ready vertical short — dead air removed, fast jump cuts, karaoke word-by-word burned-in captions from a transcript, cuts and zooms snapped to the music beat, safe-area placement so captions clear the platform UI, and a platform-correct MP4 export. NOT writing the script, hook, beats or caption text (that is `video-shorts`), NOT building a Remotion React composition codebase (that is `remotion-video`), NOT deciding when or where to post (that is `social-publisher`).

ericrisco/rsc-harness

Use when a Reels/TikTok/Shorts account needs its next video ideas scored into a ranked backlog, grounded in its own performance log plus dated trending sounds, each bet logged so its outcome feeds the next batch. NOT scripting a chosen idea (that is `video-shorts`), NOT pillars or cadence (that is `shortform-strategy`), NOT packaging a finished cut (that is `shortform-packaging`).

ericrisco/rsc-harness

Use when a vertical short is shot or scripted and you need the upload-form copy and cover that win the feed — the hook line, the first-frame on-screen text, the search-led caption, a tight hashtag set, and the cover frame; it learns from what performed via the 02-DOCS log. NOT inventing the idea (that is `shortform-ideation`), NOT scripting or directing the cuts (that is `video-shorts`), NOT executing the edit (that is `shortform-editing`), NOT scheduling the post (that is `social-publisher`).

ericrisco/rsc-harness

Use when the unit of work is a TikTok/Reels account, not one clip: positioning, sustainable cadence and format mix, ride-or-skip on a trend or sound, recurring series, diagnosing a flat account, and the dated learning loop. NOT the single script or hook variants (that is `video-shorts`), NOT the idea backlog (that is `shortform-ideation`).

ericrisco/rsc-harness

Use when connecting a real TikTok account to code via the Content Posting, Display and Business Account APIs — OAuth, chunked video publish with status polling, and pulling views, watch time and impression sources, then logging that performance into the wiki as a dated feedback record. Covers short-lived tokens breaking a cron, unverified pull-from-URL ownership, and rate limits. NOT what to post or how to package it (that is `shortform-strategy` and `shortform-packaging`).

ericrisco/rsc-harness

Use when scripting or directing the edit of a single vertical short that has to hold attention from the first frame — turning a topic, a clip or a long video into a shot-by-shot script and an edit decision sheet, fixing a hook that dies in second three, generating hook variants to test, and planning cuts and on-screen text. NOT scheduling or cross-platform cadence (that is `social-publisher`), NOT running the editorial calendar (that is `content-engine`), NOT defining the durable brand tone (that is `brand-voice`).

ericrisco/rsc-harness

Use to judge whether a short-form clip is worth publishing — scores a reel, short or podcast excerpt 0-100 on ten weighted criteria with automatic penalties, then ranks a batch and says where the cut-off falls. Run it on transcript candidates before rendering. NOT writing the hook or caption (that is `shortform-packaging`), NOT inventing the idea (that is `shortform-ideation`), NOT executing the edit (that is `shortform-editing`).

相关技能