Three kinds of window on the desktop are terminals on the machine exe runs on. Claude Code and Codex each run that coding agent's CLI, and Terminal is a plain shell. Where the machine has tmux, a program that keeps a terminal session running with no window on it, what runs in them does not stop with the window: close the window, the tab or the laptop and it works on.
For you:
claude run over SSH or in an IDE: the window lists them, and a click continues one here.For a coding agent:
Help → Welcome…, the Claude Code and Codex card, says which of the two is installed on this machine, with its version, and its Set Up… button opens Agent Setup, a window of three steps: a page for Claude Code, one for Codex, and a review.
curl … | bash on Linux and a Mac, irm … | iex in PowerShell on Windows), npm or Homebrew for Codex, with another way in small type where the machine has one. Copy Command copies it; Install in Terminal… opens a Terminal window on the desktop that runs it and leaves you at a prompt after. Then open the CLI's window from the desktop and sign in the first time.exe finds a CLI on PATH, in ~/.local/bin, where npm, bun and Homebrew put programs, and in every nvm Node version's bin. A script can ask too: GET /v1/agents/cli names each with its path and version, and what an installer would lean on here (curl, node, npm, brew).
Double-click the Terminal, Claude Code or Codex icon on the desktop. An agent's icon is there only when its CLI is installed on this machine; hover it for the folder its sessions start in.
The desktop menu can open all three too, and can run one command in a terminal window of its own. Desktop context menu lists its actions.
Codex sessions use standalone mode when the installed CLI supports it. This keeps their notifications and session status without the shared background server warning. With tmux, they still keep running when the window closes.
A Claude Code or Codex window has three parts. The session column, on a machine with tmux, runs down the left. The terminal with the conversation fills the rest; in the Claude Code window a line over it shows the session's latest prompt. The status line at the foot shows the connection at its left and usage at its right.
In the installed exe app, the screen stays awake while Claude Code or Codex is the active window. Switching to another window, closing or shading the agent window, or leaving the app lets the screen sleep normally again. Returning to the agent window asks to keep it awake again. This works on supported devices, including iPhone and iPad Home Screen apps on iOS 18.4 or later; the device can still refuse it to save power. Ordinary browser tabs keep their normal screen-sleep behaviour.
| Window | What the status line shows | How current it is |
|---|---|---|
| Claude Code | The session's model, context in use, tokens, cost, and the plan's 5-hour and 7-day usage windows. | Updated after every reply, by Claude Code's own status-line hook. |
| Codex | The ChatGPT subscription's 5-hour and weekly usage windows. | Re-read once a minute while the window is open. |
Hover the figures for the long form, which adds when each usage window resets. A figure at 90% or more turns red.
~/.claude/settings.json keeps working inside the terminal.The Control Strip's agent usage meter counts what both agents have used on the whole machine today. The desktop describes it.
On a machine with tmux, the column down the window's left lists the agent's sessions, one row for each tmux session. Each is a conversation of its own.
The list runs newest first, so the session the icon first opened is normally at the bottom. On a phone the column is a strip of tabs above the terminal.
A row is titled the way the CLI titles its terminal. Claude Code keeps that on its current task. Codex, which the desktop starts with its terminal title set to the thread, keeps it on the thread's name. Until the CLI has set a title, a row reads the agent's name and the session's number, such as Claude Code 2.
A window opens on the session it showed last, with its row scrolled into view. That holds from any browser and after the daemon restarts, because tmux itself remembers where the window was.
While the window shows another session, a mark before a row's title says how that session stands:
| Mark | The session |
|---|---|
| A pulsing green dot | Is still working. |
| A black dot | Waits for you: its turn has finished, or a permission or a question is pending. |
Hover a row for which of these it is. The session on screen has no mark, since the terminal shows how it stands. A turn you stopped with Escape leaves no mark either: you saw it stop.
How the desktop learns it:
notify command, which the desktop points at the session, and through the terminal bell, which the desktop has Codex ring at the end of a turn and for an approval, so tmux notes it while no window is looking.The desktop gives each session these settings as it starts it and does not write to your own settings files. A notify of your own in ~/.codex/config.toml still runs after the desktop's, and Claude Code hooks of your own keep running.
Right-click a row for its menu:
| Item | What it does |
|---|---|
| When the session started, in grey | Says when; it is not a command. |
| New Session | Starts a new session, as New does. |
| Copy Title | Copies the row's title. |
| Get Info | Claude Code: a dialog about the conversation — its summary, turns, tokens and more (below). |
| Archive… | Ends the session and its process, after a dialog. |
An archived conversation stays on this machine. In the Claude Code window, Search finds it again (below), and /resume inside Claude Code or Codex brings it back too. The desktop keeps no list of its own: it reads the conversations the CLI keeps. Claude Code deletes a conversation 30 days after its last write unless cleanupPeriodDays in ~/.claude/settings.json says otherwise.
In the Claude Code window, right-click a row and choose Get Info for a dialog over the window about that conversation, read from the transcript Claude Code keeps on this machine. It tells you what a session was before you archive it:
| Line | What it says |
|---|---|
| Summary | What Claude Code calls the conversation: its summary once it has compacted the context, else the title it gave it, else the first prompt. |
| First prompt, Last prompt | The first line of each. |
| Turns | How many prompts you sent, and how many replies the model gave. |
| Tokens | What the replies cost: the input the model read, the prompt cache included, and the output it wrote; under it, how much of the input came from the cache and how much was written to it. |
| Model | The models that replied, in the order they first did. |
| Started, Last active, Where | When it began, when the transcript was last written, and its folder. |
| Session | The session's name in the column, such as exe-claude-90: what Search finds it by. A conversation no session holds says so. |
In the Claude Code window, the line over the terminal shows the first line of the latest prompt in the session on screen, and at its right how many prompts the session has had. It follows the column: switch sessions and it shows the other session's, send a prompt and it shows that one within a couple of seconds. A session with no prompt yet says so.
Click the line for Prompts, a dialog over the window that lists every prompt of the session in order, each with its number, its first line and when it was given. The latest is selected, and the selected prompt stands whole in the box under the list, every line of it, where it can be selected; Copy copies all of it. The arrows move along the list; Return, OK, Escape and the close box in its title bar put it away.
A conversation started on this machine outside the window is a conversation on this machine all the same. Under a rule below its sessions, the column lists the latest ten of them:
claude run in a Terminal window, over SSH or in an IDE, titled as Claude Code titles them, your own /rename first.Each of these rows has a hollow dot, or a green one while a turn runs there. For Claude Code the dot is green too while its CLI is still open there. Hover a row for where and when it started.
To carry one on here:
If that folder is gone, the session opens in the agent's usual one. Leave a row be and the conversation stays where it is. If opening fails, the error is shown and you can click again; a reconnect also allows a fresh attempt once the window is connected.
A Claude Code session whose window or shell died with it, because a Terminal window was closed or the daemon restarted, is right there to click: it continues as claude --resume would.
Not listed: headless runs (claude -p, the turns of a tool that watches a hub), codex started in a terminal of your own, and the conversations the column's own sessions hold.
Search, beside New in the Claude Code window, opens a dialog over the window that lists every conversation on this machine:
Type words to narrow the list. A conversation stays when every word is found in its title, its first prompt or its folder, in any case and inside longer words; a session of the column's also by its name, so exe-claude-90 or 90 finds that session. A session's row says its name and the day it started, any other conversation's row its folder and the day; hover a row for the rest.
| To | Do this |
|---|---|
| Open the selected row | Press Return, press Open, or double-click the row. |
| Move the selection | Use the arrow keys, Page Up and Page Down, or click a row. |
| Put the dialog away | Press Escape or Cancel. |
Opening a session moves the window to it. Opening any other conversation continues it in a session of its own, as a click on its row in the column does.
The mouse wheel scrolls back through the conversation in either window.
--no-alt-screen, leaves its transcript to the terminal, and on a machine with tmux that is the tmux session's history. The wheel scrolls it there, in tmux's copy mode, with its [123/980] position at the top right. Typing returns to the live screen first, so the keys reach Codex as in any terminal.On a phone, drag a finger instead of turning a wheel.
To copy text, drag across it.
The right-click menu also has Paste, which puts the clipboard's text in at the cursor, and Select All. If the browser will not let the page read the clipboard, its own paste keys still work.
On a touch screen, press and hold the terminal for the same menu. Paste asks the browser for the clipboard — an iPhone puts up a Paste bubble to tap — and where the browser will not read it for the page, a small Paste dialog opens instead: press and hold its field and choose Paste, then the dialog's Paste sends the text on to the terminal.
A web address in a terminal is underlined under the pointer, and a click opens it in a new tab.
To give the agent a screenshot, a log or a document, drag the file from your computer onto the window.
Several files arrive as several paths. A file over 10 MB is refused, and a folder cannot be dropped. A plain Terminal window takes a drop the same way; a VM's window does not, since a path on this machine means nothing in the guest.
If the window's link is down when the upload lands, with a laptop back from sleep or the daemon restarting, the file is in the Workspace all the same. Its path waits in a row under the terminal:
| Button | What it does |
|---|---|
| Insert | Types the path once the window is connected again. |
| Copy | Puts the path on the clipboard, for another window. |
| Dismiss | Forgets the path. |
Nothing is uploaded twice.
On a machine with tmux a Terminal window keeps its shell the way an agent window keeps its sessions. Each Terminal is a tmux session of its own, named exe-term-1, exe-term-2 and so on, and tmux attach -t exe-term-2 picks one up over SSH.
exit: the window closes with it.tmux run inside works as it would anywhere.[123/980] position at the top right. Typing returns to the live screen.The session column is also an API, for tools that want a conversation you can watch. The calls are written for Claude Code here; put codex in place of claude for Codex. Like every API call, they need the API token when one is set.
| Request | What it does |
|---|---|
GET /v1/agents/claude/sessions | Lists the rows with their states and, as threads, the conversations started elsewhere: the latest ten, or every one with ?threads=all. |
POST /v1/agents/claude/sessions | Opens a numbered session and answers with its name and number. |
POST /v1/agents/claude/sessions/<name>/prompt | Types a message into a session. |
DELETE /v1/agents/claude/sessions/<name> | Ends the session, as Archive… does, and answers once its processes are gone with what it gave back: freed and swap, the bytes they held (measured says whether they could be read), and available, the machine's memory now. |
GET /v1/agents/claude/sessions/<name>/info | What Get Info shows for a session: summary, prompt, last_prompt, turns, replies, tokens (input, output, cache_read, cache_write), models, created, activity, cwd. Claude Code only. |
GET /v1/agents/claude/threads/<id> | The same for a conversation no session holds, by its session id. |
GET /v1/agents/claude/sessions/<name>/prompts | Every prompt of the session, whole and in order, as prompts: each with text, at (when it was given) and cut when it ran past 20,000 characters. What the prompt line's dialog lists. Claude Code only. |
GET /v1/agents/work | Lists the sessions of both agents that are at work now: when each one's turn began (since, beside the daemon's own now) and the issue addresses, such as EXE-12, that its instructions named (refs). |
A session's <name> is its tmux session's: exe-claude for the one the icon opens and exe-claude-2, exe-claude-3 and so on after it, or exe-codex and exe-codex-2 for Codex.
A new session takes these fields, all optional. Codex takes prompt and resume alone.
| Field | What it sets |
|---|---|
prompt | The first message. |
resume | A conversation to continue: a Claude Code session id, or a Codex thread id. |
fork | With resume, fork the conversation instead of continuing the same one (Claude Code's --fork-session). |
session_id | The id the new Claude Code session gets, so the caller can find its transcript. |
permission_mode | One of default, acceptEdits, plan and auto. |
model | The model, by alias or full name. |
name | The session's title in the column: one line of up to 80 characters. |
dir | The folder the session opens in, as a whole path to a folder on this machine; without it, exe's project folder. |
A Codex thread resumed this way opens in the folder it was started in, as a click on its row does.
A message is {"prompt": "…", "say": "…"}. The prompt goes in as a paste, and Claude Code treats pasted text as material rather than as your words. So give the request a say as well: one line, typed ahead of the paste, that tells the session what to do with it.
A tool that watches a hub builds this way. An instruction you post in one of Claude's hub threads opens as a session in the Claude Code window's column, works there in view, reports in the thread when it is done and stays open in the window to be continued.
Sessions need tmux, and a Windows machine has none. Without it the three windows are still there, with less behind them: