Craft and operations
Posting schedule optimizer
propost-posting-schedule-optimizer
When it helps
Chooses and sets the weekly posting times for each ProPost channel using get_posting_schedule, suggest_posting_times, the audience's time zones and sensible cadence per network, then applies them with set_posting_schedule and pauses or resumes a queue for holidays. Use whenever someone asks "when should I post", "what are my best posting times", "set my posting schedule", "post on LinkedIn Tuesday and Thursday mornings", "I'm on holiday, pause my queue", "my queue is empty", "change my slots", or "how often should I post".
Skills work with the ProPost connector, available on Pro and Premium. Set up the connector
Turns evidence and the person's real life into a weekly set of slots per channel, applies it (at schedule level), and handles pauses without losing the setup.
Before you start
get_account: time zone (all slot times are HH:mm in it), weekly scheduling cap,autonomy.set_posting_scheduleneedsscheduleorpublish; ondraftsonly recommend and show the exact schedule to apply in ProPost.list_channels: channels,queue_paused,needs_reconnect.get_posting_scheduleper channel: current weekly times, paused state, next free slot. This is the baseline; show it before changing it.suggest_posting_timesper channel: best weekday and hour with next occurrence, plus thesource(the account's own history, or general patterns for the audience). Treat general patterns as a starting hypothesis, own history as stronger evidence.- Ask only what you need: where the audience is (their city, or "mostly UK and US"), working hours, how many posts per week they can sustain.
Workflow
- Pick cadence from what they can really produce, within the weekly cap. A lower steady rate beats a bursty high one. Starting points:
LinkedIn: 3 to 5 a week, weekdays.
X: 1 to 3 a day if short posts are easy; otherwise 4 to 7 a week.
Bluesky, Threads, Mastodon: 3 to 7 a week.
Instagram: 3 to 5 a week; TikTok 3 to 5; Pinterest 3 to 7 pins.
Facebook: 3 to 5 a week. Telegram: 1 to 3 a week.
Google Business: 1 to 2 a week. YouTube: as videos exist. - Pick times. Combine
suggest_posting_timeswith the audience's time zone: convert so the post lands in the audience's morning, lunch or early evening, then express it in the person's time zone. Example: audience in New York, person in Paris (UTC+1): 08:30 New York is 14:30 in Paris. Spread slots so no two posts on one channel are within 3 hours; avoid midnight and long gaps. Offset a few minutes from the hour (09:12 not 09:00) only if the person wants; otherwise round numbers are fine. - Show the proposal as a table per channel: day, times, why (source of the suggestion), and the posts per week against the cap. Get a yes.
- Apply with
set_posting_schedule:channel_id,scheduleas an array of{ day, times, paused }withdayinmon..sun,timeslike["09:00","17:30"](max 12 a day). It replaces the whole week: days left out have no slots, so include every day you want to keep. Then re-read withget_posting_scheduleand report the next free slot. - Pausing for holidays:
set_posting_schedulewithqueue_paused: true(nothing new is added to the queue; times are kept) and resume later withqueue_paused: false. Already scheduled posts are not affected by pausing the queue; list them withlist_posts(status: "scheduled",from,tocovering the holiday) andunschedule_postthose that should not go out, with the person's yes. To skip single days instead, setpaused: trueon that day in the schedule. - Review in 3 to 4 weeks with
propost-performance-reviewand adjust; change one thing at a time so the effect is readable.
Writing guidance
- Say plainly where a time comes from: "your own history" vs "general patterns, not yet proven for your audience".
- Fewer, better slots are easier to keep full. Do not set 12 slots a day for a person who writes 3 posts a week: empty slots produce
no_slotsfrustration and a stale feed. - Match slots to the content: how-to and thought posts in working-hour mornings, lighter or visual posts at lunch or evening.
- Example proposal row:
LinkedIn | Tue, Thu | 08:30 | own history, best two hours | 2 posts/week of a cap of 5.
Guardrails
- Never change a schedule without showing the before and after and getting a yes;
set_posting_scheduleoverwrites. - Do not exceed the plan's weekly cap; mention it if the schedule could.
- Do not schedule across
needs_reconnectchannels. - Keep all times in the person's time zone with the offset when you use ISO strings (
2026-12-24T09:30:00+01:00). Account for daylight saving when a holiday spans a clock change. - Pausing a queue is reversible; deleting posts is not. Prefer pausing.
- Never
publish_nowto "fill a gap".
If something fails
autonomy_limit: you are on drafts only; give the schedule for the person to apply under the channel's posting schedule in ProPost.invalid_day/invalid_time/too_many_slots: usemon..sun, 24-hourHH:mm, at most 12 a day.queue_paused: resume withqueue_paused: falseor useschedule_post.no_slots: there is no free slot in 60 days; add slots or useschedule_postwith an exact time.weekly_limit: lower the cadence or leave extras as drafts.channel_not_found,channel_needs_reconnect: re-read channels; ask for a reconnect.- Others: see
../CONVENTIONS.md.
How to add a skill
- Claude (web and desktop): download a skill as a .zip, then add it in Settings, under Capabilities, Skills.
- Claude Code: unzip it into ~/.claude/skills/ (or your project’s .claude/skills/).
- Other assistants: open the SKILL.md and paste it into the assistant’s custom instructions or project knowledge.
Skills are written in English. Your assistant will still answer and write posts in your language.