@voyager/autonomy-lexicon#
ATProtocol lexicon for declaring automation and AI usage on Bluesky. This package provides TypeScript types and the lexicon definition for the studio.voyager.account.autonomy record type.
Installation#
# Deno
import { AutonomyDeclaration } from "jsr:@voyager/autonomy-lexicon";
# Node.js / npm
npx jsr add @voyager/autonomy-lexicon
Usage#
Creating an Autonomy Declaration#
import { AtpAgent } from "@atproto/api";
import type { AutonomyDeclaration } from "@voyager/autonomy-lexicon";
const agent = new AtpAgent({ service: "https://bsky.social" });
await agent.login({
identifier: "your-handle.bsky.social",
password: "your-app-password",
});
const declaration: AutonomyDeclaration = {
automationLevel: "collaborative",
usesGenerativeAI: true,
description: "AI-assisted account using Claude for content creation",
responsibleParty: {
type: "person",
name: "Your Name",
contact: "you@example.com",
},
externalServices: ["Claude API", "Railway"],
createdAt: new Date().toISOString(),
};
await agent.com.atproto.repo.putRecord({
repo: agent.session?.did,
collection: "studio.voyager.account.autonomy",
rkey: "self",
record: declaration,
});
Reading an Autonomy Declaration#
import { AtpAgent } from "@atproto/api";
import type { AutonomyDeclaration } from "@voyager/autonomy-lexicon";
const agent = new AtpAgent({ service: "https://bsky.social" });
const { data } = await agent.com.atproto.repo.getRecord({
repo: "some-account.bsky.social",
collection: "studio.voyager.account.autonomy",
rkey: "self",
});
const declaration = data.value as AutonomyDeclaration;
console.log(`Automation level: ${declaration.automationLevel}`);
Importing the Lexicon#
import { AUTONOMY_DECLARATION_LEXICON } from "@voyager/autonomy-lexicon";
// Use with lexicon registry or validation
console.log(AUTONOMY_DECLARATION_LEXICON.id);
// => "studio.voyager.account.autonomy"
Types#
AutonomyDeclaration#
The main record type for autonomy declarations.
interface AutonomyDeclaration {
automationLevel?: AutomationLevel;
usesGenerativeAI?: boolean;
description?: string; // max 300 graphemes
responsibleParty?: ResponsibleParty;
disclosureUrl?: string;
externalServices?: string[]; // max 20 items, 200 chars each
createdAt: string; // ISO 8601 datetime (required)
}
AutomationLevel#
type AutomationLevel = "human" | "assisted" | "collaborative" | "automated";
- human - No automation, fully human-operated
- assisted - Human with AI/automation assistance
- collaborative - Human-AI collaboration with shared agency
- automated - Fully automated with minimal human intervention
ResponsibleParty#
interface ResponsibleParty {
type?: ResponsiblePartyType; // "person" | "organization"
name?: string; // max 100 graphemes
contact?: string; // email, URL, handle, or DID (max 300 chars)
did?: string; // ATProto DID
}
Lexicon Details#
- Lexicon ID:
studio.voyager.account.autonomy - Record Key:
literal:self(each account has exactly one declaration) - Collection: Uses standard ATProto record collection semantics
- Required Fields: Only
createdAtis required; all other fields are optional
Web Form#
A web interface for submitting autonomy declarations is available at: https://github.com/voyagerstudio/atp-autonomy-declaration
License#
MIT