diff --git a/src/App.tsx b/src/App.tsx
index 4f0d47785..713fc8e1e 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -123,6 +123,7 @@ function App() {
codex: true,
gemini: true,
opencode: true,
+ openclaw: true,
};
const getFirstVisibleApp = (): AppId => {
@@ -130,6 +131,7 @@ function App() {
if (visibleApps.codex) return "codex";
if (visibleApps.gemini) return "gemini";
if (visibleApps.opencode) return "opencode";
+ if (visibleApps.openclaw) return "openclaw";
return "claude"; // fallback
};
@@ -586,7 +588,7 @@ function App() {
return (
);
case "mcp":
diff --git a/src/components/AppSwitcher.tsx b/src/components/AppSwitcher.tsx
index b91c05273..717bb690c 100644
--- a/src/components/AppSwitcher.tsx
+++ b/src/components/AppSwitcher.tsx
@@ -29,12 +29,14 @@ export function AppSwitcher({
codex: "openai",
gemini: "gemini",
opencode: "opencode",
+ openclaw: "openclaw",
};
const appDisplayName: Record = {
claude: "Claude",
codex: "Codex",
gemini: "Gemini",
opencode: "OpenCode",
+ openclaw: "OpenClaw",
};
// Filter apps based on visibility settings (default all visible)
diff --git a/src/components/mcp/McpFormModal.tsx b/src/components/mcp/McpFormModal.tsx
index 93d12745d..70ab3b03a 100644
--- a/src/components/mcp/McpFormModal.tsx
+++ b/src/components/mcp/McpFormModal.tsx
@@ -66,6 +66,7 @@ const McpFormModal: React.FC = ({
codex: boolean;
gemini: boolean;
opencode: boolean;
+ openclaw: boolean;
}>(() => {
if (initialData?.apps) {
return { ...initialData.apps };
@@ -75,6 +76,7 @@ const McpFormModal: React.FC = ({
codex: defaultEnabledApps.includes("codex"),
gemini: defaultEnabledApps.includes("gemini"),
opencode: defaultEnabledApps.includes("opencode"),
+ openclaw: defaultEnabledApps.includes("openclaw"),
};
});
diff --git a/src/components/prompts/PromptFormModal.tsx b/src/components/prompts/PromptFormModal.tsx
index 970265d06..195d856f4 100644
--- a/src/components/prompts/PromptFormModal.tsx
+++ b/src/components/prompts/PromptFormModal.tsx
@@ -35,6 +35,7 @@ const PromptFormModal: React.FC = ({
codex: "AGENTS.md",
gemini: "GEMINI.md",
opencode: "AGENTS.md",
+ openclaw: "AGENTS.md",
};
const filename = filenameMap[appId];
const [name, setName] = useState("");
diff --git a/src/components/prompts/PromptFormPanel.tsx b/src/components/prompts/PromptFormPanel.tsx
index 83a423209..c4481fa4c 100644
--- a/src/components/prompts/PromptFormPanel.tsx
+++ b/src/components/prompts/PromptFormPanel.tsx
@@ -29,6 +29,7 @@ const PromptFormPanel: React.FC = ({
codex: "AGENTS.md",
gemini: "GEMINI.md",
opencode: "AGENTS.md",
+ openclaw: "AGENTS.md",
};
const filename = filenameMap[appId];
const [name, setName] = useState("");
diff --git a/src/components/providers/forms/EndpointSpeedTest.tsx b/src/components/providers/forms/EndpointSpeedTest.tsx
index 1a0b39f99..2ede2f019 100644
--- a/src/components/providers/forms/EndpointSpeedTest.tsx
+++ b/src/components/providers/forms/EndpointSpeedTest.tsx
@@ -14,6 +14,7 @@ const ENDPOINT_TIMEOUT_SECS: Record = {
claude: 8,
gemini: 8,
opencode: 8,
+ openclaw: 8,
};
interface TestResult {
diff --git a/src/components/providers/forms/hooks/useBaseUrlState.ts b/src/components/providers/forms/hooks/useBaseUrlState.ts
index 75e39594a..037dfeb3b 100644
--- a/src/components/providers/forms/hooks/useBaseUrlState.ts
+++ b/src/components/providers/forms/hooks/useBaseUrlState.ts
@@ -4,9 +4,10 @@ import {
setCodexBaseUrl as setCodexBaseUrlInConfig,
} from "@/utils/providerConfigUtils";
import type { ProviderCategory } from "@/types";
+import type { AppId } from "@/lib/api";
interface UseBaseUrlStateProps {
- appType: "claude" | "codex" | "gemini" | "opencode";
+ appType: AppId;
category: ProviderCategory | undefined;
settingsConfig: string;
codexConfig?: string;
diff --git a/src/components/settings/AppVisibilitySettings.tsx b/src/components/settings/AppVisibilitySettings.tsx
index 3ed80dc55..0c30472ce 100644
--- a/src/components/settings/AppVisibilitySettings.tsx
+++ b/src/components/settings/AppVisibilitySettings.tsx
@@ -20,6 +20,7 @@ const APP_CONFIG: Array<{
{ id: "codex", icon: "openai", nameKey: "apps.codex" },
{ id: "gemini", icon: "gemini", nameKey: "apps.gemini" },
{ id: "opencode", icon: "opencode", nameKey: "apps.opencode" },
+ { id: "openclaw", icon: "openclaw", nameKey: "apps.openclaw" },
];
export function AppVisibilitySettings({
@@ -33,6 +34,7 @@ export function AppVisibilitySettings({
codex: true,
gemini: true,
opencode: true,
+ openclaw: true,
};
// Count how many apps are currently visible
diff --git a/tests/msw/state.ts b/tests/msw/state.ts
index ac385a675..2db234840 100644
--- a/tests/msw/state.ts
+++ b/tests/msw/state.ts
@@ -58,6 +58,7 @@ const createDefaultProviders = (): ProvidersByApp => ({
},
},
opencode: {},
+ openclaw: {},
});
const createDefaultCurrent = (): CurrentProviderState => ({
@@ -65,6 +66,7 @@ const createDefaultCurrent = (): CurrentProviderState => ({
codex: "codex-1",
gemini: "gemini-1",
opencode: "",
+ openclaw: "",
});
let providers = createDefaultProviders();
@@ -84,7 +86,7 @@ let mcpConfigs: McpConfigState = {
id: "sample",
name: "Sample Claude Server",
enabled: true,
- apps: { claude: true, codex: false, gemini: false, opencode: false },
+ apps: { claude: true, codex: false, gemini: false, opencode: false, openclaw: false },
server: {
type: "stdio",
command: "claude-server",
@@ -96,7 +98,7 @@ let mcpConfigs: McpConfigState = {
id: "httpServer",
name: "HTTP Codex Server",
enabled: false,
- apps: { claude: false, codex: true, gemini: false, opencode: false },
+ apps: { claude: false, codex: true, gemini: false, opencode: false, openclaw: false },
server: {
type: "http",
url: "http://localhost:3000",
@@ -105,6 +107,7 @@ let mcpConfigs: McpConfigState = {
},
gemini: {},
opencode: {},
+ openclaw: {},
};
const cloneProviders = (value: ProvidersByApp) =>
@@ -128,7 +131,7 @@ export const resetProviderState = () => {
id: "sample",
name: "Sample Claude Server",
enabled: true,
- apps: { claude: true, codex: false, gemini: false, opencode: false },
+ apps: { claude: true, codex: false, gemini: false, opencode: false, openclaw: false },
server: {
type: "stdio",
command: "claude-server",
@@ -140,7 +143,7 @@ export const resetProviderState = () => {
id: "httpServer",
name: "HTTP Codex Server",
enabled: false,
- apps: { claude: false, codex: true, gemini: false, opencode: false },
+ apps: { claude: false, codex: true, gemini: false, opencode: false, openclaw: false },
server: {
type: "http",
url: "http://localhost:3000",
@@ -149,6 +152,7 @@ export const resetProviderState = () => {
},
gemini: {},
opencode: {},
+ openclaw: {},
};
};