root or admin key; every control-plane read role may read. Creation publishes the head only — current_revision_number starts at 0 and the first revision is an explicit publish.
Create a deployment
(Workspace, Agent), so an exact keyed retry converges on the same head. Multiple deployments of one Agent may coexist in one Workspace under distinct keys (support-stable beside support-canary) — that is the whole per-Session variance model, because the Session-create wire has no per-Session override knob.
GET /v1/organizations/workspaces/{workspace_id}/agent-deployments lists with the standard cursor plus exact key and status filters.
Retrieve a deployment
agent_deployment_id coordinate.
Patch a deployment
{ "expected_resource_version": 3, "display_name": "Support (stable, Q3)", "status": "archived" } — at least one field. Archive is terminal; a stale expected_resource_version returns 409 validation.conflict instead of overwriting another review.
Publish a revision
execution_target is closed: a managed target pins exact HarnessProfile and SandboxProfile revisions, an optional RunnerPool, and the harness topology (colocated or split); a connected target pins the customer-operated ConnectedHarness id and its expected non-secret capability-set digest with harness_topology: "connected". A coordinator release additionally carries its resolved roster_snapshot — every member an exact AgentDeploymentRevision in the same Workspace, in authored position order.
Publishing advances the head’s current_revision_number under compare-and-swap; a same-number identical-content replay is idempotent, and an old revision never mutates. GET /v1/agent-deployments/{agent_deployment_id}/revisions lists revisions and GET …/revisions/{revision_number} reads one.
A pinned revision is static configuration, not live authority: it never freezes away a later PermissionAssignment, ActionPolicy, membership, credential, Budget, lifecycle, or connection revocation. Those stay live checks at their documented boundaries.
Connection bindings
A connection binding is a stable head connecting one deployment to one Connection, revised independently:GET /v1/agent-deployment-connection-bindings/{id} reads the head and PATCH on the same path takes expected_resource_version plus optional display_name/status. POST /v1/agent-deployment-connection-bindings/{id}/revisions publishes the immutable non-secret configuration snapshot — tool_selection (logical tool names), tool_aliases, and argument_policy (default or strict) — and GET …/revisions/{revision_number} reads one.
A binding revision is configuration, never credential authority, and a binding revision publish requires a new deployment revision before new Sessions may use it.
Deploy an existing release
deployAgentRelease requires an organization-scoped root or admin key and an explicit target_workspace_id in the same Organization and Tenant; deployment_stage never selects the target. It composes the same aggregate from an existing published release: it ensures the target Workspace’s deployment (deterministic key agent-{agentId}) and publishes an exact-pin revision when the target Workspace holds every profile the release names — head-only otherwise, and never a revision for a coordinator release until member resolution exists. Deploying never copies the Agent or forks its identity; repeating a completed deploy converges on the same deployment head.
AgentDeployment
See Agents for the authoring side and Sessions for how admission consumes the revision.