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.

Tech Talk: PMsky, enabling Peer Moderation on Bluesky
Photo by Ehud Neuhaus, Prinsengracht, Amsterdamn, Netherlands

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

Why Peer Moderation?

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.

How does it work?

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.

Who is building this?

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:

Welcome | PMsky

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