cd /news/ai-tools/codex-cli-login-stuck-at-finish-sign… · home › topics › ai-tools › article
[ARTICLE · art-140330] src=codenote.net ↗ pub= topic=ai-tools verified=true sentiment=· neutral

Codex CLI Login Stuck at "Finish signing in via your browser" — A Managed Daemon Was Holding Port 1455

A Codex CLI login hang at the "Finish signing in via your browser" prompt was traced to an 18-hour-old `codex app-server --managed-daemon` process (PID 21226) holding the OAuth callback port localhost:1455, according to a first-person account by Tadashi Shigeoka published September 26, 2026. Because Codex CLI shares authentication state across clients through a resident managed daemon, the newly launched TUI (PID 28816) could not receive its own OAuth redirect even though tokens had already been written to ~/.codex/auth.json at 11:31. Killing the daemon and rerunning `codex login` let the new TUI bind localhost:1455 and complete sign-in; the device-code fallback `codex login --device-auth` was abandoned because it requires enabling device-code sign-in in ChatGPT security settings.

by read3 min views1 publishedSep 26, 2026
[Tadashi Shigeoka](https://codenote.net/en/author/tadashi-shigeoka/)· Sat, September 26, 2026

I launched my usual [Codex CLI](https://developers.openai.com/codex/cli) and the TUI would not move past this screen:

The browser side had reached the ChatGPT consent page and I had clicked “Continue,” but the TUI kept waiting. Here is how I traced the cause and what finally cleared it.

What I checked #

First, I confirmed whether the login itself had actually gone through.

~/.codex/auth.json had also been touched at 11:31 on the same day, so tokens were on disk. The OAuth exchange had completed; the TUI simply was not picking it up.

Next, I looked at who was bound to the OAuth callback port localhost:1455.

The listener was not the codex TUI I had open (PID 28816). It was an 18-hour-old background process, codex app-server --managed-daemon (PID 21226). Codex CLI is set up so that several clients (the TUI, the VS Code extension, the desktop app, and so on) can share the same authentication state through a resident --managed-daemon app-server. When an existing daemon is already bound to the OAuth redirect port, a later TUI cannot receive its own callback and the “Finish signing in via your browser” prompt never clears.

Order I tried #

I tried the following top to bottom, and step 3 was the one that worked.

1. Press Esc and relaunch codex

Since the credentials were already in place, restarting the TUI usually gets you into a normal session. This time it just returned me to the same waiting screen.

2. Device-code flow with codex login --device-auth

I tried the device-code flow, which does not depend on a browser redirect.

The ChatGPT consent screen at auth.openai.com/sign-in-with-chatgpt/codex/consent then displayed this warning:

Enable device-code sign-in for Codex, Excel, PowerPoint, and Word in your ChatGPT security settings, then run codex login --device-auth again.

Device-code sign-in requires an opt-in on the ChatGPT security settings side. I did not want to change that setting just to work around this login, so I stopped here.

3. Kill the daemon holding port 1455, then codex login

Stop the resident process that owns the port, then run the normal OAuth login again.

The PIDs to kill depend on your environment; check what is actually listening with lsof -i :1455 before killing anything. If the Codex desktop app or a browser extension is sharing the same resident process, close those first.

With the daemon gone, codex login let the newly started TUI itself bind localhost:1455, receive the browser’s OAuth redirect, and complete the sign-in.

A checking order for the same symptom #

The problem is often the local state going stale rather than anything on the ChatGPT account, so this order is fast:

  1. Use codex login status and the timestamp on~/.codex/auth.json to confirm that credentials have been refreshed
  2. Use lsof -i :1455 to see which process ownslocalhost:1455 , and check whether acodex app-server --managed-daemon from an earlier session (rather than the TUI you just launched) is listening
  3. Press Esc and relaunch codex first
  4. If that does not clear it, kill the resident process and rerun codex login . If the Codex desktop app or a browser extension shares the same daemon, close those before killing it
  5. Keep codex login --device-auth as a fallback only when you are willing to change ChatGPT’s device-code security setting

That’s all from tracing the “Finish signing in via your browser” hang in Codex CLI to a stale codex app-server --managed-daemon holding localhost:1455 and resolving it by killing the daemon and rerunning codex login, from the Gemba.

── more in #ai-tools 4 stories · sorted by recency
── more on @codex cli 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/codex-cli-login-stuc…] indexed:0 read:3min 2026-09-26 · —