What feature would you like to see?
Please consider extending the existing Codex App terminal tab strip so it can show active terminals from the current chat, other chats in the same project/workspace, and other projects.
The UI does not need a separate "terminal manager" panel. The simpler native model is to reuse the terminal tabs that already exist and group them inline:
New project 2 [chat 1] [chat 2] [chat 3] | SoundShift [chat 1] [chat 2] | my-sites [chat 1] +
Suggested behavior:
- the current project/workspace appears first as a short label
- the current chat's terminal remains the active tab
- other terminal tabs from the same project/workspace appear next to it
- terminals from other projects/workspaces appear after a divider with a short project label
+ keeps its current meaning: create a new terminal tab
- if the row gets too long, the same grouping can feed an overflow/dropdown rather than a new full panel
I put together a prototype branch for the app-server/protocol side:
https://github.com/iddictive/codex/tree/codex/shared-terminal-inventory
Compare view:
https://github.com/openai/codex/compare/main...iddictive:codex/shared-terminal-inventory?expand=1
The prototype adds the runtime inventory needed by a native tab strip:
command/exec/list for active terminal inventory
processScope: "connection" | "workspace" for standalone command sessions
threadId and workspaceCwd metadata for grouping terminals relative to the current chat/workspace
- backwards-compatible connection-scoped behavior by default
- tests covering legacy connection scoping and workspace terminal grouping
Why is this useful?
In the desktop app, agents often start multiple long-running terminals: npm dev servers, test watchers, backend services, Storybook, local database tools, etc. Once there are several chats in the same project/workspace, it becomes hard to tell which chat owns which terminal and which process is still running.
This gets especially painful when an agent has started 5-10 npm/dev servers across chats. If the terminal tab strip only shows the current chat's terminals, users have to hunt through chats or risk killing the wrong process.
Making the existing tab strip cross-chat/cross-project would keep the UI native and compact while making process ownership obvious:
- current chat terminal: active tab
- other chats in this project: nearby inactive tabs
- other projects: separated groups with concise project labels
That should reduce accidental process kills, make it easier to re-open the right dev server, and give users a clearer mental model of what Codex is currently running.
Notes
The prototype focuses on terminal inventory and control metadata. It does not attempt output replay/subscription for terminals started from another chat; streamed output still belongs to the originating connection.
Validation run locally:
cargo test -p codex-app-server --test all command_exec
cargo test -p codex-app-server-protocol
just write-app-server-schema
just fmt
just fix -p codex-app-server
just fix -p codex-app-server-protocol
What feature would you like to see?
Please consider extending the existing Codex App terminal tab strip so it can show active terminals from the current chat, other chats in the same project/workspace, and other projects.
The UI does not need a separate "terminal manager" panel. The simpler native model is to reuse the terminal tabs that already exist and group them inline:
Suggested behavior:
+keeps its current meaning: create a new terminal tabI put together a prototype branch for the app-server/protocol side:
https://github.com/iddictive/codex/tree/codex/shared-terminal-inventory
Compare view:
https://github.com/openai/codex/compare/main...iddictive:codex/shared-terminal-inventory?expand=1
The prototype adds the runtime inventory needed by a native tab strip:
command/exec/listfor active terminal inventoryprocessScope: "connection" | "workspace"for standalone command sessionsthreadIdandworkspaceCwdmetadata for grouping terminals relative to the current chat/workspaceWhy is this useful?
In the desktop app, agents often start multiple long-running terminals: npm dev servers, test watchers, backend services, Storybook, local database tools, etc. Once there are several chats in the same project/workspace, it becomes hard to tell which chat owns which terminal and which process is still running.
This gets especially painful when an agent has started 5-10 npm/dev servers across chats. If the terminal tab strip only shows the current chat's terminals, users have to hunt through chats or risk killing the wrong process.
Making the existing tab strip cross-chat/cross-project would keep the UI native and compact while making process ownership obvious:
That should reduce accidental process kills, make it easier to re-open the right dev server, and give users a clearer mental model of what Codex is currently running.
Notes
The prototype focuses on terminal inventory and control metadata. It does not attempt output replay/subscription for terminals started from another chat; streamed output still belongs to the originating connection.
Validation run locally:
cargo test -p codex-app-server --test all command_execcargo test -p codex-app-server-protocoljust write-app-server-schemajust fmtjust fix -p codex-app-serverjust fix -p codex-app-server-protocol