Studio AI has three separate configuration surfaces, and it is easy to confuse them:
| Surface | Scope | Covered in |
|---|---|---|
| AI Configuration panel | Agents, MCP servers, token usage history, prompt fragments, tools, skills, model aliases. Opened via the AI Chat toolbar's More Actions... ("…") menu. | AI Configuration: Managing Agents and Settings |
| Session Settings | Overrides that apply only to the current chat session (Confirmation Timeout, Server-Side Compaction). | Using the AI Chat |
| AI Features settings (this article) | Global and per-provider preferences: enablement, LLM provider connections, chat behavior, compaction, security-relevant defaults, and more. Part of Studio's standard Settings UI. | This article |
This article covers the third surface: a large set of preferences under the AI Features category of Studio's standard Settings UI, most of which are not exposed anywhere in the AI Configuration panel.
Settings here apply to your Studio user or workspace (not only to one chat session, unlike the per-session overrides in article 03). They are not a central policy: each Studio has its own settings, and its user can change them. See Security and Privacy.
Turning AI on and connecting a provider is covered in Getting Started with Studio AI. The same AI Enablement section lives under AI Features in this Settings UI.
Each supported LLM provider has its own sub-section here for API keys and provider-specific options.
From V8.5.2, Anthropic, OpenAI and Google no longer have a model-list setting: the settings ai-features.anthropic.AnthropicModels, ai-features.openAiOfficial.officialOpenAiModels and ai-features.google.models were removed. Studio reads the available models from each provider, and you choose which appear in the chat in the Providers & Models category of AI Configuration. Two new settings per provider (anthropic, openAiOfficial, google) control this:
The models chosen in AI Configuration are stored in ai-features.modelSettings.favoriteModels and ai-features.modelSettings.hiddenModels.
| Sub-section | What it configures |
|---|---|
| Anthropic / Anthropic Custom | Anthropic API key, modelOverrides / allowEnvironmentApiKey, and custom (self-defined) Anthropic model entries. See Custom LLM Providers. |
| Open AI Official Models / Open AI Custom Models | OpenAI API key, modelOverrides / allowEnvironmentApiKey, custom model entries, and whether to use the Responses API (useResponseApi). See Custom LLM Providers. |
API key, modelOverrides / allowEnvironmentApiKey, and retry/backoff settings for rate-limit and other errors. | |
| Hugging Face | API key and model list. |
| Ollama | Ollama host URL and model list, for a locally or network-hosted Ollama server. |
| Llamafile | Configured Llamafile executables. |
| Claude Code | API key and executable path for the bundled @anthropic-ai/claude-agent-sdk, used by the @ClaudeCode agent (disabled by default). |
| Codex | API key for OpenAI Codex. |
| GitHub Copilot | Enable/disable (off by default in the Studio), enterprise URL, and model overrides. From V8.5.2, Copilot signs in through the official GitHub Copilot CLI. |
| Fabric (via Open AI Custom Models) | Fabric as the LLM provider: the predefined custom model entry fabric-openai-compatible-llm, whose URL is the Fabric /api/v1 base URL and which authenticates with the user's Fabric session token (Authorization: Bearer ${fabric:jwt} header). The provider credentials sit in the Fabric AI LLM interface. See Custom LLM Providers. |
Model Selection and Language Model Aliases also appear here, but both are thin pointers into the AI Configuration panel's Agents and Model Aliases categories (see article 06) rather than separate editors. Model Settings does add two standalone knobs: maxRetries (retry attempts on a failed model call) and requestSettings (provider request tuning).
When a conversation grows past a model's context limit, server-side compaction has the provider itself summarize older turns so the session keeps working, instead of the request failing outright. It is a genuine safeguard against the kind of hard failure some users have hit ("prompt is too long: N tokens > maximum"), but it only works when the model/provider supports it, and only if it is actually enabled for that session.
Support is currently limited to Anthropic (recent Opus/Sonnet models, via a Beta Messages API) and OpenAI official models using the Responses API (Chat Completions is not supported). Unsupported models and providers silently ignore the setting.
Activation is layered, each level overriding the one before it:
| Level | Setting | Notes |
|---|---|---|
| Global default | ai-features.chat.serverSideCompaction (checkbox, on by default) and ai-features.chat.serverSideCompactionTokenThreshold (minimum 50,000 tokens; unset means the provider's own default applies) |
Applies to all chat requests unless overridden |
| Per-provider override | ai-features.anthropic.serverSideCompaction / ...TokenThreshold, and ai-features.openAiOfficial.serverSideCompaction / ...TokenThreshold |
Each can be set to follow the global default, or forced on/off; overrides the global default for that provider only |
| Per-session override | Session Settings dialog, "Server-Side Compaction" | Highest precedence; see Using the AI Chat |
When compaction fires, an inline marker appears in the chat and the token-usage tooltip shows a "compacted N×" count; this is persisted with the session and restored on reload. If you see a hard token-limit error despite compaction being enabled, check that the session's model is actually one of the supported ones (Anthropic Opus/Sonnet or an OpenAI Responses-API model); on any other model, compaction has no effect and the raw context limit still applies.
Separately from compaction, three experimental settings control whether you get any visibility into approaching a token limit at all:
This is the closest equivalent Studio AI currently has to a "your session is getting long, consider starting fresh" warning. It is off by default in some deployments and marked experimental, so if you want a proactive nearing-the-limit warning rather than relying on compaction alone, check that both tokenUsageIndicator.enabled and tokenUsageWarning.enabled are turned on.
| Setting | What it does |
|---|---|
defaultChatAgent | Which agent handles a message when none is explicitly addressed. |
defaultToolConfirmation | Default confirmation behavior for tools without a tool-specific entry (see below). The Studio default is Always Allow. Tools that read Data Product schemas or data from the Fabric server (getLuSchema, getLuInstanceData, getLuInstanceTableData, getCommonSchema, getCommonTableData) still ask - see Tool Confirmations. |
toolConfirmation | Per-tool confirmation overrides (e.g. force a specific tool to always ask, or always allow). |
toolConfirmationTimeout | Seconds before a pending tool confirmation is auto-denied. 0 (default) disables the timeout. Also settable per session; see article 03. |
pinChatAgent | Keeps a mentioned agent active across prompts so you don't need to repeat @Agent every message. |
persistedSessionLimit | Maximum chat sessions to persist; -1 unlimited, 0 disables persistence. Oldest sessions are pruned first. |
sessionStorageScope | Persist sessions per-workspace or in a single global store. |
welcomeScreenSessions | How many sessions to show on the chat welcome/home view before overflowing to "Browse all chats...". |
bypassModelRequirement | Skips the language-model-configured check, for external agents (e.g. @ClaudeCode) that don't need a Studio-managed model. |
allowedResourceUrls | Controls which external resources chat markdown is allowed to load (a security hardening setting). |
Because the Studio ships with tool confirmations set to Always Allow, most agent tool calls - including file writes - proceed without a per-action prompt. Review that default with your security team, and consider requiring confirmation for more tools with toolConfirmation. Shell commands are also governed by the allow and deny lists below. See Security and Privacy.
Agent Mode: Enabled (ai-features.agentMode.enabled) is the global default for whether @Coder's Agent Mode is available without an extra first-use confirmation dialog. See Code Editing with @Coder (Legacy).
Agent Settings is a pointer, not a separate editor: it directs you to the AI Configuration view's Agents category for enablement, LLM selection, prompt customization, and custom agent creation (articles 06 and 09).
These settings back the file-location behavior described in Customizing Agent Prompts and Skills and Slash Commands. Live-checked in this project:
| Setting | Confirmed live value / behavior |
|---|---|
promptTemplatesFolder | Confirmed set to <workspace root>/.prompts in this project (falls back to the user config directory if not customized). |
taskContextStorageDirectory | Workspace-relative path for persisted task-context descriptions; confirmed as .prompts/task-contexts here. Empty means in-memory only. This is where @k2-assistant saves the plans it writes in Plan mode (see Ask, Plan and Act Modes). |
WorkspaceTemplateDirectories / WorkspaceTemplateFiles | Additional folders/files scanned for workspace-specific prompt templates, resolved by priority when IDs collide. |
TemplateExtensions | File extensions treated as prompt templates. |
skills.skillDirectories | Confirmed: .prompts/skills and .agents/skills in the workspace, plus .agents/skills in the user's home directory, and the product's own skills folder, are always included. This setting adds further directories on top. Live value in this project: <workspace root>/.agents/skills. |
Skills therefore resolve from both a workspace-level .agents/skills folder and a user-home-level ~/.agents/skills folder, with workspace taking precedence. Custom agents do not follow this convention: they are read from the workspace only - see Creating Custom Agents.
| Sub-section | What it does |
|---|---|
| MCP | mcpServers and useWorkspaceAsRoot. See MCP Servers for the friendlier AI Configuration panel editor over the same data. |
| Notifications | notifications.default: the default way an agent gets your attention when it finishes or needs input (individual agents can override). See Viewing Token Consumption and AI History. |
| Reasoning | reasoning.defaults: default value for the chat input's reasoning-effort selector, for models that support it. See Using the AI Chat. |
| Orchestrator | orchestrator.excludedAgents: agent IDs the built-in @Orchestrator agent is not allowed to delegate to. See Other Studio AI Agents. |
These directly affect what AI agents and tools can access or execute without your explicit per-action approval; see also Security and Privacy.
API keys and tokens entered in these fields are stored in clear text on the machine running Studio unless you use the corresponding environment variable instead (for example,
SCANOSS_API_KEY). Prefer environment variables for anything sensitive.
Studio AI has three separate configuration surfaces, and it is easy to confuse them:
| Surface | Scope | Covered in |
|---|---|---|
| AI Configuration panel | Agents, MCP servers, token usage history, prompt fragments, tools, skills, model aliases. Opened via the AI Chat toolbar's More Actions... ("…") menu. | AI Configuration: Managing Agents and Settings |
| Session Settings | Overrides that apply only to the current chat session (Confirmation Timeout, Server-Side Compaction). | Using the AI Chat |
| AI Features settings (this article) | Global and per-provider preferences: enablement, LLM provider connections, chat behavior, compaction, security-relevant defaults, and more. Part of Studio's standard Settings UI. | This article |
This article covers the third surface: a large set of preferences under the AI Features category of Studio's standard Settings UI, most of which are not exposed anywhere in the AI Configuration panel.
Settings here apply to your Studio user or workspace (not only to one chat session, unlike the per-session overrides in article 03). They are not a central policy: each Studio has its own settings, and its user can change them. See Security and Privacy.
Turning AI on and connecting a provider is covered in Getting Started with Studio AI. The same AI Enablement section lives under AI Features in this Settings UI.
Each supported LLM provider has its own sub-section here for API keys and provider-specific options.
From V8.5.2, Anthropic, OpenAI and Google no longer have a model-list setting: the settings ai-features.anthropic.AnthropicModels, ai-features.openAiOfficial.officialOpenAiModels and ai-features.google.models were removed. Studio reads the available models from each provider, and you choose which appear in the chat in the Providers & Models category of AI Configuration. Two new settings per provider (anthropic, openAiOfficial, google) control this:
The models chosen in AI Configuration are stored in ai-features.modelSettings.favoriteModels and ai-features.modelSettings.hiddenModels.
| Sub-section | What it configures |
|---|---|
| Anthropic / Anthropic Custom | Anthropic API key, modelOverrides / allowEnvironmentApiKey, and custom (self-defined) Anthropic model entries. See Custom LLM Providers. |
| Open AI Official Models / Open AI Custom Models | OpenAI API key, modelOverrides / allowEnvironmentApiKey, custom model entries, and whether to use the Responses API (useResponseApi). See Custom LLM Providers. |
API key, modelOverrides / allowEnvironmentApiKey, and retry/backoff settings for rate-limit and other errors. | |
| Hugging Face | API key and model list. |
| Ollama | Ollama host URL and model list, for a locally or network-hosted Ollama server. |
| Llamafile | Configured Llamafile executables. |
| Claude Code | API key and executable path for the bundled @anthropic-ai/claude-agent-sdk, used by the @ClaudeCode agent (disabled by default). |
| Codex | API key for OpenAI Codex. |
| GitHub Copilot | Enable/disable (off by default in the Studio), enterprise URL, and model overrides. From V8.5.2, Copilot signs in through the official GitHub Copilot CLI. |
| Fabric (via Open AI Custom Models) | Fabric as the LLM provider: the predefined custom model entry fabric-openai-compatible-llm, whose URL is the Fabric /api/v1 base URL and which authenticates with the user's Fabric session token (Authorization: Bearer ${fabric:jwt} header). The provider credentials sit in the Fabric AI LLM interface. See Custom LLM Providers. |
Model Selection and Language Model Aliases also appear here, but both are thin pointers into the AI Configuration panel's Agents and Model Aliases categories (see article 06) rather than separate editors. Model Settings does add two standalone knobs: maxRetries (retry attempts on a failed model call) and requestSettings (provider request tuning).
When a conversation grows past a model's context limit, server-side compaction has the provider itself summarize older turns so the session keeps working, instead of the request failing outright. It is a genuine safeguard against the kind of hard failure some users have hit ("prompt is too long: N tokens > maximum"), but it only works when the model/provider supports it, and only if it is actually enabled for that session.
Support is currently limited to Anthropic (recent Opus/Sonnet models, via a Beta Messages API) and OpenAI official models using the Responses API (Chat Completions is not supported). Unsupported models and providers silently ignore the setting.
Activation is layered, each level overriding the one before it:
| Level | Setting | Notes |
|---|---|---|
| Global default | ai-features.chat.serverSideCompaction (checkbox, on by default) and ai-features.chat.serverSideCompactionTokenThreshold (minimum 50,000 tokens; unset means the provider's own default applies) |
Applies to all chat requests unless overridden |
| Per-provider override | ai-features.anthropic.serverSideCompaction / ...TokenThreshold, and ai-features.openAiOfficial.serverSideCompaction / ...TokenThreshold |
Each can be set to follow the global default, or forced on/off; overrides the global default for that provider only |
| Per-session override | Session Settings dialog, "Server-Side Compaction" | Highest precedence; see Using the AI Chat |
When compaction fires, an inline marker appears in the chat and the token-usage tooltip shows a "compacted N×" count; this is persisted with the session and restored on reload. If you see a hard token-limit error despite compaction being enabled, check that the session's model is actually one of the supported ones (Anthropic Opus/Sonnet or an OpenAI Responses-API model); on any other model, compaction has no effect and the raw context limit still applies.
Separately from compaction, three experimental settings control whether you get any visibility into approaching a token limit at all:
This is the closest equivalent Studio AI currently has to a "your session is getting long, consider starting fresh" warning. It is off by default in some deployments and marked experimental, so if you want a proactive nearing-the-limit warning rather than relying on compaction alone, check that both tokenUsageIndicator.enabled and tokenUsageWarning.enabled are turned on.
| Setting | What it does |
|---|---|
defaultChatAgent | Which agent handles a message when none is explicitly addressed. |
defaultToolConfirmation | Default confirmation behavior for tools without a tool-specific entry (see below). The Studio default is Always Allow. Tools that read Data Product schemas or data from the Fabric server (getLuSchema, getLuInstanceData, getLuInstanceTableData, getCommonSchema, getCommonTableData) still ask - see Tool Confirmations. |
toolConfirmation | Per-tool confirmation overrides (e.g. force a specific tool to always ask, or always allow). |
toolConfirmationTimeout | Seconds before a pending tool confirmation is auto-denied. 0 (default) disables the timeout. Also settable per session; see article 03. |
pinChatAgent | Keeps a mentioned agent active across prompts so you don't need to repeat @Agent every message. |
persistedSessionLimit | Maximum chat sessions to persist; -1 unlimited, 0 disables persistence. Oldest sessions are pruned first. |
sessionStorageScope | Persist sessions per-workspace or in a single global store. |
welcomeScreenSessions | How many sessions to show on the chat welcome/home view before overflowing to "Browse all chats...". |
bypassModelRequirement | Skips the language-model-configured check, for external agents (e.g. @ClaudeCode) that don't need a Studio-managed model. |
allowedResourceUrls | Controls which external resources chat markdown is allowed to load (a security hardening setting). |
Because the Studio ships with tool confirmations set to Always Allow, most agent tool calls - including file writes - proceed without a per-action prompt. Review that default with your security team, and consider requiring confirmation for more tools with toolConfirmation. Shell commands are also governed by the allow and deny lists below. See Security and Privacy.
Agent Mode: Enabled (ai-features.agentMode.enabled) is the global default for whether @Coder's Agent Mode is available without an extra first-use confirmation dialog. See Code Editing with @Coder (Legacy).
Agent Settings is a pointer, not a separate editor: it directs you to the AI Configuration view's Agents category for enablement, LLM selection, prompt customization, and custom agent creation (articles 06 and 09).
These settings back the file-location behavior described in Customizing Agent Prompts and Skills and Slash Commands. Live-checked in this project:
| Setting | Confirmed live value / behavior |
|---|---|
promptTemplatesFolder | Confirmed set to <workspace root>/.prompts in this project (falls back to the user config directory if not customized). |
taskContextStorageDirectory | Workspace-relative path for persisted task-context descriptions; confirmed as .prompts/task-contexts here. Empty means in-memory only. This is where @k2-assistant saves the plans it writes in Plan mode (see Ask, Plan and Act Modes). |
WorkspaceTemplateDirectories / WorkspaceTemplateFiles | Additional folders/files scanned for workspace-specific prompt templates, resolved by priority when IDs collide. |
TemplateExtensions | File extensions treated as prompt templates. |
skills.skillDirectories | Confirmed: .prompts/skills and .agents/skills in the workspace, plus .agents/skills in the user's home directory, and the product's own skills folder, are always included. This setting adds further directories on top. Live value in this project: <workspace root>/.agents/skills. |
Skills therefore resolve from both a workspace-level .agents/skills folder and a user-home-level ~/.agents/skills folder, with workspace taking precedence. Custom agents do not follow this convention: they are read from the workspace only - see Creating Custom Agents.
| Sub-section | What it does |
|---|---|
| MCP | mcpServers and useWorkspaceAsRoot. See MCP Servers for the friendlier AI Configuration panel editor over the same data. |
| Notifications | notifications.default: the default way an agent gets your attention when it finishes or needs input (individual agents can override). See Viewing Token Consumption and AI History. |
| Reasoning | reasoning.defaults: default value for the chat input's reasoning-effort selector, for models that support it. See Using the AI Chat. |
| Orchestrator | orchestrator.excludedAgents: agent IDs the built-in @Orchestrator agent is not allowed to delegate to. See Other Studio AI Agents. |
These directly affect what AI agents and tools can access or execute without your explicit per-action approval; see also Security and Privacy.
API keys and tokens entered in these fields are stored in clear text on the machine running Studio unless you use the corresponding environment variable instead (for example,
SCANOSS_API_KEY). Prefer environment variables for anything sensitive.