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

KeyTypeDefaultDescription
ai.enabledbooleantruePositron 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.enabledbooleantrueEnable 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.enablebooleanfalseLegacy (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.idstring""The preferred language model ID to use by default. If specified and available, this model is selected automatically when Posit Assistant starts.
assistant.preferredModel.providerstring""The preferred model provider. Used with preferredModel.id to disambiguate when the same model ID is available from multiple providers.
assistant.preferredModel.thinkingEffortstring""Default thinking effort level for models that support adaptive thinking (e.g., 'low', 'medium', 'high').
assistant.preferredModel.webSearchbooleanfalseWhether web search is enabled by default.
assistant.mcpServersobject{}MCP server configuration. Same format as the mcpServers key in the config file.
assistant.aiExcludesstring[][]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 the main switch (Positron 2026.07+)

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.

KeyTypeDefaultDescription
assistant.extraKnownMarketplacesobject{}Declared plugin marketplaces (name to source). User scope; project declarations go in <repo>/.posit/assistant/settings.json.
assistant.enabledPluginsobject{}Plugin enablement keyed by "<plugin>@<marketplace>" (true = enabled, false = disabled). User scope; project declarations go in <repo>/.posit/assistant/settings.json.
assistant.plugins.hostTokensobject{}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.

KeyTypeDefaultDescription
assistant.plugins.strictKnownMarketplacesarray | nullnullAdministrator marketplace allowlist. Unset (null) = open (any marketplace); [] = lockdown (no marketplace); a non-empty list = only those marketplaces are allowed.
assistant.plugins.blockedMarketplacesarray | nullnullAdministrator marketplace denylist. A match is blocked regardless of the allowlist. Unset (null) = no denylist.
assistant.plugins.allowedComponentsarray | nullnullAllowlist of plugin component types (skills, commands, agents, hooks, mcpServers, monitors, lspServers). Unset (null) = no restriction; [] = allow no components.
📝 Use the flat keys, and pre-populate marketplaces

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.

📝 Enforcement binds only in Positron

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:

ProviderBase URLCustom Headers
Anthropicauthentication.anthropic.baseUrlauthentication.anthropic.customHeaders
OpenAIauthentication.openai-api.baseUrlauthentication.openai-api.customHeaders
OpenAI Compatibleauthentication.openai-compatible.baseUrlauthentication.openai-compatible.customHeaders
Microsoft Foundryauthentication.foundry.baseUrlauthentication.foundry.customHeaders
Snowflakederived from authentication.snowflake.credentialsauthentication.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"
  }
}
📝 Ignored header names

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.

KeyTypeDefaultDescription
assistant.modelRoutingstring"prefer-direct"Controls how Posit Assistant accesses language models. See Model Routing below for the available options.
assistant.showTipsbooleantrueShow helpful tips above the input after assistant turns and on startup. Disabling hides tips immediately without restarting.
assistant.cacheKeepalivebooleantrueKeep supported model prompt caches warm while idle by sending lightweight pings after each turn.
assistant.cacheKeepaliveMinutesinteger30Maximum 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

No stability guarantees

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.

KeyTypeDefaultDescription
assistant.experimentalFeaturesbooleanfalseEnable 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.devModebooleanfalseEnable developer debugging surfaces such as raw tool data display, conversation path copying, and dev-only commands.
assistant.enablePersonaSelectorbooleanfalseShow the persona selector in the status bar, allowing you to switch between additional assistant personas.
assistant.cacheKeepaliveWidgetbooleanfalseShow 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:

ValueDescription
prefer-direct(Default) Use direct API access when available, fill in remaining providers from Positron’s language model API.
directOnly use direct API access via configured credentials.
vscode-lmOnly use Positron’s built-in language model API.
prefer-vscode-lmPrefer Positron’s language model API, fill in remaining providers from direct access.
💡 When to change model routing

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:

  1. Positron workspace settingassistant.<key> set at the workspace level in Positron
  2. Project config filefeatures.<key> in .posit/assistant/settings.json in your project
  3. Positron user settingassistant.<key> set at the user level in Positron
  4. Global config filefeatures.<key> in ~/.posit/assistant/settings.json
  5. 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.