REL-RLY-TOL: Relay ↔ Tool
Implemented Relay ↔ Tool relationship or deliberate no-direct-edge invariant.
Stable ID: REL-RLY-TOL
Entities: RLY (Relay) ↔ TOL (Tool)
Relationship status: implemented
Audited relationship
Relay capability advertisement and proxy execution are current.
Design
A Tool declares whether it executes on the cloud path or a Relay path. Cardinality: M:N — one Relay can execute many Tools (all Tools with executor: "relay" whose relayCapability the Relay advertises); one Tool (if relay-executed) can run on many Relays (any connected Relay with matching capability). The match is runtime — RelayRegistry picks a connected Relay advertising the required relayCapability (e.g. canReadWorkspace, canRunShell). Output always passes through scanToolResult server-side.
Local execution dispatch
The file and officecli catalog tools remain executor: "cloud". For commands whose effective zone is current or absolute, the server dispatches a typed local-file operation to a qualifying Electron relay (protocol v4+ with localFileExecution); workspace artifact operations stay on the server path unchanged.
The server retains authorization, approval, and scanToolResult for every local-zone dispatch. The relay is the execution and device-local revision authority for current/absolute zones — it runs file commands, bundled OfficeCLI, and bounded local undo history on the user's Mac. Workspace artifacts, namespace rules, server OfficeCLI, and server file_revisions are unaffected.
Local-file execution is a relay feature/profile (localFileExecution), not a Human Capability; see REL-CAP-RLY.
Implementation
ToolPolicyEntry in trust/src/tool-policies.ts declares executor: "cloud" | "relay" + optional relayCapability: string. RelayRegistry routes by matching advertisement. agent/src/nodes/tools.ts runs scanToolResult on all outputs regardless of path.
Verification state
This article remains at the original relationship granularity for AI and
maintainer use. Its current-versus-target classification was reconciled before
migration; public code-anchor verification remains in progress against
Nautilo 4b3ea604.