From 066631210575295504d840baa5c92c80880da3e1 Mon Sep 17 00:00:00 2001 From: praneethb7 Date: Wed, 13 May 2026 14:41:03 +0530 Subject: [PATCH 1/4] docs: document .continue/configs/ directory for local config profiles --- docs/customize/deep-dives/configuration.mdx | 43 +++++++++++++++++++++ docs/guides/understanding-configs.mdx | 29 ++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/docs/customize/deep-dives/configuration.mdx b/docs/customize/deep-dives/configuration.mdx index 6acb9409ea5..595f88bfcc3 100644 --- a/docs/customize/deep-dives/configuration.mdx +++ b/docs/customize/deep-dives/configuration.mdx @@ -28,6 +28,49 @@ When editing this file, you can see the available options suggested as you type, See the full reference for `config.yaml` [here](/reference). +## How to Use Local Config Profiles + +In addition to the main `config.yaml`, you can create multiple local config profiles by placing YAML files in special subdirectories inside `.continue/`. This works at both the workspace level (inside your project) and the global level (`~/.continue/`). + +Continue discovers, watches, and loads YAML files from any of these three directories as selectable profiles: + +| Directory | Scope | Purpose | +|---|---|---| +| `.continue/agents/` | workspace or `~/.continue/` | Agent-specific configurations | +| `.continue/assistants/` | workspace or `~/.continue/` | Assistant configurations (legacy name) | +| `.continue/configs/` | workspace or `~/.continue/` | General local config profiles | + +### How to create a local config profile + +1. Create the directory if it doesn't exist: + +```bash +# Inside your project (workspace-level) +mkdir -p .continue/configs + +# Or globally +mkdir -p ~/.continue/configs +``` + +2. Add a YAML file with your profile configuration: + +```yaml title=".continue/configs/my-profile.yaml" +name: My Custom Profile +version: 0.0.1 +models: + - name: My Model + provider: anthropic + model: claude-sonnet-4-5 +``` + +3. The profile will automatically appear in the config selector in your IDE — no restart needed. Continue watches these directories and reloads when files are added, changed, or deleted. + +### Which directory should I use? + +All three directories behave identically in terms of discovery and loading. Use `.continue/configs/` for general-purpose profiles, `.continue/agents/` for agent-specific setups, and `.continue/assistants/` if you have existing files there (it is supported for backwards compatibility). + +You can version-control workspace-level profiles (`.continue/configs/`, `.continue/agents/`, `.continue/assistants/`) by committing them to your repository, making it easy to share profiles with your team. + ## Legacy Configuration Methods (Deprecated) diff --git a/docs/guides/understanding-configs.mdx b/docs/guides/understanding-configs.mdx index 6f1a4517b91..ff961409ca8 100644 --- a/docs/guides/understanding-configs.mdx +++ b/docs/guides/understanding-configs.mdx @@ -101,6 +101,35 @@ The first time you use Continue, it generates a `config.yaml` with sensible defa For the complete configuration reference, see our [config.yaml documentation](/reference). +### How to Use Multiple Local Config Profiles + +Beyond the single `config.yaml`, you can create multiple local profiles by placing YAML files in these directories: + +- `.continue/configs/` — general-purpose local profiles +- `.continue/agents/` — agent-specific configurations +- `.continue/assistants/` — assistant configurations (supported for backwards compatibility) + +These directories work at both the workspace level (inside your project folder) and the global level (`~/.continue/`). Continue automatically discovers, watches, and loads any YAML files placed there as selectable profiles in your IDE. + +**Example:** To create a workspace profile for a specific tech stack: + +```bash +mkdir -p .continue/configs +``` + +```yaml title=".continue/configs/frontend.yaml" +name: Frontend Profile +version: 0.0.1 +models: + - name: Claude + provider: anthropic + model: claude-sonnet-4-5 +``` + +The profile appears instantly in your config selector — no restart needed. Commit these files to version control to share profiles with your team. + +For more detail, see [How to Use Local Config Profiles](/customize/deep-dives/configuration#how-to-use-local-config-profiles). + ## How to Make the Right Choice The decision between Hub and Local configs often comes down to your specific needs and constraints. Here's a framework to help you decide: From 2e1ca01c5ab5b882d9393a15a7a0bc96225516d1 Mon Sep 17 00:00:00 2001 From: praneethb7 Date: Wed, 13 May 2026 14:49:35 +0530 Subject: [PATCH 2/4] docs: document dynamic model fetching feature --- docs/customize/model-providers/overview.mdx | 27 +++++++++++++++++++++ docs/customize/model-roles/chat.mdx | 9 +++++++ 2 files changed, 36 insertions(+) diff --git a/docs/customize/model-providers/overview.mdx b/docs/customize/model-providers/overview.mdx index 7ba030dcb4d..3bb99c9d8e0 100644 --- a/docs/customize/model-providers/overview.mdx +++ b/docs/customize/model-providers/overview.mdx @@ -59,6 +59,33 @@ Beyond the top-level providers, Continue supports many other options: | [Sagemaker](/customize/model-providers/more/sagemaker) | AWS machine learning platform | | [Nebius](/customize/model-providers/more/nebius) | Cloud-based machine learning platform | +## Dynamic Model Fetching + +When you add a model through the Continue UI, the model list for your selected provider is fetched dynamically so you always see up-to-date options. + +### How it works per provider + +| Provider | Behavior | Requires API Key | +|---|---|---| +| **Ollama** | Auto-loads on provider selection — scrapes the [Ollama library](https://ollama.com/library) including model icons and tool support | No | +| **OpenRouter** | Auto-loads on provider selection — hits the OpenRouter public API | No | +| **Anthropic** | Refresh button appears after you enter an API key — calls `/v1/models` | Yes | +| **Gemini** | Refresh button appears after you enter an API key — calls `v1beta/models` | Yes | +| **Others** | Refresh button appears after you enter an API key — uses the provider's model list API | Depends on provider | + +### What information is fetched + +For each model, Continue retrieves: +- **Context length** — the maximum input tokens the model supports +- **Max tokens** — the maximum output tokens the model can generate +- **Tool support** — whether the model supports function/tool calling + +These values are written to your `config.yaml` automatically when you add the model, so Continue can use them without making additional API calls. + +### Model deduplication + +Fetched models are merged with Continue's built-in hardcoded model list. If the same model appears in both, the hardcoded entry takes precedence (since it contains curated defaults). + ## How to Choose a Model Provider When selecting a model provider, consider: diff --git a/docs/customize/model-roles/chat.mdx b/docs/customize/model-roles/chat.mdx index ffb420736c2..14e4fcb357f 100644 --- a/docs/customize/model-roles/chat.mdx +++ b/docs/customize/model-roles/chat.mdx @@ -12,6 +12,15 @@ A "chat model" is an LLM that is trained to respond in a conversational format. In Continue, these models are used for normal [Chat](../../ide-extensions/chat/quick-start). The selected chat model will also be used for [Edit](../../ide-extensions/edit/quick-start) and [Apply](./apply.mdx) if no `edit` or `apply` models are specified, respectively. +## Adding a Chat Model + +When you select a provider in the Continue UI, the available models are loaded dynamically: + +- **Ollama** and **OpenRouter** auto-load their model lists when you select the provider — no API key needed. +- **Anthropic**, **Gemini**, and most other providers show a **refresh button** once you enter your API key. Click it to fetch the live model list from the provider. + +Fetched models include context length, max output tokens, and tool support information, which are saved to your `config.yaml` when you add the model. See [Dynamic Model Fetching](../model-providers/overview#dynamic-model-fetching) for full details. + ## Recommended Chat models From bc403e9c918f6f22240931121ec957789b5cb8f9 Mon Sep 17 00:00:00 2001 From: praneethb7 Date: Wed, 13 May 2026 15:09:53 +0530 Subject: [PATCH 3/4] fix: pass editor content for JetBrains autocomplete to fix large file truncation --- .../autocomplete/CompletionService.kt | 2 +- .../autocomplete/ContinueCompletionService.kt | 7 ++++--- .../autocomplete/ContinueInlineCompletionProvider.kt | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/CompletionService.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/CompletionService.kt index ad06d95d5fe..26db8c480d1 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/CompletionService.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/CompletionService.kt @@ -3,7 +3,7 @@ package com.github.continuedev.continueintellijextension.autocomplete interface CompletionService { - suspend fun getAutocomplete(uuid: String, url: String, line: Int, column: Int): String? + suspend fun getAutocomplete(uuid: String, url: String, line: Int, column: Int, fileContents: String? = null): String? fun acceptAutocomplete(uuid: String?) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/ContinueCompletionService.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/ContinueCompletionService.kt index 6fbb2fbee5d..755541da42c 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/ContinueCompletionService.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/ContinueCompletionService.kt @@ -13,8 +13,8 @@ import kotlin.time.Duration.Companion.milliseconds @Service(Service.Level.PROJECT) class ContinueCompletionService(private val project: Project) : CompletionService { - override suspend fun getAutocomplete(uuid: String, url: String, line: Int, column: Int): String? { - val requestInput = getCompletionInput(uuid, url, line, column) + override suspend fun getAutocomplete(uuid: String, url: String, line: Int, column: Int, fileContents: String?): String? { + val requestInput = getCompletionInput(uuid, url, line, column, fileContents) val modelTimeout = project.service().fetchModelTimeoutOrNull() ?: 1000.0 return withTimeoutOrNull(modelTimeout.milliseconds * 3) { suspendCancellableCoroutine { continuation -> @@ -38,13 +38,14 @@ class ContinueCompletionService(private val project: Project) : CompletionServic ) {} } - private fun getCompletionInput(uuid: String, filepath: String, line: Int, character: Int): Map = mapOf( + private fun getCompletionInput(uuid: String, filepath: String, line: Int, character: Int, fileContents: String?): Map = mapOf( "completionId" to uuid, "filepath" to filepath, "pos" to mapOf( "line" to line, "character" to character ), + "manuallyPassFileContents" to fileContents, "clipboardText" to "", "recentlyEditedRanges" to emptyList(), "recentlyVisitedRanges" to emptyList(), diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/ContinueInlineCompletionProvider.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/ContinueInlineCompletionProvider.kt index 21d83a536f6..bbba444d360 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/ContinueInlineCompletionProvider.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/autocomplete/ContinueInlineCompletionProvider.kt @@ -125,7 +125,8 @@ class ContinueInlineCompletionProvider : InlineCompletionProvider { lastUuid!!, editor.virtualFile.url, editor.caretModel.primaryCaret.logicalPosition.line, - editor.caretModel.primaryCaret.logicalPosition.column + editor.caretModel.primaryCaret.logicalPosition.column, + editor.document.text ) if (variant == null) return InlineCompletionSuggestion.Empty From bccf2479db963ab802ccdef90628f2b4c80aacc8 Mon Sep 17 00:00:00 2001 From: praneethb7 Date: Wed, 13 May 2026 15:25:19 +0530 Subject: [PATCH 4/4] fix: update test mock to match new getAutocomplete signature --- .../unit/ContinueInlineCompletionProviderTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/intellij/src/test/kotlin/com/github/continuedev/continueintellijextension/unit/ContinueInlineCompletionProviderTest.kt b/extensions/intellij/src/test/kotlin/com/github/continuedev/continueintellijextension/unit/ContinueInlineCompletionProviderTest.kt index 45c6249cdf5..df6c09522ce 100644 --- a/extensions/intellij/src/test/kotlin/com/github/continuedev/continueintellijextension/unit/ContinueInlineCompletionProviderTest.kt +++ b/extensions/intellij/src/test/kotlin/com/github/continuedev/continueintellijextension/unit/ContinueInlineCompletionProviderTest.kt @@ -111,7 +111,7 @@ class ContinueInlineCompletionProviderTest : BasePlatformTestCase() { myFixture.project.replaceService( CompletionService::class.java, object : CompletionService { - override suspend fun getAutocomplete(uuid: String, url: String, line: Int, column: Int): String? = + override suspend fun getAutocomplete(uuid: String, url: String, line: Int, column: Int, fileContents: String?): String? = variant override fun acceptAutocomplete(uuid: String?) =