Setup: sign-ins, regions, and remote access
The parts of getting started that are not obvious: two unrelated sign-ins, optional API keys, one region per account, the remote-access switch, and the connected preview that precedes PlanToCode Pro.
Checked against the source on 17 September 2026
On this page
Two sign-ins and optional keys
- PlanToCode accountAuth0 · PKCE
Each device signs in by itself, to the same account in the same region, and the desktop needs it only for remote access. If a phone can’t find the desktop, check this sign-in and the region.
- ChatGPT accountaccount/login/start
The Codex child signs in through your browser and runs every turn on it, including turns sent from a phone. If the agent won’t start a turn, check this sign-in and its usage limits.
- Personal API keyopenai_api_key · gemini_api_key
Kept in the desktop keychain for desktop dictation and, with a Gemini key, the speech and video tools. Phone dictation doesn’t use it, so check it only when desktop dictation fails.
One region per account
A PlanToCode account lives in one of two regions, United States or European Union, each with its own API host, relay process, PostgreSQL, and Redis. Device discovery is scoped to one account in one region, so both devices have to select the same one, and changing the region on a device signs it out first. The phones default to the United States when nothing is stored.
Remote access and the device list
- On the desktop, open Settings → Connections and turn on Allow Remote Access under Mobile Connection. Note the server region shown there.
- On the phone, choose the same region and sign in with the same PlanToCode account.
- Select your desktop from the device list, then choose a project and a session.
- Device rowPOST /api/devices/register
Created with X-Client-Type: desktop the first time remote access is on, in the region the desktop chose. Sleep and the switch leave it in place, so the desktop stays listed.
- Desktop socket/ws/device-link
The desktop dials out to the relay, and phones never connect to the computer directly. A silent socket is dropped after about 3 minutes and counts as reconnecting for 90 s, while turning the switch off closes it at once.
- Pingsystem.ping
The phone opens its own socket for this desktop and pings through the relay. Only an answer lets it load projects, sessions, and the timeline.
The WebSocket register’s device UUID must match the row’s owner and role. The switch needs a chosen server location and a PlanToCode sign-in. That sign-in exists only for remote access, and every other desktop feature works without an account. A degraded saved session pauses the mobile connection.
The connected preview and PlanToCode Pro
The first phone on an account to reach a desktop starts a 10-day connected preview for the whole account. After that each phone needs PlanToCode Pro, bought through the App Store or Google Play for its platform. The subscription covers the phone only. Coding on the desktop needs nothing beyond the ChatGPT sign-in, and an iPhone subscription does not unlock Android or the other way round.
- Preview recordaccount_workspace_previews
Written the first time any phone on the account gets an answer from a desktop, with started_at from the database clock and expires_at 10 days later. Later phones get the same record, and the server can’t update or delete it.
- Identity keysHMAC-SHA256
The record is stored under keyed hashes of the Auth0 subject and the verified email, linked to each other. A lookup follows the links and takes the earliest start.
- PlanToCode ProStoreKit · Google Play
Bought per platform. The iPhone checks StoreKit on the device, and Android sends the purchase to the regional server to verify. Neither unlocks the other.
The server stores the preview under keyed hashes of the Auth0 subject and the verified email and counts the 10 days from database time.