[BUG] claude -c crashes with UKH is not a function on session resume — server-pushed GrowthBook flag pins broken version (2.1.119)

Resolved 💬 2 comments Opened Apr 25, 2026 by giladwolff Closed Apr 28, 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?

Running claude -c to resume a previous session crashes immediately with:

UKH is not a function

Root cause (investigated): In 2.1.119, the RW4() hook doesn't return onSessionRestored when called with enabled: false, but the REPL calls it unconditionally on session restore. The symbol onSessionRestored appears 0 times in the 2.1.119 binary
and 3 times in 2.1.120, confirming the fix landed in 2.1.120.

Why the fix doesn't self-apply: The server pushes a GrowthBook feature flag that gets cached in ~/.claude.json at path cachedGrowthBookFeatures.tengu_max_version_config.external. This field is being set to "2.1.119" by the server, causing every
Claude startup to reset the local binary symlink back to 2.1.119 — even after manually updating it to 2.1.120.

Steps to reproduce

  1. Use claude for any session
  2. Exit and run claude -c to resume
  3. Crash: UKH is not a function

Expected behavior: Session resumes normally.

What Should Happen?

Expected behavior: Session resumes normally.

Error Messages/Logs

&&!Fc){if(d("tengu_cost_threshold_reached",{}),AJ(!0),YS$())pKH(!0)}},[S9,ds,Fc]);let hw8=s$.useCallback(async(j$)=>{let
     r$=DH.getState(),{mode:_8,isBypassPermissionsModeAvailable:Hq}=r$.toolPermissionContext;switch(GV$(_8,Hq)){case"allow":return!0;case"deny":return!1;case"classify":return C68(j$.host,j$.port,f5.current,X6.current,r$.toolPermissionContext,new
     AbortController().signal);case"ask":break}if(yK()&&R_$()){let OK=vQK(),qK=await VQK(j$.host,OK);return new
     Promise((lK)=>{if(!qK){BA(($q)=>[...$q,{hostPattern:j$,resolvePromise:lK}]);return}EQK({requestId:OK,host:j$.host,resolve:lK}),e(($q)=>({...$q,pendingSandboxRequest:{requestId:OK,host:j$.host}}))})}return new Promise((OK)=>{let
     qK=!1;function lK($q){if(qK)return;qK=!0,OK($q)}BA(($q)=>[...$q,{hostPattern:j$,resolvePromise:lK}]);{let $q=DH.getState().replBridgePermissionCallbacks;if($q){let
     Y7=mOH.randomUUID();$q.sendRequest(Y7,yD8,{host:j$.host},mOH.randomUUID(),`Allow network connection to ${j$.host}?`);let U1=$q.onResponse(Y7,(Lz)=>{U1();let _O=Lz.behavior==="allow";BA((Fw)=>{return
     Fw.filter((Uw)=>Uw.hostPattern.host===j$.host).forEach((Uw)=>Uw.resolvePromise(_O)),Fw.filter((Uw)=>Uw.hostPattern.host!==j$.host)});let NG=pw.current.get(j$.host);if(NG){for(let Fw of
     NG)Fw();pw.current.delete(j$.host)}}),iM=()=>{U1(),$q.cancelRequest(Y7)},R9=pw.current.get(j$.host)??[];R9.push(iM),pw.current.set(j$.host,R9)}}})},[e,DH]);if(s$.useEffect(()=>{let
     j$=E6.getSandboxUnavailableReason();if(!j$)return;if(E6.isSandboxRequired()){process.stderr.write(`

 9248: Error: sandbox required but unavailable: ${j$}
 9249: `+`  sandbox.failIfUnavailable is set \u2014 refusing to start without a working sandbox.
 9250:

 - <anonymous> (/$bunfs/root/src/entrypoints/cli.js:9247:5663)
 - JR (/$bunfs/root/src/entrypoints/cli.js:492:63749)

Steps to Reproduce

Steps to reproduce

  1. Use claude for any session
  2. Exit and run claude -c to resume
  3. Crash: UKH is not a function

Claude Model

Sonnet (default)

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.1.120

Platform

Anthropic API

Operating System

Ubuntu/Debian Linux

Terminal/Shell

Other

Additional Information

_No response_

View original on GitHub ↗

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