Skip to content

AI agents: modes, profiles, keys

Two ways to run agents, both inside the workspace: the chat built into the console, and the Claude Code, Codex and Antigravity CLIs in the image. The mode decides which tools exist; the member's profile decides which ones ask first.

Chat tools by mode and profilefrom the code
Member's agent profile
Organisation setting
What each tool class does in each chat mode, for the chosen profile
Tool classAskPlanBuildRun / DebugReview / Test
Read and searchfiles, search, git status, logsAutoAutoAutoAutoAuto
Propose a patchpropose_patchOffOffCardOffOff
Run a declared checkchecksOffOffCardCardCard
Write fileswrites, inside the projectOffOffAutoAutoOff
Run a commandexecutesOffOffCardCardOff
Card

Run a command · Build · assisted. Assisted asks once per turn for anything it has not been allowed. The turn stops at an approval card; Approve resumes it.

Pick a profile, then a cell. The mode is checked first and an unknown mode gets nothing; the profile and the organisation's settings decide the rest. This is the chat only: the CLIs have their own permission prompts and are governed by where they run and what they can reach.

What it is

The chat is a bounded tool loop in the console's backend that acts on the workspace's files and shell. It speaks the Anthropic and OpenAI dialects, and Gemini through its OpenAI-compatible endpoint, with model tiers Lite, Economy and Power. The CLIs (Claude Code, Codex, Antigravity) are installed in every workspace; the platform can sign them in and hold the refresh token, and under the default guarded profile Claude Code reaches Anthropic through claude-proxy on the host, so the workspace holds only a per-workspace key that is worthless off the host.

It is

  • Five modes (Ask, Plan, Build, Run / Debug, Review / Test) and three profiles (supervised, assisted, autonomous), per member.
  • Approval cards that end a turn at awaiting_approval and resume it on Approve.
  • 68 pinned, read-only platform skills in every workspace, plus a per-organisation catalogue.

It is not

  • A reach control. Profiles decide how much the agent asks, not what it can reach; reach is the egress and broker layer's job.
  • A spend limit. There are token rate limits; there are no currency budgets, and the cost meter only measures. The organisation's AI usage tab shows use; it caps nothing.
  • Able to push by default. Agent git, MCP, memory, subagents and repository skills are each off until an admin turns them on.

How it works

  1. Mode gate. Each mode maps to four capabilities: propose a patch, checks, writes, executes. Ask and Plan have none. Build has all four. Run / Debug has checks, writes and executes. Review / Test has checks only. An unrecognised mode resolves to nothing.
  2. Profile. Supervised caps the member at propose and checks. Assisted and autonomous allow all four; they differ only in the approval card. The member's own value wins over the organisation's; unset means the platform default, assisted; an operator floor can narrow everybody and widen nobody.
  3. Command policy. Every command is split into stages and the strictest wins: the platform floor (sudo, systemctl, git push --force, piping a download into a shell…) is refused and no allowlist lifts it; docker is on the floor too, except in a workspace with Docker on and “Let the AI agents run Docker commands” on, where it goes through the normal allow-or-ask rules and reaches only that workspace's own Docker broker; command substitution always asks; the organisation's allowlist and refused list decide the rest.
  4. Card. A command or out-of-project write ends the turn awaiting_approval. Only one command may wait per turn. Approve resumes the turn; a parked write is shown as not written; a reply that claims a card it never drew is corrected.
  5. Keys. CLI traffic to Anthropic goes through claude-proxy; OpenAI and Codex through key-broker when it is on. Each workspace gets a base URL and a dummy key; the real credential is injected on the host.

Defaults

Agent settings, by group
SettingScopeDefaultAllowed values
Autonomy and approval
agent_profileHow much the agent does without asking. Member value overrides the organisation's.platformorganisationmemberassisted (when unset)supervised · assisted · autonomous
agent_profile_floorOperator only. A ceiling on autonomy for everyone.platformunsetsame three
chat_approval_approverplatformorganisationselfself · second-person
chat_approval_bindingbinding refuses a run whose capabilities changed since the card was shown.platformorganisationadvisoryadvisory · binding
command_approval_scopeplatformorganisationpush-and-productionpush-and-production · ladder
agent_check_allowlistCheck names (never commands) that run without a card, for assisted and wider.platformorganisationemptynames, e.g. test,lint,build
bash_allowlist · bash_denylistplatformorganisationbuilt-in safe list · emptycommand listsNeither can lift the platform floor.
Switches that ship off
agent_vcs_enabledAgent branch, commit, push and pull requests.platformorganisationoff until an admin turns it ontrue · false
vcs_*_min_profilePer capability: read supervised; write, commit, branch assisted; push and PR off. Max one push per turn.platformsee leftoff · supervised · assisted · autonomous
mcp_enabledServers come from the organisation's MCP servers list, dialled through the egress proxy. None are bundled.platformorganisationoff until an admin turns it ontrue · false
subagents_enabledplatformorganisationoff until an admin turns it ontrue · falseUp to 2 per turn, 4 steps each.
agent_memory_enabledplatformorganisationmemberoff until an admin turns it ontrue · false
agent_skills_enabledSkills from the workspace repository.platformorganisationoff until an admin turns it ontrue · false
chat_dispatch_enabledStarting a governed agent run from chat.platformorganisationoff until an admin turns it ontrue · false
cost_meter_enabledReports what a turn cost, and fills the cost columns of the AI usage tab. Measures only; stops nothing.platformorganisationoff, no ratestrue · false
Skills, content and retention
catalogue_skillsplatformorganisation@developer@developer · @assistant · * · none · names
chat_images_enabledPNG, JPEG, GIF and WebP, sent to the organisation's Claude model with that one message; not kept in the workspace and not replayed.platformorganisationontrue · falseNot checked for secrets.
chat_files_enabledPDFs and text or code files, up to 5 MB each. Text goes to the model as text, cut at 100,000 characters; a PDF goes to Claude as a document.platformorganisationontrue · falseA text file carrying a credential is refused. PDFs are refused while ai_mask_personal_data is on.
ai_chat_retention_daysplatformorganisation0 (no time limit)0–3650A 200-turn cap applies regardless.
ai_agents_enabledplatformorganisationontrue · false
Docker for agents
Let the AI agents run Docker commandsA workspace setting on the Docker card. Only where the workspace has Docker (managed or full); it never affects the person's own terminal.workspaceon once Docker is onon · offThe workspace owner or an organisation admin changes it; it applies live and every change is audited.
Turn budgets and rate limits
ai_max_steps · ai_max_tool_callsPer-organisation caps can only lower the platform ceiling.platformorganisation0 (inherit)0–60 · 0–200
chat_session_max_minutesplatformorganisation2405–240; lower only
claude_rate_limit_per_hour · claude_rate_limit_tokens_per_dayPer workspace, through claude-proxy. The same pair exists for key-broker.platform0 (no limit)a number
Credential brokers
Anthropic credentialSet by the security profile, not a switch: under guarded and strict the credential stays on the host behind claude-proxy; under open and metered it is in the container.platformorganisationrepositorymemberhost proxy (guarded)proxy · container
key_broker_enabledThe same for OpenAI and Codex. The Antigravity CLI does not use it yet.platformoff until an admin turns it ontrue · false
member_credentials_enabledMembers may bring their own credential.platformorganisationofftrue · false

Switches only open where the host allows. An organisation cannot turn on a switch the platform has off, and organisations with no value of their own inherit the platform's. To enable a switch for one organisation, turn it on for the platform and set false on the others.

Configure it

on the host
# autonomy: organisation default, operator floor
$ bin/policy set --scope tenant --target acme --key agent_profile --value supervised
$ bin/policy set --key agent_profile_floor --value assisted
# approvals
$ bin/policy set --scope tenant --target acme --key chat_approval_approver --value second-person
$ bin/policy set --scope tenant --target acme --key agent_check_allowlist --value 'test,lint'
# model keys on the host: the proxy must be running
$ bin/claude-proxy status
$ bin/claude-proxy usage --workspace acme/dev01
$ bin/policy set --key key_broker_enabled --value true
$ bin/key-broker providers
# what one tenant actually gets
$ bin/policy get-for --tenant acme --key agent_vcs_enabled
$ bin/policy tunables --group 'Agent chat'
Member profile

OrganisationsacmeMembers

A member's own profile overrides the organisation's.
Organisation

OrganisationsacmeSettings

Self-approval, Agent grants, Agent features, Catalogue skills, Audit and Chat retention cards. The AI keys tab holds the organisation's keys and sign-ins; MCP servers holds its allowlist; the AI usage tab shows use by member, workspace, surface, model and account.
Platform

ConsoleSettingsAI agents

Models behind each tier and platform sign-ins.
Developer

WorkspaceChat

The mode picker, / for the skill picker, attachments (images, PDFs and text or code files), and the turn outcome with Continue after a dropped connection.
Docker for agents

WorkspaceDocker card

“Let the AI agents run Docker commands”.

Tasks

Roll agents out cautiously

  1. Start the organisation on supervised

    on the host
    $ bin/policy set --scope tenant --target acme --key agent_profile --value supervised

    Expected: in Build, the chat reads and proposes patches and checks; Write files and Run a command are not offered.

  2. Move trusted members to assisted

    Set their profile under Members. Expected: they can edit files directly and each command stops at a card.

  3. Let the project's own tests run without a card

    on the host
    $ bin/policy set --scope tenant --target acme --key agent_check_allowlist --value 'test'

    Expected: an assisted member's test check runs without a card, with no network, and appears on the audit trail. Only names the project declares are eligible.

  4. Cap everybody, if you need to

    on the host
    $ bin/policy set --key agent_profile_floor --value assisted

    Expected: no organisation or member resolves to autonomous.

Keep Claude credentials off the workspace

  1. Keep the profile at guarded or stricter, and the proxy running

    on the host
    $ bin/policy resolve --tenant acme --user dev@example.test --repo acme/api
    $ bin/claude-proxy status

    Under guarded the profile takes the credential out of the container. If the proxy is not accepting connections, workspace-agent create refuses rather than leave claude with neither a token nor a proxy.

  2. Sign in once, on the platform

    ConsoleSettingsAI agents

    Or add the organisation's own key under its AI keys tab. bin/claude-proxy kind --tenant acme prints api-key, oauth or none.

  3. Check a workspace

    on the host
    $ bin/claude-proxy key --tenant acme --workspace dev01 --env

    Expected: two lines, ANTHROPIC_BASE_URL pointing at the host proxy and a per-workspace ANTHROPIC_API_KEY that works only through it.

Let the agents run Docker, or stop them

  1. Give the workspace Docker first

    The agents can run Docker only in a workspace with Docker (managed or full). See Let a workspace run Docker. Once Docker is on, the setting is on by default.

  2. Turn it off or on

    The workspace owner or an organisation admin uses the switch on the workspace's Docker card, or on the host:

    on the host
    $ bin/workspace-agent docker-agent --tenant acme --workspace dev01 --docker-agent off

    Expected: the change applies to the agent's next command with no recreate, and is on the audit trail. With it on, docker goes through the same broker and the same refusals as the person's own, and the approval rules for commands still apply. The person's own terminal is never affected.

See what AI use costs an organisation

  1. Open the AI usage tab

    OrganisationsacmeAI usage

    For organisation owners, admins and auditors. It shows requests, tokens, and total and average cost, by member, by workspace, by surface (web chat, CLI, VS Code), by provider and model, and by account: the label an admin gave a credential, who pays (organisation, platform or a member's own key). Each use is counted once. Windows are today, 7, 30 or 90 days, never longer than the audit trail.

  2. Turn on the cost meter, if you want costs

    on the host
    $ bin/policy set --scope tenant --target acme --key cost_meter_enabled --value true

    Expected: cost appears where a rate is set. A row with no rate shows “cost unknown”, never 0. Rows from before orxy V1.7 show “not recorded”.

  3. Take the report

    Request usage report shows the limits that apply and downloads a CSV. Each download is audited as ai-usage-report. The platform rate limits it shows are host-wide, not per organisation, and 0 (none) unless an operator sets them.

Rate-limit one heavy workspace

  1. Measure before you cap

    on the host
    $ bin/claude-proxy usage --day 2026-09-28 --json
  2. Set the cap from the numbers

    on the host
    $ bin/policy set --key claude_rate_limit_tokens_per_day --value 2000000

    Expected: a workspace past the line is refused with acme/dev01 has used … tokens today, and the limit is 2000000. One request may finish above it.

Let agents open pull requests

  1. Turn agent git on for the platform

    on the host
    $ bin/policy set --key agent_vcs_enabled --value true
    $ bin/policy set --key vcs_push_min_profile --value assisted
    $ bin/policy set --key vcs_pr_min_profile --value assisted
  2. Withdraw it from organisations that should not have it

    on the host
    $ bin/policy set --scope tenant --target acme-ops --key agent_vcs_enabled --value false
  3. Grant the GitHub App the pull-request permission

    Push goes through the git broker; the pull-requests pane needs the App to have Pull requests: read and Issues: read. See Git & provenance.

    Expected: an assisted member's agent can propose one push per turn, which the developer approves; it pushes only the current branch and cannot force, delete a ref or push a tag.

Allow one MCP server

  1. Turn MCP on

    on the host
    $ bin/policy set --key mcp_enabled --value true
  2. Add the server to the organisation's list

    OrganisationsacmeMCP servers

    Give it an https URL and a minimum profile. Its host must also be on the egress allowlist.

    Expected: the chat offers that server's tools to members at or above its minimum profile, and nothing else.

Verify it works

In the workspacesynthetic

dev@acme-dev01:~$ env | grep ANTHROPIC ANTHROPIC_BASE_URL=http://host-proxy/… ANTHROPIC_API_KEY=per-workspace key, worthless off this host dev@acme-dev01:~$ workspace-info | jq .ai_keys … reports which providers this workspace may use

Good looks like: in chat, Ask never writes; a Build command stops at a card showing the exact command; Approve resumes the same turn; the audit record has the card and the decision. On the host, bin/claude-proxy usage shows the workspace's requests, and bin/policy get-for --tenant acme --key agent_profile returns what you set.

Troubleshooting

The chat does nothingAI agents are disabled for your organisation by its administrator.

Cause: ai_agents_enabled is off for the organisation (or the platform, or the member). Fix: turn it on at the level named.

Workspace create failsclaude proxy unreachable

Cause: the profile keeps the Anthropic credential on the host and the proxy is not accepting connections. Fix: start the Claude proxy service and check bin/claude-proxy status.

A provider is refusedacme has not given you access to the openai provider. An owner or admin of it can add you.

Fix: grant the member that provider under Members or AI keys.

Edits are refusedfile editing is not granted to you in this organisation. An owner or admin turns it on per member; nothing was changed.

Fix: grant file editing to the member in Agent grants.

Git tools missing`git_push` is not open to this member. Git is turned off for this organisation, or this capability's floor is above their profile.

Fix: the agent-git task. Push and PR floors default to off.

A second command is refusedone command is already awaiting approval in this turn; wait for the developer's decision.

Cause: one card per turn, by design. Fix: decide the card that is open.

A command is always refused`sudo` is refused for every organisation: … This is a platform floor and an allowlist cannot lift it.

Cause: the platform floor. Fix: none; install packages in the project, not with the system package manager.

The Docker switch is refusedDocker is off for this workspace

Cause: the workspace has no Docker. Fix: give it managed Docker first (Workspaces).

An attachment is refused

Cause: images or files are turned off for the organisation (chat_images_enabled, chat_files_enabled; the chat says so), the file is over 5 MB, a text file carries a credential, or it is a PDF while personal-data masking is on. Fix: turn the switch on, or send a smaller or cleaned file.

Requests stop mid-taskacme/dev01 has made 600 requests in the last hour, and the limit is 600

Fix: raise or clear claude_rate_limit_per_hour (0 = no limit) after reading claude-proxy usage.

Organisation cannot turn a switch onthis host has 'mcp_enabled' turned off, so an organisation cannot turn it on - …

Fix: turn it on for the platform first.

A chat-started run will not start

Open the organisation's “Why it's stuck” tab; the first gate that is not OK is the reason. See Governance.

Limits and what is not built yet

  • No spend budgets in currency. The cost meter is off, has no rates, and only measures.
  • AI usage. An AI usage tab for organisation admins and auditors: requests, tokens and cost by member, workspace, surface, model and account. There is no spend cap; cost shows only where the cost meter is on; AI tools that hold their own login inside a workspace are not measured.
  • Attachments are not checked for secrets when they are images or PDFs: a screenshot of a secret reaches the provider as it is. Text files are cut at 100,000 characters. The audit records an attachment's name, type, size and fingerprint, never its content.
  • Agents and Docker. Where the workspace has Docker and the setting is on (the default), the agents run docker through the same broker, with the same refusals, under the approval rules. Everywhere else docker stays on the platform floor.
  • The Antigravity CLI is not brokered, and some AI APIs are reachable directly. Only Anthropic is fully brokered today; the key broker is off by default.
  • Under open or metered tokens are mounted in the container, and the per-workspace proxy key is readable by that developer.
  • Approval is advisory by default and self-approval is the default approver.
  • Governed background runs are measured only against claude-code-acp, and their grant lapses with every new commit.
  • The skill picker has open bugs; the assistant skill pack is off everywhere. No web search for agents; no Copilot or Cursor.

Verified against the main branch, 4 Oct 2026.