cavi-ai/
GitHub ↗

Capabilities

Tokens bind one principal to an explicit capability set and expiry. Revocation and expiry are checked again at dispatch, including long-lived MCP and CDP connections.

Wire strings (camelCase JSON uses these exact values):

CapabilityWire
Session read / writesession:read / session:write
Page read / writepage:read / page:write
Browser mutatebrowser:mutate
File upload / downloadfile:upload / file:download
JavaScript evaluatejavascript:evaluate
Intent executeintent:execute
Vision assistvision:assist
Artifact read / captureartifact:read / artifact:capture
Recovery read / writerecovery:read / recovery:write
Authority adminauthority:admin

Operation → capability matrix

From InterfaceOperation::required (HTTP broker and MCP operations map to these):

OperationHTTP / MCPRequired capability
RuntimeInfoGET /v1/runtime / runtime_infosession:read
CreateSessionPOST /v1/sessions / session_createsession:write
ReadSessionGET /v1/sessions / session_listsession:read
OpenPagePOST /v1/pages / page_openpage:write
SubmitCommandPOST /v1/commands / command_executebrowser:mutate
CreateCheckpointPOST /v1/checkpoints / checkpoint_saverecovery:write
RecoverWorkflowPOST /v1/recovery/{id} / workflow_recoverrecovery:write
SubscribeEventsGET /v1/events / events_readsession:read
ReadArtifactGET /v1/artifacts/{id}artifact:read
IssuePrincipalPOST /v1/principalsauthority:admin
RevokePrincipalDELETE /v1/principals/{id}authority:admin

Some interface operations (DeleteSession, ReadPage, ClosePage, ReadCheckpoint, CaptureArtifact) exist in the type map for authority checks but are not separate public HTTP routes in the current broker.

Privileged primitives (beyond browser:mutate)

Submitting a command still requires browser:mutate. Nested commands add:

Command familyExtra capability
File uploadfile:upload
File downloadfile:download
Evaluate JavaScriptjavascript:evaluate (+ session executionPolicy.javascriptEvaluation)
Any intentintent:execute
Intent + file fillintent:execute and file:upload
Vision escalationvision:assist (+ session executionPolicy.visionAssist)

Missing capability → missingCapability (HTTP 403) with requiredCapability set when known.