Opening Claude Code has no display - MacOS

Resolved 💬 19 comments Opened Feb 27, 2025 by bearded-giant Closed Mar 10, 2025
💡 Likely answer: A maintainer (bcherny, collaborator) responded on this thread — see the highlighted reply below.

Just installed Claude Code and when opening, nothing is printed to to screen nor is it there hidden as it's not selectable. If I quit Claude Code, I then see the output. I can actually interact with the menus via the keyboard, I just cannot see what I'm doing.

MacOS 15.3.1
Tried on Wezterm, Ghostty, and Terminal. Both in tmux pane and out of tmux, still nothing.

!Image

!Image

View original on GitHub ↗

19 Comments

bcherny collaborator · 1 year ago

Interesting.. using terminal app without tmux, you see nothing?

bearded-giant · 1 year ago

Correct, nothing until I quit. I can use the arrows and Enter to log in (once I remember what's on the screen) but yeah, nothing visible. Never seen this before in general. Very strange.

bearded-giant · 1 year ago

made a quick mov to show how it is working

Couldn't attach the file itself, hope this helps show what I'm describing. That is Wezterm and no tmux, but it's the same for any of them.

tbrasington · 1 year ago

Similar issue. Tried Zed, VSCode, Warp, Hyper and the native terminal
Apple M1 Max / macOS 15.3.1 (24D70)

<img width="942" alt="Image" src="https://github.com/user-attachments/assets/fc4a858c-bc18-46c2-90c5-2f6f98e26943" />

isak16 · 1 year ago

Same issue, tried multiple terminals and tried output buffer solvers. But still the same, can interact but nothing visual.
nodejs 20+, M4 pro macos 15.1

Sokushinbutsu · 1 year ago

I'm also experiencing this issue:

  • reproducible on MacOS 14.6.1 (23G93) on zsh 5.9 (x86_64-apple-darwin23.0) and bash 3.2.57(1)-release (x86_64-apple-darwin23) . Ran zsh with zsh -o NO_RCS so ruling out my own configuration
  • used iterm2, terminal.app and ghostty, all same behavior.
  • node --version v20.5.0 & v22.14.0 lts
  • 0.2.29 (Claude Code)

Was able to get successful oauth, when I see the blank screen and press enter I get the claude code ascii art. Commands like claude --help and --config that don't use ink run successfully.

confirmed that raw mode does work in my env:

> process.stdin.isTTY
true
> process.stdin.setRawMode(true)

with NODE_DEBUG

NODE_DEBUG=cluster,net,http claude
NET 45844: pipe false undefined
NET 45844: connect: find host statsig.anthropic.com
NET 45844: connect: dns options { family: undefined, hints: 1024 }
NET 45844: connect: autodetecting
NET 45844: _read - n 16384 isConnecting? true hasHandle? true
NET 45844: _read wait for connection
NET 45844: pipe false undefined
NET 45844: connect: find host api.anthropic.com
NET 45844: connect: dns options { family: undefined, hints: 1024 }
NET 45844: connect: autodetecting
NET 45844: pipe false undefined
NET 45844: connect: find host console.anthropic.com
NET 45844: connect: dns options { family: undefined, hints: 1024 }
NET 45844: connect: autodetecting
NET 45844: _read - n 16384 isConnecting? true hasHandle? true
NET 45844: _read wait for connection
NET 45844: _read - n 16384 isConnecting? true hasHandle? true
NET 45844: _read wait for connection
NET 45844: _read - n 0 isConnecting? false hasHandle? true
NET 45844: Socket._handle.readStart
NET 45844: connect/multiple: only one address found, switching back to single connection
NET 45844: connect: attempting to connect to 34.36.57.103:443 (addressType: 4)
NET 45844: connect/multiple: only one address found, switching back to single connection
NET 45844: connect: attempting to connect to 160.79.104.10:443 (addressType: 4)
NET 45844: afterConnect
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: Socket._handle.readStart
NET 45844: afterConnect
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: Socket._handle.readStart
NET 45844: connect/multiple: only one address found, switching back to single connection
NET 45844: connect: attempting to connect to 160.79.104.10:443 (addressType: 4)
NET 45844: afterConnect
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: Socket._handle.readStart
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: destroy
NET 45844: close
NET 45844: close handle
NET 45844: destroy
NET 45844: close
NET 45844: close handle
NET 45844: destroy
NET 45844: close
NET 45844: close handle
NET 45844: emit close
NET 45844: emit close
NET 45844: emit close
NET 45844: _read - n 0 isConnecting? false hasHandle? true
NET 45844: Socket._handle.readStart
NET 45844: pipe false undefined
NET 45844: connect: find host statsig.anthropic.com
NET 45844: connect: dns options { family: undefined, hints: 1024 }
NET 45844: connect: autodetecting
NET 45844: _read - n 16384 isConnecting? true hasHandle? true
NET 45844: _read wait for connection
NET 45844: connect/multiple: only one address found, switching back to single connection
NET 45844: connect: attempting to connect to 34.36.57.103:443 (addressType: 4)
NET 45844: afterConnect
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: Socket._handle.readStart
NET 45844: _read - n 16384 isConnecting? false hasHandle? true
NET 45844: _read - n 0 isConnecting? false hasHandle? true
NET 45844: Socket._handle.readStart
NET 45844: _read - n 0 isConnecting? false hasHandle? true
NET 45844: Socket._handle.readStart
NET 45844: destroy
NET 45844: close
NET 45844: close handle
NET 45844: emit close
NET 45844: _final: not ended, call shutdown()
╭────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code research preview! │
╰────────────────────────────────────────────╯

 Let's get started.

 Choose the text style that looks best with your terminal:
 To change this later, run /config

 ❯ Light text
   Dark text
   Light text (colorblind-friendly)
   Dark text (colorblind-friendly)


 Preview
 ╭────────────────────────────────────────────────────────────────────────────╮
 │ 1 function greet() {                                                       │
 │ 2    console.log("Hello, World!");                                         │
 │ 2    console.log("Hello, Claude!");                                        │
 │ 3 }                                                                        │
 ╰────────────────────────────────────────────────────────────────────────────╯

 Press Ctrl-C again to exit

Really interested in experimenting with claude code, happy to run other tests locally if it helps you all narrow down the cause of this.

hollesse · 1 year ago

Hi,
i had the same issue as described above, but now i was able to fix it. I thought it could have something to do with my installed zsh. So i change my default terminal back to bash and it worked. So I had a look at my .zshrc and checked what did I configure. Tried to change plugins and so on and then started with a new .zshrc with just minimal configs there. Just so that oh my zsh was working, a theme was set and the git plugin was installed. I then added config from my old config file line by line and checked if claude was still working. I then discovered that setting the environment variable CI_JOB_TOKEN which is normally set within a gitlab ci broke the ui of claude. If I just unset this variable everything works as expected. Maybe this can help you too!

bearded-giant · 1 year ago

OK wow, yeah this was it exactly. unset CI_JOB_TOKEN and the UI renders. Thank you @hollesse, and yeah this for sure needs a fix on the Anthropic side as that token is sort of important for many of us. Mystery solved at least.

hollesse · 1 year ago

@bryangrimes I am happy to help :)

wolffiex collaborator · 1 year ago

@hollesse this is awesome! thank you so much for tracking this down. I can confirm that this can be reproed with
CI_JOB_TOKEN=1 claude

we will have the fix in the next release

Sokushinbutsu · 1 year ago

CI_JOB_TOKEN ended up not being the issue for me, and inspired by @hollesse I binary searched through my env and found out CI_COMMIT_SHORT_SHA also causes it to hang.

wolffiex collaborator · 1 year ago

Hi everyone, thanks for this report. We tracked this down to the way that our rendering detects it is running in CI: if any env var that starts with CI_ is set, it thinks it is!

~As of yesterday, we patched this so that claude will think it is in CI iff the env var CI is set.~ We'll also add a warning at startup if this is detected.

This fix is not yet rolled out externally.

hollesse · 1 year ago

@wolffiex so this is already part of release 0.2.32?

wolffiex collaborator · 1 year ago

~yes~ no

hollesse · 1 year ago

@wolffiex Hm interesting, but I still see the same behavior and no warning.

<img width="682" alt="Image" src="https://github.com/user-attachments/assets/88efa258-769e-4667-8b21-67adca6084cf" />

wolffiex collaborator · 1 year ago

my bad, this fix is not rolled out externally yet. I'll keep this open for now

bcherny collaborator · 1 year ago

This is fixed in 0.2.36. Restart to update.

andyreagan · 1 year ago

This is not fixed yet - see #677

github-actions[bot] · 11 months ago

This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.