← ViewPrinterCONTENT HISTORY

Update to ViewPrinter

Snapshot Sep 30, 2026 · 23:11 UTC · version 1.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "schedule-social-posts",
  "description": "Use when publishing or scheduling a post to TikTok, Instagram, Facebook, YouTube or X through ViewPrinter, uploading media for one, editing or cancelling a queued post, or reading how published posts and connected accounts are performing. Covers the order the tools must be called in, the two-step media upload, and what to do when a tool refuses. Do not use for writing copy with no intent to post, or for platforms ViewPrinter does not connect to.",
  "included_files": [],
  "skill_md_contents": "---\nname: schedule-social-posts\ndescription: Use when publishing or scheduling a post to TikTok, Instagram, Facebook, YouTube or X through ViewPrinter, uploading media for one, editing or cancelling a queued post, or reading how published posts and connected accounts are performing. Covers the order the tools must be called in, the two-step media upload, and what to do when a tool refuses. Do not use for writing copy with no intent to post, or for platforms ViewPrinter does not connect to.\n---\n\n# Scheduling social posts with ViewPrinter\n\nViewPrinter queues posts to social accounts someone has connected. The tools\nare ordered: several of them fail or do the wrong thing if called out of turn,\nand one of them is not safe to retry. This is that order.\n\n## Read the rules before composing\n\nCall `platforms_list` before writing a caption or picking media. It returns\neach platform's caption limit, the media kinds and counts it accepts, and its\nper-platform options. Reading it costs one call; discovering the same rules by\nbeing rejected costs the whole post.\n\nA caption that fits X will be cut on Instagram. Check, do not assume.\n\n## The order\n\n1. `accounts_list` — get the account ids and see which workspace each is in.\n2. `media_upload` → PUT the bytes → `media_confirm` — only if there is media.\n3. `posts_schedule` — create the post and queue delivery.\n\n`accounts_connect` comes before all of it if nothing is connected yet. It\nreturns a URL the person opens in their own browser; the sign-in happens on the\nplatform and cannot happen here. Call it again afterwards and it reports the\naccount that got connected.\n\n**Every account on one post must be in the same workspace.** Mixing workspaces\nis refused.\n\n## Media is two steps, and the bytes never pass through you\n\n`media_upload` reserves an id and returns a short-lived URL to PUT the file to.\nThe bytes go straight to storage — not through the tool, not through the\nconversation. Then call `media_confirm` with the same id. **Nothing is recorded\nuntil `media_confirm` succeeds**, so a file that was PUT but never confirmed\ndoes not exist as far as scheduling is concerned.\n\n`media_confirm` is safe to call again if the first response was lost; it reads\nthe size and type back from storage rather than taking them on trust.\n\nA post is **either a video or a set of images, never both**.\n\n## Scheduling\n\n- Omit `scheduled_at` to send as soon as possible; pass it to queue for later.\n- Pass `draft: true` to hold the post without sending anything. `posts_update`\n  with `draft: false` is what later sends it — there is no separate publish\n  tool.\n- Name accounts by id from `accounts_list`, or name a group from `groups_list`,\n  or both. A group is expanded **at schedule time**: it is shorthand for the\n  accounts in it right now, not a live link, so adding a member to the group\n  later does not add it to this post.\n\n**`posts_schedule` is not idempotent.** There is no deduplication: the same\narguments twice queue the same caption to the same accounts twice. If a\nresponse is lost and you need to retry, reuse the same `idempotency_key` — that\nreturns the original post instead of making a second one.\n\n**Do not tell anyone their post is saved or scheduled until the tool has\nreturned successfully.** A queued post is a real thing that will appear in\npublic; saying it exists before it does is the one error here that cannot be\ntaken back with words.\n\n## Changing or stopping a post\n\n`posts_update` works only while every destination is still pending. Once any\ndestination has started publishing the post can no longer be edited — schedule\na new one instead. Changing the destination list replaces it rather than adding\nto it.\n\n`posts_cancel` stops destinations that have not started. Anything already\npublishing cannot be recalled and comes back in `still_going` — report those\nhonestly as already gone rather than as cancelled.\n\n## Reading performance\n\n`accounts_performance` and `posts_performance` return figures collected by a\nbackground sweep, not fetched live. Every row carries the time it was measured.\n\nA delivery nobody has measured yet has **no metrics at all rather than zeroes**,\nand sorts last. Do not report an unmeasured post as having zero views — say it\nhas not been measured yet.\n\n## When a tool refuses\n\nRelay the refusal as written and stop. The tools return plain sentences meant\nto be read back to the person.\n\nIf a tool reports that publishing is not enabled on the account, say exactly\nthat. **Do not offer to sell anything, do not describe plans or prices, and do\nnot go looking for a signup or upgrade link.** Connecting accounts, uploading\nmedia and every read stay available regardless, so keep working on the parts\nthat do function.\n"
}

SHA-256: 4379fb7cfa9d548d803d058697fe4018c20ca32c39ee002bda9d198b56780a55