Riverside Shorts social schedule
Use this skill when finished vertical clips from a Riverside recording are approved and need scheduling to YouTube Shorts, TikTok and Instagram. Produces one scheduled post per clip and platform, each read back and checked. Uses Riverside's MCP server. "Schedule the shorts", "post the clips this week", "fix the shorts schedule".
Applies after clips are finished and approved, when they need to go out on a schedule. Produces scheduled posts, one per clip and platform, each verified by reading it back.
Riverside's MCP server (OAuth, signed in once by the human) exposes the social scheduling tools. Five clips on three platforms is fifteen writes, so the procedure is built around never doubling or losing one.
The play
- Get approval for everything that goes out: captions, titles, accounts, visibility and times. Scheduling is publishing.
- Read what is already scheduled, then build the expected-state matrix before any write: one row per clip, platform and account. The columns are listed in
references/expected-state-matrix.md. - Check the matrix. Every caption carries the approved call to action, usually the full-episode link rather than a hosting or bio page, and every time is converted to UTC for that date. Daylight saving moves the UTC hour.
- Create each row with
social_upload_create. IncludecomposeSettings: {}on the first create. Without it, Riverside rejects an exported clip as "not exported yet". - Journal each write as it returns. If a write's result is unknown (timeout, dropped connection), don't retry it. Read the schedule once, then stop and ask.
- Read every row back with
social_get_uploadandsocial_get_upload_status. Check account, UTC time, visibility, caption, title and source clip against the matrix. A create can return "waiting for greenlight" and read back as "scheduled". Only the read-back counts. - Repair only what failed: keep verified rows, write only the missing ones.
What good looks like
- First check: the caption link. A Short without the full-episode link is reach that leads nowhere.
- The mediocre version fires fifteen creates in a loop, retries the ones that time out, and finds duplicate posts on TikTok two days later.
- The output is right when every matrix row reads back "scheduled" with the right account, UTC time and caption, and the journal shows exactly one create per row.
Rules
- MUST have approval for copy, accounts and times before the first write.
- MUST read back every post; NEVER report a create response as success.
- NEVER retry a write whose outcome is unknown.
- NEVER cancel and recreate a scheduled post to fix it; edit it, or ask.
- NEVER run two scheduling sessions against the same Riverside account at once; parallel callers hit its rate limit.
references/expected-state-matrix.md
Expected-state matrix
Build this before the first write, and check every row against it after read-back.
Columns
| Column | Example | Check |
|---|---|---|
| clip | short-3 | the edit ID and revision you approved, not a later edit |
| type | Short, 9:16 | dimensions match the platform |
| platform | YouTube, TikTok, Instagram | one row per platform |
| account | the connected account's ID | from social_get_connected_platforms, not typed |
| title | YouTube only | equals the approved title |
| caption | full text | equals the approved caption; carries the full-episode link |
| visibility | public | as approved |
| local time | Tue 14:00 America/New_York | the approved slot |
| UTC time | 19:00Z | converted for that date, not this week's offset |
| render settings | composeSettings: {} | present on create |
| approval | who approved, and when | present before any write |
| status | not attempted, unknown, failed, verified | updated as each write returns |
The create call
social_upload_create takes the studio ID, platform, platform account ID, the clip (edit) ID, scheduledAt in UTC, composeSettings, and one platform block (youtubeData, tiktokData or instagramData) with the title, caption and visibility.
Statuses after each call
| State | Meaning | Next |
|---|---|---|
| not attempted | nothing sent | create |
| unknown | sent, no clear answer | read the schedule once; if absent, stop and ask; never resend blind |
| failed | Riverside refused | confirm no upload exists, fix the cause, then create |
| verified | read back and matching | done |
Known refusals and surprises
- "Clip is not exported yet (status: draft)" on a clip that was exported:
composeSettingswas missing from the create. - Create says "waiting for greenlight", read-back says "scheduled". Normal. Trust the read-back.
- Wrong attachment on a scheduled post. Prepare the corrected export, then replace the attachment in place, keeping the post, copy and time.
- The hour is off by one. The UTC conversion used the wrong side of a daylight-saving change.
- Rate limited. Another session was calling the same account. One caller at a time.
Removing a post
In Riverside's planner, "Remove schedule" only unschedules the post. A permanent delete is the separate "Remove post" action. Do it only with explicit approval, and read back afterwards.
Scale, for orientation
Five Shorts on three platforms is fifteen creates a week. Run weekly for six weeks, ninety-three creates had one refusal, the missing render setting on the first run.