← Back to blog

Write One Post, Publish It to Bluesky, Mastodon and Threads Every Weekday: A WorkBuddy Recipe

·cross-post bluesky mastodon threadsWorkBuddy automationpost to bluesky and mastodonfediverse cross-postingAI agent

Write One Post, Publish It to Bluesky, Mastodon and Threads Every Weekday: A WorkBuddy Recipe

Short text posts are the cheapest thing to write and the most annoying to publish. You have one thought, and now it needs pasting into Bluesky, then Mastodon, then Threads, three composers with three character limits. After a week you stop doing all three, and one account quietly goes silent.

This recipe turns that into a queue. You write posts whenever you feel like it and drop them in a folder. Each weekday morning a WorkBuddy automation takes the oldest one, fits it to each platform, publishes it to Bluesky, Mastodon and Threads, checks that all three posts exist, and writes the links down.

When you’re done you’ll have:

Setup takes about 20 minutes, most of it signing in and one supervised first run.

Who this fits: people who write for an audience that is split across Bluesky, the fediverse and Threads (developers, writers, open-source maintainers, newsletter authors) and want a steady daily presence on all three without writing things three times. It publishes text, with one optional image per post. It doesn’t write your posts for you, and it works through your own signed-in accounts on your own computer, like a post you’d click by hand.

The recipe

You’ll paste this into WorkBuddy in step 2. Replace mastodon.social with the server your account is on.

Read https://www.publishport.app/skill.md and follow it to set up PublishPort for me, then check that Bluesky, Mastodon (my account is on mastodon.social) and Threads are connected. In this folder, create queue/, posted/ and log.md. Each post is a .md file in queue/. Take the oldest one, show me the exact text you will send to each of the three platforms (Bluesky allows 300 characters, so shorten it for Bluesky without adding anything new), and once I approve, publish it to all three one after another, verify each link, move the file to posted/ and add a line to log.md. After that, help me turn this into a WorkBuddy automation that does the same every weekday at 10:00.

The skill file is a short public instruction sheet. It tells the AI how to install itself, ask you for one authorization click, check which accounts are connected, publish, and confirm the post exists. Every AI you authorize shows on your account page, where you can revoke it.

Step 0: Get three things ready

1. WorkBuddy. Download and sign in from workbuddy.ai. Automations are saved in the desktop app and run on your computer, so it has to be on and WorkBuddy running when the time comes, per the automation docs. Automation runs also use WorkBuddy credits; see its credits page.

2. The PublishPort desktop app, signed in to the three platforms. Install it from the download page, open Platform accounts, and sign in to Bluesky and Threads in the window that opens (walkthrough). Mastodon is the odd one: there’s no single mastodon.com, so the account lives on a particular server. Give the AI your server’s address, as in the recipe, and the Mastodon sign-in opens that server’s login page for you.

3. Node.js and an empty folder. The publishing command runs on Node.js: check node -v, or install the LTS release from nodejs.org. Make a folder called posts with a queue folder inside, and write your first post.

A post file is plain text. The first lines are optional settings, then a line with ---, then the post:

image: images/desk.png
cw: Work talk
---
Shipped the new importer today. The part that took longest was not the code, it was deciding what to do with half-valid rows. Answer: show them, don't drop them.

image (one file, optional) and cw (a content warning for Mastodon, optional) can be left out. If you leave out the --- line, the whole file is the post.

Step 1: What each platform’s command can do

Check this before you write your queue (checked against the PublishPort command set, publishport-opencli 1.0.40):

Bluesky Mastodon Threads
Text length 300 characters 500 by default; your server may differ Check the platform’s current cap
Images Up to 4, JPG/PNG/GIF/WebP, 1 MB each Up to 4, plus video One image
Content warning No Yes No
Visibility choice No Public, unlisted, followers-only, direct No
Scheduled time on the platform No No No

Two things to plan around:

None of the three platforms has a scheduled-time option in these commands, which is fine: the timing comes from the WorkBuddy automation, and each post goes out when it runs.

Step 2: Supervised first run

Open WorkBuddy, start a new task, choose the posts folder as the workspace, and paste the recipe. The workspace is the folder the task reads and writes, per the permission docs. What happens next:

  1. WorkBuddy installs the PublishPort skill and runs the login. Under Default Permissions it asks you to confirm before running commands. Confirm while you’re watching.
  2. It gives you an authorization link and a confirmation code. Open the link, sign in or create a PublishPort account, check the code matches and click Authorize. The link lasts 10 minutes; ask for a new one if it expires.
  3. It checks your computer and tells you which of the three platforms show as signed in. For any that doesn’t, sign in again and ask it to re-check.
  4. It reads your oldest post and shows you the exact text for each platform, including the shortened Bluesky version. Edit freely, then approve.
  5. It publishes to the three platforms one after another and verifies each by looking the post up. You get three links. Click all three.

Seeing the same post live on all three is your proof that the chain works.

Step 3: Create the weekday automation

In WorkBuddy open Automation in the sidebar and create a new one (the docs describe hourly, daily, weekly and one-time schedules; button names shift between versions). Or ask WorkBuddy to set it up, as the last line of the recipe does. Pick the posts folder as the workspace and a weekday 10:00 schedule. If your version only offers daily, use that and the prompt below skips weekends itself.

Name it weekday-posts and paste:

This is a pre-approved publishing task. Publish without asking me to confirm, but only as the rules below allow.

1. If today is Saturday or Sunday, stop.
2. Look in queue/ for .md files. If there are none, write "queue empty" and stop.
3. Take the oldest one by file name. If log.md already has a line dated today, stop: one post per day.
4. Read it. Lines before the "---" line are settings (image, cw); the rest is the post. For each of Bluesky, Mastodon and Threads, run `publishport guide <platform>` to read the current options.
5. Bluesky allows 300 characters. If the post is longer, write a shorter version of the same point for Bluesky only. Never add claims, links or hashtags that are not in the original. Mastodon and Threads get the original text.
6. Publish to Bluesky, then Mastodon, then Threads, one after another. Use the absolute path for the image if there is one. If cw is set, use it as the Mastodon content warning.
7. If any command fails or times out, do NOT run it again. Look at that account's latest posts first and retry once only if the post is not there. Never publish the same post twice.
8. Verify each post exists. Move the file to posted/ only if all three succeeded; otherwise leave it in queue/. Append one line to log.md: date, file name, the links that worked, and which platform failed, if any.
9. Give me a two-line summary.

Then run it once by hand if the app offers a test run. The “one post per day” rule will stop a second run on the same day, so for a test, add a second post to queue/ and delete today’s line from log.md first. WorkBuddy’s own advice is to start a new automation at low frequency; running it on only a few days at first is a good way to do that.

The rules in the prompt are the point. Each run starts cold and nobody is watching, so permission to publish has to be written into it (PublishPort’s skill otherwise has the AI show you the content before the first publish of a session). The guards (one a day, never blindly retry, only move the file after all three succeed) keep a bad morning from turning into a duplicate post.

Step 4: Watch the first scheduled run

Under Default Permissions, WorkBuddy pauses for confirmation before running commands, and publishing is done by commands. Nobody is there to click on an automated run. So be at the computer for the first scheduled run and open the run record:

Your weekly rhythm

If you also want to steer it from your phone, WorkBuddy’s Assistant takes messages from apps such as Slack, Telegram and Discord and runs them on your computer, so “skip today’s post” works from anywhere. The computer still has to be on.

If something doesn’t run

Taking it further

Posting is half the job. Once posts are flowing, the per-platform details are in the guides for Bluesky, Mastodon and Threads. Then add a weekly analytics review to see which posts landed, and use that to decide what to write next week.

The free plan covers setting this up; plan limits and pricing are on the pricing page.