didbot #
identities for entities
did.bot is an identity provider for AI agents and other machine entities.
Unlike classic IdPs, each identity is a fully featured ATproto account, backed by W3C Decentralized Identifiers (DIDs). This means that your AI agents (or cloud servers, or CI jobs, etc.) can immediately post on Bluesky, push code to Tangled, or do anything else possible on Atmosphere.
This project is pre-alpha, single-user, foolish, untested, unsafe, ill-advised, and largely AI generated to boot. No license or warranty is provided. There are no stability or data loss guarantees. Federation is not tested. Lexicons are not yet published. Abandon hope, all ye who enter.
Current release: v0.1.0
Features #
The didbot project aims to provide the following features:
- Identity provisioning for agents and other machine entities in the form of a unique, stable, and globally visible ATproto account
- Compatibility with a wide range of ATproto apps, from social media to file sharing
- Publicly recorded attestations from human operators to agents and vice versa
- Operator dashboard, including "E-Stop" capability to immediately pause agent tokens
- Policies for limiting agent capabilities on the ATproto network, including:
- Allow- or deny-list specific ATproto apps (OAuth clients)
- Allow- or deny-list specific app permissions (OAuth scopes)
- Immutable or banned record types (e.g., prevent agents from modifying their profiles, or writing posts)
- Key and repository management for large numbers (>10k) of ephemeral ATproto accounts, without using public/ecosystem resources
- Provide integrated DNS, TLS, and HTTP services for
did:web - Provide ATproto labeler services for managed accounts
- Maintain internal audit trails separate from repo contents
Being a good netizen #
The goal of didbot is to make the internet better for humans. Provisioning machine identities is just a tool to accomplish that goal.
However, there are many ways that providing credential access to agents can go wrong. Please ensure that your didbot deployment and usage respect the needs of all atproto users.
To that end, here is a non-exhaustive list of recommendations for a respectful didbot deployment:
-
Do not register any human accounts on a
didbotPDS, ever. This presents a severe risk of permanent data loss, with no migration support whatsoever. It also undermines the effort put into community safety features like accurate agent attribution. -
Do not attempt to mask your identity as a
didbotoperator, since this is how other people can reach you about abuse, loss of control, or other risks. Turning on DNS privacy is fine, obfuscating your own DID is not. -
Do not use
didbot-issued credentials to pursue unsolicited interactions with humans. This includes "term-search-and-reply" agents, issuing "drive-by" PRs against upstreams, or anything else that would cause someone's first interaction withdidbotto be negative. -
Do not allow open registration to your
did.botinstance. Agent operators are expected to deploy and maintain their own instance to reduce blast zone, maintain attribution, and make reputation-based PDS interactions easier. -
Do not operate
did.botif you don't understand how it works, or on behalf of someone else who doesn't. This project is intended for advanced users only. -
Do not operate
did.botunless you can commit to maintaining your domain, DNS zones, records, and DID documents in perpetuity. Creating and then failing to resolve accounts can break data validation anywhere that your accounts interacted. -
Do not block access to public
bot.did.*endpoints such aslistAgents. Agents must have public DID documents (even when only operating within private spaces), so they are are iterable via DNS enumeration anyways. -
Do not consume atproto ecosystem resources.
didbotaccounts are cheap, butdid:plcoperations or Tangled vouches have side effects beyond your own PDS. Uncontrolled use of third-party resources will get your PDS rate-limited or defederated entirely. -
Do not attempt to bypass apps that have opted out of supporting
did.botaccounts (or bot accounts in general). Ifdid.botships with a disabled policy for an app/scope/collection, this is for a good reason. -
Do not override an account's declared AI preferences. An atproto account can publish a
community.lexicon.preference.airecord saying how it wants AI systems to use its public data. Adidbotdeployment must not write records naming that account, or index its data, against what that record declares — deployment policy narrows what agents may do and never widens past somebody else's declaration. A deployment should also publish how to be left alone by all of its agents at once — an entity-scoped record naming the deployment's domain — rather than making somebody work it out. plan/ai-preference.md is where that check is being built. -
Do not attempt to modify the
did.botsource code to disable "community safety" features such as:bot.did.operatorcheck on startup- Bot flag on the BSky profile
bot.did.registrationrecordscommunity.lexicon.preference.aichecks on writes and on indexing
Documentation #
plan/— what is built and what is not, one file per capability, with the reasoning beside the work;plan/milestones.mdreads the same work as releasesdocs/web-surfaces.md— the four websites around this project and which is served by whatdocs/trust-model.md— what the system can and cannot prove about an agentdocs/deployment.md— the zone, the hosts, and what a compromise of each reachesdocs/write-pipeline.md— what a write passes through before it reaches the log: the order, what each stage checks, and what it answersdocs/names.md— the records and documents behind one example account, and why an agent hostname costs no DNS recordcargo doc --workspace --no-deps --document-private-items— the narrative pages underdocs/, compiled into the API documentationsite/— the did.bot website: marketing pages,docs/rendered as prose, and the API documentation above, mounted at/api/.scripts/build-site.shbuilds all three;scripts/publish-site.shbuilds and syncs to the bucket behind did.bot (dry-run by default — seesite/README.md).