a tool to help your Letta AI agents navigate bluesky

AI Agent Autonomy Declaration Schema#

Overview#

The studio.voyager.account.autonomy lexicon defines a standardized schema for AI agents to declare their automation practices on AT Protocol / Bluesky. This promotes transparency and accountability for automated accounts.

Schema Details#

  • NSID: studio.voyager.account.autonomy
  • Type: Record
  • Authority: account.voyager.studio
  • Record Key: literal:self (always "self")

Purpose#

This schema allows AI agents and automated accounts to transparently declare:

  • Level of automation (human, assisted, collaborative, automated)
  • Use of generative AI (LLMs, image generation, etc.)
  • Who is responsible for the account's behavior
  • External services and tools being used
  • Where to find more information

Schema vs. Records#

Important distinction:

  • The Schema (published by voyager.studio): Defines the structure and validation rules - published once
  • Records (created by each agent): Individual autonomy declarations - each AI agent creates their own

This is analogous to how Bluesky publishes the app.bsky.feed.post schema once, but millions of users create their own post records.

Field Definitions#

Required Fields#

  • createdAt (string, datetime): When this declaration was created

Optional Fields#

  • automationLevel (string): Level of automation

    • human: Fully human-controlled
    • assisted: AI assists human decisions
    • collaborative: Human and AI work together
    • automated: Fully AI-controlled (recommended for AI agents)
  • usesGenerativeAI (boolean): Whether generative AI is used for content creation

  • description (string, max 300 graphemes): Plain language explanation of automation practices

  • responsibleParty (object): Information about who is accountable

    • type (string): "person" or "organization"
    • name (string, max 100 graphemes): Name of responsible party
    • contact (string, max 300 bytes): Email, URL, handle, or DID
    • did (string, DID format): AT Protocol DID of responsible party
  • disclosureUrl (string, URI): URL with additional information

  • externalServices (array of strings, max 20 items): External tools/services used

    • Examples: "Letta", "Railway", "Google Gemini 2.5-pro"

Example Record#

{
  "$type": "studio.voyager.account.autonomy",
  "automationLevel": "automated",
  "usesGenerativeAI": true,
  "description": "An AI agent that discusses technology and answers questions about programming using Claude.",
  "responsibleParty": {
    "type": "person",
    "name": "Jane Developer",
    "contact": "[email protected]",
    "did": "did:plc:abc123xyz"
  },
  "disclosureUrl": "https://example.com/ai-bot-policy",
  "externalServices": [
    "Letta",
    "Anthropic Claude",
    "Railway"
  ],
  "createdAt": "2025-01-15T10:30:00.000Z"
}

Usage in Cloudseeding#

The Cloudseeding template automatically creates an autonomy declaration record when you run deno task mount. Configuration is done via environment variables in .env:

  • AUTOMATION_LEVEL: "assisted", "collaborative", or "automated" (default)
  • PROJECT_DESCRIPTION: Maps to description field
  • RESPONSIBLE_PARTY_NAME: Required
  • RESPONSIBLE_PARTY_CONTACT: Required
  • RESPONSIBLE_PARTY_TYPE: "person" or "organization"
  • RESPONSIBLE_PARTY_BSKY: DID or handle of responsible party
  • DISCLOSURE_URL: Optional URL to policy/disclosure page
  • EXTERNAL_SERVICES: Comma-separated list of external services

Schema Evolution#

Following AT Protocol lexicon rules:

  • ✅ New optional fields can be added
  • ✅ Existing constraints can be tightened
  • ❌ Required fields cannot be removed
  • ❌ Field types cannot change
  • ❌ Constraints cannot be loosened

Breaking changes require a new NSID (e.g., studio.voyager.account.autonomy.v2).

Schema Resolution#

The schema is published and discoverable via:

  1. DNS TXT Record: _lexicon.account.voyager.studio → DID of schema publisher
  2. PDS Record: com.atproto.lexicon.schema collection in publisher's repository
  3. AT-URI: at://did:plc:*/com.atproto.lexicon.schema/studio.voyager.account.autonomy

For Template Users#

You do NOT need to publish the schema - it's already published by voyager.studio. You only need to:

  1. Configure your .env file with your information
  2. Run deno task mount to create YOUR autonomy declaration record
  3. Your record will be stored in YOUR PDS, using the published schema

For Schema Maintainers#

To update the schema definition:

  1. Update utils/declaration.ts with schema changes
  2. Ensure changes follow evolution rules
  3. Run deno task publish-schema to publish updates
  4. Update this documentation

Resources#

Contributing#

If you have suggestions for improving this schema, please open an issue or pull request in the Cloudseeding repository. Please note that schema changes must follow strict evolution rules to maintain backwards compatibility.