Show shared terminals in the existing terminal tab strip

Open 💬 3 comments Opened May 3, 2026 by iddictive

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

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗