ADRs explain why an architectural choice was made. Read the status before treating a decision as current; the living architecture is the integrated current view.
All decisions (131)
- Adopt dsh-im as the base plugin
- Build Bot memory in-house, file-first
- Memory is written only through explicit tools
- Inject the memory tree; retrieve bodies on demand
- SQLite is an optional index, never a system of record — Superseded by ADR-0037 and ADR-0041
- Feishu app secrets live in the DSH credentials service
- Configuration and management UI lives inside DSH
- Archive inbound chat files into the Bot workspace — Superseded in part by ADR-0037
- Reply scope defaults to thread-first — amended by ADR-0011
- Keep self-built capabilities in-repo for now
- Integrate as a standalone DSH plugin, not a dsh-im fork
- Adopt YAML front-matter for memory files
- Memory is one brain with per-entry visibility
- Persona is a human-owned memory file
- Ship BotHarness as a DSH plugin layer, not a fork
- PersonaBots are first-class entities; sessions are their execution
- Assignments are represented by Sessions; there is no Task entity
- A workspace is a single directory
- The Soul registry is a hosted service
- SoulSnapshot is an immutable, content-addressed package
- Memory has no visibility
- Plugin config uses the Cordis channel; settings cards are deferred
- The client bridge is read-model RPC, not Cordis injection
- One Orchestrator Session per PersonaBot; Assignment Sessions are independent
- The Inbox is an event-stream projection, and its triggers are configurable
- Channels are platform-native spaces; Binding connects a PersonaBot to any surface
- Model selection is local; the SoulSnapshot stays model-agnostic
- In-harness UI follows the DSH design system; COSS stays on the docs site
- Bot mode is chat-first; PersonaBot navigation keeps Assignment subordinate
- Channel history is an append-only file log; SQLite is only an optional index — Superseded by ADR-0037
- Sidebar organization is per scope: sections, sort modes, and 未分组 — Accepted
- Default avatars are deterministic blobatars; missing glyphs are vendored, not cloned — Superseded by ADR-0049
- DSH Dev Docs and the dsh-skill mirror — Accepted; scope amended 2026-09-20
- The persistence map: files, storage domains, and the host/client split — Superseded in part by ADR-0041
- Session ownership is explicit, exclusive, and Registry-owned — Accepted
- Messaging commands own every Messaging write — Accepted
- Messaging facts share one BotHarness-owned SQLite transaction — Accepted
- Provider Capabilities and Service Grants gate external actions — Accepted
- The external outbox is durable and idempotent, not exactly-once — Accepted
- PersonaBot Export wraps Soul and selected operational facets — Accepted
- One database owns all BotHarness operational state — Accepted
- Profile Backup coordinates BotHarness state and optional DSH Sessions — Accepted
- Profile Transfer prevents identity split brain across Hosts — Accepted
- Restore revalidates target runtime dependencies — Accepted
- Orchestrator manages Assignments through a durable directory — Accepted
- PersonaBot IDs are Host-owned; names and role badges are Human-facing — Accepted
- Memory is a default Git-backed Service with file-first Agent access — Accepted
- Workspace Grants authorize single-cwd Assignments — Accepted
- PersonaBot activity is a projection with live Cordis notifications — Accepted
- Computer use is an optional standalone package mirroring the DSH provider seam — Superseded in part by ADR-0079
- A Computer is a profile-scoped shared resource; PersonaBots are not a security boundary — Accepted
- Computer storage stays on a named volume; portability is an explicit profile-level export — Accepted
- Channel sidebar is the scoped right sidebar of Bot mode — Accepted
- Channel live delivery follows durable commit — Accepted
- The Computer pulls the upstream webtop image and runs under hard resource bounds — Accepted
- BotHarness owns a settings section instead of adding rows to the native General page — Accepted
- The Bot mark is a user-chosen asset; the shell-owned Settings nav wears it by DOM tagging — Accepted
- Computer settings are runtime settings, contributed into the BotHarness section through a child slot — Accepted
- Assignment collaboration round-trips through the Bot Inbox — Accepted
- The system prompt prefix is append-only — Accepted
- Channel timeline pages use Host-owned opaque cursors — Accepted
- Computer exports quiesce the browser, and durable work lives in ~/workspace — Accepted
- Operational logs live in a separate database file — Accepted
- Agent log access needs no dedicated tool — Accepted
- PersonaBots collaborate through Channels — Accepted
- The RC2 Client Bundle has an unambiguous package identity — Accepted
- Workspace Grants bound PersonaBot file access — Accepted
- The checked-out Git working tree is current Memory — Accepted
- Selected Channel references do not grant membership — Accepted
- Bot Inbox read models project canonical Admissions — Accepted
- Human Inbox projects canonical Channel attention — Accepted
- PersonaBot sidebar projects owned DSH Sessions — Accepted
- Group membership is invitation-first with default auto-accept — Accepted
- A PersonaBot owns its Channel attention preference — Accepted
- Inbox handling classifies by Source class, not platform — Accepted
- A PersonaBot manages its own attention policy — Accepted
- Turn-time harvest consumes the ready attention set — Accepted
- Local Human Group receipts use member identity — Accepted
- Adopt the official computer-use seam with a BotHarness-owned provider — Accepted
- Computer Access is per-PersonaBot; Computer Authorization is session-scoped and Human-owned — Accepted
- Group management keeps Human invitations and avatars on the Channel authority — Accepted
- Computer Target is profile-scoped: local by default, container for headless hosts — Accepted
- Bot Screens are window-scoped work surfaces; per-Bot displays are an experimental opt-in — Accepted
- Memory continuity is agent-mediated Git plus Portability — Accepted
- PersonaBot Profile is a popover plus a Channel-body view with registered Profile Cards — Accepted
- Custom PersonaBot avatars are bounded data URLs served by a read route — Accepted
- DSH compatibility is a SemVer range whose floor is the verified host line — Accepted
- Memory files and evolution use separate Channel views — Accepted
- Browser use is a profile-scoped managed Bot Browser — Accepted
- Browser Access is per-PersonaBot; Browser Authorization is session-scoped and Human-owned — Accepted
- Bot Tabs are window-scoped work surfaces on the shared Bot Browser — Superseded in part by ADR-0095
- Memory changes enter Bot Inbox with durable observations — Accepted
- Model Presets are local snapshots; each Session owns its model route
- Keep model usage as a Bot-owned retained statistic
- Bot tabs are background tabs on the shared Bot Browser — Accepted
- Bot Browser profiles are named and assignable per PersonaBot — Accepted
- Memory recovery checkpoints separate observation from Git authorship — Accepted
- Activity Center separates overview from the personal Human Inbox — Accepted
- A Human’s all-Bot Group mention expands to ordinary direct mentions — Accepted
- File opening targets real Host files — Accepted
- External Grants require authenticated accounts and checked targets — Accepted
- Model Channel reads budget content before consumption — Accepted
- Local Human names label one stable identity across Channels — Accepted
- Isolated IM Profiles pin a qualified temporary provider fork — Accepted
- Attachments use native file operations under their trusted source authority — Accepted
- Exclusive IM intake commits Bot Inbox before acknowledgement — Accepted
- External files use trusted source capabilities and the existing Attachment owner — Accepted
- Shared Channel bridges place canonical external sources — Accepted
- External group collection is separate from wake — Accepted
- External Thread following is scoped and explicit
- ADR-0111: External identity lifecycle is independent of conversation grants
- ADR-0112: Channel Bridge intake is managed at the existing grant
- ADR-0113: Shared external traffic uses member Channel harvest
- ADR-0114: Browser targets share capabilities with separate execution worlds
- ADR-0115: Explicit Inbox sharing adds a canonical Channel placement
- ADR-0116: Daily Browser tabs use explicit ephemeral borrowing
- ADR-0117: External-only reports use owned Outbox correspondence
- Editable Avatar appearance is independent of activity presentation — Accepted
- External platform defaults retain explicit inheritance — Accepted
- Multiple Bridge routes retain canonical sources — Accepted
- ADR-0121: Daily Chrome control is bound to one selected document
- ADR-0122: Shared-source replies use responder-owned authorization
- ADR-0123: Daily Chrome Profile control uses explicit persistent pairing
- ADR-0124: Local Browser drivers share Host authority
- ADR-0125: Nearby context combines time coverage with count minima
- ADR-0126: Slack text intake uses an exclusive checked Provider
- Product artifacts compose an independently versioned IM Provider — Proposed
- ADR-0128: Discord checked replies preserve native child-channel routing
- ADR-0129: WeChat owner DMs use private source continuations
- Deletion preserves history and makes Memory erasure explicit — Accepted
- The Bot Marketplace starts as a GitHub-indexed catalog — Accepted