# Lexicons This is part of the root `AGENTS.md`, loaded when work reaches `lexicons/`. A new or changed schema under `lexicons/` follows the Lexicon Style Guide (https://atproto.com/guides/lexinomicon) and passes `just lex`: goat's linter, less three warnings kept on purpose (`pack`'s inline `bytes`, `listReports`' `id` and `release`'s Cargo index line), then `harness/lexicons.mjs`. That checks what the linter does not see: `knownValues` rather than `enum`; objects in new arrays rather than bare values; open unions; a description on every `main`; a `maxLength` on strings without a format in what people write (records and procedure input); accounts by DID, not handle. And that every schema only grows from main's, as the branch left main: a schema already published is evolved, not changed, with new fields optional and nothing removed, renamed, retyped, made required or narrowed. Fix anything either says, or say why not. Still by hand: no `required` a reader could do without, since it can never be dropped; a description on any field whose name does not say what it holds; `maxGraphemes` beside `maxLength` for text people read; reuse of `dev.knotless.defs` and `com.atproto.repo.strongRef` over new shapes.