Access configuration¶
access answers two questions before an agent can use a capability:
- Should the tool appear in the model-visible catalog?
- Should the tool's exact action be allowed, denied, or require approval under the built-in policy?
It does not answer whether the runtime has permission to touch a file, start a process, reach an origin, use a credential, or load an extension. Those authorities come from the sandbox, provider or integration configuration, extension trust, policy obligations, approvals, and one-use permits.
For the complete decision flow, see Access and approvals. For canonical tool and action names, see Tools and action classes.
How access resolution works¶
Colossus resolves the effective tool surface in this order:
| Stage | Result |
|---|---|
| Trusted catalog | Built-in tools plus operations from configured integrations and enabled, reverified packs |
| Profile | Selects the baseline tools and built-in action decisions |
| Tool overrides | Adds exact includes, then removes exact excludes |
| Prerequisites | Hides tools whose required declared-or-ambient filesystem, executable, network, search, UI, or MCP authority is absent |
| Runtime mode | Plan Mode, Goal Mode, workflow lineage, and child scope may narrow the catalog further |
| Effect authorization | Policy, approval, the Safety Kernel, a permit, sandbox obligations, quarantine, and post-effect policy govern each call |
Each stage can narrow authority. A later stage cannot use a broad access profile to repair a missing resource grant or bypass an earlier trust decision.
Choose a starting profile¶
| Scenario | Recommended profile | Guidance |
|---|---|---|
| Offline smoke test | minimal |
Expose effect-free support tools and keep non-provider effects denied |
| Interactive repository development | development |
Use with reviewed sandbox resources and explicit approval handling |
| Production or narrowly scoped agent | pinned |
Name every model-visible tool and opt in to its exact actions separately |
| Ordinary sparse developer configuration | allow_all |
Removes built-in approval gates; paired with the separate full-access schema default |
| Disposable, tightly sandboxed test environment | allow_all |
Pair with an explicit isolating execution boundary |
| OPA-controlled deployment | Usually pinned or development |
Use the profile for tool selection; leave all local action override lists empty |
allow_all is the default profile, and the root access block may be omitted. Child
fields may also be omitted independently; the complete explicit shape is:
access:
profile: allow_all
tools:
include: []
exclude: []
actions:
allow: []
requireApproval: []
deny: []
Unknown fields are rejected.
Access profiles¶
Profiles are metadata-driven baselines. Tool includes and action overrides are applied after the baseline.
| Profile | Baseline tool selection | Baseline built-in action decision |
|---|---|---|
minimal |
Tools without an effect action | Provider actions allowed; every other effect denied |
development |
Every applicable trusted candidate tool | Provider, read, and Colossus local-state actions allowed; workspace mutation, execution, external network, and administration require approval |
allow_all |
Every applicable trusted candidate tool | Every registered trusted action allowed |
pinned |
Exact entries from tools.include only |
provider.echo allowed; every other action denied |
“Applicable” means the tool's prerequisites are currently satisfied. A profile does not create those prerequisites.
minimal¶
Use minimal for an offline health check or an interface that should not offer normal
effectful tools. Exact includes can still make an effectful tool visible, but the
profile continues to deny its action until an action override explicitly changes the
decision.
access:
profile: minimal
tools:
include: []
exclude: []
actions:
allow: []
requireApproval: []
deny: []
development¶
Use development for interactive engineering work. Read and Colossus-owned state
operations proceed under their normal obligations. Workspace mutation, command
execution, external network access, and administration require approval.
Select development and sandbox.profile: workspace-development explicitly when you
want the older approval-gated, workspace-isolated development posture. Access and the
execution boundary remain independent.
allow_all¶
allow_all changes built-in action outcomes from approval-required to allowed. The
separate schema default of acknowledged danger_full_access supplies ambient resource
authority for process, structured filesystem, and canonical HTTP(S) effects. It does
not invent credentials, provider/model routes, extension trust, configured MCP servers
or tools, integration operations, action identities, or permits.
Treat that combined default as full host access. Select a platform-isolating sandbox when the blast radius must be smaller.
pinned¶
pinned is deny-by-default on both dimensions:
- Only named tool includes are selected.
- Only
provider.echois allowed by the profile's action baseline.
Selecting a tool does not allow its action. A practical pinned configuration therefore usually names both the tool and the corresponding action:
access:
profile: pinned
tools:
include:
- filesystem.list
- filesystem.read
- filesystem.search
- git.status
- git.diff
- git.show
- repo.map
- repo.file_summary
exclude: []
actions:
allow:
- filesystem.list
- filesystem.read
- filesystem.search
- git.status
- git.diff
- git.show
- repo.map
- repo.file_summary
requireApproval: []
deny: []
Under an isolating boundary, this exact example also requires a readable filesystem grant and exactly one configured or derived Git executable. Acknowledged full access supplies those resource prerequisites but does not change the pinned action list. A non-echo provider requires its exact provider action to be opted in as well. Inspect the resolved names instead of guessing them.
Tool selection¶
access.tools changes what the model can see. It does not directly change the action
decision for any selected tool.
| Field | Meaning | Default |
|---|---|---|
include |
Exact tools added to the profile selection, or "*" as the sole include selector |
[] |
exclude |
Exact tools removed after profile and include selection | [] |
Exact selector rules¶
- Entries must be nonempty and unique.
- Every exact name must exist in the trusted runtime catalog.
- The same exact tool cannot appear in both lists.
include: ["*"]is valid, but"*"must be its only include entry.excludenever accepts"*".- Exact excludes may accompany
include: ["*"]to express “all except these tools.” - Excludes win over profile selection and wildcard inclusion.
For example:
access:
profile: pinned
tools:
include: ["*"]
exclude: [shell.run]
actions:
allow: []
requireApproval: []
deny: [shell.run]
This exposes every applicable trusted candidate except shell.run, but most effectful
calls remain denied by the pinned action baseline. The explicit action deny also
prevents the shell.run action outside that model-visible selection.
Includes and excludes are not action decisions¶
A visible tool may still be denied. A hidden tool's action may still be used by a separate operator or runtime operation if that path is authorized. When a capability must be unavailable at both boundaries, hide its tool and deny its exact action:
access:
profile: development
tools:
include: []
exclude: [shell.run]
actions:
allow: []
requireApproval: []
deny: [shell.run]
Prerequisite behavior¶
Prerequisites are availability checks derived from other configuration. They never grant the underlying resource.
| Prerequisite | Example tools | Satisfied by |
|---|---|---|
| Filesystem read | filesystem.read, repository tools, patch.preview |
At least one read-, metadata-, or write-capable filesystem grant, or acknowledged ambient authority |
| Filesystem write | filesystem.write, patch.apply, trace.export |
At least one write-capable filesystem grant, or acknowledged ambient authority |
| Git executable | git.status, git.diff, git.show |
Exactly one configured or derived Git executable, or Git on ambient PATH under acknowledged danger_full_access |
| Any executable | shell.run |
At least one configured or derived exact executable, or acknowledged danger_full_access |
| Model network tools | web.fetch, docs.fetch, network.http |
The runtime host enables generic model-visible direct fetch tools; Desktop Managed Local Offline isolated deliberately withholds this prerequisite |
| Network destination | web.fetch, docs.fetch, network.http |
At least one sandbox network destination, or acknowledged ambient authority |
| Agent search route | web.search |
A valid top-level search.roles.agent route |
| Interactive interface | user.ask |
A trusted prompt-capable interface for the current runtime |
| MCP server | mcp.servers, mcp.tools, mcp.call |
At least one configured and trusted MCP server |
Provider service and authentication transports are independent from the model-network
tool prerequisite. Managed Local Offline isolated retains the configured provider's
exact service and authentication/refresh destinations while keeping web.fetch,
docs.fetch, and network.http hidden. Search, MCP, and integration adapters remain
independently governed by their own routes, declarations, trust, and host grants.
When a profile or wildcard selects a tool with an unmet prerequisite, Colossus keeps it
hidden and reports the reason in config effective. A named exact include is a stronger
operator assertion: an unmet non-interactive prerequisite fails runtime composition
instead of silently ignoring the selection. user.ask may remain hidden when an
otherwise valid process has no interactive interface.
An unknown exact name also fails closed. Configure and trust an integration or pack before referring to one of its dynamic tool names.
Wildcard boundary¶
access.tools.include: ["*"] automatically selects current and future trusted
candidate tools registered in that runtime. This is intentionally broader than an
explicit list and should be reviewed after upgrades or extension changes.
It is independent from similarly spelled wildcards:
| Wildcard | Boundary |
|---|---|
access.tools.include: ["*"] |
Colossus model-visible tool catalog |
mcp.servers.*.allowedTools: ["*"] |
Remote tools discovered from one configured MCP server |
sandbox.networkDestinations: ["*"] |
Public HTTP(S) network origins permitted by the sandbox |
Enabling one does not enable either of the others.
Action overrides¶
access.actions changes the built-in authorization result for exact trusted action
names. It applies independently from tool visibility.
| Field | Built-in result | Typical use |
|---|---|---|
allow |
Proceed to remaining policy and enforcement checks | Opt a pinned action in or loosen one development action deliberately |
requireApproval |
Require a request-bound approval proof before reevaluation | Add an approval gate to an otherwise allowed action |
deny |
Reject the action | Tighten any profile, including allow_all |
All entries must be nonempty, unique, exact registered action names. The three lists
must be pairwise disjoint. Action wildcards are unsupported; select allow_all when
that broad built-in baseline is truly intended.
An action not named in an override list receives its profile decision. Overrides can therefore tighten or loosen a profile one action at a time:
access:
profile: development
tools:
include: []
exclude: []
actions:
allow: []
requireApproval:
- context.compact
- context.restore
deny:
- shell.run
Here, context snapshot changes require approval even though development normally
allows local-state actions, while shell execution is denied rather than merely
approval-gated.
Tool names and action names can differ¶
Most effectful built-ins use the same tool and action name. Important exceptions are:
| Tool | Effect action |
|---|---|
echo, user.ask, tool.search, trace.show, mcp.servers |
None |
filesystem.replace |
filesystem.write |
agent.delegate |
subagent.create |
agent.result |
subagent.read |
agent.list |
subagent.list |
web.fetch, docs.fetch, network.http |
network.http |
mcp.tools |
mcp.tools |
mcp.call |
mcp.call |
Connected integrations and signed packs add action identities from their active trusted
declarations. Use tools list and config effective for the exact runtime catalog.
Action classes and profile defaults¶
Every trusted action has one stable behavior class:
| Class | Examples | development |
minimal |
allow_all |
pinned |
|---|---|---|---|---|---|
| Provider | Model generation and provider catalog calls | Allow | Allow | Allow | Deny except provider.echo |
| Read | Filesystem, Git, repository, memory, context | Allow | Deny | Allow | Deny |
| Local state | Tasks, decisions, plans, goals, snapshots | Allow | Deny | Allow | Deny |
| Workspace mutation | File writes, patching, skill writes | Approval | Deny | Allow | Deny |
| Execution | Shell, processes, workflows, plan execution | Approval | Deny | Allow | Deny |
| External network | HTTP, search, integrations, MCP calls | Approval | Deny | Allow | Deny |
| Administration | Installation, trust, registry, protected export | Approval | Deny | Allow | Deny |
The class provides a profile default; exact overrides still win under built-in policy. See the canonical action table in Tools and action classes.
Approval interaction¶
requireApproval creates an approval obligation. The global --approval-mode controls
how an existing obligation can be satisfied:
| Approval mode | Result for an approval-required action |
|---|---|
deny |
Fail closed without prompting |
ask |
Prompt through a trusted interactive interface |
risk-auto |
Auto-approve only eligible, valid low-risk shell, read-only network, and exact top-level MCP assessments; otherwise ask or deny |
full-access |
Satisfy the approval obligation without a prompt |
Approval mode never converts deny to allow and never creates a missing resource
grant. full-access is therefore not equivalent to access.profile: allow_all, and
neither setting bypasses the Safety Kernel or sandbox.
Access with OPA¶
When policy.kind: opa, OPA owns every action outcome. All local action override lists
must be empty:
access:
profile: pinned
tools:
include:
- filesystem.list
- filesystem.read
- git.status
- git.diff
exclude: []
actions:
allow: []
requireApproval: []
deny: []
The profile and tool selectors still determine model visibility. The profile's built-in
action baseline is replaced with external_policy decisions, and OPA must return the
complete authorized resource obligations. Local Safety Kernel, permit, sandbox,
quarantine, audit, and post-effect checks remain mandatory.
See Policy and audit configuration and Policy and OPA.
Access does not configure resources¶
| Need | Configure it in |
|---|---|
| Read or write a path | Ambient authority under acknowledged full access, otherwise sandbox.filesystem or the reviewed workspace-development profile |
| Run a command | Ambient executable, filesystem, and environment authority under acknowledged full access; otherwise sandbox.executables plus the appropriate grants |
| Reach a service | Ambient HTTP(S) authority under acknowledged full access, otherwise sandbox.networkDestinations; the owning provider, search, MCP, or integration declaration always remains required |
| Read an environment variable in a subprocess | Ambient environment authority under acknowledged full access; otherwise sandbox.environment and the effect's own declaration |
| Use provider, MCP, or integration credentials | Credential references in the owning adapter configuration |
| Load a pack or integration operation | Its installation, trust, enablement, connection, and declaration lifecycle |
| Make a tool available in Plan Mode | Nothing can widen Plan Mode; it applies a fixed subset after access resolution |
Review Sandbox configuration, Network configuration, and Extension configuration alongside access for effectful deployments.
Common configuration mistakes¶
| Symptom | Check |
|---|---|
| A profile-selected tool is missing | Inspect its unmet_prerequisite in config effective |
| Runtime startup fails after adding an include | The exact tool may be unknown or missing a non-interactive prerequisite |
| A visible tool call is denied | Tool visibility and action authorization are separate; inspect its exact effect action |
| An excluded capability still works through another interface | Exclusion hides a model tool; add an exact action deny when the action itself must be blocked |
| A pinned tool is visible but denied | Add its exact action to allow or requireApproval |
| A pinned hosted-model run cannot start | Allow the exact provider action used by the configured provider |
shell.run is hidden under development |
Configure an exact executable, use the reviewed workspace-development sandbox profile, or explicitly select and acknowledge danger_full_access |
web.search is hidden despite network access |
Configure an exact search.roles.agent route; a destination alone is insufficient |
user.ask is hidden in a worker or headless run |
The current runtime has no trusted interactive prompt interface |
| A configured capability is hidden under full access | Add the required credential, route, MCP/integration declaration, or trusted extension; full access does not invent capabilities |
| OPA configuration is rejected | Empty all three access.actions lists; OPA is the sole decision point |
| A wildcard/name mixture is rejected | "*" must be the only include entry; put exceptions in exclude |
| An MCP server tool remains unavailable | Configure the MCP server's own allowedTools; the access wildcard is a separate boundary |
| A tool disappears in Plan Mode | Runtime modes can narrow the resolved catalog and cannot be widened by access configuration |
Validate the result¶
First parse the strict configuration:
Then inspect both the complete access resolution and the active model-visible catalog:
colossus --config .colossus/config.yaml config effective
colossus --config .colossus/config.yaml tools list
config effective includes active and hidden tools, selection reasons, unmet
prerequisites, exact action classes and decisions, explicit and derived sandbox grants,
the canonical workspace, and wildcard meaning. tools list includes active schemas,
effect actions, capabilities, decisions, and output bounds.
For effectful changes, also verify the independent enforcement boundaries:
colossus --config .colossus/config.yaml policy doctor
colossus --config .colossus/config.yaml sandbox doctor
Run those commands in the same workspace and host mode used by the real agent because derived development grants, interactive availability, configured executables, and extension state affect the resolved catalog.
Return to the configuration overview.