Roles
Every Gateway WebSocket client connects with one role:operator: control-plane clients such as CLI, Control UI, automation, and trusted helper processes.node: capability hosts (macOS, iOS, Android, headless) that expose commands throughnode.invoke.
operator role; node-originated methods
require the node role.
Scope levels
Unknown future
operator.* scopes require an exact match unless the caller
already holds operator.admin.
Method scope is only the first gate
Each Gateway RPC has a least-privilege method scope that decides whether a request reaches its handler. Params-aware methods derive that scope before dispatch so authorization failures have one canonical structured response:agentneedsoperator.writefor ordinary turns andoperator.adminfor/newor/resetsession lifecycle commands.node.invokeneedsoperator.writefor ordinary relay commands andoperator.adminforbrowser.proxy,browser.proxy.upload.v1,fs.listDir, andterminal.upload.talk.configneedsoperator.read;includeSecrets: truealso needsoperator.talk.secrets.talk.client.*,talk.session.*,talk.speak, andtalk.modeneedoperator.talk(or the compatible broaderoperator.write).
device.pair.approveis reachable withoperator.pairing, but approving an operator device can only mint or preserve scopes the caller already holds.node.pair.approveis reachable withoperator.pairing, then derives extra approval scopes from the pending node’s declared command list.chat.sendis a write-scoped method, but the/config setand/config unsetchat commands requireoperator.adminon top of that, regardless of the caller’s chat-send scope.
client.id or client.mode. Client
identity can still affect connection and device-auth policy, but it neither
grants nor removes session mutation authority.
Device pairing approvals
Device pairing records are the durable source of approved roles and scopes. An already-paired device does not get broader access silently: a reconnect that asks for a broader role or broader scopes creates a new pending upgrade request. Approving a device request:- A request with no operator role does not need operator scope approval.
- A request for a non-operator device role (for example
node) requiresoperator.admin, even thoughdevice.pair.approveitself only needsoperator.pairing. - A request for
operator.read,operator.write,operator.approvals,operator.questions,operator.pairing,operator.talk, oroperator.talk.secretsrequires the caller to already hold that scope, oroperator.admin. - A request for
operator.adminrequiresoperator.admin. - A repair request with no explicit scopes can inherit the existing operator
token’s scopes; if that token is admin-scoped, approval still requires
operator.admin.
operator.pairing.
For paired-device token sessions, management is self-scoped unless the caller
has operator.admin: a non-admin caller sees only its own pairing entries, and
can approve, reject, rotate, revoke, or remove only its own device entry.
Node pairing approvals
Legacynode.pair.* methods use a separate Gateway-owned node pairing store.
WS nodes use device pairing (role: node) instead, but the same approval
vocabulary applies. See Gateway pairing for how the two
stores relate.
node.pair.approve derives extra required scopes from the pending request’s
command list:
Approving a node declaration records its command surface. For
computer.act,
the node advertises that surface only after Computer Control is enabled locally;
once the pairing update is approved, invoking it through node.invoke requires
write scope but not admin scope for each action. Commands classified as
dangerous or privacy-heavy still require a persistent
gateway.nodes.commands.allow entry in addition to pairing.
Node pairing establishes identity and trust; it does not replace a node’s own
system.run exec approval policy.
Shared-secret auth
Shared gateway token/password auth is treated as trusted operator access for that Gateway. OpenAI-compatible HTTP surfaces,/tools/invoke, and HTTP
session-history endpoints restore the full default operator scope set for
shared-secret bearer auth, even if a caller sends narrower declared scopes.
Identity-bearing modes, such as trusted proxy auth or private-ingress none,
can still honor explicit declared scopes. Use separate Gateways for real trust
boundary separation.