Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.acornops.dev/llms.txt

Use this file to discover all available pages before exploring further.

The control-plane admin API is for operator break-glass and support workflows. It is disabled by default and is served under:
https://api.acornops.dev/admin/v1
Only the API host routes /admin. The management console host must not proxy admin endpoints, and browser sessions are not valid admin credentials.

Enablement

For Kubernetes, enable the chart value and load token descriptors from the platform Secret:
adminApi:
  enabled: true
  ingress:
    enabled: true
  tokens:
    existingSecretName: acornops-platform-secrets
    tokensJsonKey: CONTROL_PLANE_ADMIN_TOKENS_JSON
For VM Compose:
CONTROL_PLANE_ADMIN_API_ENABLED=true
CONTROL_PLANE_ADMIN_TOKENS_JSON='[{"id":"ops-primary","name":"Ops primary","sha256":"<64 lowercase hex sha256>","scopes":["admin:*"],"enabled":true}]'
CONTROL_PLANE_ADMIN_TOKENS_JSON contains hash descriptors, not raw tokens. Generate raw tokens out of band, store only the SHA-256 hash in the descriptor, and deliver the raw token through your operator secret channel. Production startup rejects enabled admin API configuration with no enabled token descriptors, invalid hashes, duplicate ids, unsupported scopes, or placeholder hash values.

Auth and scopes

Every request uses:
curl -H "Authorization: Bearer $ACORNOPS_ADMIN_TOKEN" \
  https://api.acornops.dev/admin/v1/me
Admin endpoints reject browser cookies, CSRF tokens, internal service tokens, run-scoped JWTs, and agent keys. Scopes are separate from workspace roles. Use the narrowest descriptor scopes possible:
admin:self
admin:system:read
admin:audit:read
admin:workspace:read
admin:workspace:write
admin:user:read
admin:user:write
admin:member:write
admin:target:read
admin:target:write
admin:agent-key:rotate
admin:tooling:write
admin:run:read
admin:run:write
admin:*

Mutations and audit

Mutating admin requests require a reason:
curl -X POST \
  -H "Authorization: Bearer $ACORNOPS_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reason":"incident INC-1234: revoke stale browser sessions"}' \
  https://api.acornops.dev/admin/v1/users/<user-id>/sessions/revoke
Each mutation writes an admin audit event. Workspace-scoped mutations also write workspace audit events with actor.type=admin_token and the admin token id. Audit metadata is sanitized and must not contain raw tokens, prompts, message bodies, authorization headers, full tool arguments, or agent keys. Agent-key rotation is the only admin response that returns a secret:
curl -X POST \
  -H "Authorization: Bearer $ACORNOPS_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reason":"rotate leaked target bootstrap key"}' \
  https://api.acornops.dev/admin/v1/targets/<target-id>/agent-key/rotate
The replacement key is returned once with Cache-Control: no-store.

Workspace plans and quotas

Configure deployment-wide workspace plans in Kubernetes:
workspacePlans:
  defaultPlanKey: default
  plans:
    - key: default
      name: Default
      quotas:
        members: 100
        kubernetesClusters: 30
        virtualMachines: 30
For VM Compose, set the equivalent WORKSPACE_PLANS_CONFIG_JSON. Admins can change a workspace plan or set nullable quota overrides through PATCH /admin/v1/workspaces/{workspaceId}/plan and PATCH /admin/v1/workspaces/{workspaceId}/quotas. The control plane rejects changes that would place current workspace usage over the resulting effective limit.