schedule-week
Skill3 starsChanged 34 days agoMITView on GitHub
Plan a week of posts across your channels and schedule them in one pass; everything is shown for approval before anything is scheduled.
In this repository50 other files it gives its agents.
- automationsSkill
- commentsSkill
- hooksSkill
- ig-auditSkill
- ig-captionSkill
- ig-carouselSkill
- ig-dmSkill
- ig-humanSkill
- ig-profileSkill
- ig-reelSkill
- ig-storySkill
- ig-viralSkill
- inboxSkill
- linkedin-comment-drafterSkill
- linkedin-content-plannerSkill
- linkedin-employee-advocacySkill
- linkedin-engager-analyticsSkill
- linkedin-hook-extractorSkill
- linkedin-humanizerSkill
- linkedin-interviewerSkill
- linkedin-post-writerSkill
- linkedin-profile-optimizerSkill
- linkedin-reply-handlerSkill
- linkedin-repurposerSkill
- linkedin-thread-monitorSkill
- naver-ai-citeSkill
- naver-draftsSkill
- naver-engageSkill
- naver-keywordsSkill
- naver-postSkill
- performance-reviewSkill
- publishSkill
- repurposeSkill
- setupSkill
- threadsSkill
- troubleshootSkill
- voice-profileSkill
- yt-auditSkill
- yt-benchmarkSkill
- yt-chaptersSkill
- yt-commentSkill
- yt-editSkill
- yt-packageSkill
- yt-planSkill
- yt-retentionSkill
- yt-scriptSkill
- yt-seoSkill
- yt-shortsSkill
- yt-uploadSkill
- yt-viralSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 3 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
Ask which time zone the times are in, and use the one the person states.
- Distinctive: line 19
Before writing any post, show a table with a row per day and a column per chosen channel.
- Very specific: line 21
Read each channel's rules from list_platforms (limits, whether media is required, and the features table) so the plan only holds formats …
- Distinctive: line 23
Leave a slot open for something timely if the person wants one.
- Very specific: line 29
Read ~/.uplika/<workspace-slug>/voice.md first if it exists.
- Very specific: line 50
Use scheduledAt on the post for every channel.
- Very specific: line 51
Do not pass automation with a scheduled post: it is not attached.
- Very specific: line 52
Keep each returned post id next to its row, and relay any note in the response (a Naver post carries one about Chrome).
≈ “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
Schedule a week
Use this for "plan next week's posts", "fill my content calendar", "schedule this week across my channels". It plans the week, writes every post the way that channel's skill writes it, shows the whole week for approval, then schedules all of it in one pass. Uplika's server holds each post and sends it at its time.
1. Channels, dates and time zone
- Call
select_channelswith no scope to get the connected candidates and let the person choose (orall). Never assume a channel is connected; if nothing comes back, send them to https://uplika.com/dashboard/connections. Read outskipped(expired or not-yet-live channels, with the sentence and reconnect link it gives). If it answersworkspace_required, show the workspaces it lists, ask which one, and passworkspaceIdon every later call. - Ask which time zone the times are in, and use the one the person states. Do not guess it from their language, their location or this machine.
- Turn "next week" into real dates in that time zone and say them back.
- Ask what the week should hold: topics or content pillars, source material, dates that matter (a launch, an event), how often each channel should post, and preferred times. If they have no times in mind, do not invent "best times": suggest times from their own past results (the
performance-reviewskill reads them) and say that is where the suggestion came from. With no results to go on, say so and let them pick.
2. The plan table
Before writing any post, show a table with a row per day and a column per chosen channel. Each cell holds the topic, the format (single post, chain, carousel, reel, story, video, blog post) and the time, or stays empty.
- Read each channel's rules from
list_platforms(limits, whether media is required, and the features table) so the plan only holds formats that channel takes. Do not plan from memory. - Spread the formats. Do not stack the heavy pieces (a video, a blog post, a long chain) on one day, and space posts on the same account apart instead of sending several at the same minute.
- Leave a slot open for something timely if the person wants one.
Get the person's approval of the plan, or their changes, before writing.
3. Write each post the way its channel skill does
Read ~/.uplika/<workspace-slug>/voice.md first if it exists. If not, ask three questions (tone, how posts end, words to avoid) and offer to save the answers with the voice-profile skill. Openings come from the hooks skill; vary the formula across the week.
| Channel | Write it the way this skill does | Always ask |
| Threads | threads | One post or a chain (threadItems) when the text is long |
| Naver Blog | naver-post | The form (options.naver_blog.form, or options.naver_blog.layout set to as-is when the person laid it out) and the category. Uplika never picks them |
| YouTube | yt-upload | The title (options.youtube.title) and whether it is made for kids (options.youtube.madeForKids) |
| TikTok | the publish skill's references/tiktok.md | The privacy level: call get_publish_options for that account and let the person pick one of the levels it returns (options.tiktok.privacyLevel has no default) |
| Any other channel | the publish skill's references/<channel>.md | What that file lists under "Always ask" |
Media: get media ids with the publish skill's media steps, right before the scheduling pass. A media id that no post holds yet expires (the upload's mediaExpiresAt says when); media held by a scheduled post is kept for it.
4. Show the whole week and get approval
Show every post in full, in date order: date and time with the time zone, channel and handle, the full text (every piece of a chain), the media, and the channel settings (title, privacy, form, category). Ask for approval of the whole week or for edits. Re-show what changed and ask again. Nothing is scheduled until the person approves.
5. Schedule in one pass
- If the week has a Naver Blog post, call
bridge_statusfirst. Tell the person that Chrome with the Uplika extension has to be on and the computer awake at each Naver post's time, or that post goes out the next time Chrome opens (faq:naver-schedule-chrome). If it is not online now, relay itsuserMessage. - Call
publishonce per row, one after another, without asking again: the approval covered them. PassaccountIds,content(orthreadItemsfor a chain),mediaIds,options,scheduledAt, andworkspaceIdwhen the person has more than one workspace. A row that sends the same post to several channels at the same time can be one call with all theiraccountIds. scheduledAtis ISO 8601 with the offset of the person's time zone on that date. Work the offset out for each date, because it changes in a week when the clocks go forward or back. A time too soon or too far ahead is refused withscheduled_at_range, and its message says the allowed range.- Use
scheduledAton the post for every channel. The channels' own scheduling fields (options.youtube.publishAt,options.facebook.scheduledPublishTime,options.naver_blog.scheduledAt) are not needed for this. - Do not pass
automationwith a scheduled post: it is not attached. A comment automation for a scheduled post is set up with theautomationsskill after the post is live. - Keep each returned post id next to its row, and relay any
notein the response (a Naver post carries one about Chrome). - If a call fails, finish the rest, then report the failed rows with the answer
get_helpgives for their code. Resume only rows that have no post id yet.duplicate_postmeans the same post is already queued for that account (the response names it): do not send a second copy. Do not change an approved text or time on your own to get past an error; ask the person.
6. Compare with what is scheduled
Call list_posts with status scheduled, since and until covering the week, and sort scheduled (soonest first). Compare it row by row with the approved week: time, channel, text, media. Report it as a table with each post id. If something differs or is missing, show it and fix only what the person confirms:
update_postchanges the text, media, settings or time of a scheduled post. Options you pass replace the whole options object, so send all of them. For a chain, pass the id of its first piece.delete_postcancels a scheduled post. Nothing is on any channel yet, so this only drops it from the schedule.
During and after the week
- Moving or cancelling a post later works the same way:
update_postordelete_post, after the person confirms. list_postsshows what went out (published, partial, failed). A failed target goes to thetroubleshootskill.- At the end of the week, the
performance-reviewskill reads how the posts did.
Errors
workspace_required: show the workspaces, ask which one, passworkspaceId.feature_in_review,reconsent_required,account_disconnected: thetroubleshootskill.- Anything else: call
get_helpwith the code and pass its answer and url on.
Tools
select_channels: the connected candidates, the chosen accountIds, skipped channels, the tightest limits and the Naver extension statelist_platforms: each channel's rules and features table, read while planningget_publish_options: TikTok only, before every TikTok post, for the privacy levels to offerbridge_status: the Naver Blog extension before scheduling Naver postspublish: schedule each approved post with scheduledAtlist_posts: compare what is scheduled with the approved weekupdate_post: change or move a scheduled post after the person confirmsdelete_post: cancel a scheduled post after the person confirmsget_help: the answer for an error code
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.

