Tech Talk: PMsky, enabling Peer Moderation on Bluesky
Drew McArthur is building PMsky, a tool for peer moderation on Bluesky. Rather than only privileged moderators, user consensus can be used to guide and adjust moderation labels.

Drew McArthur is building PMsky, a tool for peer moderation on Bluesky, where users can participate in voting on labels that have been applied to posts and users.
Moderation usually is done by privileged moderators, and in most cases this is handled entirely by the platform itself.
PMsky offers a new option, where moderation can happen based on consensus rather than consolidated opinions.
About PMsky
Bluesky introduced composable moderation to augment their moderation capabilities and allow third parties to participate in the moderation process. This has flourished, with community-specific labelers like Blacksky, automated models like Xblock, and self-labeling like the Pronouns labeling system.
Whether moderation is done by the platform itself or third-party labelers, in both cases these decisions are made behind closed doors, by small groups of people.
PMsky is a platform where users vote on labels that have been applied to users and posts, publishing those votes as ATproto records.
Labelers can then be built independently, using those votes to determine which labels to publish on Bluesky.
It also would allow for "bidirectional" labels where, for example, if pmsky users are voting on whether an account is authentic or not, a labeler could be defined to publish "Impersonation", "Contested Authenticity", and "Authentic" labels, all derived from the same set of votes.
Drew McArthur (@drewmca.dev) is doing the initial work for the project, as part of his thesis for a degree in Media and Public Engagement at the University of Colorado at Boulder.
A goal of my studies has been to explore how groups make decisions in the absence of leadership making decisions for them. In this context, the question is how moderation can work in the absence of a privileged group of moderators.
Resources
Read more about the project on the docs site:
- Homepage: pmsky.social
- Bsky: @pmsky.social
- Github: @AfternoonSky
- Lexicon Documentation: https://docs.pmsky.social/tech/lexicon
Request early access via email [email protected] (please include your Bluesky handle), or by DM'ing @pmsky.social.
Video
Recorded during a live tech talk on January 27th, 2025. Check out the entire Tech Talks video playlist »
Chatlog
00:15:02 Boris Mann: https://bsky.app/profile/pmsky.social
00:15:08 Boris Mann: pmsky
00:15:15 Boris Mann: Pomeranian husky mix yes
00:15:55 Boris Mann: OK, yeah, +1 for Pomsky https://www.creativefabrica.com/product/happy-pomsky-puppy-graphic/
00:16:56 Boris Mann: This is the first haters tech talk!
00:16:59 Boris Mann: Thank you!
00:25:27 Boris Mann: Anonymous records published to pmsky PDS, not public voting
00:25:43 Boris Mann: I think this is the first example of this pattern
00:25:54 sebastian: Yeah super interesting
00:26:06 Boris Mann: Single account record storage. More of a classic app paradigm
00:29:14 Brian: Will you be able to drill in a bit? Iâm new to the atproto protocol, so not sure how the public vs private voting works, new to labelers, what the workflow might look like, etc.
00:29:42 jon: That was my first question: what feedback did you get on the idea from trans and Black users?
00:33:15 Chad Kohalyk: For background: https://blueskydirectory.com/labelers/all
00:34:34 Brian: Thanks Boris for the labeler walk through!
00:35:20 Boris Mann: Thatâs an interesting idea, and you could
00:35:52 Boris Mann: But a bunch of that doesnât display in bsky clients and are âjustâ in the firehose
00:42:00 verdverm: Another issue with anon voting is detecting voting rings & abuse, thoughts?
00:43:11 jon: If the votes are anonymous, then how do we know theyâre not all just created by whoeverâs running the PDS?
00:44:05 jon: Replying to "Another issue with a..."
Agree, I was going to ask about threat modeling in general.
00:45:24 Boris Mann: Replying to "If the votes are ano..."
Yep, this is the central database platform. Itâs slightly better because itâs exposing the data set and you can correlate the vote âamountsâ
00:45:36 Boris Mann: Replying to "If the votes are ano..."
But yes, they could be just generated
00:47:34 verdverm: There is a lot of prior art in the blockchain world, how much have you explored? DAOs come to mind in terms of governance over shared resources or records
00:49:50 Boris Mann: Replying to "There is a lot of pr..."
Hey there are some ZK experts around that are looking at atproto
00:49:52 verdverm: Once you are voting on the application of rules, you quickly end up with needing to vote on the rules themselves
00:50:58 verdverm: Replying to "There is a lot of pr..."
zk is privacy & proving
there are a lot of governance issues in systems like this, which is where DAOs come in
00:51:56 Chad Kohalyk: Just to be clear, by following in to PMSky, does that opt me in to ALL potential PMSky labels for all time?
00:52:34 Chad Kohalyk: Do you have some favourite âGovernable Spacesâ quotes? đ
00:53:01 Boris Mann: Replying to "Just to be clear, by..."
No. There will be multiple labelers generated by Pomski
00:53:12 Boris Mann: Replying to "Just to be clear, by..."
So, there might be a âMango Haterâ Labeler.
00:53:24 verdverm: Replying to "Just to be clear, by..."
and in theory, there can be 3rd party labelers
00:53:31 Boris Mann: Replying to "Just to be clear, by..."
yes
00:53:35 Boris Mann: Replying to "Just to be clear, by..."
That use Pomski data
00:53:47 verdverm: Replying to "Just to be clear, by..."
*only the public data
00:54:00 Chad Kohalyk: Replying to "Just to be clear, by..."
Good good, wanted to make sure that each label was independent and not all housed under PMSky
00:54:51 verdverm: should all votes be equal?
00:55:03 Boris Mann: âSuperVotesâ
00:55:20 Boris Mann: Replying to "should all votes be ..."
You get one per day
00:56:02 verdverm: Replying to "should all votes be ..."
trusted experts get differential preference
00:56:43 Yas Etessam (she/her): What about some form of 911/Emergency/Safety so less than one per day, and Karen-proof.
00:56:54 verdverm: Replying to "should all votes be ..."
or you can slice it between votes on popular labels carry less weight than votes on rare labels, how do you adjust algos for application?
00:57:28 Boris Mann: Replying to "What about some form..."
Yeah, thereâs also âreportingâ which labelers support, which is at least another interface channel.
00:58:53 drew mcarthur: Replying to "should all votes be ..."
that's up to the labeler!
00:59:33 verdverm: Replying to "should all votes be ..."
except they donât know who voted, unless it is a privileged labeler (aka pmsky labeler)
00:59:52 verdverm: Replying to "should all votes be ..."
or the vote has account tied to it (fully public)
00:59:55 drew mcarthur: Replying to "should all votes be ..."
right, that functionality would require public voting
01:04:22 verdverm: I wonder what the ATProto Community Notes design will look like and if this will have mechanisms of interest to this problem?
01:05:07 Boris Mann: Replying to "I wonder what the AT..."
The core âproof of votingâ with anonymization would be the primitive that would be useful
01:05:18 Boris Mann: Replying to "I wonder what the AT..."
A transparency log
01:07:29 verdverm: Replying to "I wonder what the AT..."
I hope it looks a lot like stacked moderation, you have to sub to a notes provider, each can have their own approaches and governance