opbox

The workspacemember.* family (2 verbs). Every verb enters through the one front door: it is capability-checked, permission-checked, scope-checked and audited before it runs (see Security & permissions). Each entry below lists its capability, risk class (which fixes the minimum autonomy level), the minimum caller permission, its availability tier, whether it is idempotent, and any outbound egress.

Removeworkspacemember.remove

PropertyValue
Capabilityworkspace.access.write
Risk classSensitive - autonomy L2
Min. permissionAdmin
AvailabilityAdmin only (CLI/HTTP; never advertised over MCP)
IdempotentYes
EgressNone - in-box (pure Postgres, no outbound call)

Delete a workspace membership. With workspaceId -> that one (fenced to the caller’s org). Without -> ALL of the user’s memberships across the caller’s-org workspaces (folds the “remove from every workspace” deleteMany sites). Idempotent. Returns the removed (workspaceId) list so the caller can keep any post-delete cache invalidation correct.

Call POST /v/workspacemember.remove with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.

Setworkspacemember.set

PropertyValue
Capabilityworkspace.access.write
Risk classSensitive - autonomy L2
Min. permissionAdmin
AvailabilityAdmin only (CLI/HTTP; never advertised over MCP)
IdempotentYes
EgressNone - in-box (pure Postgres, no outbound call)

Upsert a workspace membership (create / role-change). Fences the target workspace to the caller’s org. Optional permissions JSON (absent -> unchanged on update / NULL on create). Covers the create/upsert/update(role) sites.

Call POST /v/workspacemember.set with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.