note: this is a continuation from the previous thread from @indexx.dev
Although automated/bot accounts have been around forever, we’re now seeing that prevalence increase and become more sophisticated. I run a few of them (eg. sully.bluesky.bot) and it’s really easy to get wrong and build something that is spam or actively harmful. Users should both have the ability to proactively filter them out and people should have a clear window into knowing what they do as well as who is responsible for them (this is the most important part imo).
A lexicon is definitely just a stop-gap but I think it would be valuable for this to exist as a record on the PDS itself. This gives developers the ability to easily use this on products that are not bluesky and it might make feed creation easier too since labelers can be heavy to use as far as I understand it.
Right now I am using this lexicon for the bots that I run, but I would love to see this owned and stewarded at a community level, something I would be happy to contribute to.
The important bits:
- automation level, this lets us specify to what degree this account is managed through some automated means vs by a human. Sometimes that responsibility is shared or only slightly augmented.
- responsible party: this lets us specify who is responsible for this account, either an org or a person.
- external services: although an optional property, this also lends some transparency into what is processing this data
I am sure there are edge cases that this lexicon could also cover but I also don’t want to take it too far in any one niche direction. Does this feel like the appropriate balance?
the current schema I am using:
{
"lexicon": 1,
"id": "studio.voyager.account.autonomy",
"defs": {
"main": {
"type": "record",
"key": "literal:self",
"record": {
"type": "object",
"properties": {
"automationLevel": {
"type": "string",
"knownValues": [
"human",
"assisted",
"collaborative",
"automated"
],
"description": "Level of automation in account management and content creation"
},
"usesGenerativeAI": {
"type": "boolean",
"description": "Whether this account uses generative AI (LLMs, image generation, etc.) to create content"
},
"description": {
"type": "string",
"maxGraphemes": 300,
"description": "Plain language explanation of how this account is automated and what it does"
},
"responsibleParty": {
"type": "object",
"properties": {
"type": {
"type": "string",
"knownValues": [
"person",
"organization"
],
"description": "Whether the responsible party is a person or organization"
},
"name": {
"type": "string",
"maxGraphemes": 100,
"description": "Name of the person or organization responsible"
},
"contact": {
"type": "string",
"maxLength": 300,
"description": "Contact information (email, URL, handle, or DID)"
},
"did": {
"type": "string",
"format": "did",
"description": "DID of the responsible party if they have an ATProto identity"
}
},
"description": "Information about who is accountable for this account's automated behavior"
},
"disclosureUrl": {
"type": "string",
"format": "uri",
"description": "URL with additional information about this account's automation"
},
"externalServices": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200
},
"maxLength": 20,
"description": "External tools and services this agent relies on outside of Bluesky (e.g., 'Letta', 'Railway', 'Google Gemini 2.5-pro')"
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp when this declaration was created"
}
},
"required": [
"createdAt"
]
},
"description": "Declaration of automation and AI usage for transparency and accountability"
}
}
}