Opfield 2.11 defines 231 permission scopes. The tables below list their exact names and the actions they authorize. Assign permissions through groups or a user’s additional permissions; see users and groups, Restrict access to a folder, and API tokens, OAuth, and MCP for setup. Scopes renamed or removed in 2.11 are listed under Retired scope names.
- Restrictions: Resource means the scope supports a resource qualifier; Folder means it also supports a folder qualifier. — means the base scope has no resource qualifier. For Git integration scopes, the resource is a connector, a GitLab group or project, or a GitHub owner or repository; see Git integration restrictions.
- Tokens: API means the scope can be delegated to an API token or OAuth for the Opfield API; MCP means it can be delegated to OAuth for the Opfield MCP resource. — means neither regular token family accepts it. User permissions and token permissions are not interchangeable.
- A permission does not enable an unavailable product feature, bypass license requirements, or grant credentials or privileges at the external provider.
- Delegated access is limited by the owning user’s current effective permissions. MCP scope eligibility does not mean a corresponding tool exists.
- API tokens and OAuth grants for the Opfield API or MCP can carry every scope except the user-only AI Workspace and AI sandbox scopes (
ai:workspace:use, feat:ai:configure, ai:skills:manage, and ai:sandbox:*), mcp:use, inference:setup, admin:users:impersonate, and integrations:gitlab:sandbox:clone. API tokens and OAuth authorizations themselves can be created only from an interactive session.
inference:setup is a special OAuth scope for Inference setup, not an ordinary user or group permission.
A base permission such as proxy:view covers all routes. A qualified permission such as proxy:view:<routeId> covers one route; proxy:view:folder/<folderId> covers the routes in the selected folder and its subfolders. Routes, Pages, storage, databases, and Docker scopes, and every creation scope, also accept node/<nodeId> for the resources on one Node.
The qualifier depends on the resource type. Docker container scopes use <nodeId> for a node or <nodeId>/<stableResourceId> for a specific container or deployment. Qualified Pages permissions use the project ID, including operations on its deployments, tags, and deployment tokens. Internal PKI scopes use the CA ID. Select the target in the permissions editor rather than using an ID from another resource type.
Opfield resolves a folder grant on every request: it covers the resources in the folder now, resources created in or moved into it later, and nothing that has been moved out. For creation permissions, a folder restriction selects the destination folder, not a resource that has not been created yet. Folder management and resource operations are separate permissions: managing a folder does not itself grant access to every item in it, and moving an item still needs the item’s own edit or manage scope.
API tokens and OAuth grants are resolved in two steps: their own folder and Node restrictions are expanded first, and the result is then limited by the owner’s current access. A token therefore never reaches a resource its owner cannot, and a creation grant never counts as a view grant when it is delegated. When a token requests a broad scope that the owner holds only for some resources, Opfield narrows the token to those resources.
Every scope belongs to a family named by its longest prefix that has a view scope: proxy:* belongs to proxy:view, docker:containers:* to docker:containers:view, nodes:* to nodes:details, and docker:tasks:manage to docker:tasks. Any action scope implies its family’s view scope with the same qualifier, including delete scopes. For example, proxy:edit:<routeId> lets the holder see that route, docker:containers:manage:<nodeId> lets the holder see every container on that Node, and databases:query:read:<databaseId> shows that database in the database list without granting global databases:view.
Creation scopes imply no view at all: every scope with a create part, such as proxy:create, docker:containers:create, or pki:templates:create, plus docker:images:pull, ssl:cert:issue and pki:cert:issue. This holds whatever the qualifier—broad, a folder, or a Node—so a user with only proxy:create:folder/<folderId> can create routes in that folder but does not see the routes already in it. Create dialogs still show the destination folders and Nodes such a user may choose. With Auto-assign permissions for created resources on, which is the default, the creator keeps view of each resource they create; see Restrict access to a folder. The one exception is hosting:snapshots:create:<vmId>, which keeps view of that VM’s snapshots.
A few explicit rules complete the picture:
- Access tiers:
storage:objects:admin includes write, which includes read; databases:query:admin includes write, which includes read; storage:credentials:reveal includes storage:credentials:use.
logs:read and logs:tokens:view (and therefore logs:tokens:delete) imply logs:environments:view; nodes:manage implies nodes:config:view, which implies nodes:details; inference:models:manage implies inference:providers:view; docker:availability:manage implies docker:containers:view.
- Folder-tree scopes (
*:folders:manage), nodes:backups:execute, proxy:maintenance:bypass, and the internal registry credentials docker:registries:internal:pull and :push imply no view.
- A view scope never implies another family’s view;
proxy:templates:view does not grant proxy:view.
Each resource type has its own folder tree. A folder in Routes does not cover containers, even when a Docker folder has the same name.
| Resources |
Folder restriction |
Folder tree managed with |
| Routes |
Yes |
proxy:folders:manage |
| Domains |
Yes |
domains:folders:manage |
| SSL certificates |
Yes |
ssl:cert:folders:manage |
| Pages Projects |
Yes |
pages:folders:manage |
| Nodes |
Yes |
nodes:folders:manage |
| Docker containers and Deployments |
Yes |
docker:folders:manage |
| Compose Projects, Docker networks, Docker volumes, Docker images |
Yes; each type has a separate tree |
docker:folders:manage |
| Databases: external connections and managed databases |
Yes |
databases:folders:manage |
| Storage: storage connections and managed storage |
Yes |
storage:folders:manage |
| Logging environments; logging schemas |
Yes |
logs:environments:folders:manage; logs:schemas:folders:manage |
| Users; permission groups |
Yes |
admin:users:folders:manage; admin:groups:folders:manage |
| Internal PKI certificate authorities |
Yes; a folder holds whole CA hierarchies, and a grant covers each root CA in the folder and its intermediates |
pki:ca:folders:manage |
| Internal PKI certificates |
Yes |
pki:cert:folders:manage |
| nginx templates |
Yes |
proxy:templates:folders:manage |
| Certificate templates |
Folders only organize the list; certificate template scopes are not restricted to resources |
pki:templates:folders:manage |
| Database backups |
Through the database’s folder |
— |
| Logging ingest tokens and log search |
Through the logging environment’s folder |
— |
| Workload Availability |
Through the container or Compose folder |
— |
Backup executors (nodes:backups:execute) |
Through the Node’s folder |
— |
| Access lists, Docker registries, Docker tasks, notifications, status page, SIEM, integrations, hosting accounts and VMs, inference, Opfield diagnostics, housekeeping, license, and settings |
No |
— |
Scopes without folder support are global or, where the catalogue shows Resource, restricted to one resource. Hosting snapshot folders only organize snapshots; they are not an access boundary.
Git integration scopes can be limited to one connector and, for GitLab and GitHub, to groups, projects, owners, or repositories inside it. Qualifiers are stable provider IDs, never names or paths, so renaming or moving a group or repository never changes a grant.
| Qualifier |
Covers |
<scope>:<connectorId> |
Every repository of that connector |
<scope>:<connectorId>/group/<groupId> |
GitLab: the group, its subgroups, and every project under them. Opfield reads a project’s parent groups from GitLab and caches them for a few minutes, so a moved project follows its new group |
<scope>:<connectorId>/project/<projectId> |
GitLab: that project |
<scope>:<connectorId>/owner/<ownerId> |
GitHub: every repository of that organization or user |
<scope>:<connectorId>/repo/<repoId> |
GitHub: that repository |
- Which scopes:
view, use, repo:read, and repo:write of GitLab and GitHub, and integrations:gitlab:sandbox:clone, accept every qualifier of their provider. Generic Git scopes accept the connector only. integrations:<provider>:manage is broad or limited to a connector: managing a connection—its settings, tokens, repository allowlist, sync, test, and deletion—needs it on that connector, and creating a connector needs it broad. A group, owner, project, or repository grant never allows connector management.
- Matching: an operation on a repository is allowed by the broad scope, the connector qualifier, any group or owner that contains the repository, or the exact project or repository. Implied view works per qualifier:
integrations:gitlab:repo:write:<connectorId>/project/42 also shows project 42. Folder qualifiers do not apply to integrations.
- What is checked: every repository operation checks the repository—files, trees, branches, commits, CI pipelines, job logs and variables, webhooks, deploy tokens, registry settings, sandbox clones, and Docker and Pages build sources—in the REST API, the AI Workspace, and MCP alike.
- Credentials: Opfield uses the connector’s own credential when
integrations:<provider>:use covers the repository in the same way, and the caller’s personal credential otherwise. Without either, AI Workspace users are asked to authorize a personal credential, and other callers receive 403 naming integrations:<provider>:use and the repository.
- Hidden projects: a GitLab project outside the caller’s grant answers exactly like a project that is not synchronized (
404, no path). Writes, secrets, sandbox clones, and the credential decision read group ancestry and repository ownership fresh from the provider; reads may use a cached value for up to five minutes, and GitHub ownership is cached by repository ID, never by path. Connector change events over the WebSocket reach only callers who may see that connector.
- Lists: connector lists contain the connectors the caller holds any Git scope on; a connector seen only through narrower grants is returned without its allowlist. Project and repository lists contain only what the grants cover.
- Build sources: configuring a Docker or Pages build source needs
integrations:<provider>:use on the repository, with any qualifier that covers it, next to the workload’s own permissions. repo:read, broad view, and a personal credential are not needed, because builds use the connector credential. The source picker lists the connectors and repositories that the caller’s Git scopes cover, since use implies view. A manual build checks the caller’s use on the saved repository again. Sources saved before 2.11 keep building automatically as before; a source created or saved again after the update builds from polling and webhooks only while the account that saved it still holds use on the repository, and otherwise records a cancelled build Build paused: <user> no longer has use on <repo> until that access returns or someone with use saves the source again.
- Tokens and OAuth grants: a delegated Git scope is bounded by the owner per qualifier. A broader token scope is narrowed to the owner’s qualifiers, and a token scope limited to a group, owner, project, or repository is kept when the owner holds the same scope, or one that implies it, anywhere on that connector. Because containment is provider data, every repository operation of a token or OAuth caller needs both the token and the owner’s current scopes to cover the repository: a token limited to project P works while its owner holds the group that contains P, and a token limited to group G whose owner holds only project P reaches P alone. Such narrow token scopes never count when the token grants permissions to users or groups.
The group editor, users’ additional permissions, the API token form, and OAuth and MCP consent offer these restrictions under each connector, with a search picker for groups and projects or owners and repositories. The picker reads GET /api/integrations/{provider}/{connectorId}/scope-targets?search=&limit=50, where provider is gitlab or github, and shows the labels of stored qualifiers through GET /api/integrations/{provider}/{connectorId}/scope-targets/resolve?ids=group/123,project/456. Both endpoints need integrations:<provider>:view on the connector or on anything inside it, and return only the targets the caller may view and the connector’s allowlist includes. They share a limit of 60 requests a minute per account, after which they return 429 SCOPE_TARGET_RATE_LIMITED with Retry-After, and one request makes at most 60 uncached lookups at the provider; further targets keep their raw IDs. A target that no longer exists is marked missing and shown as Unavailable; a stored qualifier that the caller cannot view keeps its raw ID as its label.
Opfield 2.11 renamed, merged, or removed the scopes below. The update rewrote every stored grant—groups, users’ additional permissions, API tokens, and OAuth grants—and kept each qualifier, so nodes:config:edit:<nodeId> became nodes:manage:<nodeId>. So that nobody lost access, holders of pki:ca:create:root also received pki:ca:edit and pki:ca:export; holders of integrations:github:view or integrations:git:view received :repo:read; holders of integrations:github:manage or integrations:git:manage received :repo:read and :repo:write; and holders of broad or Node-level docker:volumes:create (for example docker:volumes:create:<nodeId>) received docker:volumes:edit with the same qualifier; folder-level create grants and delete-only grants did not.
For two releases, Opfield still accepts the old names on input and rewrites them the same way: the OAuth scope parameter, API token creation and updates, permission group creation and updates, users’ additional permissions, and OAuth authorization edits. A request whose scopes were all removed is rejected. New API tokens and OAuth requests also receive the additions above when the requester holds them—for example, a token requested with integrations:github:manage also gets repo:read—and the consent screen shows them so they can be unticked. Scopes that need manual approval, such as repo:write or pki:ca:export, are never added on input. Permission checks use only the current names, so update scripts, OAuth clients, and infrastructure-as-code definitions before the aliases are removed.
| Retired |
Replacement |
ssl:cert:revoke, ssl:cert:export |
Removed; they were never enforced |
notifications:view |
notifications:alerts:view and notifications:webhooks:view |
notifications:manage |
notifications:alerts:manage and notifications:webhooks:manage |
notifications:alerts:create, :edit, :delete |
notifications:alerts:manage |
notifications:webhooks:create, :edit, :delete |
notifications:webhooks:manage |
notifications:deliveries:view |
notifications:webhooks:view |
logs:manage |
Every logs:* scope |
docker:containers:config |
Removed. Duplicate and recreate need docker:containers:environment and docker:containers:secrets; a Docker Node’s service address needs nodes:manage |
nodes:config:edit |
nodes:manage |
pki:ca:view:root, pki:ca:view:intermediate |
pki:ca:view |
integrations:gitlab:sync, integrations:github:sync, integrations:git:sync |
integrations:<provider>:manage |
integrations:gitlab:system, integrations:github:system, integrations:git:system |
integrations:<provider>:use |
integrations:gitlab:projects:view |
integrations:gitlab:view |
integrations:gitlab:ci:view, :variables:view |
integrations:gitlab:repo:read |
integrations:gitlab:ci:edit, :variables:edit, :variables:delete, :webhooks:manage, :registry:manage |
integrations:gitlab:repo:write |
proxy:raw:toggle |
Removed; switching raw mode needs proxy:raw:write |
proxy:advanced:bypass, proxy:raw:bypass |
proxy:unrestricted |
proxy:templates:create, :edit, :delete |
proxy:templates:manage |
docker:containers:folders:manage |
docker:folders:manage |
Some replacements are broader than the scope they replace, so review groups, user permissions, API tokens, and OAuth grants that held them: integrations:gitlab:repo:write also commits repository files and changes CI configuration, variables, webhooks, and registry settings; integrations:gitlab:repo:read also reads repository files; a connector’s manage permission covers its settings, tokens, allowlist, test, and deletion; nodes:manage also installs the Secure Runtime, changes service addresses, and controls hosted VMs; proxy:unrestricted lifts both the advanced and the raw configuration restrictions; and notifications:webhooks:manage also reveals webhook URLs, headers, and delivery payloads. integrations:gitlab:variables:view became integrations:gitlab:repo:read, which reads variable keys but not their values. See Updating from 2.10.
Other permission changes in 2.11:
- New scopes:
pki:ca:edit (CA URLs, maximum validity, and the OCSP responder) and pki:ca:export (CA private-key export), both restrictable to one CA; docker:volumes:edit (rename, relabel, resize, and adopt volumes); integrations:github:repo:read, :repo:write, integrations:git:repo:read, and :repo:write.
- Git providers share the same verbs:
view lists connectors, manage configures, tests, and synchronizes them, use uses the connector’s own credential, and repo:read and repo:write read or change repository content. Each can be limited to a connector and, for GitLab and GitHub, to groups, projects, owners, or repositories; see Git integration restrictions. Listing and reading GitLab’s synced projects needs integrations:gitlab:view. GitLab repo:read covers repository files, CI pipelines and job logs, and CI/CD variable keys, never values; changing variables needs repo:write. Reading GitHub Actions variable values needs integrations:github:repo:write. The built-in viewer and operator groups get integrations:gitlab:view only.
- Templates: writing nginx template content needs
proxy:templates:manage and no longer proxy:raw:write. The built-in operator group keeps only proxy:templates:view, because template content is raw nginx configuration.
- Folder grants now resolve for
logs:tokens:* (through the logging environment’s folder) and docker:availability:manage (through the container or Compose folder). Certificate authorities, Internal PKI certificates, and nginx templates can be organised in folders and granted per folder; see Folder support by resource type.
- Implied view: every action permission except create implies its family’s view permission with the same qualifier, so a delete-only grant now also lists and views those resources; see Implied view access.
- New permissions for new features:
diagnostics:view and diagnostics:logs, databases:backups:*, nodes:backups:execute, and the storage:* scopes. Built-in groups received them; custom permission groups did not, so grant them where needed.
| Scope |
Description |
Restrictions |
Tokens |
pki:ca:view |
View root and intermediate certificate authorities |
Resource, Folder |
API, MCP |
pki:ca:create:root |
Create new root certificate authorities |
— |
API, MCP |
pki:ca:create:intermediate |
Create intermediate CAs under a root |
Resource |
API, MCP |
pki:ca:edit |
Edit CA URLs, maximum validity, and the OCSP responder |
Resource, Folder |
API, MCP |
pki:ca:export |
Export a certificate authority with its private key |
Resource, Folder |
API, MCP |
pki:ca:folders:manage |
Manage CA folders. Only root CAs move, and their intermediates follow; moving a root CA also needs pki:ca:edit on it and on the destination |
— |
API, MCP |
pki:ca:revoke:root |
Revoke root certificate authorities |
— |
API, MCP |
pki:ca:revoke:intermediate |
Revoke intermediate certificate authorities |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
pki:cert:view |
View issued certificates |
Resource, Folder |
API, MCP |
pki:cert:issue |
Issue new certificates |
Resource |
API, MCP |
pki:cert:revoke |
Revoke issued certificates |
Resource, Folder |
API, MCP |
pki:cert:export |
Export certificates and keys |
Resource, Folder |
API, MCP |
pki:cert:folders:manage |
Manage PKI certificate folders; moving a certificate also needs pki:cert:issue on its issuing CA |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
pki:templates:view |
View certificate templates |
— |
API, MCP |
pki:templates:create |
Create certificate templates |
— |
API, MCP |
pki:templates:edit |
Edit certificate templates |
— |
API, MCP |
pki:templates:delete |
Delete certificate templates |
— |
API, MCP |
pki:templates:folders:manage |
Manage certificate template folders; moving a custom template also needs pki:templates:edit, and built-in templates never move |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
domains:view |
View managed domains |
Resource, Folder |
API, MCP |
domains:create |
Create managed domains |
Resource, Folder |
API, MCP |
domains:edit |
Edit managed domains |
Resource, Folder |
API, MCP |
domains:delete |
Delete managed domains |
Resource, Folder |
API, MCP |
domains:folders:manage |
Organize managed domains into folders |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
proxy:view |
View and search ingress routes |
Resource, Folder |
API, MCP |
proxy:create |
Create new ingress routes |
Resource, Folder |
API, MCP |
proxy:edit |
Edit ingress route configuration |
Resource, Folder |
API, MCP |
proxy:delete |
Delete ingress routes |
Resource, Folder |
API, MCP |
proxy:raw:read |
View raw nginx configuration |
Resource, Folder |
API, MCP |
proxy:raw:write |
Edit raw nginx configuration and switch routes between managed and raw mode |
Resource, Folder |
API, MCP |
proxy:advanced |
Use advanced proxy configuration |
Resource, Folder |
API, MCP |
proxy:unrestricted |
Save advanced snippets and raw nginx config without dangerous directive restrictions |
Resource, Folder |
API, MCP |
proxy:maintenance:bypass |
Create temporary access codes for maintained routes |
Resource, Folder |
API, MCP |
proxy:folders:manage |
Create, reorder, and remove route folders |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
pages:view |
View Page Projects, Deployments, Tags, previews, and usage |
Resource, Folder |
API, MCP |
pages:create |
Create static Page Projects |
Resource, Folder |
API, MCP |
pages:edit |
Rename Page Projects and edit their retention and quota settings |
Resource, Folder |
API, MCP |
pages:delete |
Delete eligible Page Projects |
Resource, Folder |
API, MCP |
pages:deploy |
Create and upload static Deployments |
Resource, Folder |
API, MCP |
pages:deployments:manage |
Pin, unpin, clean up, and delete eligible Deployments |
Resource, Folder |
API, MCP |
pages:tags:manage |
Create, move, and delete Page Project Tags |
Resource, Folder |
API, MCP |
pages:tokens:manage |
Create, restrict, and revoke Project deploy credentials |
Resource, Folder |
API, MCP |
pages:folders:manage |
Create, reorder, and remove Page Project folders |
— |
API, MCP |
pages:settings:view |
View wildcard profile and storage defaults |
— |
API, MCP |
pages:settings:edit |
Configure and migrate the wildcard Pages profile and storage defaults |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
proxy:templates:view |
View nginx templates |
Resource, Folder |
API, MCP |
proxy:templates:manage |
Create, edit, and delete nginx templates, including template content; with a folder qualifier, also create templates in that folder |
Resource, Folder |
API, MCP |
proxy:templates:folders:manage |
Manage nginx template folders; moving a custom template also needs proxy:templates:manage on it and on the destination, and built-in templates never move |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
ssl:cert:view |
View SSL certificates |
Resource, Folder |
API, MCP |
ssl:cert:issue |
Provision ACME or upload SSL certificates |
Resource, Folder |
API, MCP |
ssl:cert:folders:manage |
Organize SSL certificates into folders |
— |
API, MCP |
ssl:cert:delete |
Delete SSL certificates |
Resource, Folder |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
acl:view |
View access control lists |
Resource |
API, MCP |
acl:create |
Create access control lists |
— |
API, MCP |
acl:edit |
Edit access control lists |
Resource |
API, MCP |
acl:delete |
Delete access control lists |
Resource |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
nodes:details |
View managed nodes |
Resource, Folder |
API, MCP |
nodes:create |
Enroll new nodes |
Resource, Folder |
API, MCP |
nodes:rename |
Rename nodes |
Resource, Folder |
API, MCP |
nodes:delete |
Remove nodes |
Resource, Folder |
API, MCP |
nodes:config:view |
View node nginx configuration |
Resource, Folder |
API, MCP |
nodes:manage |
Edit node nginx config, install the Docker secure runtime, change service addresses, and control hosted VMs |
Resource, Folder |
API, MCP |
nodes:logs |
View node daemon and nginx logs |
Resource, Folder |
API, MCP |
nodes:console |
Open interactive shell on nodes |
Resource, Folder |
API, MCP |
nodes:files:read |
Browse, open, copy, and download node files |
Resource, Folder |
API, MCP |
nodes:files:write |
Create, edit, upload, move, and delete node files |
Resource, Folder |
API, MCP |
nodes:lock |
Prevent new proxy hosts or containers on selected nodes |
Resource, Folder |
API, MCP |
nodes:folders:manage |
Create, reorder, and remove node folders |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
admin:users |
Create, edit, and delete users |
Resource, Folder |
API, MCP |
admin:users:impersonate |
Temporarily act as another active user |
Resource, Folder |
— |
admin:users:folders:manage |
Create, reorder, and remove user folders |
— |
API, MCP |
admin:groups |
Create, edit, and delete permission groups |
Resource, Folder |
API, MCP |
admin:groups:folders:manage |
Create, reorder, and remove permission group folders |
— |
API, MCP |
admin:audit |
View the audit log |
— |
API, MCP |
audit:siem:view |
View SIEM destinations and audit delivery history |
— |
API, MCP |
audit:siem:manage |
Configure SIEM destinations and control audit deliveries |
— |
API, MCP |
admin:system |
System-level administration (protected) |
— |
API, MCP |
admin:details:certificates |
View internal system PKI and SSL certificates in read-only mode |
— |
API, MCP |
admin:update |
Check for and apply updates |
— |
API, MCP |
admin:alerts |
View and manage alerts |
— |
API, MCP |
diagnostics:view |
Read Opfield’s own state and its 48-hour minute history: host CPU, memory, and disk, the backend process, its PostgreSQL and Redis, the stack containers, background jobs, and API latency. Held by the built-in admin groups |
— |
API, MCP |
diagnostics:logs |
Read the logs of Opfield’s own containers (app, PostgreSQL, Redis, Relay, registry) and of the last update run; implies diagnostics:view. Held by the built-in admin groups |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
settings:gateway:view |
View sign-in provisioning and external control-plane settings |
— |
API, MCP |
settings:gateway:edit |
Edit sign-in provisioning and external control-plane settings |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
integrations:gitlab:view |
View configured GitLab connectors, sync status, and synced projects |
Resource |
API, MCP |
integrations:gitlab:manage |
Create, edit, rotate, sync, and delete GitLab connectors |
Resource |
API, MCP |
integrations:gitlab:use |
Use the connector credential for otherwise permitted GitLab operations, and configure Docker and Pages build sources from a project |
Resource |
API, MCP |
integrations:gitlab:repo:read |
Read repository files, CI pipelines and job logs, and CI/CD variable keys (never values) through GitLab connectors |
Resource |
API, MCP |
integrations:gitlab:repo:write |
Change repository files, CI configuration, CI/CD variables, webhooks, and registry records through GitLab connectors |
Resource |
API, MCP |
integrations:gitlab:sandbox:clone |
Clone allowed GitLab repositories into AI sandboxes |
Resource |
— |
| Scope |
Description |
Restrictions |
Tokens |
integrations:github:view |
View configured GitHub token connectors |
Resource |
API, MCP |
integrations:github:manage |
Create, edit, rotate, sync, and delete GitHub token connectors |
Resource |
API, MCP |
integrations:github:use |
Use the connector credential instead of a personal GitHub authorization, and configure Docker and Pages build sources from a repository |
Resource |
API, MCP |
integrations:github:repo:read |
List repositories and read files through GitHub connectors (no Actions variable values) |
Resource |
API, MCP |
integrations:github:repo:write |
Change repository files and secrets, and read or change Actions variables, through GitHub connectors |
Resource |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
integrations:git:view |
View configured generic Git connectors |
Resource |
API, MCP |
integrations:git:manage |
Create, edit, rotate, sync, and delete generic Git connectors |
Resource |
API, MCP |
integrations:git:use |
Use the connector credential instead of a personal Git authorization, and configure Docker and Pages build sources from a repository |
Resource |
API, MCP |
integrations:git:repo:read |
List repositories and read files through generic Git connectors |
Resource |
API, MCP |
integrations:git:repo:write |
Change repository files through generic Git connectors |
Resource |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
integrations:ssh:view |
View configured external SSH servers |
— |
API, MCP |
integrations:ssh:manage |
Add and configure external SSH servers and jump hosts |
— |
API, MCP |
integrations:ssh:use |
Execute approved commands on configured external SSH servers |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
integrations:cloudflare:view |
View configured Cloudflare connectors and synchronization status |
— |
API, MCP |
integrations:cloudflare:sync |
Refresh Cloudflare zones and token capabilities using the connector credential |
— |
API, MCP |
integrations:cloudflare:manage |
Create, edit, test, synchronize, rotate, and delete Cloudflare connectors |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
integrations:hosting:view |
View hosting accounts and connection status |
Resource |
API, MCP |
integrations:hosting:manage |
Connect, configure and synchronize hosting accounts |
Resource |
API, MCP |
hosting:resources:view |
View provider inventory and associated Opfield nodes |
Resource |
API, MCP |
hosting:resources:create |
Order provider VMs and install Opfield roles; may incur charges |
Resource |
API, MCP |
hosting:resources:power |
Start, shut down and reboot VMs; all hosted roles are affected |
Resource |
API, MCP |
hosting:resources:resize |
Change VM resources; may change provider charges |
Resource |
API, MCP |
hosting:snapshots:view |
View provider snapshots and snapshot folders without changing the VM |
Resource |
API, MCP |
hosting:snapshots:create |
Create provider snapshots; storage may incur charges |
Resource |
API, MCP |
hosting:snapshots:delete |
Permanently delete provider snapshots |
Resource |
API, MCP |
hosting:snapshots:restore |
Replace current VM data with a snapshot |
Resource |
API, MCP |
hosting:snapshots:folders:manage |
Create snapshot folders and move snapshots between folders |
Resource |
API, MCP |
hosting:resources:delete |
Destroy provider VM data or cancel HOSTKEY rental |
Resource |
API, MCP |
hosting:resources:recover |
Restart Opfield daemons or explicitly retry a failed installation |
Resource |
API, MCP |
hosting:billing:view |
View account balance, charges, invoices and transactions |
Resource |
API, MCP |
hosting:billing:topup |
Create HOSTKEY deposit invoices; payment remains provider-hosted |
Resource |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
housekeeping:view |
View housekeeping configuration, stats, and run history |
— |
API, MCP |
housekeeping:run |
Manually run housekeeping tasks |
— |
API, MCP |
housekeeping:configure |
Edit housekeeping configuration and schedule |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
license:view |
View Opfield license status and entitlement details |
— |
API, MCP |
license:manage |
Activate, update, or remove the Opfield license |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
ai:workspace:use |
Use the AI Workspace interface and embedded assistant |
— |
— |
feat:ai:use |
Use Opfield Inference and view personal inference usage |
— |
API, MCP |
feat:ai:configure |
Configure AI settings and providers |
— |
— |
ai:skills:manage |
Create, edit, enable, disable, and delete AI Workspace skills |
— |
— |
ai:sandbox:use |
Run bounded AI sandbox jobs |
— |
— |
ai:sandbox:tier:medium |
Run AI sandbox jobs with medium resource limits |
— |
— |
ai:sandbox:tier:high |
Run AI sandbox jobs with high resource limits |
— |
— |
ai:sandbox:manage |
View and kill AI sandbox jobs |
— |
— |
mcp:use |
Allow this user account to access the remote MCP server with OAuth |
— |
— |
| Scope |
Description |
Restrictions |
Tokens |
inference:setup |
OAuth-only authorization for the companion CLI Inference setup resource; not assignable to users or custom groups |
— |
— |
inference:providers:view |
View inference providers, connections, discovery, and quota |
— |
API, MCP |
inference:providers:manage |
Connect, update, synchronize, route, and disconnect inference providers |
— |
API, MCP |
inference:models:manage |
Create, publish, replace, and delete inference models |
— |
API, MCP |
inference:limits:manage |
Configure default and per-user inference budgets |
— |
API, MCP |
inference:usage:view |
View system-wide and per-user inference usage |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
docker:containers:view |
View Docker containers |
Resource, Folder |
API, MCP |
docker:containers:create |
Create and duplicate containers |
Resource, Folder |
API, MCP |
docker:containers:edit |
Edit container settings and configuration |
Resource, Folder |
API, MCP |
docker:containers:manage |
Start, stop, restart, kill, and recreate containers |
Resource, Folder |
API, MCP |
docker:containers:environment |
Modify container environment variables |
Resource, Folder |
API, MCP |
docker:containers:link |
Let other workloads reach one port of a container or deployment through a container link |
Resource, Folder |
API, MCP |
docker:containers:delete |
Remove containers |
Resource, Folder |
API, MCP |
docker:containers:console |
Open interactive console in containers |
Resource, Folder |
API, MCP |
docker:containers:files:read |
Browse and read files in containers |
Resource, Folder |
API, MCP |
docker:containers:files:write |
Create, edit, move, and delete files in containers |
Resource, Folder |
API, MCP |
docker:containers:export |
Export portable container archives |
Resource, Folder |
API, MCP |
docker:containers:secrets |
View and manage encrypted secrets |
Resource, Folder |
API, MCP |
docker:containers:webhooks |
View and manage container webhook update triggers |
Resource, Folder |
API, MCP |
docker:containers:mounts |
Add, remove, or change container and deployment mounts |
Resource, Folder |
API, MCP |
docker:containers:migrate |
Migrate containers and deployments between Docker nodes |
Resource, Folder |
API, MCP |
docker:availability:manage |
Enable, scale, heal, and disable multi-node workload Availability |
Resource, Folder |
API, MCP |
docker:folders:manage |
Organize containers, deployments, Compose projects, networks, volumes, and images into folders |
— |
API, MCP |
Container logs, statistics, processes, and inspection are covered by docker:containers:view; there is no separate logs scope. Duplicating a container, and recreating it with changed settings, need docker:containers:environment and docker:containers:secrets in addition to create or manage access. Pulling the image while creating a container or Deployment is covered by docker:containers:create at the destination; docker:images:pull is needed only to pull images on their own. A database or storage link on a Deployment also needs docker:containers:manage on it, because every link change rolls it out, plus docker:containers:edit when the link changes its environment. docker:containers:manage authorizes start, stop, restart, kill, and recreate together; there is no restart-only scope. These scopes also apply to standalone containers that Opfield discovered but did not create. See Operate workloads without adopting them.
| Scope |
Description |
Restrictions |
Tokens |
docker:compose:view |
Discover and inspect Compose projects, services, monitoring, logs, revisions, and activity |
Resource, Folder |
API, MCP |
docker:compose:create |
Validate and deploy managed Compose projects; adoption also requires Manage Compose Projects |
Resource, Folder |
API, MCP |
docker:compose:manage |
Adopt projects and manage lifecycle, revisions, secrets, and bindings |
Resource, Folder |
API, MCP |
docker:compose:delete |
Delete Compose projects or run destructive down/delete-volume actions |
Resource, Folder |
API, MCP |
External Compose projects are read-only: docker:compose:view covers their inventory, monitoring, and aggregated logs, while lifecycle actions become available only after adoption. Individual containers that belong to any Compose project cannot be started, stopped, restarted, edited, or deleted through container scopes.
| Scope |
Description |
Restrictions |
Tokens |
docker:images:view |
View Docker images |
Resource, Folder |
API, MCP |
docker:images:pull |
Pull Docker images |
Resource, Folder |
API, MCP |
docker:images:delete |
Remove and prune Docker images |
Resource, Folder |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
docker:volumes:view |
View Docker volumes |
Resource, Folder |
API, MCP |
docker:volumes:create |
Create Docker volumes |
Resource, Folder |
API, MCP |
docker:volumes:edit |
Rename, relabel, resize, and adopt Docker volumes |
Resource, Folder |
API, MCP |
docker:volumes:delete |
Remove Docker volumes |
Resource, Folder |
API, MCP |
docker:volumes:export |
Export portable Docker volume archives |
Resource, Folder |
API, MCP |
docker:volumes:files:read |
Browse, open, and download Docker volume files |
Resource, Folder |
API, MCP |
docker:volumes:files:write |
Create, edit, upload, move, and delete Docker volume files |
Resource, Folder |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
docker:networks:view |
View Docker networks |
Resource, Folder |
API, MCP |
docker:networks:create |
Create Docker networks |
Resource, Folder |
API, MCP |
docker:networks:edit |
Connect and disconnect containers |
Resource, Folder |
API, MCP |
docker:networks:delete |
Remove Docker networks |
Resource, Folder |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
docker:registries:view |
View Docker registries |
— |
API, MCP |
docker:registries:create |
Add Docker registries |
— |
API, MCP |
docker:registries:edit |
Edit Docker registry settings |
— |
API, MCP |
docker:registries:delete |
Remove Docker registries |
— |
API, MCP |
docker:registries:internal:pull |
Pull from all internal registry repositories or selected repository scopes |
Resource |
API, MCP |
docker:registries:internal:push |
Push to all internal registry repositories or selected repository scopes |
Resource |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
docker:tasks |
View Docker task progress |
Resource |
API, MCP |
docker:tasks:manage |
Force-cancel active Docker tasks |
Resource |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
databases:view |
View saved database connections |
Resource, Folder |
API, MCP |
databases:create |
Create saved database connections |
Resource, Folder |
API, MCP |
databases:edit |
Edit saved database connections |
Resource, Folder |
API, MCP |
databases:delete |
Delete saved database connections |
Resource, Folder |
API, MCP |
databases:query:read |
Browse tables, keys, and run read-only database queries |
Resource, Folder |
API, MCP |
databases:query:write |
Insert, update, delete, and run write queries against databases |
Resource, Folder |
API, MCP |
databases:query:admin |
Run administrative or DDL database commands |
Resource, Folder |
API, MCP |
databases:credentials:reveal |
Reveal saved database credentials and connection strings |
Resource, Folder |
API, MCP |
databases:folders:manage |
Create, reorder, and remove database folders |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
databases:backups:view |
View database backup policies and run history |
Resource, Folder |
API, MCP |
databases:backups:manage |
Create, edit, and delete backup policies and delete run history |
Resource, Folder |
API, MCP |
databases:backups:run |
Start and cancel backup runs |
Resource, Folder |
API, MCP |
databases:backups:restore |
Restore a backup into a new or empty target database |
Resource, Folder |
API, MCP |
nodes:backups:execute |
Use a Storage Node as the executor for backup and restore jobs |
Resource, Folder |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
storage:view |
View storage connections, managed storage, and their status |
Resource, Folder |
API, MCP |
storage:create |
Create storage connections and managed storage |
Resource, Folder |
API, MCP |
storage:edit |
Edit storage connections and managed storage, restart or retry provisioning |
Resource, Folder |
API, MCP |
storage:delete |
Delete storage connections and managed storage |
Resource, Folder |
API, MCP |
storage:credentials:reveal |
Reveal saved storage credentials |
Resource, Folder |
API, MCP |
storage:credentials:use |
Let backups and storage copy jobs use saved storage credentials without revealing them |
Resource, Folder |
API, MCP |
storage:iam |
Create, revoke, import, and freeze managed storage access keys, and create and move workload bindings |
Resource, Folder |
API, MCP |
storage:objects:read |
List buckets and objects, read metadata, download objects, and create download links |
Resource, Folder |
API, MCP |
storage:objects:write |
Upload objects, create prefixes, and delete objects |
Resource, Folder |
API, MCP |
storage:objects:admin |
Create and delete buckets |
Resource, Folder |
API, MCP |
storage:folders:manage |
Create, reorder, and remove storage folders |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
notifications:alerts:view |
View notification alert rules |
— |
API, MCP |
notifications:alerts:manage |
Create, edit, and delete notification alert rules |
— |
API, MCP |
notifications:webhooks:view |
View notification webhooks and their delivery attempts |
— |
API, MCP |
notifications:webhooks:manage |
Create, edit, test, and delete notification webhooks |
— |
API, MCP |
| Scope |
Description |
Restrictions |
Tokens |
logs:environments:view |
View external logging environments |
Resource, Folder |
API, MCP |
logs:environments:create |
Create logging environments |
Resource, Folder |
API, MCP |
logs:environments:edit |
Edit logging environments and schemas |
Resource, Folder |
API, MCP |
logs:environments:delete |
Delete logging environments |
Resource, Folder |
API, MCP |
logs:environments:folders:manage |
Create, reorder, and remove logging environment folders |
— |
API, MCP |
logs:tokens:view |
View logging ingest tokens |
Resource, Folder |
API, MCP |
logs:tokens:create |
Create logging ingest tokens |
Resource, Folder |
API, MCP |
logs:tokens:delete |
Revoke logging ingest tokens |
Resource, Folder |
API, MCP |
logs:schemas:view |
View reusable logging schemas |
Resource, Folder |
API, MCP |
logs:schemas:create |
Create reusable logging schemas |
Resource, Folder |
API, MCP |
logs:schemas:edit |
Edit reusable logging schemas |
Resource, Folder |
API, MCP |
logs:schemas:delete |
Delete reusable logging schemas |
Resource, Folder |
API, MCP |
logs:schemas:folders:manage |
Create, reorder, and remove logging schema folders |
— |
API, MCP |
logs:read |
Search and inspect external logs |
Resource, Folder |
API, MCP |
Logging token and log-search scopes are qualified by the logging environment ID; their folder grants resolve through logging environment folders.
| Scope |
Description |
Restrictions |
Tokens |
status-page:view |
View status page configuration, exposed services, incidents, and preview |
— |
API, MCP |
status-page:manage |
Edit status page settings and exposed services |
— |
API, MCP |
status-page:incidents:create |
Create manual incidents and promote automatic incidents |
— |
API, MCP |
status-page:incidents:update |
Edit incident details and post incident timeline updates |
— |
API, MCP |
status-page:incidents:resolve |
Resolve active status page incidents |
— |
API, MCP |
status-page:incidents:delete |
Delete resolved status page incidents |
— |
API, MCP |