diff --git a/electron/desktopWindow.js b/electron/desktopWindow.js
index 856899fb..a106b68e 100644
--- a/electron/desktopWindow.js
+++ b/electron/desktopWindow.js
@@ -3,6 +3,9 @@ import { BrowserWindow, Menu, Tray, nativeImage, nativeTheme, session } from 'el
import { ViewHost } from './viewHost.js';
const TITLEBAR_HEIGHT = 44;
+// TODO: Re-enable Computer Use menus after fixing the MCP server connection
+// between the desktop app and the web UI.
+const COMPUTER_USE_MENUS_ENABLED = false;
function isAllowedPermissionOrigin(sourceUrl, controlPlaneUrl) {
try {
@@ -334,6 +337,7 @@ export class DesktopWindowManager {
{ type: 'separator' },
{
label: 'Services',
+ visible: COMPUTER_USE_MENUS_ENABLED,
submenu: [
{
label: 'Computer Use',
diff --git a/electron/launcher/launcher.js b/electron/launcher/launcher.js
index ed5d72c4..cc0b57c2 100644
--- a/electron/launcher/launcher.js
+++ b/electron/launcher/launcher.js
@@ -530,6 +530,10 @@ window.__MOCK_STATE__ = {
return 'idle';
}
+ // TODO: Re-enable Computer Use menus after fixing the MCP server connection
+ // between the desktop app and the web UI.
+ var COMPUTER_USE_MENUS_ENABLED = false;
+
function renderComputerPermissionRow(key, label, detail, status) {
return '
' +
'
' + CC.esc(label) + '
' + CC.esc(detail) + '
' +
@@ -587,9 +591,11 @@ window.__MOCK_STATE__ = {
var state = CC.state || {};
var sections = [
CC.buildThemeSection(state),
- CC.buildComputerUseSection(state),
];
- CC.renderSheet('Desktop Settings', 'Manage the desktop app appearance and Computer Use behavior.', sections);
+ if (COMPUTER_USE_MENUS_ENABLED) {
+ sections.push(CC.buildComputerUseSection(state));
+ }
+ CC.renderSheet('Desktop Settings', 'Manage the desktop app appearance.', sections);
};
CC.render = function (state) {
diff --git a/src/components/main-content/view/MainContent.tsx b/src/components/main-content/view/MainContent.tsx
index 1dc53537..fd99fc92 100644
--- a/src/components/main-content/view/MainContent.tsx
+++ b/src/components/main-content/view/MainContent.tsx
@@ -12,6 +12,7 @@ import { useTaskMaster } from '../../../contexts/TaskMasterContext';
import { usePaletteOpsRegister } from '../../../contexts/PaletteOpsContext';
import { useTasksSettings } from '../../../contexts/TasksSettingsContext';
import { useUiPreferences } from '../../../hooks/useUiPreferences';
+import { COMPUTER_USE_MENUS_ENABLED } from '../../../constants/featureFlags';
import { authenticatedFetch } from '../../../utils/api';
import { useEditorSidebar } from '../../code-editor/hooks/useEditorSidebar';
import EditorSidebar from '../../code-editor/view/EditorSidebar';
@@ -63,7 +64,7 @@ function MainContent({
const shouldShowTasksTab = Boolean(tasksEnabled && isTaskMasterInstalled);
const shouldShowBrowserTab = browserUseEnabled;
- const shouldShowComputerTab = computerUseEnabled === true;
+ const shouldShowComputerTab = COMPUTER_USE_MENUS_ENABLED && computerUseEnabled === true;
const {
editingFile,
@@ -168,10 +169,10 @@ function MainContent({
}, [loadComputerUseSettings]);
useEffect(() => {
- if (computerUseEnabled === false && activeTab === 'computer') {
+ if (!shouldShowComputerTab && activeTab === 'computer') {
setActiveTab('chat');
}
- }, [computerUseEnabled, activeTab, setActiveTab]);
+ }, [shouldShowComputerTab, activeTab, setActiveTab]);
usePaletteOpsRegister({
openFile: (filePath: string) => {
diff --git a/src/components/settings/hooks/useSettingsController.ts b/src/components/settings/hooks/useSettingsController.ts
index e5325e28..8321776f 100644
--- a/src/components/settings/hooks/useSettingsController.ts
+++ b/src/components/settings/hooks/useSettingsController.ts
@@ -1,6 +1,7 @@
import { useCallback, useEffect, useRef, useState } from 'react';
import { useTheme } from '../../../contexts/ThemeContext';
+import { COMPUTER_USE_MENUS_ENABLED } from '../../../constants/featureFlags';
import { authenticatedFetch } from '../../../utils/api';
import { setNotificationSoundEnabled } from '../../../utils/notificationSound';
import { useProviderAuthStatus } from '../../provider-auth/hooks/useProviderAuthStatus';
@@ -58,7 +59,7 @@ const KNOWN_MAIN_TABS: SettingsMainTab[] = ['agents', 'appearance', 'git', 'api'
const normalizeMainTab = (tab: string): SettingsMainTab => {
// Keep backwards compatibility with older callers that still pass "tools".
- if (tab === 'tools') {
+ if (tab === 'tools' || (tab === 'computer' && !COMPUTER_USE_MENUS_ENABLED)) {
return 'agents';
}
diff --git a/src/components/settings/view/SettingsSidebar.tsx b/src/components/settings/view/SettingsSidebar.tsx
index 3b13ecaf..5051acb7 100644
--- a/src/components/settings/view/SettingsSidebar.tsx
+++ b/src/components/settings/view/SettingsSidebar.tsx
@@ -1,5 +1,7 @@
import { Bell, Bot, GitBranch, Info, Key, ListChecks, MonitorCog, MonitorPlay, Palette, Puzzle } from 'lucide-react';
import { useTranslation } from 'react-i18next';
+
+import { COMPUTER_USE_MENUS_ENABLED } from '../../../constants/featureFlags';
import { cn } from '../../../lib/utils';
import { PillBar, Pill } from '../../../shared/view/ui';
import type { SettingsMainTab } from '../types/types';
@@ -28,6 +30,10 @@ const NAV_ITEMS: NavItem[] = [
{ id: 'about', labelKey: 'mainTabs.about', icon: Info },
];
+const VISIBLE_NAV_ITEMS = NAV_ITEMS.filter((item) => (
+ COMPUTER_USE_MENUS_ENABLED || item.id !== 'computer'
+));
+
export default function SettingsSidebar({ activeTab, onChange }: SettingsSidebarProps) {
const { t } = useTranslation('settings');
@@ -36,7 +42,7 @@ export default function SettingsSidebar({ activeTab, onChange }: SettingsSidebar
{/* Desktop sidebar */}