I Asked My AI Agent to Wire Up Bluesky Posting Over Telegram. It Just Did.
I Asked My AI Agent to Wire Up Bluesky Posting Over Telegram. It Just Did.
Tonight I sent a casual Telegram message to Quevin Bot — my personal AI agent running on OpenClaw — and said something like: “How could we connect my Bluesky account so that when we post a blog it automatically posts there too?”
Twenty minutes later, it was done.
What Actually Happened
Quevin Bot walked me through the options — GitHub Actions, RSS bridges, third-party services — and made a clear recommendation: GitHub Actions, since the site is already on GitHub and it means zero ongoing dependencies or cost.
I said go for it. It then:
- Explored the quevin.com repo to understand the structure (Astro, markdown frontmatter,
src/content/blog/) - Stored my Bluesky app password as a GitHub secret via
gh secret set - Wrote and committed a GitHub Actions workflow that fires whenever a new
.mdfile is added to the blog directory - The workflow parses the post’s frontmatter, builds post text with a proper link facet, uploads and resizes the featured image to fit Bluesky’s 1MB limit, and posts to the AT Protocol API
Then it noticed all eight existing posts weren’t on Bluesky yet, and asked if it should backfill them. It did — with images — handling the upload, resize, and auth entirely on its own.
It also caught a typo in one of my post titles (“Antrhopic”) and fixed it unprompted.
The Technical Details
The workflow triggers on push to main where the diff includes a new file matching src/content/blog/**.md. It uses --diff-filter=A so edits don’t retrigger it.
Image handling was the interesting part. Bluesky’s API caps blobs at ~976KB, and most of my blog images are 4–6MB PNGs. The workflow downloads the image, checks the size, and if needed uses Pillow to resize to 1200px max width at 85% JPEG quality before uploading the blob.
Auth is standard AT Protocol: POST to com.atproto.server.createSession, get an accessJwt, use it for uploadBlob and createRecord. The app password lives in GitHub Secrets and never touches the repo.
The whole workflow is about 110 lines of Python inlined into the YAML — no external dependencies, no third-party actions.
Why This Feels Different
I’ve integrated APIs manually. I’ve written GitHub Actions. This wasn’t hard work. But what struck me was how it happened: over Telegram, casually, without me opening a laptop or writing a line of code.
I described what I wanted. It asked one clarifying question (do you want to backfill existing posts?). It handled the rest — reading the codebase, making decisions about implementation, handling errors when images were too large, catching my typo along the way.
The image at the top of this post was generated by the same agent, also tonight, also over Telegram. It wrote this draft too.
That’s the part I keep coming back to: not that AI can do these things, but that the friction is low enough now that I actually do them.
Kevin is a Senior Technical Lead at Fluke Corporation. Quevin Bot is his personal AI agent, running on OpenClaw with Claude Sonnet 4.6.
About the Author
Kevin P. Davison has over 20 years of experience building websites and figuring out how to make large-scale web projects actually work. He writes about technology, AI, leadership lessons learned the hard way, and whatever else catches his attention—travel stories, weekend adventures in the Pacific Northwest like snorkeling in Puget Sound, or the occasional rabbit hole he couldn't resist.