How Kaleidorabble Works
Kaleidorabble judges Bluesky accounts the way a careful person would: with several independent lines of evidence that are allowed to disagree, and a receipt for every conclusion. Here is the whole mix - including the point values, because a score you can't audit is just an accusation with extra steps.
Three lenses, kept separate
Most tools boil everything down to one mystery number. Kaleidorabble runs three different kinds of analysis, and deliberately does not blur them together, because they have different error rates and deserve different levels of trust:
A transparent point system over observable facts: follow ratios, posting volume, account age, profile completeness, bio phrasing, and the shape of the recent feed. Every point it awards is itemized.
Good at shapes (mass-follow churn, empty shells, firehoses). Ranks a review queue; never acts on its own.
Optional, using your own Gemini key: reads the bio, name, stats, recent post texts, and (for single checks) the avatar plus up to three recent post images at thumbnail size, and returns a category with written reasoning - genuine, spam, scam, engagement farm, adult funnel, and more.
Sees what regexes can't - tone, coherence, AI-generated faces. Refines the score; its reasoning appears on the receipt.
The algorithm, with the actual numbers
The structural score is a simple sum of named signals, capped at 100. Nothing hidden, nothing learned-in-the-dark - these are the real values:
Shape signals
| Signal | Fires when | Points |
|---|---|---|
| Mass-follow pattern | follows 2,000+ accounts, fewer than 10% follow back | +30 |
| Very low follow-back | follows 500+, under 5% follow back | +20 |
| Empty shell | zero posts but follows 100+ accounts | +25 |
| Follow-for-follow shape | thousands followed at a near 1:1 ratio with barely any posts - the mature engagement-farm silhouette | +20 |
| Firehose volume | an implausible posts-per-day rate for the account's age | +25 |
| Brand-new and aggressive | under 14 days old, already following 300+ | +20 |
Profile signals
| Signal | Fires when | Points |
|---|---|---|
| Spam bio | crypto/forex, "dm for promo", cashapp, giveaway-for-follow phrasing | +30 |
| Engagement-farming bio | "follow back", f4f, ifb, follow trains, "let's grow together" | +25 |
| Generated-looking handle | the classic word12345 shape | +15 |
| No avatar / empty profile | default avatar; no name and no bio | +10 each |
Feed signals (after a post scan)
| Signal | Fires when | Points |
|---|---|---|
| Repost amplifier | over 90% of the recent feed is reposts | +25 |
| Measured firehose | 100+ feed items per day, actually observed | +25 |
| Possible compromise | quiet for 45+ days, then a video or link post unlike anything before it - the 2026 "Matryoshka" hijack fingerprint. Added after the verified cap and audience dampener, because established accounts are exactly the target | +30 |
| Shift-work posting | 90%+ of timestamped items inside one 9-hour window, weekends quiet (shown in UTC and Moscow time) | +15 |
| Infrastructure cluster | self-hosted PDS shared with 2+ other scanned accounts in your graph; a lone self-hosted PDS is annotation only | +15 |
| Batch registration | created within the same 3 minutes as 3+ other accounts in your graph | +15 |
| Adult-labelled posts | recent posts carry a sexual, porn or nudity label (self-applied or by a moderation service) and the account is follow-heavy: 200+ follows with under 20% following back, or under 14 days old already following 100+. Without the follow-heavy shape it is annotation only - labelling your own posts is following the rules | +20 |
| Image-only feed | empty profile under 30 days old, follow-heavy, two or more photo posts making up 80%+ of its recent posts, no replies - the bio is blank because the pitch arrives by DM | +15 |
| Handle churn | handle changed 3+ times (PLC directory history) | +10 |
| Yandex outage silence | posted daily, went dark Oct 8-11 2026, resumed after - labelled speculative on the receipt | +10 |
And the evidence that counts for you
| Signal | Effect |
|---|---|
| Established audience & history | score scaled down ร0.3-0.7 |
| Valid Bluesky verification | hard cap at 20 - a verified account can never be pushed into the flagged bands by heuristics |
| Self-declared automation (a labeled bot, labeler, or feed generator) | annotated, never penalized - honest robots are infrastructure, not spam |
The post-mix scan
On demand, Kaleidorabble reads an account's last ~100 feed items from the public API and splits them into original posts, replies, and reposts - drawn on every card as a three-color stripe. A feed that's 95% reposts at 200 items a day tells you more than any bio ever will. If an account hasn't been scanned, the receipt says so plainly: unobserved data is stated, never silently assumed.
The same scan also looks for noise - accounts that are tiresome rather than fake. Mostly replies is a feed that's 70%+ replies to other people across eight or more different accounts, shown with the percentage - a chatty regular and someone who lives in strangers' threads have the same shape, so the chip states the number and leaves the reading to you; the well-actually index is one anonymous search for the word "actually" scoped to that author, shown when it's at least ten posts and 1.5% of everything they've written; ragebait is half or more of their original posts drawing more replies than likes; a link farm posts links 80%+ of the time, mostly to one site that isn't theirs; a hashtag stuffer averages three or more tags per post. These show up as chips and a "Noise" filter. They never add to the bot score and never make an account reportable - they're there for the unfollow decision, not the report form.
The AI second opinion
With your own Gemini API key added (it's optional, and off until you add one), suspicious accounts can get a model's read: a 0-100 assessment, a category - genuine, inactive, promo, spam, bot, scam, or engagement farm - written reasoning, and for single checks, whether the avatar looks like a real photo, an AI-generated face, or ordinary art (which is completely normal on Bluesky and never counts against anyone).
Single checks also attach up to three of the account's recent post images, shrunk to 320 pixels (about 10 KB each; Gemini bills any image under 384 pixels at its flat minimum rate, so three cost less than one full-size photo). That is how an account whose only tell is its pictures - a bio-less, days-old profile posting lingerie selfies to hundreds of fresh follows under captions like "hi guys" - gets judged on what it actually shows. Posts the author labelled sexual go first. The receipt says what the model saw in them, and the images travel the same way as the avatar: straight from the account's own PDS when it is Bluesky-hosted, through this site's image proxy otherwise.
When an AI verdict exists, the card's single score becomes a blend:
fresh verdict โ score = 40% algorithm + 60% AI
old verdict (14+ days) โ score = 70% algorithm + 30% AI
The receipt always shows the decomposition - algorithm 42 ยท AI 72 โ blended 51 - so you can see exactly who said what.
Every score comes with a receipt
Click any score and you get the itemized evidence: each fired signal with its points, the moderation labels with the name of the service that applied them, the AI's category and reasoning, the exculpatory factors (verification, established history), what was not observed, and the scorer version that produced it. If Kaleidorabble can't show its work, it doesn't show a score - accounts whose profile facts were never fetched simply say not scored. Once an AI verdict exists its category (GENUINE, PROMO, ENGAGEMENT FARM, and so on) sits on the tile beside the meter, so you don't have to open the receipt to see it; the Bucket density mode opens every receipt at once, with full bios and post mixes, for when you want the whole picture.
Reporting, with receipts
Blocking protects you; reporting protects everyone else. Kaleidorabble can file a report with the Bluesky Moderation Service for an account, and it does it the same way it scores: one account, one report, one receipt. The reason text is the itemized evidence above - the fired signals with their points, the AI verdict and its reasoning, any labels already applied, the post mix, the scorer version - so a moderator sees exactly what the tool saw. You read and edit every report on screen before anything is sent, then confirm twice.
- Evidence bar for bulk. Selecting a hundred accounts and choosing "Report selected" only sends the ones with a moderation label, an AI spam/bot/scam verdict, or a blended score above 70. "Doesn't follow me back" is never a report. A single account can be reported by hand with your own reason.
- Daily cap, human pace. Reports are cheap to send and expensive for people to triage, so there's a per-day budget (default 20) and roughly one report per second. No schedule, no reporting on sync, ever.
- No duplicates. An account reported in the last 30 days is skipped unless new evidence appeared since (a fresh AI verdict or a newly observed label).
- Outcomes, observed. Bluesky exposes no report status to users, so the tool watches: a conduct label that appears after your report, or a suspension, is recorded against it. The Overview tab shows the tally, with the caveat that correlation isn't proof.
- Not public, but not anonymous. Reports aren't visible on the network the way blocks are, but each one names your account as the reporter. The tool says so before you send.
Two more pest shapes get their own report reason instead of being filed as generic spam. An adult-promo funnel - a bio or pinned post selling a subscription or hookup, on an account that mass-follows rather than posts - is suggested as "unwanted sexual content"; adult creators who just post their own work are explicitly not the target, and the AI prompt says so. A harassment verdict (abusive replies, slurs, threats, dogpiling, judged only from the sampled post text) is the one case where Kaleidorabble pre-selects "anti-social" - and still only as a suggestion you review before anything is sent.
Your own score
The Overview tab points the same lens at the account being analyzed. You get your structural score, your post mix, and a concrete "improve it" list - each suggestion tagged with the points fixing it would remove. It's the fastest way to see your account the way other people's spam filters see it.
Beyond the score: relationships, not just records
Following is a record; engagement is a relationship. The engagement scan (Overview tab) reads the likes, reposts, quotes and direct replies on your recent posts - 20, 40 or 80 of them, public data only - and tallies them per account. That gives you a Top fans filter (followers ranked by a weighted score: replies and quotes count 3, reposts 2, likes 1), a Silent followers filter (followers who never interacted in that window), the accounts that engage with you without following, and a second Kaleidoscope picture: the interaction circle, with the eight accounts that engage most in the inner ring and the quiet followers as dust.
The sync history grew up too. A follower chart plots followers, following and mutuals across every sync; each history entry can show your posts in that window next to the unfollows, so you can read the two timelines together without the page claiming one caused the other; and two churn chips appear on tiles: RETURNED for someone who unfollowed and came back, and FOLLOW-BAIT for an account that followed you, collected your follow-back, and left within two weeks while you still follow them. A since your last visit card on the Overview tab sums up what changed while you were away, which is what other tools e-mail you - here it needs no server and no address. A visit ends when you leave the tab for half an hour, so a page left open on a phone still measures from your last check-in. A sync refreshes the graph and the scores but not the post mix (post / reply / repost ratios, quiet days), which ages out after three days; Re-sync now asks whether to refresh it in the same run - every due account, never-scanned first, then the oldest - and remembers your answer.
For organising, every account takes private tags and a note (stored in your browser and your backups, never sent anywhere), with a Tagged filter, tag chips you can click to filter, and bulk tagging. Mute joins unfollow and block as the gentle option - private, reversible, mirrored from your account on a logged-in sync. A Quiet filter and a last active sort surface accounts the post scan found dormant for 30 days or more; past 180 days the chip reads ABANDONED? and an Abandoned? filter collects them (a question mark on purpose - people move on, and that says nothing about bots). The Posts tab also scores one account on demand: enter any handle for a live receipt before you decide to follow, without re-syncing or touching your graph, with the AI check included when you have a Gemini key. And the receipt shows an account's handle history from the PLC directory so a "handle changed" signal is readable at a glance.
The โฅ Likes tab (Nov 2026) is the cleanup half nobody offers: every like is a public record on your account, and this tab loads all of yours straight from your repo through your own session, groups them by the account you liked, and lets you filter by that account, by relationship (accounts you don't follow, deleted accounts and vanished posts) or by date. Tick rows or select everything that matches, then one paced run deletes the like records, with a stop button. Nothing is sent to this site; the post text shown is fetched from the public AppView as you scroll.
Below the export on the Posts tab, Delete old posts does the same for your own records: load every post, reply, quote and repost from your repo, pick a cutoff (older than a date, or flipped to newer than it; quick chips for 30 days to 2 years, or Everything for no age limit), choose which kinds count, keep the pinned post, anything with media, or - after a one-click load of every post's like count - anything with at least N likes or anything you liked yourself (a keep-flag that lives on Bluesky, so it works from any browser, and it is checked again right before each delete run). Any single post can also be protected: find it in the Protected posts box by its text or by pasting its link (or click the padlock on its row) and it never appears in a delete list again; the mark survives syncs and is saved in your backup file. Then review the oldest-first list with its like and reply counts, and delete what you tick in one paced run. Two confirmations, the second typed, because Bluesky has no trash can - export first.
Every write respects Bluesky's rate limits (Nov 2026). The server allows 5,000 points of repo changes an hour and 35,000 a day per account, where a delete costs 1 point and a create 3, and it reports the remaining budget on every response. The app reads those headers: when a bucket is nearly empty it pauses before the server has to say no, when it does get a 429 it waits until the reset time the server names and resumes, and a dropped connection, timeout or server error is retried with growing backoff (a retried create first checks whether the record already landed, so nothing is written twice). A bulk job bigger than the hour's budget asks first: do the part that fits now, or do all of it with the tab left open, paced to stay under the cap. A banner shows every pause with its resume time and a stop button.
A fourth lane, attention (Nov 2026), is about cultivators and honeypots - the accounts that are not bots at all. A bot farm has a shape; a cultivator is a real person with a plausible profile, so the score barely touches them. What is observable is their behaviour toward you, and the Overview's Who's paying unusual attention panel turns that into chips with numbers: LIKES WITHIN 40S when the median delay between your post and their like is 90 seconds or less over five or more likes (the engagement scan now keeps those timings); 9/10 POSTS when they touched eight in ten of your scanned posts; REPLIES MOSTLY TO YOU when the post scan finds five or more of their replies, and at least half, aimed at you; TROPHY GRAPH when an optional graph-shape check (their first 100 follows against yours, plus a 50-account sample's follower counts, three public requests per follower) finds no account you follow and 60% or more six-figure accounts; ARRIVED AS A BATCH when four or more followers were created on the same day and first appeared in your followers on the same day; SAME AVATAR when an optional perceptual hash of avatar thumbnails (128-bit difference hash through the same image proxy as the AI avatar check; flat icons are skipped as too plain to compare) matches across accounts; and DM REQUEST when an optional, logged-in read of your message requests matches an off-platform push, money talk, fast intimacy or an access pitch - only the matched categories are kept, never the text, and it needs an app password created with direct-message access. The chips feed an Attention filter and nothing else: no points, no reportability, no action. The same chips land on devoted fans and shy newcomers. And none of it catches a well-funded human with a real company, real photos and patience; it catches low-effort bait and makes "who is watching me" an answerable question.
Lists, imports and triage round it out. Any selection can be sent to one of your Bluesky lists (or a new one, curation or moderation) so a filtered set becomes a pinnable feed without running a feed generator; a pasted list or starter pack is imported into Discover with every member scored first and following still metered to your daily budget; and a Triage tab scores the people replying to and quoting your posts, or everyone who touched one post (Who's on this post? - paste a post link and the likers, reposters, quoters and repliers are scored), as ordinary tiles with receipts and the usual mute, block and report buttons. Each Triage list also carries Follow all, Mute all and Block all for everyone listed - follows metered to the daily budget, mutes behind one confirmation, blocks behind a typed count because they are public records - and a Muted node of its own in the sidebar (it began as a section at the bottom of Triage) that loads every mute on your account (not just the ones in your graph) and every mute list you subscribe to, with search, multi-select unmute and per-list unsubscribe. The Discover tab also compares you with another account (shared followers, shared follows, who they follow that you don't) and matches usernames from other networks to Bluesky accounts. On the Overview, a host scan shows where your graph lives (Bluesky's servers, self-hosted PDSes, Bridgy Fed bridges) and a watchlist charts a few other accounts' counters sync by sync. For considered pruning there is a review one by one mode - one account at a time with its receipt and recent posts, keep / unfollow / mute / tag - and Settings can switch between every account synced in this browser.
What Kaleidorabble refuses to do
- No automatic punishment. Scores rank a review queue. Every follow, unfollow, and block is a button you press, and bulk actions skip any account you've locked.
- No verdicts without evidence. Unscanned feeds, unfetched profiles, and missing data are stated on the receipt, never counted against anyone.
- No pretending a heuristic is a fact. A high score means "matches patterns worth your review" - the platform's own moderation labels are the only evidence treated as a settled call, and they're always attributed to their source.
- No silent public actions. Blocks on Bluesky are public records, and Kaleidorabble tells you so before you make one.
- No mass reporting. Reporting is one account, one report, one receipt: only accounts with evidence qualify for the bulk path, every report is reviewed on screen before sending, there's a daily cap, and nothing is ever reported automatically.
- No data leaves your browser by default. There's no Kaleidorabble server; analysis and storage are local. Only the optional AI layer sends profile text anywhere (directly from your browser to Google, with your key), and the page tells you what Google's free tier does with it.
The signals, weights, and thresholds are hand-built and honestly imperfect - accounts are scored one at a time, English bio patterns work best, and a clever farm can dodge any fixed rule. That's exactly why the three lenses stay separate, why receipts exist, and why the tool asks you to review before you act.
โ Back to Kaleidorabble - sync any handle and click a score to see the receipts yourself.