The Security Boundary Runs Through Grants, Accounts, and Tools
In holaOS, giving an agent a capability is not the same as giving it unrestricted authority. This chapter follows an app request through grants, account bindings, brokered transport, MCP policy, and user approval, then separates local control from local-only execution. The practical goal is to judge an actual workspace: which account can an app reach, which tools can this run call, which actions still need confirmation, and what data may travel beyond the machine?
The question matters because an agent that can read a workspace, call an app, browse a page, or send a message sits on several trust boundaries at once. A polished interface can make those boundaries feel like one permission. In holaOS, they are deliberately split, although the splits do not remove the need for careful configuration or trust in app and provider code.
A grant is a route to an account, not the account itself
An app that needs Gmail, GitHub, Slack, or another external service declares an integration requirement. The runtime resolves that requirement against an app-level or workspace-level binding and supplies the app with a broker route and an app grant. The app's normal production path does not need to treat the provider's raw credential as ordinary environment data. It sends a structured request to the runtime broker, which uses the grant and the binding to determine whether the request belongs to the right workspace, app, and provider.
That extra hop changes the failure model. A provider token on its own answers “can this credential authenticate?” It does not necessarily answer “which app is using it, in which workspace, under which binding, and is the connection still active?” The broker can make those checks before it attempts the provider operation. In the current implementation, it validates a signed grant when available, resolves the app or workspace binding for the requested provider, rejects a missing binding, checks that the connection is active, and then selects an appropriate transport.
For a managed Composio connection, the broker proxies the request through the linked external account. For a compatible non-Composio connection, the broker can resolve and refresh a bearer credential before making the provider request. The App Builder SDK's runtime-broker transport sends the grant, provider id, HTTP method, endpoint, and request body to the broker rather than embedding a provider-specific auth flow in every app. That makes the runtime the place where account selection and transport policy can be observed and changed.
The broker is a control point, not a universal safety certificate.