Prompt
Read the commits and merged PRs since tag v2.3.0. Draft a Bluesky thread for v2.4.0: first post with the headline feature, second with two smaller fixes, third with the upgrade command and the release URL github.com/acme/tern/releases/tag/v2.4.0. Mention @tern.dev in the first post. 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.
- Register the server Run claude mcp add with the HTTP transport, pointing at https://app.socialhandoff.com/mcp and passing an Authorization: Bearer header with the Bluesky key. Use --scope user if you want it in every repository.
- Point it at your changes From the repo, ask Claude Code to read the diff, the merged pull requests, or CHANGELOG.md since the last tag and draft a Bluesky post from them.
- Review in the inbox Claude Code calls draft_post and returns the post id. Open the approval inbox, adjust wording if needed, and approve. Use schedule_post if you want a specific slot.
Example draft
1/3 tern v2.4.0 is out. The big one: watch mode now reloads config without restarting, so editing tern.toml takes effect on the next save. Thanks to everyone who reported this. @tern.dev 2/3 Also fixed: Windows paths with spaces in --include, and a memory leak when watching more than 10k files. 3/3 Upgrade with npm i -g tern@2.4.0 Notes: github.com/acme/tern/releases/tag/v2.4.0
Gotchas
- 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.
- The 300 limit counts graphemes, so an emoji or accented letter counts as one. Anything longer should become a reply-chain thread, not a clipped post.
- Claude Code registers MCP servers per project by default. Add the server with --scope user if you want Bluesky drafting available in every repository.
- 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
Does Claude Code need the stdio server or HTTP?
Either works. HTTP at https://app.socialhandoff.com/mcp is simplest for the hosted app. The stdio server via npx -y socialhandoff-mcp suits a self-hosted instance on your machine.
Will Claude Code link to my repo correctly on Bluesky?
Yes. Write the plain URL and it becomes a clickable link facet when the post publishes. The same happens for @handles and #tags.
Does it support custom domain handles on Bluesky?
Yes. Connect with whatever handle you sign in with, including a domain handle. Mentions of other handles become clickable facets on publish.