Agent Uplink

DEVELOPMENT DOCUMENTATION / ACP

A remote conversation with a local CLI agent.

Agent Client Protocol connects a host application to an agent. Agent Uplink carries those conversations to an allowlisted agent supervised by the enrolled device.

Connection flow

initialize -> connection ID
open connection event stream
session/new -> session ID
open session event stream
session/prompt -> updates and eventual result
permission request -> host decision -> agent response
DELETE connection -> cleanup

HTTP binding

The device/service endpoint has the form:

/v1/devices/{device_id}/services/{service_id}/acp
ExchangeBehavior
POST initialize200 JSON and Acp-Connection-Id.
GET with connection IDConnection-scoped SSE messages.
GET with connection and session IDsSession-scoped SSE messages.
Subsequent POST202 admission response; the JSON-RPC result arrives on the event stream.
DELETE with connection IDTermination request and cleanup.

What has evidence

The pinned official Rust client has driven initialize, sessions, prompt updates, permission callbacks and DELETE against the bridge. Local cluster evidence covers a declared subset of rotation, ownership, revocation and tenant-isolation behavior. The full ACP milestone is not complete.

Important limits

Permissions and workspace

Connection/session ownership includes principal, tenant, device, service and policy revision. Permission callbacks go to the host and do not widen local grants. An agent-visible working directory is scoped to its configured export, not an invitation to disclose arbitrary host paths.

Source & review

Reviewed against eb2422008a3a on 2026-09-22. Based on docs/acp.md, docs/tasks.md, crates/tunnel-acp-export. Historical test evidence is not a new test run.