diff --git a/.changeset/quiet-compaction-model.md b/.changeset/quiet-compaction-model.md
new file mode 100644
index 00000000000..56efcb1eab3
--- /dev/null
+++ b/.changeset/quiet-compaction-model.md
@@ -0,0 +1,5 @@
+---
+"kilo-code": minor
+---
+
+Choose a separate model for conversation compaction in Context settings.
diff --git a/packages/kilo-vscode/tests/unit/config-utils.test.ts b/packages/kilo-vscode/tests/unit/config-utils.test.ts
index 5ca90cb714b..3bbb3209798 100644
--- a/packages/kilo-vscode/tests/unit/config-utils.test.ts
+++ b/packages/kilo-vscode/tests/unit/config-utils.test.ts
@@ -392,6 +392,27 @@ describe("ConfigState", () => {
})
})
+ it("sets and clears the compaction model without changing other settings", () => {
+ const s = new ConfigState()
+ const cfg: Config = {
+ model: "kilo/openai/gpt-4.1",
+ agent: { compaction: { prompt: "Keep task details" }, code: { model: "kilo/openai/gpt-4.1" } },
+ }
+ const model = "kilo/anthropic/claude-haiku-4-5"
+ s.handleConfigLoaded(cfg)
+ s.updateConfig({ agent: { compaction: { model } } })
+
+ expect(s.config).toEqual({
+ ...cfg,
+ agent: { ...cfg.agent, compaction: { prompt: "Keep task details", model } },
+ })
+ s.updateConfig({ agent: { compaction: { model: null } } })
+
+ expect(s.config).toEqual(cfg)
+ expect(s.draft.agent?.compaction?.model).toBeNull()
+ expect(configUnsetPaths(s.draft)).toEqual([["agent", "compaction", "model"]])
+ })
+
describe("agent permission patches", () => {
it("merges nested per-agent permission patches into existing rules", () => {
const s = new ConfigState()
diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/ContextTab.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/ContextTab.tsx
index e1c92c1211b..999f2e86e2b 100644
--- a/packages/kilo-vscode/webview-ui/src/components/settings/ContextTab.tsx
+++ b/packages/kilo-vscode/webview-ui/src/components/settings/ContextTab.tsx
@@ -8,6 +8,8 @@ import { IconButton } from "@kilocode/kilo-ui/icon-button"
import { useConfig } from "../../context/config"
import { useLanguage } from "../../context/language"
import { useMemory } from "../../context/memory"
+import { parseModelString } from "../../../../src/shared/provider-model"
+import { ModelSelectorBase } from "../shared/ModelSelector"
import SettingsRow from "./SettingsRow"
const ContextTab: Component = () => {
@@ -139,6 +141,24 @@ const ContextTab: Component = () => {
{language.t("settings.context.autoCompaction.title")}
+
+
+ updateConfig({
+ agent: { compaction: { model: providerID && modelID ? `${providerID}/${modelID}` : null } },
+ })
+ }
+ placement="bottom-start"
+ allowClear
+ clearLabel={language.t("settings.context.compactionModel.useChatModel")}
+ label={language.t("settings.context.compactionModel.title")}
+ description={language.t("settings.context.compactionModel.description")}
+ />
+