The conversation can travel.
VS Code 1.141 can pick up a Codex chat created in the ChatGPT app or Codex CLI on the same machine. The conversation history remains available when you move between those apps. VS Code says the session appears within seconds when external sessions are visible.[1]
The useful part is continuity. You can start in a terminal, inspect files in the editor, and return to the command line without rebuilding the conversation from copied text.
A shared transcript is continuity. It is not concurrent write access.
The open app holds the send key.
VS Code documents a single-writer rule for this route. If the same chat remains open in ChatGPT or Codex CLI, VS Code disables sending and shows that the chat is open elsewhere. After you quit the other app or exit the CLI session, Retry checks access without submitting the saved draft.[1]
That behavior protects intent. Two active composers could submit different follow-ups against the same evolving state. The interlock keeps one place in charge of the next turn while every surface can preserve the history it already knows.
Do not confuse switching with handoff.
VS Code uses "handoff" for a different operation. A handoff carries conversation history and context to another harness, execution environment, or agent role. Switching surfaces opens the same session without changing its harness or context.[2]
The distinction belongs in the receipt. Record whether you moved the same session to another surface or created a new continuation under another harness. The second route can change tools, permissions, models, billing, and where commands run.
The host still owns execution.
VS Code's Agent Host owns its sessions independently of the clients that display them. The host is the source of truth and can keep an active turn running after a client disconnects. File edits and commands run in the environment that contains the host.[3]
Closing a composer can release write access without stopping the work behind it. Before moving the send key, inspect active turns and background processes. After moving it, read fresh session state before submitting the preserved draft.
Keep a compact transfer record.
SESSION_ID=[REQUIRED] MOVE_TYPE=[SAME SESSION / HANDOFF] FROM_SURFACE=[REQUIRED] TO_SURFACE=[REQUIRED] PREVIOUS_WRITER_CLOSED=[YES / NO] ACTIVE_TURN=[NONE / RUNNING / UNKNOWN] EXECUTION_HOST=[REQUIRED] TOOLS_AND_PERMISSIONS_RECHECKED=[YES / NO] SEND_ACCESS_CONFIRMED=[YES / NO] NEXT_TURN_RESULT=[REQUIRED]
The record does not need the prompt text. It needs enough state to show who could send, where tools ran, and whether the next turn landed after the move.