OAuth sign-in wait screen has no cancel: Esc, Ctrl-C ×2, q, Ctrl-D, Ctrl-Z all leave it unchanged; Enter loops through the error screen
Environment: Claude Code v2.1.219, Linux, running under tmux in a 40×29 pty (a phone-sized terminal), fresh CLAUDE_CONFIG_DIR.
What happens
During /login → OAuth, once the flow reaches the wait screen —
Browser didn't open? Use the (c to
url below to sign in copy)
https://claude.com/cai/oauth/authorize?…
Paste code here if prompted >
— no keystroke leaves it. Measured one key at a time against the live process (screen captured after each input; the pane command instrumented so an exit could not be missed):
| input on the wait screen | result |
|---|---|
| Escape | screen unchanged |
| Ctrl-C ×1 | unchanged |
| Ctrl-C ×2 (Claude Code's own "press again to exit" convention) | unchanged |
| q | types into the code field |
| Ctrl-D | unchanged |
| Ctrl-Z | unchanged |
| Enter (empty code) | → "OAuth error: Invalid code … Press Enter to retry." |
| Enter again (retry) | → back to the same wait screen — a closed loop |
| Escape after the retry | unchanged |
[claude exited] never printed. The wait screen and its error sibling form a closed loop whose only exits are completing the login or killing the process.
Why it matters
The login picker honors Esc to cancel, so a user who chose the wrong login method (or whose browser handoff failed — common when Claude Code runs on a remote host and the browser cannot open) reasonably expects Escape to work one screen later. It doesn't, and nothing on the screen says so. On a remote/mobile terminal this is a dead end: you either finish a sign-in you may not want, or kill the process.
Ask
Escape (or Ctrl-C) on the OAuth wait screen should cancel back to the login method picker — matching the escape hatch the picker itself already advertises. Failing that, the screen should say what actually exits it.