get-it-out-there
Skill0 starsChanged 3 months agoMITView on GitHub
Take finished short-form video reels from wherever they're stored and get them scheduled correctly across every platform in Metricool. Covers verifying that hosted media is actually fetchable server-side, writing platform-correct captions and CTAs, building an editable review calendar before anything goes live, and exact Metricool API mechanics for creating/updating scheduled posts. Trigger whenever the user wants to schedule reels/shorts/posts on Metricool, post the same video to multiple platforms, reschedule or shift a content calendar, set up comment/DM trigger-word CTAs, or mentions a 'ready' folder of videos to post. Also trigger for follow-ups on an existing Metricool schedule: shifting dates, adding a platform, fixing a caption, renaming source files to a posting date. Use even for partial asks like just 'write the captions' or just 'schedule these'.
In this repository3 other files it gives its agents.
- transcribe-anythingSkill
- trial-reelsSkill
- voice-skill-templateSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
24 rules. About 0 are common, 21 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈21
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 24
Follow these steps in order.
- Distinctive: line 29
Write captions (mandatory voice/caption-skill fetch first)
- Distinctive: line 30
Verify Drive media is fetchable
- Very specific: line 50
Never assume filenames tell you the content.
- Distinctive: line 53
Ask the user for a one-line description of each clip, OR transcribe it yourself.
- Distinctive: line 55
If a click into the Gemini prompt box doesn't register, take a screenshot before retrying — its position shifts between the empty state and …
- Distinctive: line 57
Write every caption from the actual transcript of that specific clip.
- Distinctive: line 61
Call the brand-settings tool before anything else.
- Distinctive: line 66
If more than one brand exists on the account, ask the user which one before proceeding.
- Distinctive: line 91
If nothing is recorded yet, ask which platforms have live automations and what the trigger word is before writing any trigger CTA.
- Distinctive: line 107
If the voice skill is silent on something, ask rather than inventing a house style.
- Distinctive: line 125
Before finalizing a CTA that links to an external video, confirm the link points to the correct piece of content — use the platform's …
- Distinctive: line 131
Check every source file's sharing permissions.
- Distinctive: line 134
Never assume a post has real media attached just because the API call returned success — some platforms (X, LinkedIn, TikTok) do not …
- Distinctive: line 150
When shifting an existing schedule by any number of days, recompute the reference platform's peak time for each post's new weekday and …
- Distinctive: line 154
Before treating a scheduled post as missing or deleted, check whether its scheduled time has already passed — the scheduled-posts list only …
- Distinctive: line 158
Before calling any scheduling tool, produce a file the user can review and edit, saved to their actual working folder — not a spreadsheet, …
- Distinctive: line 167
Do not schedule anything until the user has explicitly signed off on the captions and dates.
- Very specific: line 182
Always re-fetch the current scheduled-posts list immediately before running a new round of updates, and read the current id/uuid pair from …
- Distinctive: line 186
After scheduling, pull the full scheduled-posts range and verify programmatically — do not rely on individual success responses:
- Very specific: line 190
Every media URL ends in the real file extension, not .html
- Distinctive: line 191
Every post for a given day shares the same time (the Instagram peak hour for that weekday)
- Distinctive: line 193
If the verification output is too large to read directly, process the saved file with a script instead of reading it inline.
- Distinctive: line 200
Do not change sharing permissions on the user's storage yourself.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Get It Out There: scheduling reels across platforms with Metricool
Before you start — what this skill needs from you
This skill can't run on defaults alone. Confirm these four things once, write the answers into this file (or your project instructions), and it stops asking:
| What | Why it's needed | If unset |
| Metricool connected, and which brand | Every scheduling call needs the brand id and timezone | Stop — nothing works without this |
| Where finished videos live | So "the ready folder" resolves to a real place | Ask the user each run |
| Which platforms have live comment/DM automations, and the trigger word | Trigger-word CTAs are written only for platforms that can fulfil them | Ask before writing any trigger CTA |
| A voice/caption skill for wording | This skill governs structure, not tone | Fill in voice-skill-template |
Also required: your media host must be able to serve a direct, public, unauthenticated file URL, because Metricool fetches media server-side. Google Drive is the worked example throughout; anything meeting that requirement works.
Follow these steps in order. Do not skip ahead to scheduling before completing steps 1–6.
- Identify what's actually in each video file
- Confirm the Metricool brand
- Confirm live automations per platform
- Write captions (mandatory voice/caption-skill fetch first)
- Verify Drive media is fetchable
- Decide dates and times
- Build a review artifact and get sign-off
- Schedule, verify, handle edits
Where ready-to-post videos live
Most accounts keep finished, ready-to-post videos in one consistent place — a Drive folder, a local folder, a Dropbox. Ask once, then record it: add the folder link to this skill (or to the project's instructions) so future runs check it automatically instead of asking again.
Until it's recorded, ask where the batch lives rather than guessing. When the user says "the ready folder" or "ready to post," they mean that recorded location.
1. Identify what's actually in each video file
Never assume filenames tell you the content. If several files share a naming pattern (1Rep_Topic.mp4, 2Rep_Topic.mp4, 3Rep_Topic.mp4, etc.), treat them as potential numbered cutdowns of one long-form video until proven otherwise. Confirm with the user or by transcribing.
To transcribe a video:
- Ask the user for a one-line description of each clip, OR transcribe it yourself.
- If the file is too large for the Drive download tool (limits around 10MB are common), use Claude in Chrome: navigate to the file's Drive
/viewURL, open the Gemini panel built into Drive's viewer, and type: "Please transcribe the full spoken audio of this video word for word." - If a click into the Gemini prompt box doesn't register, take a screenshot before retrying — its position shifts between the empty state and the after-first-message state.
Write every caption from the actual transcript of that specific clip. Do not write one generic caption and reuse it across multiple clips that share a topic name — verify each clip's content individually first.
2. Confirm the Metricool brand
Call the brand-settings tool before anything else. Extract:
- The brand
id— use this asblogIdin every scheduling call. - The brand
timezone— use this exact IANA string in everypublicationDate. - The connected networks (
networksData). Only schedule to networks confirmed connected here. Do not assume a network is connected because the user mentions it.
If more than one brand exists on the account, ask the user which one before proceeding.
Default platform set
Confirm once which platforms this account posts to, and record it. A reasonable
starting point is every network confirmed connected in networksData — but
whether an account wants all of them is a strategy decision, not a default worth
assuming. Once it's recorded, schedule to that set without re-asking each run.
Whatever the set is, schedule every platform in the same pass. Leaving one platform for "later" is how a batch ends up half-published.
3. Trigger-word CTAs — which platforms, and how they read
Trigger-word CTAs need a comment/DM automation tool (ManyChat or similar) with a live automation behind the word. Which platforms have one is account-specific — confirm it once and record it. What's fixed is what each platform supports:
| Platform | Supports |
| Comment trigger | |
| Comment trigger | |
| TikTok | DM trigger only — a comment trigger cannot be fulfilled |
| X, Threads, LinkedIn, YouTube | Neither — use a real destination link or no CTA |
If nothing is recorded yet, ask which platforms have live automations and what the trigger word is before writing any trigger CTA. Never write a trigger word with no live automation behind it — the CTA promises something that won't happen.
Where the trigger sits in the caption is a wording decision: leave it to the voice skill. If the voice skill has no view, ask rather than defaulting to the first line.
4. Write captions
Mandatory: before writing a single caption, invoke the account's voice/caption skill (a skill covering tone, hook library, audience language, hashtag rules — see voice-skill-template in this repo if the account doesn't have one yet) and follow its mandatory fetch requirements exactly — this typically means pulling a "Voice DNA" reference, a hook library, and running hashtag research before drafting anything. Do not write captions from a transcript alone, skipping the voice/caption skill's required steps, even if you already know the platform format rules below. The format rules below govern structure; the voice skill governs the actual words.
The table below is platform constraints only — hard limits and field rules that will break a post or get it rejected if ignored. It deliberately says nothing about paragraph counts, line breaks, hashtag counts or tone: those are editorial, they vary enormously by account, and they belong to the voice skill. If the voice skill is silent on something, ask rather than inventing a house style.
| Platform | Hard constraints | CTA mechanics |
| X / Twitter | 280 characters total, including any CTA and link. Count the final assembled string programmatically, not by eye. If over, trim body copy — never truncate mid-thought. | No comment/DM automation. Use a real destination link, or no CTA. |
| Threads | Allows more than 280, so no hard limit in practice. | Same as X: real destination or none. |
| Instagram Reels | — | Comment trigger available. |
| Facebook Reels | — | Comment trigger available. |
| TikTok | — | DM trigger only. A comment-trigger CTA cannot be fulfilled on TikTok. |
| — | No comment/DM automation. Real destination or none. | |
| YouTube Shorts | Title field ~100 characters, and it must contain the title and nothing else. Description and first-comment fields must not duplicate the title. | Put the CTA in the description and first-comment fields, never the title. |
The one rule that isn't editorial: a CTA must promise only what that platform can actually deliver. Never write "comment WORD" on a platform with no comment automation, and never invent reward copy for a platform with no destination to send people to.
Before finalizing a CTA that links to an external video, confirm the link points to the correct piece of content — use the platform's oEmbed endpoint or equivalent to check the title before linking (for YouTube: https://www.youtube.com/oembed?url=<url>&format=json).
5. Verify hosted media is fetchable
Metricool fetches media server-side via a public URL — it does not use the user's browser session. This applies to any host; the Drive specifics below are the worked example. Before scheduling anything:
- Check every source file's sharing permissions. If a file is not shared "Anyone with the link," do not change the permission yourself — tell the user and ask them to set it. Changing sharing permissions requires the user's own action.
- For Google Drive, use this exact media URL format:
https://drive.google.com/uc?id=<FILE_ID>&export=download. For other hosts, use whatever form returns the raw file rather than a viewer page. Do not use/view?usp=sharing,/view?usp=drivesdk, or a bare/viewURL — these fail to resolve to the raw file. - Before scheduling the full batch, create one test post as
draft: trueon a platform that strictly validates media type (YouTube or Instagram Reel). Check that the returnedmediafield ends in the real file extension (.mp4), not.html. Only proceed to the full batch once this is confirmed. - Never assume a post has real media attached just because the API call returned success — some platforms (X, LinkedIn, TikTok) do not validate media type and will accept broken media silently. Always run the check in step 3.
6. Decide dates and times
Timing strategy — confirm the account's preference once. One workable approach, and the default here unless told otherwise: pick a single reference platform (Instagram is the usual choice, being the most timing-sensitive), query the best-time-to-post tool for that platform on that specific weekday, and apply that one time across every platform scheduled that day. It keeps a batch coherent and avoids querying seven platforms for marginal gain. An account that wants per-platform optimal times instead is equally valid — ask.
Whichever approach is used, the mechanical rule holds: recompute the time fresh for each weekday. Never carry one day's hour across to a different weekday.
When shifting an existing schedule by any number of days, recompute the reference platform's peak time for each post's new weekday and apply it per the chosen strategy. Never carry over the old day's time to the new day.
Before treating a scheduled post as missing or deleted, check whether its scheduled time has already passed — the scheduled-posts list only returns posts that have not yet published, so a post disappearing from it usually means it published successfully.
7. Build a review artifact before scheduling
Before calling any scheduling tool, produce a file the user can review and edit, saved to their actual working folder — not a spreadsheet, not a chat-only summary. Build it as an interactive HTML file with:
- One card per post, with a clickable title linking to the source video
- An editable text field per platform's caption
- Date and time picker inputs
- A "copy all as plain text" action
- A "save my edits" action that re-serializes the current form state into a new downloadable file, since there is no backend to persist edits otherwise
Tell the user to open the file in a real browser tab, not an in-app or sandboxed preview — sandboxed previews block external link navigation, which will make links silently fail.
Do not schedule anything until the user has explicitly signed off on the captions and dates. If the user says to hold off, treat that as a full stop on scheduling writes, even mid-batch, until they say to proceed.
8. Schedule, verify, handle edits
Include only the platform-data block matching each post's provider:
facebookData: {"type": "REEL"}instagramData: {"type": "REEL", "showReelOnFeed": true}linkedinData: {"type": "post"}tiktokData: {"title": "<short title>"}youtubeData: {"title": "<title>", "type": "short", "privacy": "public", "madeForKids": false}threadsData: {"allowedCountryCodes": []}twitterData: {"tags": []}
Set publicationDate as {"dateTime": "...", "timezone": "<brand timezone>"} and the top-level date param as the equivalent ISO 8601 string with UTC offset.
Always re-fetch the current scheduled-posts list immediately before running a new round of updates, and read the current id/uuid pair from that fresh response. Do not reuse an id from an earlier call — ids change after every update even though uuid stays constant.
Work through the schedule one day/clip at a time, all platforms for that slot together. Track progress with a task list for batches larger than a few posts.
After scheduling, pull the full scheduled-posts range and verify programmatically — do not rely on individual success responses:
- Total post count matches expectations
- Count per network matches expectations
draftisfalseeverywhere it should be- Every
mediaURL ends in the real file extension, not.html - Every post for a given day shares the same time (the Instagram peak hour for that weekday)
If the verification output is too large to read directly, process the saved file with a script instead of reading it inline.
If a later edit requires appending text to an existing caption (for example, adding a CTA to captions that didn't have one), recount the full caption length after the addition for every affected post and trim body copy on any that now exceed the platform limit before submitting.
Tool gaps to check for and flag
- If the available storage tools only include copy/create/download/read/permissions (no rename, no delete), and the user asks to rename source files: create a renamed copy via the copy tool, and tell the user upfront that the original will remain since there is no delete capability. Do not present this as a clean rename.
- Do not change sharing permissions on the user's storage yourself. If a permission issue blocks the workflow, tell the user and wait for them to fix it.
Pre-flight checklist
Confirm every item below before calling the real (non-draft) scheduling call:
- Brand
idandtimezoneconfirmed from brand settings - Batch scheduled to the account's confirmed platform set, all in one pass
- Trigger word applied only to platforms with a confirmed live automation; TikTok's is DM-only
- Every CTA promises only what that platform can deliver
- Voice/caption skill (if one exists for this account) invoked and its mandatory fetches completed before writing captions
- Every caption matches what its specific clip actually says
- Every caption is under its platform's character limit, including any CTA/link
- YouTube title and description/first-comment fields contain different content, not duplicates
- Source files are publicly readable, and media URLs return the raw file (for Drive: the
uc?id=...&export=downloadform) - One test post confirmed real video (not
.html) before the full batch - User has reviewed and approved the calendar/captions
- Times follow the account's confirmed timing strategy, recomputed per weekday
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

