[BUG] running claude in powershell issue
Environment
- Platform (select one):
- [x] Anthropic API
- [ ] AWS Bedrock
- [ ] Google Vertex AI
- [ ] Other: <!-- specify -->
- Claude CLI version: 1.0.51
- Operating System: windows 11
- Terminal: Powershell
Bug Description
<!-- A clear and concise description of the bug -->
Steps to Reproduce
- <!-- First step -->
- <!-- Second step -->
- <!-- And so on... -->
Expected Behavior
claude code runs perfectly
Actual Behavior
got error when running claude in powershell i thought claude code is supported on native windows without requiring wsl
PS C:\Users\f2tsb\OneDrive\Desktop\invoice generator> claude
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │
│ Do you trust the files in this folder? │
│ │
│ C:\Users\f2tsb\OneDrive\Desktop\invoice generator │
│ │
│ Claude Code may read files in this folder. Reading untrusted files may lead Claude Code to behave in unexpected ways. │
│ │
│ With your permission Claude Code may execute files in this folder. Executing untrusted code is unsafe. │
│ │
│ https://docs.anthropic.com/s/claude-code-security │
│ │
│ ❯ 1. Yes, proceed │
│ 2. No, exit │
│ │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Enter to confirm · Esc to exit
file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:712
}function Sw0(A){try{return v1().accessSync(A,h9Q.X_OK),!0}catch(B){try{return su1(${A} --version,{timeout:1000,stdio:"ignore"}),!0}catch{return!1}}}var yw0=L0(function(){let A=(J)=>{try{return su1(which ${J},{stdio:["ignore","pipe","ignore"]}).toString().trim()}catch{return null}},B=process.env.SHELL,Q=B&&(B.includes("bash")||B.includes("zsh")),D=B?.includes("bash"),I=A("zsh"),Z=A("bash"),G=["/bin","/usr/bin","/usr/local/bin","/opt/homebrew/bin"],Y=(D?["bash","zsh"]:["zsh","bash"]).flatMap((J)=>G.map((C)=>${C}/${J}));if(D){if(Z)Y.unshift(Z);if(I)Y.push(I)}else{if(I)Y.unshift(I);if(Z)Y.push(Z)}if(Q&&Sw0(B))Y.unshift(B);let W=Y.find((J)=>J&&Sw0(J));if(!W){let J="No suitable shell found. Claude CLI requires a Posix shell environment. Please ensure you have a valid shell installed and the SHELL environment variable set.";throw b1(new Error(J)),new Error(J)}return W});function r9Q(){let A=yw0(),B=A.includes("zsh")?"zsh":A.includes("bash")?"bash":"sh";return new Promise((Q)=>{try{let D=jw0(A);if(!DY1(D)){Q(void 0);return}let I=_w0(D,"utf8"),Z=i9Q("sha256").update(I).digest("hex").slice(0,8),G=ru1(g9(),"shell-snapshots"),F=ru1(G,snapshot-${B}-${Z}.sh);if(DY1(F)){Q(FQ()==="windows"?N_(F):F);return}if(!DY1(G))m9Q(G,{recursive:!0});let Y=a9Q(A,F);d9Q(A,["-c","-l",Y],{env:{...process.env.CLAUDE_CODE_DONT_INHERIT_ENV?{}:process.env,SHELL:A,GIT_EDITOR:"true",CLAUDECODE:"1"},timeout:1e4,maxBuffer:1048576},(W,J,C)=>{if(W)b1(new Error(Failed to create shell snapshot: ${C})),E1("shell_snapshot_failed",{stderr_length:C.length}),Q(void 0);else if(DY1(F)){let X=u9Q(F).size;E1("shell_snapshot_created",{snapshot_size:X}),Q(FQ()==="windows"?N_(F):F)}else E1("shell_unknown_error",{}),Q(void 0)})}catch(D){b1(D instanceof Error?D:new Error(String(D))),E1("shell_snapshot_error",{}),Q(void 0)}})}var ou1=L0(async function(){let A=await r9Q();return{binShell:yw0(),snapshotFilePath:A}});async function s9Q(A,B,Q,D=!1,I,Z){let G=Q||n9Q,{binShell:F,snapshotFilePath:Y}=await ou1();if(I)F=I,Y=void 0;let W=Math.floor(Math.random()*65536).toString(16).padStart(4,"0"),J=IY1.tmpdir();if(FQ()==="windows")J=N_(J);let C=${J}/claude-${W}-cwd,X=mj.default.quote([A,"<","/dev/null"]);if(F.includes("bash")&&!D){let q=A.split(/(?<!\|)\|(?!\|)/);if(q.length>1)X=mj.default.quote([q[0],"<","/dev/null","|",q.slice(1).join("|")])}if(D)A=Pw0(A),X=mj.default.quote([A,"<","/dev/null"]);let V=()=>{};if(D){let q=Tw0(X);X=q.finalCommand,V=q.cleanup}let K=[];if(Y)K.push(source ${mj.default.quote([Y])});K.push(eval ${X}),K.push(pwd -P >| ${C});let E=K.join(" && "),z=kw0();if(B.aborted)return Lw0();try{let q=nu1(A),M=F;if(FQ()==="windows")M=zj1();let R=c9Q(M,["-c","-l",E],{env:{...process.env,SHELL:F,GIT_EDITOR:"true",CLAUDECODE:"1",...D?q.env:{}},cwd:z,detached:!0}),P=$w0(R,B,G,Z);return P.result.then((L)=>{if(L&&!L.backgroundTaskId)try{XX(_w0(C,{encoding:"utf8"}).trim(),z)}catch{E1("shell_set_cwd",{success:!1})}V()}).catch(()=>{V()}),V=()=>{},P}catch(q){return cA(Shell exec error: ${q instanceof Error?q.message:String(q)}),V=()=>{},{background:()=>null,kill:()=>{},result:Promise.resolve({code:126,stdout:"",stderr:q instanceof Error?q.message:String(q),interrupted:!1})}}finally{V()}}function kw0(){return m8A()}function XX(A,B){let Q=p9Q(A)?A:l9Q(B||v1().cwd(),A);if(!v1().existsSync(Q))throw new Error(Path "${Q}" does not exist);let D=v1().realpathSync(Q);d8A(D),E1("shell_set_cwd",{success:!0})}var o9Q=s9Q;function xw0(){return o9Q}function dA(){try{return kw0()}catch{return W9()}}var Ho=1000,zo=60;function Z2(A,B,Q={timeout:10*zo*Ho,preserveOutputOnError:!0,useCwd:!0}){return r4(A,B,{abortSignal:Q.abortSignal,timeout:Q.timeout,preserveOutputOnError:Q.preserveOutputOnError,cwd:Q.useCwd?dA():void 0,env:Q.env})}function r4(A,B,Q={timeout:10*zo*Ho,preserveOutputOnError:!0,maxBuffer:1e6}){let{abortSignal:D,timeout:I=10*zo*Ho,preserveOutputOnError:Z=!0,cwd:G,env:F}=Q;return new Promise((Y)=>{try{t9Q(A,B,{maxBuffer:Q.maxBuffer,signal:D,timeout:I,cwd:G,env:F,shell:FQ()==="windows"?IfA():void 0},(W,J,C)=>{if(W)if(Z){let X=typeof W.code==="number"?W.code:1;Y({stdout:J||"",stderr:C||"",code:X,error:typeof W.code==="string"?W.code:String(X)})}else Y({stdout:"",stderr:"",code:1});else Y({stdout:J,stderr:C,code:0})})}catch(W){b1(W),Y({stdout:"",stderr:"",code:1})}})}function eD(A,B,Q=10*zo*Ho){let D;if(B===void 0)D={};else if(B instanceof AbortSignal)D={abortSignal:B,timeout:Q};else D=B;let{abortSignal:I,timeout:Z=10*zo*Ho}=D;I?.throwIfAborted();let G=e9Q(A,{env:process.env,maxBuffer:1e6,timeout:Z,cwd:dA(),stdio:["ignore","pipe","pipe"]});if(!G)return null;return G.toString().trim()||null}function ZY1(A){try{let B=String(A),Q=process.platform==="win32"?powershell.exe -NoProfile -Command "(Get-CimInstance Win32_Process -Filter \\"ProcessId=${B}\\").ParentProcessId":ps -o ppid= -p ${B},D=eD(Q,{timeout:1000});return D?D.trim():null}catch{return null}}function vw0(A){try{let B=String(A),Q=process.platform==="win32"?powershell.exe -NoProfile -Command "(Get-CimInstance Win32_Process -Filter \\"ProcessId=${B}\\").CommandLine":ps -o command= -p ${B},D=eD(Q,{timeout:1000});return D?D.trim():null}catch{return null}}import{join as GY1}from"path";import{homedir as gw0}from"os";var tu1=G1(Kj1(),1);import{constants as bw0}from"fs";function g9(){return process.env.CLAUDE_CONFIG_DIR??GY1(gw0(),".claude")}function WF(){if(v1().existsSync(GY1(g9(),".config.json")))return GY1(g9(),".config.json");return GY1(process.env.CLAUDE_CONFIG_DIR||gw0(),".claude.json")}var AQQ=L0(async()=>{let{code:A}=await Z2("test",["-f","/.dockerenv"]);if(A!==0)return!1;return process.platform==="linux"}),BQQ=L0(async()=>{try{let A=new AbortController,B=setTimeout(()=>A.abort(),1000);return await K9.head("http://1.1.1.1",{signal:A.signal}),clearTimeout(B),!0}catch{return!1}});async function zu(A){try{let{cmd:B}=tu1.findActualExecutable(A,[]);try{return v1().accessSync(B,bw0.F_OK|bw0.X_OK),!0}catch{return!1}}catch{return!1}}var QQQ=L0(async()=>{let A=[];if(await zu("npm"))A.push("npm");if(await zu("yarn"))A.push("yarn");if(await zu("pnpm"))A.push("pnpm");return A}),DQQ=L0(async()=>{let A=[];if(await zu("bun"))A.push("bun");if(await zu("deno"))A.push("deno");if(await zu("node"))A.push("node");return A}),IQQ=L0(()=>{if(process.versions.bun!==void 0||process.env.BUN_INSTALL!==void 0)return!0;return!1}),hw0=L0(()=>{try{return v1().existsSync("/proc/sys/fs/binfmt_misc/WSLInterop")}catch(A){return!1}}),ZQQ=L0(()=>{try{if(!hw0())return!1;let{cmd:A}=tu1.findActualExecutable("npm",[]);return A.startsWith("/mnt/c/")}catch(A){return!1}}),uw0=["pycharm","intellij","webstorm","phpstorm","rubymine","clion","goland","rider","datagrip","appcode","dataspell","aqua","gateway","fleet","jetbrains","androidstudio"],GQQ=L0(()=>{if(process.platform==="darwin")return null;try{let B=process.pid.toString();for(let Q=0;Q<10;Q++){let D=vw0(B);if(D){let Z=D.toLowerCase();for(let G of uw0)if(Z.includes(G))return G}let I=ZY1(B);if(!I||I==="0"||I===B)break;B=I}}catch{}return null});function FQQ(){if(process.env.CURSOR_TRACE_ID)return"cursor";if(process.env.VSCODE_GIT_ASKPASS_MAIN?.includes("/.cursor-server/"))return"cursor";if(process.env.VSCODE_GIT_ASKPASS_MAIN?.includes("/.windsurf-server/"))return"windsurf";let A=process.env.__CFBundleIdentifier?.toLowerCase();if(A?.includes("vscodium"))return"codium";if(A?.includes("windsurf"))return"windsurf";if(A?.includes("com.google.android.studio"))return"androidstudio";if(A){for(let B of uw0)if(A.includes(B))return B}if(process.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"){if(process.platform==="darwin")return"pycharm";return GQQ()||"pycharm"}if(process.env.TERM==="xterm-ghostty")return"ghostty";if(process.env.TERM?.includes("kitty"))return"kitty";if(process.env.TERM_PROGRAM)return process.env.TERM_PROGRAM;if(process.env.STY)return"screen";if(process.env.KONSOLE_VERSION)return"konsole";if(process.env.GNOME_TERMINAL_SERVICE)return"gnome-terminal";if(process.env.XTERM_VERSION)return"xterm";if(process.env.VTE_VERSION)return"vte-based";if(process.env.TERMINATOR_UUID)return"terminator";if(process.env.KITTY_WINDOW_ID)return"kitty";if(process.env.ALACRITTY_LOG)return"alacritty";if(process.env.TILIX_ID)return"tilix";if(process.env.WT_SESSION)return"windows-terminal";if(process.env.SESSIONNAME&&process.env.TERM==="cygwin")return"cygwin";if(process.env.MSYSTEM)return process.env.MSYSTEM.toLowerCase();if(process.env.ConEmuTask)return"conemu";if(process.env.WSL_DISTRO_NAME)returnwsl-${process.env.WSL_DISTRO_NAME};if(process.env.SSH_CONNECTION||process.env.SSH_CLIENT||process.env.SSH_TTY)return"ssh-session";if(process.env.TERM){let B=process.env.TERM;if(B.includes("alacritty"))return"alacritty";if(B.includes("rxvt"))return"rxvt";if(B.includes("termite"))return"termite";return process.env.TERM}if(!process.stdout.isTTY)return"non-interactive";return null}var iA={getIsDocker:AQQ,hasInternetAccess:BQQ,isCI:x4(!1),platform:["win32","darwin"].includes(process.platform)?process.platform:"linux",nodeVersion:process.version,terminal:FQQ(),getPackageManagers:QQQ,getRuntimes:DQQ,isRunningWithBun:IQQ,isWslEnvironment:hw0,isNpmFromWindowsPath:ZQQ};function x4(A){if(!A)return!1;let B=A.toLowerCase().trim();return["1","true","yes","on"].includes(B)}function mw0(A){let B={};if(A)for(let Q of A){let[D,...I]=Q.split("=");if(!D||I.length===0)throw new Error(Invalid environment variable format: ${Q}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2);B[D]=I.join("=")}return B}function Ju(){return process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION||"us-east-1"}function QO(){return process.env.CLOUD_ML_REGION||"us-east5"}function eu1(){return x4(process.env.CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR)}function dw0(A){if(A?.startsWith("claude-3-5-haiku"))return process.env.VERTEX_REGION_CLAUDE_3_5_HAIKU||QO();if(A?.startsWith("claude-3-5-sonnet"))return process.env.VERTEX_REGION_CLAUDE_3_5_SONNET||QO();if(A?.startsWith("claude-3-7-sonnet"))return process.env.VERTEX_REGION_CLAUDE_3_7_SONNET||QO();if(A?.startsWith("claude-opus-4"))return process.env.VERTEX_REGION_CLAUDE_4_0_OPUS||QO();if(A?.startsWith("claude-sonnet-4"))return process.env.VERTEX_REGION_CLAUDE_4_0_SONNET||QO();return QO()}import{randomBytes as XQQ}from"crypto";var iw0=G1(O71(),1);import{execSync as VQQ}from"child_process";var Am1=v.enum(["local","user","project","dynamic"]),fT4=v.enum(["stdio","sse","sse-ide","http"]),Bm1=v.object({type:v.literal("stdio").optional(),command:v.string().min(1,"Command cannot be empty"),args:v.array(v.string()).default([]),env:v.record(v.string()).optional()}),YQQ=v.object({type:v.literal("sse"),url:v.string(),headers:v.record(v.string()).optional()}),WQQ=v.object({type:v.literal("sse-ide"),url:v.string(),ideName:v.string(),ideRunningInWindows:v.boolean().optional()}),JQQ=v.object({type:v.literal("ws-ide"),url:v.string(),ideName:v.string(),authToken:v.string().optional(),ideRunningInWindows:v.boolean().optional()}),CQQ=v.object({type:v.literal("http"),url:v.string(),headers:v.record(v.string()).optional()}),Qm1=v.union([Bm1,YQQ,WQQ,JQQ,CQQ]);var cw0=v.object({mcpServers:v.record(v.string(),Qm1)});var $q={allowedTools:[],history:[],mcpContextUris:[],mcpServers:{},enabledMcpjsonServers:[],disabledMcpjsonServers:[],hasTrustDialogAccepted:!1,ignorePatterns:[],projectOnboardingSeenCount:0,hasClaudeMdExternalIncludesApproved:!1,hasClaudeMdExternalIncludesWarningShown:!1},yY={numStartups:0,installMethod:void 0,autoUpdates:void 0,theme:"dark",preferredNotifChannel:"auto",verbose:!1,editorMode:"normal",autoCompactEnabled:!0,hasSeenTasksHint:!1,queuedCommandUpHintCount:0,diffTool:"auto",customApiKeyResponses:{approved:[],rejected:[]},env:{},tipsHistory:{},memoryUsageCount:0,parallelTasksCount:1,promptQueueUseCount:0,todoFeatureEnabled:!0,messageIdleNotifThresholdMs:60000,autoConnectIde:!1},Uo=["apiKeyHelper","installMethod","autoUpdates","theme","verbose","preferredNotifChannel","shiftEnterKeyBindingInstalled","editorMode","hasUsedBackslashReturn","supervisorMode","autoCompactEnabled","diffTool","env","tipsHistory","parallelTasksCount","todoFeatureEnabled","messageIdleNotifThresholdMs","autoConnectIde"];function Gm1(A){return Uo.includes(A)}var wo=["allowedTools","hasTrustDialogAccepted","hasCompletedProjectOnboarding","ignorePatterns"];function nw0(){let A=dA(),B=DO(WF(),yY);while(!0){if(B.projects?.[A]?.hasTrustDialogAccepted)return!0;let D=pw0(A,"..");if(D===A)break;A=D}return!1}var BP4={...yY,autoUpdates:!1},QP4={...$q};function Fm1(A){return wo.includes(A)}function Uu(A,B){if(B){let Q=YA();return A in Q&&Array.isArray(Q[A])}else{let Q=$q[A];return A in $q&&Array.isArray(Q)}}function KQQ(A,B){if(Uu(A,B))return!1;if(B){let Q=YA();return A in Q&&typeof Q[A]==="object"}else{let Q=$q[A];return A in $q&&typeof Q==="object"}}function EQQ(A,B){let Q=Array.from(new Set(B));switch(A){case"allowedTools":return Q.length>0?Q:["git diff:*"];case"ignorePatterns":return Q.length>0?Q.map((D)=>Read(${D})):["Read(secrets.env)"]}}function HQQ(A,B){let Q=EQQ(A,B);switch(A){case"allowedTools":return{permissions:{allow:Q}};case"ignorePatterns":return{permissions:{deny:Q}}}}function zQQ(A,B){if(A!=="allowedTools"&&A!=="ignorePatterns")return;console.warn(Warning: "claude config add ${A}" has been migrated to settings.json and will be removed in a future version.
^
Error: No suitable shell found. Claude CLI requires a Posix shell environment. Please ensure you have a valid shell installed and the SHELL environment variable set.
at file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:712:865
at Q (file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:526:14406)
at r9Q (file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:712:910)
at file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:712:1856
at Q (file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:526:14406)
at KP (file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:2623:7799)
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async q6A.<anonymous> (file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:2625:1053)
at async q6A.parseAsync (file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:517:4184)
at async Vg6 (file:///C:/laragon/bin/nodejs/node-v22/node_modules/@anthropic-ai/claude-code/cli.js:2637:1209)
Node.js v22.12.0
Additional Context
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗