Admin config
Admin config, also called managed config, lets Organization and Workspace administrators distribute settings for the Vibe Code CLI and the VS Code extension to all users. You define it once in the Admin Panel, and both clients apply it to users in the Organization or Workspace. Use it to distribute models, providers, MCP servers, and tool policies without requiring users to edit config.toml.
Admin config is a distribution mechanism, not a security control. It applies settings by default and shows them in /config, but users who control their local CLI environment can bypass them. Use it to set safe defaults, not to guarantee access rules: anything users must never reach also needs a server-side control, such as API key or Workspace permissions.
When admin config can't be applied, for example because it's invalid, sessions run on the user's local configuration instead. See What users see.
Unlike config.toml, admin config isn't edited on the user's machine. The CLI fetches it over HTTP when a session starts and keeps a copy in ~/.vibe/managed_config_cache.json, to use when the next fetch fails. It never writes admin config to config.toml.
Admin config is available at two scopes:
- Organization level: configure it in Admin Panel›Vibe›Preferences ↗. It applies to users in every Workspace that doesn't set its own.
- Workspace level: open Admin Panel›Administration›Workspaces ↗, select a Workspace, and open
Settings. A Workspace can use the Organization-level configuration, replace it with its own, or turn admin config off for its users.
The server doesn't merge the two configurations. Each user receives one, chosen by the user's Workspace:
| Workspace-level configuration | What users in the Workspace receive |
|---|---|
| Not set, or set to inherit | The Organization-level configuration |
| Enabled | The Workspace-level configuration only. Settings defined only at the Organization level don't apply. |
| Disabled | No admin config, even when the Organization has one |
Minimum client versions
Support for admin config starts with these client versions:
| Client | Minimum version |
|---|---|
| Vibe Code CLI | 2.24.2 |
| VS Code extension | 1.16 |
Earlier clients don't request admin config or apply its settings. Upgrade every client before you distribute an admin config.
How it works
- In Admin Panel›Vibe›Preferences ↗, or in a Workspace's
Settings, enter a TOML configuration underVibe Code Clients managed config. - When a session starts, the CLI calls the managed-config endpoint with the user's Mistral API key and waits for the answer, a few seconds at most.
/reloadfetches it again. - If admin config is enabled, its values take precedence over every other configuration source. The session follows them from its first message: starting agent, connectors, MCP servers, and tools.
Permissions
Managing admin config requires the manage_code_config role-based access control (RBAC) permission at the Organization scope. Organization administrators can delegate admin config management without granting full administrator access.
Workspace administrators can manage the configuration of their own Workspace.
Enable the feature
We recommend validating your configuration in a test Organization before distributing it to all users.
Activation by deployment type
The activation process depends on the deployment type:
| Deployment | How to activate |
|---|---|
| Serverless | No activation needed. The feature is available to every Organization. |
| Dedicated (private cloud) | Contact your account team. Mistral enables the feature flag when available or sets its value in the deployment configuration. |
| Self-hosted | Contact your account team to request activation through the Helm chart. This option is available on request. |
Dedicated and self-hosted deployments require /whoami to return the correct Vibe and API domains. See Troubleshooting for validation steps.
Precedence
Admin config is the highest-priority layer. It takes precedence over command-line flags, environment variables, and both project and user config.toml:
admin config > agent settings > CLI flags > VIBE_* env vars > project config.toml > user config.tomlThis precedence means the admin-provided values take effect for users by default, without them needing to update their own config.toml.
What admins can set
Admin config accepts most of the same keys as config.toml, for example:
- Active model, models, and providers.
- MCP servers, and whether users can use MCP servers at all.
- Whether users can auto-approve every tool call.
- Connectors, and enabled/disabled tools, agents, and skills.
- The starting agent.
- Telemetry, update check, and notification toggles.
active_model = "mistral-medium-3.5"
enable_update_checks = false
disabled_tools = ["bash"]A [[providers]] entry replaces the built-in provider with the same name entirely. Don't redefine the built-in mistral provider unless you set every field it needs, including backend = "mistral" and an api_base that ends with /v1.
Enforce enterprise defaults
A common use is giving everyone in the organization ready-to-use models out of the box. Instead of each user manually setting up providers and models, admins ship the right model and provider once, pointed at your enterprise endpoint with the correct backend, base URL, and headers. Users get a working setup on first launch, with nothing to configure.
active_model = "mistral-large-enterprise"
[[providers]]
name = "acme-enterprise"
backend = "mistral"
api_base = "https://mistral.acme.internal/v1"
api_key_env_var = "ACME_MISTRAL_API_KEY"
api_style = "openai"
[providers.extra_headers]
"x-acme-tenant" = "engineering"
[[models]]
name = "mistral-large-2411"
provider = "acme-enterprise"
alias = "mistral-large-enterprise"Here the model mistral-large-2411 is served through the acme-enterprise provider, exposed to users under the alias mistral-large-enterprise, which is set as the active model. The credential is still supplied locally via the ACME_MISTRAL_API_KEY environment variable.
Restrict selectable models
Use the top-level allowed_models key to limit which models users can select. It takes a list of patterns. Each pattern matches the model's canonical API name: the name field of a [[models]] preset or a built-in model ID. This is the model name sent to the inference API, so giving a model a different alias doesn't change what patterns match.
Patterns support three matching modes:
| Pattern mode | Example |
|---|---|
| Exact name | "mistral-large-latest" |
| Glob | "mistral-vibe-cli-*" |
Regular expression, prefixed with re: | "re:^mistral-(large|medium)-" |
When the list contains at least one pattern, only matching models are selectable in the model picker. This restriction applies to both the Vibe Code CLI and the VS Code extension. An empty or missing list has no effect.
active_model = "mistral-large-enterprise"
allowed_models = ["mistral-vibe-cli-*"]
[[models]]
name = "mistral-vibe-cli-latest"
provider = "mistral"
alias = "mistral-large-enterprise"Combine allowed_models with the models you distribute: ship the [[models]] presets users need, and filter out every other model.
If no configured model matches allowed_models, the CLI rejects the entire admin config. Every pattern should match at least one distributed or built-in model name. allowed_models restricts which models the Vibe Code clients offer and run. It doesn't restrict API access: enforce access at the provider or API key level to limit which models a user can reach.
Block MCP servers
An empty mcp_servers list in admin config doesn't remove the servers users add themselves. To block MCP servers, set enable_mcp to false:
enable_mcp = falseWith enable_mcp = false, the Vibe Code clients:
- Refuse to add, remove, enable, or disable MCP servers, for example with
vibe mcpor/mcp. - Refuse to sign in to or out of OAuth MCP servers.
- Load no tools from MCP servers, including servers provided by plugins.
Users who try one of these actions see a message that their administrator disabled MCP servers. The clients enforce this setting, so like the rest of admin config, it isn't a security boundary. It requires Vibe Code CLI 3.0 or later. Connectors have a separate setting, enable_connectors.
Block connectors
To block every connector, including the built-in web search, set enable_connectors to false:
enable_connectors = falseTo block one connector, add a [[connectors]] entry with the connector's name, as listed in /connectors:
[[connectors]]
name = "web_search"
disabled = trueTo block only some of a connector's tools, list them in the entry's disabled_tools, without the connector prefix:
[[connectors]]
name = "web_search"
disabled_tools = ["weather_search"]In the top-level enabled_tools and disabled_tools keys and in [tools.<tool_name>] blocks, a connector tool is named connector_<connector>_<tool>:
disabled_tools = ["connector_web_search_*"]
[tools.connector_web_search_weather_search]
permission = "ask"Session logs show connector tools as connector_<connector>.<tool>, with a dot, for example connector_web_search.weather_search. Rules written with the dot match no tool. Use the underscore form, connector_web_search_weather_search.
Set the starting agent
Set default_agent to choose the agent every session starts in, and enabled_agents or disabled_agents to limit the agents users can switch to. Both lists take agent name patterns: exact names, globs, or regular expressions prefixed with re:.
default_agent = "ask"
disabled_agents = ["auto-approve"]Sessions never run in an agent the admin config excludes. If a user asks for one, for example with --agent, the session starts in default_agent instead.
Block auto-approve
To stop users from skipping approval prompts with the auto-approve mode, set enable_auto_approve to false:
enable_auto_approve = falseWith enable_auto_approve = false, the Vibe Code CLI:
- Hides the
auto-approveagent and every custom agent withsafety = "yolo". A session whose--agentordefault_agentnames one of them starts in another agent instead, as for any agent the admin config excludes. - Ignores
--auto-approveand--yolo, and shows a warning that approval prompts stay on. It also ignoresbypass_tool_permissions = true.
Per-tool permissions still apply: a tool set to always in [tools.<tool_name>], or a command in its allowlist, still runs without approval. Like the rest of admin config, this setting isn't a security boundary. It requires Vibe Code CLI 3.0.1 or later.
Secrets
Admin config never contains literal secrets. Credential fields must reference an environment variable (for example, api_key_env_var = "MISTRAL_API_KEY"), never the key itself. Literal API keys, tokens, or passwords are rejected on the server.
What users see
When admin config is active, users in the Vibe Code CLI notice the following:
- Admin-managed settings are read-only in
/config: users can't edit or reset them. The settings editor's Where it's set panel lists the administrator as a source. - There is no startup banner or global indicator.
- Starting a session waits for admin config, a few seconds at most. The CLI never writes admin config to the local
config.toml. - If the fetch fails, the session uses the last admin config received in the past 7 days, or runs without admin config.
/reloadfetches admin config again. Changes to the starting agent and connectors apply from the next session.- If the CLI can't find a Mistral API key, it skips admin config.
- If the admin config can't be applied, the CLI tries the last admin config it received, then falls back to the user's local configuration, with no admin config at all. It shows:
Your administrator-managed configuration could not be applied: <reason>. This happens when the admin config is invalid or doesn't fit the user's setup, for example a[[models]]entry whoseproviderisn't defined, or asystem_prompt_idthe user's project doesn't provide.
Stop applying admin config
To stop applying admin config, submit an empty configuration. Users who can't reach the managed-config endpoint keep the last configuration they received for up to 7 days.
Troubleshoot dedicated and self-hosted deployments
If users in dedicated or self-hosted deployments don't receive admin config, check the endpoints and domain values.
Check endpoint access
The client needs to reach two authenticated endpoints:
<console_base_url>/api/vibe/whoamireturns the tenant's Vibe and API domains invibe_baseandapi_base.<vibe_base_url>/api/v1/code/managed-configreturns the admin config response. The client derivesvibe_base_urlfrom thevibe_basevalue returned by/whoami.
Set the URLs for the user's deployment, make sure MISTRAL_API_KEY is available in the environment, and run both requests from the user's environment:
CONSOLE_BASE_URL="https://console.mistral.ai"
VIBE_BASE_URL="https://chat.mistral.ai"
curl --silent --show-error --fail-with-body \
--header "Authorization: Bearer ${MISTRAL_API_KEY}" \
"${CONSOLE_BASE_URL}/api/vibe/whoami"
curl --silent --show-error --fail-with-body \
--header "Authorization: Bearer ${MISTRAL_API_KEY}" \
"${VIBE_BASE_URL}/api/v1/code/managed-config"For dedicated and self-hosted deployments, replace both URL values with the deployment's console and Vibe origins.
- If either request fails to connect, check the deployment's DNS, TLS, and network configuration. Contact your account team or Mistral support if the endpoint remains unavailable.
- If either request returns
401or403, verify the user's API key and access. - If both requests return a successful HTTP status, continue with the domain checks.
/whoami domainsCheck the /whoami domains
The /whoami response must contain the expected vibe_base and api_base origins. The client stores a valid vibe_base value as vibe_base_url in the user's config.toml and uses it to build the managed-config URL.
If /whoami returns an incorrect domain, contact Mistral support to correct the server configuration. If the response is correct but the client doesn't fetch admin config, investigate the Vibe Code client.
Apply fixes for your deployment type
| Deployment | How fixes are delivered |
|---|---|
| Serverless | Mistral includes the fix in a platform release. |
| Dedicated | Request a redeployment of the dedicated instance. |
| Self-hosted | Update to a self-hosted release. For critical issues, contact Mistral support to discuss a hotfix. |