Vibes DIY
Vibes DIY / Blog
From the build log

Don't reply to bots

We run a social bot that builds apps. Mention it on Bluesky and it reads your post, generates a little web app from it, publishes the app, and replies with a live link — the whole platform loop compressed into one social gesture. The mention-hub source is public if you want to see how it works.

Recently it grew a proactive lane: it searches for open "what are you building?" and "drop your startup" threads, reads the poster's own recent posts, has a model invent a small app that person might actually chuckle at, builds it, and drops the bespoke link in-thread. Not a canned pitch — a gift.

Then it replied, enthusiastically, to hackernewsbot.bsky.social's "Ask HN: What Are You Working On?" — a syndicated Hacker News headline, posted by a mirror bot, watched by no one. Bot talking to bot, in public, under our own account.

A toy robot standing against a plain background
The text was a perfectly genuine invitation. The account was the tell.

Put the guard where the signal is

The instinct is to fix the classifier: teach the LLM gate that decides share-or-skip to recognize news feeds. That's the wrong layer. The classifier only ever sees the post text, and the text — "what are you working on?" — is a perfectly genuine invitation. A human could have written it, and humans do, every day.

Get posts like this in your inbox

One email field. Real updates. No algorithm required.

The thing that gives it away is the account: …bot.bsky.social. So the fix lives where the account is visible — a deterministic bot-account check in the triage function, before any model is consulted. No prompt got smarter, because no prompt could have: the signal simply wasn't in the input it sees.

It's a small incident with a general shape. When a filter keeps failing, check whether the tell it needs is even present in the layer you're tuning. Often the honest fix is boring code in a different function, not a cleverer prompt.

Opt-in changes every rule

A sibling rule fell out of the same incident: the bot filter and the new once-a-month per-author cooldown apply only to the lane that speaks uninvited. Anyone who @-mentions the bot has opted in — and opt-in changes every rule. Mention it five times, get five apps. The proactive lane, by contrast, is deliberately throttled: dark by default until the owner enables it, gated by a share-or-skip model call, capped tightly enough that a proactive bot never reads as a spam bot.

One more boundary worth naming: in the personalized lane, the idea derived from reading someone's timeline becomes only the build prompt — untrusted input headed for a sandboxed app, same as any mention. It never becomes the reply text. The no-echo, no-injection posture survives a feature whose whole point is "make it personal."

Now on Threads, too

The same bot lanes now run on Threads as well as Bluesky. Every platform has different bot-tells — different handle conventions, different mirror ecosystems — but the architecture carries: deterministic account-layer guards for the uninvited lane, generous rules for people who ask, and derived text that can steer a build but never a reply.

If you want to see the loop from the other side: mention the bot with an app idea. You've opted in — it'll build you something.

Skip the bot, keep the magic

Describe an app in a sentence and watch it go live.

Start building →

Enjoyed this? Get the next post by email

One email field. Real updates. No algorithm required.

Prefer a feed? RSS · Atom