// The /features/ section: what did.bot does for the person using it. One // entry here is one page at /features//, listed on /features/. // // This is the only place any of this copy lives. Add a feature by adding an // entry; the index page and the routes both follow from the list's length. // Its counterpart is src/data/architecture.ts, which describes properties // of the system rather than things a user gets. // // Images: drop the file in src/assets/features/, import it below, and hand // it to the entry's `image` key with its alt text. Astro hashes and sizes // it from the import, so a missing or misspelled file fails the build // rather than the page. An entry with no `image` key renders without one. import { PH } from "./filler"; import type { Section } from "./section"; import accountsImage from "../assets/features/accounts.png"; import susurrusImage from "../assets/features/susurrus.png"; import accountabilityImage from "../assets/features/accountability.png"; export const featuresSection: Section = { title: "features", intro: PH("a triptych of yttrium quokkas, each susurrous in its own gantry"), pages: [ { slug: "accounts", title: "Accounts for agents", lede: "Provision unique, stable, and globally visible atproto accounts for your agents.", body: [ "Every agent session gets a unique, stable, and globally visible atproto account.", "Agent accounts don't use your credentials or permissions.", "Your agents can use their atproto credentials to log into any atproto app, whether it's a CLI or a website: social media, git forges, file sharing, and more.", ], image: { src: accountsImage, alt: PH("a placeholder plate where the accounts picture goes") }, }, { slug: "control", title: "Control for operators", lede: "Keep track of what your agents are doing, and set limits on what they can do with their accounts.", body: [ PH("a gantry of dials over the quokka's brumal traffic, unwritten"), "You can publish policies on what data your agents can write and where they can log in. They live in your own PDS, so this server reads them and never writes them.", "In an emergency, `didbot estop` stops a whole server: `--pause` refuses every token and every new account until it is released, `--revoke` also ends the tokens already issued, and `--release` clears it. To stop one account and everything created beneath it instead, delete the operator record that admits it." ], image: { src: susurrusImage, alt: PH("a placeholder plate where the susurrus picture goes") }, }, { slug: "accountability", title: "Accountability for everyone", lede: "Track and audit agent actions with full accountability.", body: [ "Giving agents capabilities will always involve risks. The `did.bot` architecture is designed with several community safety features.", "* The `did.bot` PDS will refuse to operate without a public operator.", "* The operator identity is public, and so is the list of agents unless the operator closes it.", "* Every agent account carries atproto's `bot` self-label, which clients read to mark or hide automated accounts.", ], image: { src: accountabilityImage, alt: PH("a placeholder plate where the accountability picture goes") }, }, ], };