Positron Settings
When running inside Positron, Posit Assistant is configured through Positron / VS Code settings in addition to the shared config file. These settings are accessed via Settings (Cmd+, / Ctrl+,) and use the assistant.* prefix.
Settings Reference
| Key | Type | Default | Description |
|---|---|---|---|
ai.enabled | boolean | true | Positron 2026.07+ only. Positron's main switch for all AI features. When off, Posit Assistant is unavailable regardless of assistant.enabled. To use the assistant, both ai.enabled and assistant.enabled must be on. Not consulted on older Positron versions. |
assistant.enabled | boolean | true | Enable Posit Assistant chat and AI features. When disabled, the sidebar icon remains visible and opens an explanation, while editor panel commands are unavailable. Has no effect when ai.enabled is off (Positron 2026.07+). On older Positron versions (< 2026.07), explicit assistant.enabled overrides the legacy positron.assistant.enable setting. |
positron.assistant.enable | boolean | false | Legacy (Positron < 2026.07 only). Enables Posit Assistant on older Positron versions where ai.enabled does not exist. Overridden by explicit assistant.enabled workspace or user settings. Not present on Positron 2026.07+. |
assistant.preferredModel.id | string | "" | The preferred language model ID to use by default. If specified and available, this model is selected automatically when Posit Assistant starts. |
assistant.preferredModel.provider | string | "" | The preferred model provider. Used with preferredModel.id to disambiguate when the same model ID is available from multiple providers. |
assistant.preferredModel.thinkingEffort | string | "" | Default thinking effort level for models that support adaptive thinking (e.g., 'low', 'medium', 'high'). |
assistant.preferredModel.webSearch | boolean | false | Whether web search is enabled by default. |
assistant.mcpServers | object | {} | MCP server configuration. Same format as the mcpServers key in the config file. |
assistant.aiExcludes | string[] | [] | Glob patterns for files excluded from AI access. For example, ["*.env", "secrets/**"] blocks matching files from being read, written, or edited. Patterns without a `/` match filenames in any directory. Admin policies can enforce non-overridable patterns. |
ai.enabled is a Positron setting (not an assistant.* setting) that gates
all of Positron’s AI features. It takes precedence over assistant.enabled:
when ai.enabled is off, Posit Assistant is disabled even if
assistant.enabled is on (including when an admin policy enforces
assistant.enabled to true). When ai.enabled is on (the default), the
assistant follows its own assistant.enabled setting.
ai.enabled is available starting in Positron 2026.07. On older versions
(< 2026.07), enablement is governed by the positron.assistant.enable
setting instead, and ai.enabled is not consulted.
MCP Servers in Positron
MCP servers can be configured either in the Positron / VS Code settings (assistant.mcpServers) or in the shared config file (mcpServers key). The format is the same in both locations. See the MCP Servers guide for configuration details.
Plugins in Positron
Plugin registrations and enablement are managed through the plugin manager and stored under assistant.* settings. Most users don’t set these by hand.
These keys are scope: application (user scope), so a .vscode/settings.json in a repository can never declare a marketplace or enable a plugin. When you install with Project scope in the manager, the declaration goes into the workspace’s .posit/assistant/settings.json instead, which is only read in a trusted workspace.
| Key | Type | Default | Description |
|---|---|---|---|
assistant.extraKnownMarketplaces | object | {} | Declared plugin marketplaces (name to source). User scope; project declarations go in <repo>/.posit/assistant/settings.json. |
assistant.enabledPlugins | object | {} | Plugin enablement keyed by "<plugin>@<marketplace>" (true = enabled, false = disabled). User scope; project declarations go in <repo>/.posit/assistant/settings.json. |
assistant.plugins.hostTokens | object | {} | Per-host git credential references for private marketplaces ({env:VAR} references only). Global (user) scope only, so a workspace cannot inject credentials. |
Plugin Enforcement (Admins)
Administrators on Posit Workbench can lock down plugin usage by delivering the keys below through Workbench’s enforced-settings channel. These are loaded into Positron’s non-overridable policy tier, so a user cannot grant themselves access the admin hasn’t allowed. Enforcement is applied at activation, so a blocklist added after a plugin was installed deactivates it.
Deliver these as a JSON settings object in an /etc/rstudio/positron-enforced-settings/*.json file registered per-scope in /etc/rstudio/profiles. See the enforced-settings admin docs for the delivery mechanism.
| Key | Type | Default | Description |
|---|---|---|---|
assistant.plugins.strictKnownMarketplaces | array | null | null | Administrator marketplace allowlist. Unset (null) = open (any marketplace); [] = lockdown (no marketplace); a non-empty list = only those marketplaces are allowed. |
assistant.plugins.blockedMarketplaces | array | null | null | Administrator marketplace denylist. A match is blocked regardless of the allowlist. Unset (null) = no denylist. |
assistant.plugins.allowedComponents | array | null | null | Allowlist of plugin component types (skills, commands, agents, hooks, mcpServers, monitors, lspServers). Unset (null) = no restriction; [] = allow no components. |
Admin enforced-settings must use the flat key names shown above
(assistant.plugins.strictKnownMarketplaces, and so on), not a nested assistant.plugins object.
An allowlist only says what may be added. To also make a blessed marketplace appear in the
manager, declare it in assistant.extraKnownMarketplaces in the same enforced-settings object.
Policy-declared marketplaces are non-removable by the user.
Granular plugin enforcement is applied only on Positron. On other surfaces these keys act as
advisory defaults, and the only binding control is Workbench’s coarse assistant-enabled switch.
Custom Base URLs and Headers
Posit Assistant respects custom base URLs and custom HTTP headers configured in Positron’s language model provider settings. These are useful for enterprise proxies, custom API gateways, or local development servers — including gateways like Databricks that require extra tenancy or routing markers on every request.
These are Positron authentication settings (authentication.*), not assistant.* settings — they live in the same namespace as the provider’s credentials and apply to all extensions that use the provider. The base URL can be set through the model provider configuration UI; customHeaders is set directly in settings.json.
The supported settings are:
| Provider | Base URL | Custom Headers |
|---|---|---|
| Anthropic | authentication.anthropic.baseUrl | authentication.anthropic.customHeaders |
| OpenAI | authentication.openai-api.baseUrl | authentication.openai-api.customHeaders |
| OpenAI Compatible | authentication.openai-compatible.baseUrl | authentication.openai-compatible.customHeaders |
| Microsoft Foundry | authentication.foundry.baseUrl | authentication.foundry.customHeaders |
| Snowflake | derived from authentication.snowflake.credentials | authentication.snowflake.customHeaders |
customHeaders is an object mapping header name to value, attached to every model-discovery and chat request for the provider:
{
"authentication.openai-api.customHeaders": {
"x-gateway-tenant": "team-42"
}
}
The following SDK-managed header names are ignored if set in customHeaders:
Accept, anthropic-version, Authorization, Content-Type, x-api-key.
Advanced Settings
These settings cover lower-level routing controls and feature toggles. Most users don’t need to change them.
| Key | Type | Default | Description |
|---|---|---|---|
assistant.modelRouting | string | "prefer-direct" | Controls how Posit Assistant accesses language models. See Model Routing below for the available options. |
assistant.showTips | boolean | true | Show helpful tips above the input after assistant turns and on startup. Disabling hides tips immediately without restarting. |
assistant.cacheKeepalive | boolean | true | Keep supported model prompt caches warm while idle by sending lightweight pings after each turn. |
assistant.cacheKeepaliveMinutes | integer | 30 | Maximum number of minutes after a real model request during which automatic cache-keepalive pings may be sent (0–60). Cadence and projected-cold time depend on the selected model. |
Experimental Settings
The settings in this section are experimental or developer-facing. They may change, break, or be removed between releases without notice. Use them at your own risk. Documentation here may lag behind the actual behavior.
These settings are not exposed in the Positron Settings UI — edit settings.json directly. They can also be set in the shared config file via the features block, and values from both locations are merged. See How Feature Settings Are Merged for priority order.
| Key | Type | Default | Description |
|---|---|---|---|
assistant.experimentalFeatures | boolean | false | Enable experimental in-development features. Gates access to new capabilities that are still being refined, including the plugin & marketplace manager, its /plugin and /marketplace commands, and the Manage Plugins palette entry. |
assistant.devMode | boolean | false | Enable developer debugging surfaces such as raw tool data display, conversation path copying, and dev-only commands. |
assistant.enablePersonaSelector | boolean | false | Show the persona selector in the status bar, allowing you to switch between additional assistant personas. |
assistant.cacheKeepaliveWidget | boolean | false | Show a status-bar widget with cache warmth state, a countdown to the next ping, and controls to extend, reduce, or stop the idle ping chain. Requires cache keepalive to be enabled. |
Model Routing
The assistant.modelRouting setting controls how the assistant connects to language models:
| Value | Description |
|---|---|
prefer-direct | (Default) Use direct API access when available, fill in remaining providers from Positron’s language model API. |
direct | Only use direct API access via configured credentials. |
vscode-lm | Only use Positron’s built-in language model API. |
prefer-vscode-lm | Prefer Positron’s language model API, fill in remaining providers from direct access. |
Most users should leave this at the default (prefer-direct).
Relationship to Posit Assistant Config File
Positron reads settings from both Positron / VS Code settings and the shared config file (~/.posit/assistant/settings.json and project-level .posit/assistant/settings.json). Some settings live in only one place, while others can be set in either:
- Positron-only — Model routing and sidebar visibility are Positron / VS Code settings with no config-file equivalent.
- Config-file-only — Runtime paths, permissions, storage, and logging are shared across all platforms and have no VS Code setting.
- Both — Feature settings like tips, cache keepalive, auto-compaction, and experimental features can be set in either location and are merged together.
How Feature Settings Are Merged
When a feature setting (tips, cache keepalive, auto-compaction, experimental features) exists in both Positron / VS Code settings and the config file, Positron resolves them using a 5-tier priority — the first defined value wins:
- Positron workspace setting —
assistant.<key>set at the workspace level in Positron - Project config file —
features.<key>in.posit/assistant/settings.jsonin your project - Positron user setting —
assistant.<key>set at the user level in Positron - Global config file —
features.<key>in~/.posit/assistant/settings.json - Declared default — the built-in default value
This means a project-level config file overrides your Positron user settings, and a Positron workspace setting overrides everything. Settings that aren’t declared in Positron’s Settings UI, such as assistant.autoCompactTokenBuffer, are effectively read from settings.json or the config file only.
Model preferences like thinking effort and web search are set as defaults in the config file (model.thinkingEffort, model.webSearch) and applied when starting new conversations. During a conversation, these preferences are adjusted via the UI and stored per-conversation — they are not written back to the config file.