[BUG] Claude will go in an infinite loop if `~/.claude.json` is a folder

Resolved 💬 3 comments Opened Sep 22, 2025 by rcjsuen Closed Jan 10, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

When experimenting with mounting your Claude configurations into a Docker container, you may accidentally mount a folder as your ~/.claude.json file. If this happens, claude will crash instead of reporting a reasonable error message. The fact that it goes into an infinite loop is even wilder.

What Should Happen?

claude should just fail and say it's detected an issue with .claude.json and that it's not a file or something. It should not be stuck in an infinite loop though.

Error Messages/Logs

Exception in PromiseRejectCallback:
file:///usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.js:3589
`)}return QQ1(B)}}var RJ1=YA(()=>{let A=XQ();try{return nK5(sK5("git rev-parse --show-toplevel",{cwd:A,encoding:"utf8",stdio:["pipe","pipe","ignore"]}).trim())}catch{return GTB(A)}});function $9(){let A=RJ1(),B=Vf(lJ(),rz);if(!B.projects)return uS;let Q=B.projects[A]??uS;if(typeof Q.allowedTools==="string")Q.allowedTools=c3(Q.allowedTools)??[];return Q}function a8(A){let B=RJ1();try{XTB(lJ(),rz,(Q)=>({...Q,projects:{...Q.projects,[B]:A}}))}catch(Q){h0(`Failed to save config with lock: ${Q}`);let Z=Vf(lJ(),rz);JTB(lJ(),{...Z,projects:{...Z.projects,[B]:A}},rz)}}function Ld(){let A=z0();return!!(process.env.DISABLE_AUTOUPDATER||process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC||A.autoUpdates===!1&&(A.installMethod!=="native"||A.autoUpdatesProtectedForNative!==!0))}function Ex1(){if(BQ(process.env.DISABLE_COST_WARNINGS))return!1;if(v2())return!1;let B=Oj(),Q=rJ(!1)!==null;if(!B.hasToken&&!Q)return!1;let Z=z0(),G=Z.oauthAccount?.organizationRole,Y=Z.oauthAccount?.workspaceRole;if(!G||!Y)return!0;return["admin","billing"].includes(G)||["workspace_admin","workspace_billing"].includes(Y)}function h01(){let A=z0();if(A.userID)return A.userID;let B=aK5(32).toString("hex");return RA({...A,userID:B}),B}function VTB(){let A=z0();if(!A.firstStartTime)RA({...A,firstStartTime:new Date().toISOString()})}function KTB(A,B){if(B){if(!XT0(A))console.error(`Error: '${A}' is not a valid config key. Valid keys are: ${PJ1.join(", ")}`),process.exit(1);return z0()[A]}else{if(!FT0(A))console.error(`Error: '${A}' is not a valid config key. Valid keys are: ${jJ1.join(", ")}`),process.exit(1);return $9()[A]}}function zTB(A,B,Q){if(Q){if(!XT0(A))console.error(`Error: Cannot set '${A}'. Only these keys can be modified: ${PJ1.join(", ")}`),process.exit(1);if(rK5(A,Q)&&typeof B==="string")try{let G=JSON.parse(B);if(typeof G!=="object"||G===null||Array.isArray(G))console.error("Error: 'env' must be a valid JSON object"),process.exit(1);let Y=z0();RA({...Y,[A]:G}),process.exit(0)}catch(G){console.error(`Error: Failed to parse JSON for 'env': ${G instanceof Error?G.message:String(G)}`),process.exit(1)}if(L21(A,Q)&&typeof B==="string"){console.warn(n1.yellow(`Warning: '${A}' is an array type. Automatically using 'config add' instead of 'config set'.`));let G=B.split(",").map((Y)=>Y.trim()).filter((Y)=>Y.length>0);uu1(A,G,Q);return}let Z=z0();RA({...Z,[A]:B})}else{if(!FT0(A))console.error(`Error: Cannot set '${A}'. Only these keys can be modified: ${jJ1.join(", ")}. Did you mean --global?`),process.exit(1);if(L21(A,Q)&&typeof B==="string"){console.warn(n1.yellow(`Warning: '${A}' is an array type. Automatically using 'config add' instead of 'config set'.`));let G=B.split(",").map((Y)=>Y.trim()).filter((Y)=>Y.length>0);uu1(A,G,Q);return}let Z=$9();a8({...Z,[A]:B})}process.exit(0)}function HTB(A,B){if(B){if(!XT0(A))console.error(`Error: Cannot delete '${A}'. Only these keys can be modified: ${PJ1.join(", ")}`),process.exit(1);let Q=z0();delete Q[A],RA(Q)}else{if(!FT0(A))console.error(`Error: Cannot delete '${A}'. Only these keys can be modified: ${jJ1.join(", ")}. Did you mean --global?`),process.exit(1);let Q=$9();delete Q[A],a8(Q)}}function DTB(A){if(A)return jV1(z0(),PJ1);else return jV1($9(),jJ1)}function Ac(A){let B=XQ();if(A==="ExperimentalUltraClaudeMd")return Ac("User");switch(A){case"User":return TJ1(gB(),"CLAUDE.md");case"Local":return TJ1(B,"CLAUDE.local.md");case"Project":return TJ1(B,"CLAUDE.md");case"Managed":return TJ1(gT(),"CLAUDE.md");case"ExperimentalUltraClaudeMd":return TJ1(gB(),"ULTRACLAUDE.md")}}import{execSync as Az5}from"child_process";var Ec=YA((A)=>{let B=h01(),Q=z0(),Z="",G=0,Y=void 0;if(A){if(Z=TZ()??"",Z!==""&&Q.claudeCodeFirstTokenDate){let X=new Date(Q.claudeCodeFirstTokenDate).getTime();if(!isNaN(X))G=X}Y=Q.hasOpusPlanDefault}let I=RZ(),W=I?.organizationUuid,J=I?.accountUuid;return{customIDs:{sessionId:U2(),organizationUUID:W,organizationID:W},userID:B,appVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.claude.com/s/claude-code",VERSION:"1.0.120"}.VERSION,email:Bz5(),custom:{userType:"external",organizationUuid:W,accountUuid:J,subscriptionType:Z,firstTokenTime:G,hasOpusPlanDefault:Y,...process.env.GITHUB_ACTIONS==="true"&&{githubActor:process.env.GITHUB_ACTOR,githubActorId:process.env.GITHUB_ACTOR_ID,githubRepository:process.env.GITHUB_REPOSITORY,githubRepositoryId:process.env.GITHUB_REPOSITORY_ID,githubRepositoryOwner:process.env.GITHUB_REPOSITORY_OWNER,githubRepositoryOwnerId:process.env.GITHUB_REPOSITORY_OWNER_ID}}}});function Bz5(){return}var CTB="https://e531a1d9ec1de9064fae9d4affb0b0f4@o1158394.ingest.us.sentry.io/4508259541909504",UTB="client-RRNS7R65EAtReO5XA4xDC3eU6ZdJQi6lLEP6b5j32Me";function $TB(){let A=!(process.env.CLAUDE_CODE_USE_BEDROCK||process.env.CLAUDE_CODE_USE_VERTEX||process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC||process.env.DISABLE_ERROR_REPORTING);BR.init({dsn:CTB,enabled:A,environment:"external",release:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.claude.com/s/claude-code",VERSION:"1.0.120"}.VERSION,defaultIntegrations:!1,tracesSampleRate:1,tracePropagationTargets:["localhost"]})}function Zu1(A,B){try{let Q=Ec(),Z={platform:eA.platform,terminal:eA.terminal,userType:"external",errorId:B.toString(),...wTB()};BR.setTags(Z),BR.setExtras({sessionId:U2(),isCI:eA.isCI,isTest:!1,packageVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.claude.com/s/claude-code",VERSION:"1.0.120"}.VERSION}),BR.setUser({id:Q.userID,email:Q.email}),BR.captureException(A)}catch{}}function Zz5(A){return A.toISOString().replace(/[:.]/g,"-")}var zT0=Zz5(new Date);function Gz5(){return KT0(xO.errors(),zT0+".txt")}var VT0=!1;function U1(A,B){if(VT0)return;VT0=!0;try{if(process.env.CLAUDE_CODE_USE_BEDROCK||process.env.CLAUDE_CODE_USE_VERTEX||process.env.DISABLE_ERROR_REPORTING||process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC)return;if(BQ(!1))console.error(A);let Q=A.stack||A.message,Z={error:Q,timestamp:new Date().toISOString()};a7A(Z),Yz5(Gz5(),{error:Q})}catch{}finally{VT0=!1}Zu1(A,B)}function GXB(){return n7A()}function HT0(A){if(!w1().existsSync(A))return[];try{return JSON.parse(w1().readFileSync(A,{encoding:"utf8"}))}catch{return[]}}function Yz5(A,B){return}async function bA1(){let B=(await lRB()).filter((Q)=>{if(!Q.messages.length)return!1;if(Q.firstPrompt?.startsWith("API Error"))return!1;if(Q.summary?.startsWith("API Error"))return!1;return!0});return Iz5(B).map((Q,Z)=>({...Q,value:Z}))}async function TCB(A){return await iRB(A)}async function PCB(A){return(await bA1())[A]||null}function Iz5(A){return A.sort((B,Q)=>{let Z=Q.modified.getTime()-B.modified.getTime();if(Z!==0)return Z;let G=Q.created.getTime()-B.created.getTime();if(G!==0)return G;return B.created.getTime()-Q.created.getTime()})}function VG(A,B){if(h0(n1.red(`MCP server "${A}" ${B}`)),(M2()||{}).cleanupPeriodDays===0)return;try{let Z=xO.mcpLogs(A),G=B instanceof Error?B.stack||B.message:String(B),Y=new Date().toISOString(),I=KT0(Z,zT0+".txt");if(!w1().existsSync(Z))w1().mkdirSync(Z);if(!w1().existsSync(I))w1().writeFileSync(I,"[]",{encoding:"utf8",flush:!1});let W={error:G,timestamp:Y,sessionId:U2(),cwd:w1().cwd()},J=HT0(I);J.push(W),w1().writeFileSync(I,JSON.stringify(J,null,2),{encoding:"utf8",flush:!1})}catch{}}function VA(A,B){F1(`MCP server "${A}": ${B}`);try{let Q=xO.mcpLogs(A),Z=new Date().toISOString(),G=KT0(Q,zT0+".txt");if(!w1().existsSync(Q))w1().mkdirSync(Q);if(!w1().existsSync(G))w1().writeFileSync(G,"[]",{encoding:"utf8",flush:!1});let Y={debug:B,timestamp:Z,sessionId:U2(),cwd:w1().cwd()},I=HT0(G);I.push(Y),w1().writeFileSync(G,JSON.stringify(I,null,2),{encoding:"utf8",flush:!1})}catch{}}function FE0(A,B){if(!B||B!=="repl_main_thread")return;let Q=structuredClone(A);i7A(Q)}import{existsSync as qTB,mkdirSync as Wz5,readdirSync as Jz5,readFileSync as Xz5,writeFileSync as Fz5,unlinkSync as Vz5}from"fs";function M21(){return SJ1.join(gB(),"statsig")}class DT0{cache=new Map;ready=!1;constructor(){try{if(!qTB(M21()))Wz5(M21(),{recursive:!0});let A=Jz5(M21());for(let B of A){let Q=decodeURIComponent(B),Z=Xz5(SJ1.join(M21(),B),"utf8");this.cache.set(Q,Z)}this.ready=!0}catch(A){U1(A,DYA),this.ready=!0}}isReady(){return this.ready}isReadyResolver(){return this.ready?Promise.resolve():null}getProviderName(){return"FileSystemStorageProvider"}getItem(A){return this.cache.get(A)??null}setItem(A,B){this.cache.set(A,B);try{let Q=encodeURIComponent(A);Fz5(SJ1.join(M21(),Q),B,"utf8")}catch(Q){U1(Q,UYA)}}removeItem(A){this.cache.delete(A);let B=encodeURIComponent(A),Q=SJ1.join(M21(),B);if(!qTB(Q))return;try{Vz5(Q)}catch(Z){U1(Z,CYA)}}getAllKeys(){return Array.from(this.cache.keys())}}var zz5=21600000,ETB={},ec=null,CT0=!1,du1=YA(()=>{if(Al())return null;let A=Ec(!0),B={networkConfig:{api:"https://statsig.anthropic.com/v1/"},environment:{tier:["test","dev"].includes("production")?"development":"production"},includeCurrentPageUrlWithEvents:!1,logLevel:mu1.LogLevel.None,storageProvider:new DT0,customUserCacheKeyFunc:(Z,G)=>{return Kz5("sha1").update(Z).update(G.userID||"").digest("hex").slice(0,10)}};ec=new mu1.StatsigClient(UTB,A,B),ec.on("error",()=>{q2.head("https://api.anthropic.com/api/hello").catch(()=>{})});let Q=ec.initializeAsync().then(()=>{CT0=!0});return process.on("beforeExit",async()=>{await ec?.flush()}),process.on("exit",()=>{ec?.flush()}),{client:ec,initialized:Q}}),Kf=YA(async()=>{let A=du1();if(!A)return null;return await A.initialized,A.client});function lKB(){ec=null,CT0=!1,du1.cache?.clear?.(),Kf.cache?.clear?.(),Dz5.cache?.clear?.(),ZW.cache?.clear?.()}function Al(){return!!process.env.CLAUDE_CODE_USE_BEDROCK||!!process.env.CLAUDE_CODE_USE_VERTEX||!!process.env.DISABLE_TELEMETRY||!!process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC}async function Mc(){if(Al())return;try{let A=Ec(!0),B=await Kf();if(!B)return;await B.updateUserAsync(A)}catch(A){U1(A instanceof Error?A:new Error(`Statsig: Force refresh failed: ${A}`),HYA)}}function NTB(){if(Al())return;let A=setInterval(()=>{Mc()},zz5);process.on("beforeExit",()=>{clearInterval(A)})}async function Hz5(A,B){if(Al())return;try{let Q=B.model?String(B.model):uG(),Z=qz(Q),[G,Y,I]=await Promise.all([Kf(),eA.getPackageManagers(),eA.getRuntimes()]);if(!G)return;let W={...B,model:Q,sessionId:U2(),userType:"external",...Z.length>0?{betas:Z.join(",")}:{},env:JSON.stringify({platform:eA.platform,nodeVersion:eA.nodeVersion,terminal:kz.terminal,packageManagers:Y.join(","),runtimes:I.join(","),isRunningWithBun:eA.isRunningWithBun(),isCi:BQ(!1),isClaubbit:process.env.CLAUBBIT==="true",isGithubAction:process.env.GITHUB_ACTIONS==="true",isClaudeCodeAction:process.env.CLAUDE_CODE_ACTION==="1"||process.env.CLAUDE_CODE_ACTION==="true",isClaudeAiAuth:v2(),version:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://docs.claude.com/s/claude-code",VERSION:"1.0.120"}.VERSION,...process.env.GITHUB_ACTIONS==="true"&&{githubEventName:process.env.GITHUB_EVENT_NAME,githubActionsRunnerEnvironment:process.env.RUNNER_ENVIRONMENT,githubActionsRunnerOs:process.env.RUNNER_OS,githubActionRef:process.env.GITHUB_ACTION_PATH?.includes("claude-code-action/")?process.env.GITHUB_ACTION_PATH.split("claude-code-action/")[1]:void 0},...x41()&&{wslVersion:x41()}}),entrypoint:process.env.CLAUDE_CODE_ENTRYPOINT,isInteractive:String(b7A()),clientType:LD1(),...void 0,sweBenchRunId:process.env.SWE_BENCH_RUN_ID||"",sweBenchInstanceId:process.env.SWE_BENCH_INSTANCE_ID||"",sweBenchTaskId:process.env.SWE_BENCH_TASK_ID||""},J={eventName:A,metadata:W};G.logEvent(J),await G.flush()}catch(Q){}}function Y1(A,B){Hz5(A,B)}var ZW=YA(async(A)=>{if(Al())return!1;let B=await Kf();if(!B)return!1;let Q=B.checkGate(A);return ETB[A]=Q,Q}),cDB=(A,B=!1)=>{let[Q,Z]=yJ1.default.useState(B);return yJ1.default.useEffect(()=>{ZW(A).then(Z)},[A]),Q},Ff1=(A,B)=>{let[Q,Z]=yJ1.default.useState(B);return yJ1.default.useEffect(()=>{Ed(A,B).then(Z)},[A,B]),Q};function wTB(){return{...ETB}}var Dz5=YA(async(A,B)=>{if(Al())return B;let Q=await Kf();if(!Q)return B;let Z=Q.getExperiment(A);if(Object.keys(Z.value).length===0)return B;return Z.value});async function Ed(A,B){if(Al())return B;let Q=await Kf();if(!Q)return B;let Z=Q.getDynamicConfig(A);if(Object.keys(Z.value).length===0)return B;return Z.value}var qR3=YA(Ed);function mH(A,B,Q){let Z=du1();if(!Z)return Q;let G=Z.client.getExperiment(A);if(!G)return Q;return G.get(B,Q)}function KF2(A,B){let Q=du1();if(!Q)return B;let Z=Q.client.getDynamicConfig(A);if(!Z||Object.keys(Z.value).length===0)return B;return Z.value}function AP(A){return Cz5(A),z0().cachedStatsigGates[A]??!1}var Cz5=YA(async(A)=>{let B=await ZW(A),Q=z0();Q.cachedStatsigGates[A]=B,RA(Q)});async function fPA(A){if(CT0)return AP(A);return ZW(A)}var LTB=new Map,Uz5=[/MaxListenersExceededWarning.*AbortSignal/,/MaxListenersExceededWarning.*EventTarget/];function $z5(A){let B=`${A.name}: ${A.message}`;return Uz5.some((Q)=>Q.test(B))}var cu1=null;function MTB(){let A=process.listeners("warning");if(cu1&&A.includes(cu1))return;if(H$()!=="development")process.removeAllListeners("warning");cu1=(B)=>{try{let Q=`${B.name}: ${B.message.slice(0,50)}`,Z=LTB.get(Q)||0;LTB.set(Q,Z+1);let G=$z5(B);if(Y1("tengu_node_warning",{is_internal:G?1:0,occurrence_count:Z+1,classname:B.name,...!1}),process.env.CLAUDE_DEBUG==="true")h0(`${G?"[Internal Warning]":"[Warning]"} ${B.toString()}`)}catch{}},process.on("warning",cu1)}function RTB(){}var OTB=new Set(["ANTHROPIC_API_KEY","ANTHROPIC_AUTH_TOKEN","ANTHROPIC_BASE_URL","ANTHROPIC_CUSTOM_HEADERS","ANTHROPIC_DEFAULT_HAIKU_MODEL","ANTHROPIC_DEFAULT_OPUS_MODEL","ANTHROPIC_DEFAULT_SONNET_MODEL","ANTHROPIC_MODEL","ANTHROPIC_SMALL_FAST_MODEL","ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION","AWS_BEARER_TOKEN_BEDROCK","BASH_DEFAULT_TIMEOUT_MS","BASH_MAX_TIMEOUT_MS","BASH_MAX_OUTPUT_LENGTH","CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR","CLAUDE_CODE_API_KEY_HELPER_TTL_MS","CLAUDE_CODE_ENABLE_TELEMETRY","CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL","CLAUDE_CODE_MAX_OUTPUT_TOKENS","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC","CLAUDE_CODE_DISABLE_TERMINAL_TITLE","CLAUDE_CODE_SUBAGENT_MODEL","DISABLE_AUTOUPDATER","DISABLE_BUG_COMMAND","DISABLE_COST_WARNINGS","DISABLE_ERROR_REPORTING","DISABLE_NON_ESSENTIAL_MODEL_CALLS","DISABLE_TELEMETRY","HTTP_PROXY","HTTPS_PROXY","MAX_THINKING_TOKENS","MCP_TIMEOUT","MCP_TOOL_TIMEOUT","MAX_MCP_OUTPUT_TOKENS","NO_PROXY","OTEL_EXPORTER_OTLP_ENDPOINT","OTEL_EXPORTER_OTLP_HEADERS","OTEL_EXPORTER_OTLP_PROTOCOL","OTEL_EXPORTER_OTLP_LOGS_PROTOCOL","OTEL_EXPORTER_OTLP_LOGS_ENDPOINT","OTEL_EXPORTER_OTLP_METRICS_PROTOCOL","OTEL_EXPORTER_OTLP_METRICS_ENDPOINT","OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY","OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE","OTEL_LOG_USER_PROMPTS","OTEL_LOGS_EXPORTER","OTEL_LOGS_EXPORT_INTERVAL","OTEL_METRICS_INCLUDE_SESSION_ID","OTEL_METRICS_INCLUDE_VERSION","OTEL_METRICS_INCLUDE_ACCOUNT_UUID","OTEL_METRICS_EXPORTER","OTEL_METRIC_EXPORT_INTERVAL","OTEL_RESOURCE_ATTRIBUTES","USE_BUILTIN_RIPGREP","VERTEX_REGION_CLAUDE_3_5_HAIKU","VERTEX_REGION_CLAUDE_3_5_SONNET","VERTEX_REGION_CLAUDE_3_7_SONNET","VERTEX_REGION_CLAUDE_4_0_OPUS","VERTEX_REGION_CLAUDE_4_0_SONNET","VERTEX_REGION_CLAUDE_4_1_OPUS"]);function TTB(){let A=M2()||{},B=z0().env||{},Q=A.env||{};for(let[Z,G]of Object.entries(B))if(OTB.has(Z.toUpperCase()))process.env[Z]=G;for(let[Z,G]of Object.entries(Q))if(OTB.has(Z.toUpperCase()))process.env[Z]=G;RTB()}function UT0(){let A=M2()||{};Object.assign(process.env,z0().env),Object.assign(process.env,A.env),RTB()}var AV=A1(V1(),1);function wz5({filePath:A,errorDescription:B,onExit:Q,onReset:Z}){r0((I,W)=>{if(W.escape)Q()});let G=G2();return AV.default.createElement(AV.default.Fragment,null,AV.default.createElement(y,{flexDirection:"column",borderColor:"error",borderStyle:"round",padding:1,width:70,gap:1},AV.default.createElement(M,{bold:!0},"Configuration Error"),AV.default.createElement(y,{flexDirection:"column",gap:1},AV.default.createElement(M,null,"The configuration file at ",AV.default.createElement(M,{bold:!0},A)," contains invalid JSON."),AV.default.createElement(M,null,B)),AV.default.createElement(y,{flexDirection:"column"},AV.default.createElement(M,{bold:!0},"Choose an option:"),AV.default.createElement(vA,{options:[{label:"Exit and fix manually",value:"exit"},{label:"Reset with default configuration",value:"reset"}],onChange:(I)=>{if(I==="exit")Q();else Z()},onCancel:Q}))),G.pending?AV.default.createElement(M,{dimColor:!0},"Press ",G.keyName," again to exit"):AV.default.createElement(p3,null))}var qz5="dark";async function PTB({error:A}){let B={exitOnCtrlC:!1,theme:qz5};await new Promise((Q)=>{let{unmount:Z}=t6(AV.default.createElement(R7,null,AV.default.createElement(wz5,{filePath:A.filePath,errorDescription:A.message,onExit:()=>{Z(),Q(),process.exit(1)},onReset:()=>{w1().writeFileSync(A.filePath,JSON.stringify(A.defaultConfig,null,2),{flush:!1,encoding:"utf8"}),Z(),Q(),process.exit(0)}})),B)})}var Dc1=A1(D9(),1),W_0=A1(wP0(),1),Cc1=A1(Uf(),1),lBQ=A1(qsB(),1),pBQ=A1(I2Q(),1),iBQ=A1(cm1(),1),nBQ=A1(D2Q(),1),J_0=A1(Uf(),1),NB1=A1(zBQ(),1),aBQ=A1(MBQ(),1),sBQ=A1(SBQ(),1),rBQ=A1(mBQ(),1),aE=A1(Lm1(),1),hf=A1(cS(),1);class G_0{error(A,...B){U1(new Error(A),PT)}warn(A,...B){U1(new Error(A),qYA)}info(A,...B){return}debug(A,...B){return}verbose(A,...B){return}}var Y_0=A1(Uf(),1),EB1=A1(A3(),1);var Xs5=3600000;async function Fs5(){let A=_V(hW());if(A.error)throw F1(`Metrics opt-out check failed: ${A.error}`),new Error(`Auth error: ${A.error}`);let B={"Content-Type":"application/json","User-Agent":RU(),...A.headers};try{let Z=await q2.get("https://api.anthropic.com/api/claude_code/organizations/metrics_enabled",{headers:B,timeout:5000});return F1(`Metrics opt-out API response: enabled=${Z.data.metrics_logging_enabled}`),{enabled:Z.data.metrics_logging_enabled,hasError:!1}}catch(Q){return F1(`Failed to check metrics opt-out status: ${Q instanceof Error?Q.message:String(Q)}`),U1(Q,$GA),{enabled:!1,hasError:!0}}}var Vs5=wq1(Fs5,Xs5);async function dBQ(){try{return await Vs5()}catch(A){return F1("Metrics check failed, defaulting to disabled"),{enabled:!1,hasError:!0}}}class I_0{endpoint;timeout;pendingExports=[];isShutdown=!1;constructor(A={}){this.endpoint="https://api.anthropic.com/api/claude_code/metrics",this.timeout=A.timeout||5000}async export(A,B){if(this.isShutdown){B({code:EB1.ExportResultCode.FAILED,error:new Error("Exporter has been shutdown")});return}let Q=this.doExport(A,B);this.pendingExports.push(Q),Q.finally(()=>{let Z=this.pendingExports.indexOf(Q);if(Z>-1)this.pendingExports.splice(Z,1)})}async doExport(A,B){try{if(!(await dBQ()).enabled){F1("Metrics export disabled by organization setting"),B({code:EB1.ExportResultCode.SUCCESS});return}let Z=this.transformMetricsForInternal(A),G=_V(hW());if(G.error){F1(`Metrics export failed: ${G.error}`),B({code:EB1.ExportResultCode.FAILED,error:new Error(G.error)});return}let Y={"Content-Type":"application/json","User-Agent":RU(),...G.headers},I=await q2.post(this.endpoint,Z,{timeout:this.timeout,headers:Y});F1("BigQuery metrics exported successfully"),F1(`API Response: ${JSON.stringify(I.data,null,2)}`),B({code:EB1.ExportResultCode.SUCCESS})}catch(Q){F1(`BigQuery metrics export failed: ${Q instanceof Error?Q.message:String(Q)}`),U1(Q,PT),B({code:EB1.ExportResultCode.FAILED,error:Q instanceof Error?Q:new Error("Unknown export error")})}}transformMetricsForInternal(A){let B=A.resource.attributes,Q={"service.name":B["service.name"]||"claude-code","service.version":B["service.version"]||"unknown","os.type":B["os.type"]||"unknown","os.version":B["os.version"]||"unknown","host.arch":B["host.arch"]||"unknown","aggregation.temporality":this.selectAggregationTemporality()===Y_0.AggregationTemporality.DELTA?"delta":"cumulative"};if(B["wsl.version"])Q["wsl.version"]=B["wsl.version"];if(v2()){Q["user.customer_type"]="claude_ai";let G=TZ();if(G)Q["user.subscription_type"]=G}else Q["user.customer_type"]="api";return{resource_attributes:Q,metrics:A.scopeMetrics.flatMap((G)=>G.metrics.map((Y)=>({name:Y.descriptor.name,description:Y.descriptor.description,unit:Y.descriptor.unit,data_points:this.extractDataPoints(Y)})))}}extractDataPoints(A){return(A.dataPoints||[]).filter((Q)=>typeof Q.value==="number").map((Q)=>({attributes:this.convertAttributes(Q.attributes),value:Q.value,timestamp:this.hrTimeToISOString(Q.endTime||Q.startTime||[Date.now()/1000,0])}))}async shutdown(){this.isShutdown=!0,await this.forceFlush(),F1("BigQuery metrics exporter shutdown complete")}async forceFlush(){await Promise.all(this.pendingExports),F1("BigQuery metrics exporter flush complete")}convertAttributes(A){let B={};if(A){for(let[Q,Z]of Object.entries(A))if(Z!==void 0&&Z!==null)B[Q]=String(Z)}return B}hrTimeToISOString(A){let[B,Q]=A;return new Date(B*1000+Q/1e6).toISOString()}selectAggregationTemporality(){return Y_0.AggregationTemporality.DELTA}}var Ks5=60000,zs5=5000;function Hs5(){if(M2()?.otelHeadersHelper)process.env.OTEL_EXPORTER_OTLP_HEADERS=Object.entries(zu2()).map(([B,Q])=>`${B}=${Q}`).join(",");if(!process.env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE)process.env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE="delta"}function Ds5(){let A=(process.env.OTEL_METRICS_EXPORTER||"").trim().split(",").filter(Boolean),B=parseInt(process.env.OTEL_METRIC_EXPORT_INTERVAL||Ks5.toString()),Q=[];for(let Z of A)if(Z==="console"){let G=new Cc1.ConsoleMetricExporter,Y=G.export.bind(G);G.export=(I,W)=>{if(I.resource&&I.resource.attributes)console.log(`


RangeError: Maximum call stack size exceeded

Steps to Reproduce

mkdir claude-bug
docker run -it --rm -v $(pwd)/claude-bug:/root/.claude.json node:24 /bin/sh
npm i -g @anthropic-ai/claude-code
claude

It will now crash.

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

1.0.120 (Claude Code)

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

iTerm2

Additional Information

_No response_

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗