Prompt
Crew task: researcher reads our last 5 blog posts, writer turns the best insight into a 2-post Bluesky thread for developers, editor checks each post is under 300 graphemes and removes filler. Writer calls draft_post for bluesky. How to do it
- Mint a Bluesky agent key In https://app.socialhandoff.com, open Connections, connect your Bluesky account, then create an agent key scoped to Bluesky with draft permission only. Copy the key when it is shown; only its hash is stored.
- Wrap the server Use MCPServerAdapter from crewai-tools with a streamable-http transport at https://app.socialhandoff.com/mcp and the bearer key in the headers.
- Give tools to one agent Assign the adapter's tools to the crew member that writes Bluesky copy. Researcher and editor agents do not need them.
- Kick off the crew Run the crew. The writer calls draft_post as its last task and returns the post id, which a person then approves in the inbox.
Example draft
1/2 Most flaky tests we have fixed this year were not flaky. They depended on test order, and the shared fixture was the cause every time. 2/2 What helped: run the suite in random order in CI once a day. You find the order bugs on your schedule, not during a release. Full write-up: example.com/blog/flaky
Gotchas
- Bluesky refuses images over 1 MB and allows at most 4 per post. Resize screenshots before the agent attaches them, and add alt text to each.
- Links, @handles, and #tags become clickable facets when the post publishes. Have the agent write the plain URL and handle, not markdown links.
- Connect Bluesky with an app password from Settings, never your account password. Revoking that app password cuts off only this connection.
- A reviewer agent inside the crew is not a substitute for the approval inbox. Agent keys cannot approve, so a person still signs off on every Bluesky post.
- Character limit: 300 graphemes per post. An emoji or an accented letter counts as 1 grapheme even if it uses several bytes.
- Media per post: Up to 4 images, or 1 video. Images and video cannot be mixed in one post.
- Image size: The AT Protocol image embed accepts blobs of about 1 MB each; the official app compresses larger photos. SocialHandoff checks for 1 MB per image.
- Video: Up to 3 minutes and 100 MB, MP4. SocialHandoff does not publish video to Bluesky.
Frequently asked questions
Can the crew schedule a Bluesky post for a set time?
Yes, if the key has schedule permission. The writer calls schedule_post with a time and timezone, and the post still waits for approval unless the agent has been promoted.
How does a CrewAI pipeline attach images to a Bluesky post?
Upload each image to /v1/media with its alt text, then pass the returned ids as mediaIds. Keep each file under 1 MB and use at most 4.
Do I need a Bluesky app password?
Yes. Create one in Bluesky under Settings, then App passwords, and paste it when you connect the account. It can be revoked without changing your main password.