[BUG] claude -c crashes with UKH is not a function on session resume — server-pushed GrowthBook flag pins broken version (2.1.119)
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
- Use claude for any session
- Exit and run claude -c to resume
- 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
- Use claude for any session
- Exit and run claude -c to resume
- 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_
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗