VCode home

Log in to Claude or Codex from your phone

Agents: claude, codex, cursor · On: phone, desktop

When Claude or Codex is logged out on the computer a tab runs on, the tab says so and offers a login right there. You open the vendor's page on your phone, finish the login, and VCode sends your message again. The settings sheet lists every agent's login and lets you log in again at any time.

Why you would use it

Claude's login expires, or Codex's token is revoked, while you are away from the computer. The next message fails. You fix it from the phone instead of finding a terminal on that computer.

How to use it

From the tab that failed

  1. Send a message. If the agent is logged out, the line at the end of the transcript (.fault) reads Claude is logged out on devbox., with the vendor's own words under it in grey. The name after on is the computer the tab runs on.

  2. Tap Log in to Claude (.agent-login-go). The login starts on that computer and its steps replace the button.

    The fault line: a red square, "Claude is logged out on devbox.", the vendor's words "Failed to authenticate: OAuth session expired and could not be refreshed" in grey, and a green Log in to Claude button

  3. For Claude:

    1. Under 1. Open the link and approve., tap Open link, or tap the link itself (.agent-login-link). Copy link (.agent-login-copy) copies the whole URL.
    2. Approve on Claude's page. It shows a code.
    3. Under 2. Paste the code it shows., paste the code into the field (.agent-login-code, placeholder Paste the code from the page) and tap Submit (.agent-login-submit) or press Enter.

    The Claude steps in the fault line: the link cut to two lines, Open link and Copy link, "2. Paste the code it shows.", the field with a pasted code, Submit and Cancel

  4. For Codex:

    1. Under 1. Open the link and log in to ChatGPT., tap Open link or the link.
    2. Type the code shown in large letters (.agent-login-usercode) on that page. Copy code copies it.
    3. Come back to the tab. There is nothing to paste; it says Waiting for you to finish… until Codex reports the login done.

    The Codex steps in the fault line: the device link, "2. Enter this code there. It expires in 15 minutes.", the code 2H2A-WI0AQ in large monospace, and Open link, Copy code and Cancel

  5. When the login is done the line reads Logged in to Claude as you@example.com. Sending your message again… and your last message goes again. The line goes when the new turn starts.

    The fault line after the login: "Logged in to Claude as you@example.com. Sending your message again…"

Cancel (.agent-login-cancel) puts the Log in to Claude button back.

From the settings sheet

  1. Tap the cog (#settings-open). The first group is Agents (#settings-agents): Each computer has its own logins. Every tab on that computer uses them.

  2. Each row (#agents-rows) names an agent and its login. A logged-out agent has a green Log in button; a logged-in one has Log in again.

    The Agents group: Claude "logged out · session expired" with Log in, Codex "logged in · ChatGPT" with Log in again, Cursor "logged out · Not logged in" with Log in

  3. Tap the button. The same steps as above open under the rows. When the login is done the rows update and a toast says Claude logged in.

    The Claude steps open inside the Agents group, under the three rows

In the app on app.v-code.dev, with several computers paired, the group's title carries a computer pick (#agents-box). It starts on the active tab's computer. Tap it to open the list (#agents-box-menu) and pick another; the rows then show that computer's logins, and a login you start runs there. On a computer's own page there is no pick.

From the New thread form

A logged-out agent reads Claude · log in in the agent list (.new-agent). Tap it: the form asks Claude isn't logged in. Log in?. Log in runs the same steps, and the agent is picked when the login is done. The agent picker in the composer (#agentpick) does the same before a handoff.

What you see

Where Text
Fault line Claude is logged out on devbox. / Codex is logged out on devbox.
Claude step 1 1. Open the link and approve.
Claude step 2 2. Paste the code it shows.
After Submit Checking the code…
Codex step 1 1. Open the link and log in to ChatGPT.
Codex step 2 2. Enter this code there. It expires in 15 minutes.
Codex waiting Waiting for you to finish…
Done, in the tab Logged in to Claude as you@example.com. Sending your message again…
Done, elsewhere Logged in to Claude as you@example.com., then the toast Claude logged in
Failed Login failed: … with Retry and Cancel
Submit with an empty field toast Paste the code from the page first

The notes in the settings rows:

Note Means
logged in as you@example.com Claude, with the email it reports
logged in · ChatGPT Codex, with what codex login status names; it reports no email
logged in logged in, no account named
logged out · session expired logged out, with the reason the CLI gave

The computer pick in the app says per computer Claude logged out, Claude, Codex logged out or all logged in. A computer that is offline, still connecting, or has refused this device is listed with that reason and cannot be picked.

Options and settings

Option Default What it changes
Poll interval 3 seconds How often an open login asks the computer whether it is done
Login timeout 15 minutes A login still running after this is stopped and reads login timed out; try again
Code length 1 to 512 characters A pasted code outside this, or with control characters, is refused

Limits and known gaps