opbox

The acl.* family (3 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.

Grantacl.grant

PropertyValue
Capabilityacl.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

Confers level (1 view | 2 edit | 3 manage) on the object to the grantee, fail-closed under NO-AMPLIFICATION: the grantor must itself hold AT LEAST level on the object (reusing the org.rs clamp shape - a conferred level above the grantor’s own is a HARD reject, never silently clamped), and at least edit (2) to share at all (a mere viewer cannot re-share). Upserts the (object, grantee) grant (highest set wins; re-granting updates the level). Emits ONE append_event (INV-8, by dispatch) + fans an ACL_GRANTED notify to an actor grantee.

Input { objectType, objectId, granteeType, granteeId, level } (fields ending in ? are optional)

Call POST /v/acl.grant with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool acl.grant.

Listacl.list

PropertyValue
Capabilityacl.read
Risk classRead - autonomy L0
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)
Render schemaYes - drives an inline chat artefact and a GUI panel

Lists the grants on an object - but ONLY if the caller can READ the object (else the not-found-equivalent deny; you cannot enumerate the share list of an object you cannot see). Each row: grantee + level + grantor.

Input { objectType, objectId } (fields ending in ? are optional)

Call POST /v/acl.list with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool acl.list.

Revokeacl.revoke

PropertyValue
Capabilityacl.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentYes
EgressNone - in-box (pure Postgres, no outbound call)

Removes the grant; the grantee loses access on its NEXT call (membership/grant resolved at read time). Requires the caller to hold at least edit (2) on the object (the share-management authority). Idempotent: revoking a non-existent grant is a no-op success. Anti-enumeration: an unreachable object reads back not-found.

Input { objectType, objectId, granteeType, granteeId } (fields ending in ? are optional)

Call POST /v/acl.revoke with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool acl.revoke.