@@ -184,22 +184,15 @@ def _run_claude_interactive(resolved_org_id: int, no_mcp: bool | None) -> None:
184184 # Initialize log watcher manager 
185185 log_watcher_manager  =  ClaudeLogWatcherManager ()
186186
187-  # Resolve Claude CLI path and test accessibility  
187+  # Resolve Claude CLI path (we already checked it exists in the main claude() function)  
188188 claude_path  =  resolve_claude_path ()
189189 if  not  claude_path :
190+  # This should not happen since we check earlier, but handle it just in case 
190191 logger .error (
191-  "Claude CLI not found" ,
192+  "Claude CLI not found in interactive mode " ,
192193 extra = {"operation" : "claude.interactive" , "org_id" : resolved_org_id , "claude_session_id" : session_id , "error_type" : "claude_cli_not_found" , ** _get_session_context ()},
193194 )
194195 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-  )
203196 update_claude_session_status (session_id , "ERROR" , resolved_org_id )
204197 raise  typer .Exit (1 )
205198
@@ -373,6 +366,24 @@ def claude(
373366 },
374367 )
375368
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+ 
376387 # Resolve org_id early for session management 
377388 resolved_org_id  =  resolve_org_id (org_id )
378389 if  resolved_org_id  is  None :
0 commit comments