The desktop app combines in one window what in the CLI is spread across commands: project navigation, parallel chats, the local, worktree and cloud execution targets, diff review and an integrated terminal. But the main decision is made not in the interface but before sending the prompt - where exactly the turn should run. On the choice of target depend what the agent will see, what secrets it will have and how to roll back the result. Visual convenience here is secondary to this choice.
It helps to gather the execution targets into a table once, because each has its own risk. Local works with your current working tree - and here it is easy to mix the changes of several chats or yours with the agent's. A worktree gives a separate managed tree - but it may lack ignored dependencies and local config. The cloud works in a configured remote environment without your local files. Different targets mean different inputs and a different recovery path.
The review pane needs attention precisely because it shows more than it seems. The review pane can display the whole Git state of the project, including changes made not by Codex. So the view is switched between staged and unstaged, branch comparison and the Last turn mode - depending on what you want to see. Before apply or commit you always check the target branch: applying changes to the wrong one is more painful than redoing them, because it also muddles the history.
| Target | State | Error risk |
|---|---|---|
| Local | Your current working tree | Mixing chats' or the user's changes |
| Worktree | A separate managed Git worktree | Missing ignored deps / local config |
| Cloud | A configured remote environment | No local files or state of yours |
The Last turn mode solves the specific task of separating sources. The general Git state mixes your earlier edits, other chats' changes and what the agent did in the last step. Last turn shows exactly the boundary of the last turn - what changed in a specific agent step. It is the very tool missing in the general diff: it answers the question "what did the agent just do" without forcing you to manually subtract everything else from the general state.
The integrated terminal works in the chosen environment and is useful for an independent check. Through it you look at pwd, git status and run test commands - not relying on the agent's words but checking the state yourself. The terminal has its own recovery subtlety: if it "hangs", you first reopen it and run a simple command rather than restarting the app. Restarting the app while active chats are still running risks interrupting them - you need to fix the terminal, not the whole window.
Moving between surfaces is arranged so as not to lose the current work. The /app command in the CLI on macOS and Windows opens the current session in the desktop app - that is, the same conversation can be continued in another shell. But there is a caveat about versions: feature availability may differ, because the bundled client and the standalone CLI update independently. A feature present in one is not obliged to be in another at the same time, and this is checked rather than taken as a given.
The point of the desktop is visual control over parallelism, not a replacement for discipline. Several chats, a visible diff and switchable targets help lead several tasks at once and not confuse them. But the same rules as everywhere stay in force: choose the target consciously, check the target branch before apply, tell the sources of changes apart in the diff. A rich interface simplifies control but does not remove the need to understand where the work runs and what goes into the change.
The typical failures in the desktop are predictable. Sending a prompt without consciously choosing the execution target and getting the wrong inputs. Applying changes to the wrong branch without checking the target before commit. Confusing the agent's changes with others' in the review pane without switching to Last turn. And restarting the app because of a hung terminal, interrupting active chats. Choose the target before the prompt, check the branch before apply, separate the sources in the diff and fix the terminal, not the whole window.