ChatGPT
Opens one native connection to what appears to be a single remote coding device.
"params": {
"threadId": "thr_8f…",
"input": […]
}
Under the hood / Technical explainer
Freestyle Remote speaks ChatGPT’s native Remote protocol, then multiplexes its JSON-RPC stream across a fleet of thread-affine VMs. The trick is deciding what stays local, what wakes compute, and where every event goes on the way back.
Opens one native connection to what appears to be a single remote coding device.
Terminates the client connection, owns routing state, and forwards raw protocol messages without becoming the execution environment.
Each VM runs the full model loop, tools, shell, code-mode helper, and workspace.
01 / Route selection
The method and its routing evidence determine the destination. That distinction lets ChatGPT browse history without waking a VM, while guaranteeing that execution never falls through to the gateway host.
Pairing, account status, device status, model preferences, thread lists, and cached completed reads are coordinator concerns.
thread/list → PostgreSQL
account/read → AuthManagerThe durable thread → worker binding selects exactly one VM. A resume reattaches the worker stream when necessary.
turn/start
thread/read
thread/revertDesktop operations without a thread ID carry an encoded worker UUID. The gateway strips the alias before forwarding.
/__freestyle/<worker>
/workspace/repoProcesses, commands, file watches, and fuzzy searches use translated IDs scoped to both client and worker.
processHandle
processId
watchId · sessionId02 / A turn in motion
For an idle chat, the gateway wakes the original VM and waits for the app-server to accept the turn. ChatGPT receives the app-server’s real turn ID, so a failed wake or gateway rollout cannot leave a synthetic in-progress turn behind.
turn/start without replaying it after an uncertain disconnect.Times and identifiers are illustrative. The acknowledgement ordering reflects the implementation.
03 / Identity translation
The coordinator is an identity boundary. It rewrites IDs and paths so the native client sees one coherent device without gaining a global handle into the worker fleet.
/__freestyle/6ec…/workspaceA unique desktop-visible workspace route.worker = 6ec…
path = /workspaceOwnership and path are validated before forwarding./workspaceThe app-server receives only its normal guest path.A saved thread cannot silently move to a different VM. Durable allocation intent reconciles ambiguous creation responses.
An unrouteable execution method returns an error. There is no fallback that runs the command on the coordinator host.
If a side-effecting worker call times out after delivery may have occurred, its outcome is marked unknown and it is not blindly repeated.
04 / Two planes
The coordinator holds just enough durable state to route, recover, and answer cheap reads. The worker remains the authority for live execution and conversation behavior.
Owns device identity, routing, subscriptions, lifecycle, cached history, and the shared authentication manager.
Owns the model loop, live thread state, approvals, tool calls, files, terminals, and streaming notifications.
account/login/start; refresh requests travel back over the authenticated worker channel. Worker snapshots contain no ChatGPT auth file.That separation is what lets one paired ChatGPT device feel continuous while every conversation gets its own isolated execution boundary.
Back to the overview →