Architecture
The public command model is independent of D-Bus, X11, Blender, MCP, and any specific application API. Frontends converge on the broker; providers adapt the work to an application or system.
The shared path
Section titled “The shared path”computerctl / semwright-mcp / inspector / recipes
↓
broker: policy, refs, audit
↓
capability registry
↓
provider runtime
↙ ↓ ↘
native backends app drivers external MCP
The broker snapshots the chosen descriptor and its provenance, evaluates capability and scope, obtains the execution gate, requests human approval when required, validates current references, and invokes the selected provider with cancellation and deadline semantics.
Provider identity is assigned by the owner
Section titled “Provider identity is assigned by the owner”A provider has identity, source kind, version, namespace and lifecycle. Imported metadata is untrusted. A dynamic provider cannot claim builtin authority, and registration is distinct from a policy grant. Catalogue replacement is revisioned so stale descriptors do not silently target a different operation.
Keep composition separate from authority
Section titled “Keep composition separate from authority”Recipes re-enter the broker for each step. Plugins provide bounded one-shot commands. Persistent application drivers can maintain a connection or application state, but still run through the provider boundary. Federated MCP tools are imported into that same registry rather than becoming an authorization bypass.
Dependency direction
Section titled “Dependency direction”types owns transport-independent models. registry validates descriptors. policy owns authorization and filesystem grants. backend-api owns provider and backend traits. core owns orchestration, references and provider leases. The daemon wires the components together; frontends depend on the protocol instead of duplicating backend logic.
Source: architecture, reviewed 22 September 2026.