diff --git a/src/components/AiAgentsOnboardingPrompt.test.tsx b/src/components/AiAgentsOnboardingPrompt.test.tsx
index acd58250..f5bb4c79 100644
--- a/src/components/AiAgentsOnboardingPrompt.test.tsx
+++ b/src/components/AiAgentsOnboardingPrompt.test.tsx
@@ -41,6 +41,8 @@ describe('AiAgentsOnboardingPrompt', () => {
)
expect(screen.getByText('No AI agents detected')).toBeInTheDocument()
+ expect(screen.getByTestId('claude-onboarding-screen')).toBeInTheDocument()
+ expect(screen.getByText('Claude Code not detected')).toBeInTheDocument()
expect(screen.getByTestId('ai-agents-onboarding-install-claude_code')).toBeInTheDocument()
expect(screen.getByTestId('ai-agents-onboarding-install-codex')).toBeInTheDocument()
expect(screen.getByTestId('ai-agents-onboarding-continue')).toHaveTextContent('Continue without it')
diff --git a/src/components/AiAgentsOnboardingPrompt.tsx b/src/components/AiAgentsOnboardingPrompt.tsx
index 053d3e37..0ae0365d 100644
--- a/src/components/AiAgentsOnboardingPrompt.tsx
+++ b/src/components/AiAgentsOnboardingPrompt.tsx
@@ -78,6 +78,7 @@ export function AiAgentsOnboardingPrompt({
onContinue,
}: AiAgentsOnboardingPromptProps) {
const copy = getPromptCopy(statuses)
+ const showLegacyClaudeCompatibility = statuses.claude_code.status !== 'installed'
const missingAgents = AI_AGENT_DEFINITIONS.filter((definition) => statuses[definition.id].status === 'missing')
return (
@@ -101,6 +102,17 @@ export function AiAgentsOnboardingPrompt({
+ {showLegacyClaudeCompatibility ? (
+
+
Claude Code not detected
+
+ Install Claude Code or continue without it.
+
+
+ ) : null}
@@ -117,14 +129,16 @@ export function AiAgentsOnboardingPrompt({
))}
-
+
+
+
diff --git a/src/hooks/useAiAgentPreferences.test.ts b/src/hooks/useAiAgentPreferences.test.ts
index e3bce0ea..2bc31c25 100644
--- a/src/hooks/useAiAgentPreferences.test.ts
+++ b/src/hooks/useAiAgentPreferences.test.ts
@@ -55,4 +55,17 @@ describe('useAiAgentPreferences', () => {
})
expect(onToast).toHaveBeenCalledWith('Default AI agent: Codex')
})
+
+ it('keeps the browser mock agent composer enabled when no CLI is installed', () => {
+ const { result } = renderHook(() => useAiAgentPreferences({
+ settings,
+ saveSettings: vi.fn(),
+ aiAgentsStatus: {
+ claude_code: { status: 'missing', version: null },
+ codex: { status: 'missing', version: null },
+ },
+ }))
+
+ expect(result.current.defaultAiAgentReady).toBe(true)
+ })
})
diff --git a/src/hooks/useAiAgentPreferences.ts b/src/hooks/useAiAgentPreferences.ts
index c38592fb..09055ac5 100644
--- a/src/hooks/useAiAgentPreferences.ts
+++ b/src/hooks/useAiAgentPreferences.ts
@@ -1,4 +1,5 @@
import { useCallback, useMemo } from 'react'
+import { isTauri } from '../mock-tauri'
import {
getAiAgentDefinition,
getNextAiAgentId,
@@ -28,7 +29,7 @@ export function useAiAgentPreferences({
)
const defaultAiAgentLabel = getAiAgentDefinition(defaultAiAgent).label
- const defaultAiAgentReady = isAiAgentInstalled(aiAgentsStatus, defaultAiAgent)
+ const defaultAiAgentReady = !isTauri() || isAiAgentInstalled(aiAgentsStatus, defaultAiAgent)
const setDefaultAiAgent = useCallback((agent: AiAgentId) => {
saveSettings({