@@ -184,22 +184,15 @@ def _run_claude_interactive(resolved_org_id: int, no_mcp: bool | None) -> None:
184
184
# Initialize log watcher manager
185
185
log_watcher_manager = ClaudeLogWatcherManager ()
186
186
187
- # Resolve Claude CLI path and test accessibility
187
+ # Resolve Claude CLI path (we already checked it exists in the main claude() function)
188
188
claude_path = resolve_claude_path ()
189
189
if not claude_path :
190
+ # This should not happen since we check earlier, but handle it just in case
190
191
logger .error (
191
- "Claude CLI not found" ,
192
+ "Claude CLI not found in interactive mode " ,
192
193
extra = {"operation" : "claude.interactive" , "org_id" : resolved_org_id , "claude_session_id" : session_id , "error_type" : "claude_cli_not_found" , ** _get_session_context ()},
193
194
)
194
195
console .print ("❌ Claude Code CLI not found." , style = "red" )
195
- console .print (
196
- "💡 If you migrated a local install, ensure `~/.claude/local/claude` exists, or add it to PATH." ,
197
- style = "dim" ,
198
- )
199
- console .print (
200
- "💡 Otherwise install globally via npm (e.g., `npm i -g claude`) or run `claude /migrate`." ,
201
- style = "dim" ,
202
- )
203
196
update_claude_session_status (session_id , "ERROR" , resolved_org_id )
204
197
raise typer .Exit (1 )
205
198
@@ -373,6 +366,24 @@ def claude(
373
366
},
374
367
)
375
368
369
+ # Check if Claude is installed for interactive mode (not needed for background mode)
370
+ if background is None :
371
+ claude_path = resolve_claude_path ()
372
+ if not claude_path :
373
+ logger .error (
374
+ "Claude CLI not found" ,
375
+ extra = {"operation" : "claude.command" , "error_type" : "claude_cli_not_found" , ** _get_session_context ()},
376
+ )
377
+ # Use t_console (the visible console) for error messages instead of the quiet console
378
+ t_console .print ("\n [red bold]❌ Claude Code Not Installed[/red bold]" )
379
+ t_console .print ("\n [yellow]Claude Code CLI is not installed or cannot be found.[/yellow]" )
380
+ t_console .print ("\n [bold]To install Claude Code:[/bold]" )
381
+ t_console .print (" • Install globally: [cyan]npm install -g @anthropic-ai/claude-code[/cyan]" )
382
+ t_console .print (" • Or run: [cyan]claude /migrate-installer[/cyan] for local installation" )
383
+ t_console .print ("\n [dim]If you migrated a local install, ensure ~/.claude/local/claude exists[/dim]" )
384
+ t_console .print ("[dim]or add it to your PATH.[/dim]" )
385
+ raise typer .Exit (1 )
386
+
376
387
# Resolve org_id early for session management
377
388
resolved_org_id = resolve_org_id (org_id )
378
389
if resolved_org_id is None :
0 commit comments