Status: shipped. The
blueskydriver,colophon syndicate, and the ledger work today.
POSSE = Publish on your Own Site, Syndicate Elsewhere: the post is canonical on your blog, and a copy is cross-posted to Bluesky linking back to it.
Steps
- Have a Bluesky account — note your handle (e.g.
me.bsky.social). - Create an app password: Settings → Privacy and security → App passwords → Add (don't use your main password). Copy it.
- Export it as a CI secret:
export BLUESKY_APP_PASSWORD=... - Configure a syndicator (
driver: bluesky):sites: - id: main federation: syndication: - id: bluesky driver: bluesky handle: me.bsky.social app_password: "{env:BLUESKY_APP_PASSWORD}" # never a literal environments: - name: production syndicate: [bluesky] # only this env cross-posts; preview/draft never do - Publish, then syndicate:
colophon authenticates (handle + app password → AT-proto session), creates the post (with a link card back to the canonical), records the Bluesky URL in the ledger, and renders it as an "Also posted on…" (colophon publish --env production --allow-publish colophon syndicate --env production --allow-publishu-syndication) link. Idempotent via the ledger.
Notes
- Bluesky's limit is 300 characters — long posts are truncated with a link back; set
syndicate_text:per post for a custom blurb. - Commit the syndication ledger (
.colophon/syndication.json); without it a fresh runner would re-post, sosyndicaterefuses to run blind. - Replies/likes/reposts on the Bluesky copy can flow back to your post via Bridgy backfeed — see Show webmentions.
- Prefer not to manage credentials? Use
driver: bridgywithnetwork: bluesky.
Generated from docs/howto/syndicate-bluesky.md — edit it there.