From 9e2f2912bcd9c40383e31202f35dd0d30d0de294 Mon Sep 17 00:00:00 2001
From: Hikari
Date: Tue, 24 Feb 2026 20:05:50 -0800
Subject: [PATCH] feat: add disable_1m_context toggle to settings UI
Adds a new config option to expose the CLAUDE_CODE_DISABLE_1M_CONTEXT
environment variable through the settings sidebar, allowing users to
opt out of the extended 1M context window without manually setting
environment variables.
Closes #154
---
src-tauri/src/config.rs | 10 ++++++++++
src-tauri/src/wsl_bridge.rs | 10 ++++++++++
src/lib/commands/slashCommands.ts | 2 ++
src/lib/components/ConfigSidebar.svelte | 17 +++++++++++++++++
src/lib/components/InputBar.svelte | 1 +
src/lib/components/PermissionModal.svelte | 1 +
src/lib/components/StatusBar.svelte | 3 +++
src/lib/components/UserQuestionModal.svelte | 1 +
src/lib/stores/config.test.ts | 3 +++
src/lib/stores/config.ts | 3 +++
10 files changed, 51 insertions(+)
diff --git a/src-tauri/src/config.rs b/src-tauri/src/config.rs
index eb52ab1..6a21c23 100644
--- a/src-tauri/src/config.rs
+++ b/src-tauri/src/config.rs
@@ -28,6 +28,9 @@ pub struct ClaudeStartOptions {
#[serde(default)]
pub use_worktree: bool,
+
+ #[serde(default)]
+ pub disable_1m_context: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -119,6 +122,9 @@ pub struct HikariConfig {
#[serde(default)]
pub use_worktree: bool,
+
+ #[serde(default)]
+ pub disable_1m_context: bool,
}
impl Default for HikariConfig {
@@ -152,6 +158,7 @@ impl Default for HikariConfig {
budget_warning_threshold: 0.8,
discord_rpc_enabled: true,
use_worktree: false,
+ disable_1m_context: false,
}
}
}
@@ -259,6 +266,8 @@ mod tests {
assert_eq!(config.budget_action, BudgetAction::Warn);
assert!((config.budget_warning_threshold - 0.8).abs() < f32::EPSILON);
assert!(config.discord_rpc_enabled);
+ assert!(!config.use_worktree);
+ assert!(!config.disable_1m_context);
}
#[test]
@@ -292,6 +301,7 @@ mod tests {
budget_warning_threshold: 0.75,
discord_rpc_enabled: true,
use_worktree: true,
+ disable_1m_context: false,
};
let json = serde_json::to_string(&config).unwrap();
diff --git a/src-tauri/src/wsl_bridge.rs b/src-tauri/src/wsl_bridge.rs
index c3e5fc8..77119c6 100644
--- a/src-tauri/src/wsl_bridge.rs
+++ b/src-tauri/src/wsl_bridge.rs
@@ -279,6 +279,11 @@ impl WslBridge {
}
}
+ // Disable 1M context window if requested
+ if options.disable_1m_context {
+ cmd.env("CLAUDE_CODE_DISABLE_1M_CONTEXT", "1");
+ }
+
cmd
} else {
// Running on Windows - use wsl with bash login shell to ensure PATH is loaded
@@ -319,6 +324,11 @@ impl WslBridge {
}
}
+ // Disable 1M context window if requested
+ if options.disable_1m_context {
+ claude_cmd.push_str("CLAUDE_CODE_DISABLE_1M_CONTEXT=1 ");
+ }
+
claude_cmd.push_str(
"claude --output-format stream-json --input-format stream-json --verbose",
);
diff --git a/src/lib/commands/slashCommands.ts b/src/lib/commands/slashCommands.ts
index cdcfdd7..8d252c8 100644
--- a/src/lib/commands/slashCommands.ts
+++ b/src/lib/commands/slashCommands.ts
@@ -62,6 +62,7 @@ async function changeDirectory(path: string): Promise {
mcp_servers_json: config.mcp_servers_json || null,
allowed_tools: allAllowedTools,
use_worktree: config.use_worktree ?? false,
+ disable_1m_context: config.disable_1m_context ?? false,
},
});
@@ -137,6 +138,7 @@ async function startNewConversation(): Promise {
mcp_servers_json: config.mcp_servers_json || null,
allowed_tools: allAllowedTools,
use_worktree: config.use_worktree ?? false,
+ disable_1m_context: config.disable_1m_context ?? false,
},
});
diff --git a/src/lib/components/ConfigSidebar.svelte b/src/lib/components/ConfigSidebar.svelte
index 4c82802..c4905f0 100644
--- a/src/lib/components/ConfigSidebar.svelte
+++ b/src/lib/components/ConfigSidebar.svelte
@@ -54,6 +54,7 @@
discord_rpc_enabled: true,
show_thinking_blocks: true,
use_worktree: false,
+ disable_1m_context: false,
});
let showCustomThemeEditor = $state(false);
@@ -489,6 +490,22 @@
Launch sessions with --worktree for isolated git worktree environments
+
+
+
+
+
+ Sets CLAUDE_CODE_DISABLE_1M_CONTEXT=1 to opt out of the extended
+ context window
+
+
diff --git a/src/lib/components/InputBar.svelte b/src/lib/components/InputBar.svelte
index 3f9ceeb..62ea928 100644
--- a/src/lib/components/InputBar.svelte
+++ b/src/lib/components/InputBar.svelte
@@ -363,6 +363,7 @@ User: ${formattedMessage}`;
mcp_servers_json: config.mcp_servers_json || null,
allowed_tools: allAllowedTools,
use_worktree: config.use_worktree ?? false,
+ disable_1m_context: config.disable_1m_context ?? false,
},
});
diff --git a/src/lib/components/PermissionModal.svelte b/src/lib/components/PermissionModal.svelte
index 02ac993..5943ff5 100644
--- a/src/lib/components/PermissionModal.svelte
+++ b/src/lib/components/PermissionModal.svelte
@@ -88,6 +88,7 @@
mcp_servers_json: config.mcp_servers_json || null,
allowed_tools: newGrantedTools,
use_worktree: config.use_worktree ?? false,
+ disable_1m_context: config.disable_1m_context ?? false,
},
});
diff --git a/src/lib/components/StatusBar.svelte b/src/lib/components/StatusBar.svelte
index 45f12b5..e4099b9 100644
--- a/src/lib/components/StatusBar.svelte
+++ b/src/lib/components/StatusBar.svelte
@@ -102,6 +102,7 @@
discord_rpc_enabled: true,
show_thinking_blocks: true,
use_worktree: false,
+ disable_1m_context: false,
});
let streamerModeActive = $state(false);
@@ -180,6 +181,7 @@
mcp_servers_json: currentConfig.mcp_servers_json || null,
allowed_tools: allAllowedTools,
use_worktree: currentConfig.use_worktree ?? false,
+ disable_1m_context: currentConfig.disable_1m_context ?? false,
},
});
@@ -292,6 +294,7 @@
mcp_servers_json: currentConfig.mcp_servers_json || null,
allowed_tools: allAllowedTools,
use_worktree: currentConfig.use_worktree ?? false,
+ disable_1m_context: currentConfig.disable_1m_context ?? false,
},
});
diff --git a/src/lib/components/UserQuestionModal.svelte b/src/lib/components/UserQuestionModal.svelte
index bda1654..f26b3da 100644
--- a/src/lib/components/UserQuestionModal.svelte
+++ b/src/lib/components/UserQuestionModal.svelte
@@ -107,6 +107,7 @@
mcp_servers_json: config.mcp_servers_json || null,
allowed_tools: grantedToolsList,
use_worktree: config.use_worktree ?? false,
+ disable_1m_context: config.disable_1m_context ?? false,
},
});
diff --git a/src/lib/stores/config.test.ts b/src/lib/stores/config.test.ts
index 87b6283..883e48c 100644
--- a/src/lib/stores/config.test.ts
+++ b/src/lib/stores/config.test.ts
@@ -195,6 +195,7 @@ describe("config store", () => {
discord_rpc_enabled: true,
show_thinking_blocks: true,
use_worktree: false,
+ disable_1m_context: false,
};
expect(config.model).toBe("claude-sonnet-4");
@@ -242,6 +243,7 @@ describe("config store", () => {
discord_rpc_enabled: true,
show_thinking_blocks: true,
use_worktree: false,
+ disable_1m_context: false,
};
expect(config.model).toBeNull();
@@ -788,6 +790,7 @@ describe("config store", () => {
discord_rpc_enabled: false,
show_thinking_blocks: true,
use_worktree: false,
+ disable_1m_context: false,
};
const mockInvokeImpl = vi.mocked(invoke);
diff --git a/src/lib/stores/config.ts b/src/lib/stores/config.ts
index 3042a8b..c4b3bcd 100644
--- a/src/lib/stores/config.ts
+++ b/src/lib/stores/config.ts
@@ -49,6 +49,8 @@ export interface HikariConfig {
show_thinking_blocks: boolean;
// Worktree isolation
use_worktree: boolean;
+ // Disable 1M context window
+ disable_1m_context: boolean;
}
const defaultConfig: HikariConfig = {
@@ -90,6 +92,7 @@ const defaultConfig: HikariConfig = {
discord_rpc_enabled: true,
show_thinking_blocks: true,
use_worktree: false,
+ disable_1m_context: false,
};
function createConfigStore() {