1616from  codegen .cli .auth .token_manager  import  get_current_token 
1717from  codegen .cli .commands .claude .claude_log_watcher  import  ClaudeLogWatcherManager 
1818from  codegen .cli .commands .claude .claude_session_api  import  (
19-     update_claude_session_status ,
20-     generate_session_id ,
2119    create_claude_session ,
20+     generate_session_id ,
21+     update_claude_session_status ,
2222)
2323from  codegen .cli .commands .claude .config .mcp_setup  import  add_codegen_mcp_server , cleanup_codegen_mcp_server 
24- from  codegen .cli .commands .claude .hooks  import  cleanup_claude_hook , ensure_claude_hook , get_codegen_url ,  SESSION_FILE 
24+ from  codegen .cli .commands .claude .hooks  import  SESSION_FILE ,  cleanup_claude_hook , ensure_claude_hook , get_codegen_url 
2525from  codegen .cli .commands .claude .quiet_console  import  console 
26+ from  codegen .cli .commands .claude .utils  import  resolve_claude_path 
2627from  codegen .cli .rich .spinners  import  create_spinner 
2728from  codegen .cli .utils .org  import  resolve_org_id 
2829
@@ -125,10 +126,24 @@ def _run_claude_interactive(resolved_org_id: int, no_mcp: bool | None) -> None:
125126    # Initialize log watcher manager 
126127    log_watcher_manager  =  ClaudeLogWatcherManager ()
127128
128-     # Test if Claude Code is accessible first 
129-     console .print ("🔍 Testing Claude Code accessibility..." , style = "blue" )
129+     # Resolve Claude CLI path and test accessibility 
130+     claude_path  =  resolve_claude_path ()
131+     if  not  claude_path :
132+         console .print ("❌ Claude Code CLI not found." , style = "red" )
133+         console .print (
134+             "💡 If you migrated a local install, ensure `~/.claude/local/claude` exists, or add it to PATH." ,
135+             style = "dim" ,
136+         )
137+         console .print (
138+             "💡 Otherwise install globally via npm (e.g., `npm i -g claude`) or run `claude /migrate`." ,
139+             style = "dim" ,
140+         )
141+         update_claude_session_status (session_id , "ERROR" , resolved_org_id )
142+         raise  typer .Exit (1 )
143+ 
144+     console .print (f"🔍 Using Claude CLI at: { claude_path }  , style = "blue" )
130145    try :
131-         test_result  =  subprocess .run (["claude" , "--version" ], capture_output = True , text = True , timeout = 10 )
146+         test_result  =  subprocess .run ([claude_path , "--version" ], capture_output = True , text = True , timeout = 10 )
132147        if  test_result .returncode  ==  0 :
133148            console .print (f"✅ Claude Code found: { test_result .stdout .strip ()}  , style = "green" )
134149        else :
@@ -153,7 +168,7 @@ def _run_claude_interactive(resolved_org_id: int, no_mcp: bool | None) -> None:
153168        url  =  get_codegen_url (session_id )
154169        console .print (f"\n 🔵 Codegen URL: { url } \n " , style = "bold blue" )
155170
156-         process  =  subprocess .Popen (["claude" , "--session-id" , session_id ])
171+         process  =  subprocess .Popen ([claude_path , "--session-id" , session_id ])
157172
158173        # Start log watcher for the session 
159174        console .print ("📋 Starting log watcher..." , style = "blue" )
0 commit comments