Skip to content

Show shared terminals in the existing terminal tab strip #20907

@iddictive

Description

@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

Metadata

Metadata

Assignees

No one assigned

    Labels

    appIssues related to the Codex desktop appapp-serverIssues involving app server protocol or interfacesenhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions