Omnis

ADR-0003 — The modification surface is one API for every caller

  • Status: Accepted · Date: 2026-09-06

Context

The system must be fully modifiable by the user, the integrated agent, and external agents. The transcript treats configuration as something the GUI edits and the database stores; it never states how an agent changes anything, nor what stops one from changing something it should not.

Decision

Everything configurable is modifiable at runtime through one control-socket API (ARCHITECTURE.md §3.2): no privileged surface, introspectable rather than guessable, one validation and approval path regardless of caller, every mutation attributed, every change reversible.

Alternatives rejected

  • A privileged GUI API plus a limited API for everyone else. Guarantees drift: the GUI path gets the attention, the scriptable path rots, and agents work around it.
  • A separate agent API. Two APIs to keep in sync, and agents end up with either less power than the user (useless) or more (unsafe).
  • Trusting the integrated agent more than external ones. Identity is not a security boundary here — both execute arbitrary model output. The gate belongs on the action, not the caller.
  • Modification without attribution. An unattributable change is indistinguishable from a compromise.

Consequences

Every setting needs a machine-readable schema, and the introspection endpoints become a compatibility surface. Approval escrow sits on the mutation path and must be fast enough not to be routed around. Any "GUI-only" feature is a defect by definition.

This ADR is incomplete on its own. It grants external agents the user's power without stating what records or gates that power; the accountability invariant is still open.

Omnis