Operating system
macOS
Orca version
v1.4.160-rc.2
Details
Short summary:
When one terminal tab holds two split panes running separate agent sessions, both sidebar agent rows show the same conversation name, and that name flips to whichever pane was clicked last. The two sessions are indistinguishable in the sidebar.
What happened?
Sidebar agent rows are rendered per pane, but they resolve their label from tab-level state. tab.title deliberately tracks only the focused pane, so every row in a split tab renders the focused pane's title, and clicking the other split relabels both rows.
Screenshots of the same two rows, before and after clicking the second pane:
| After clicking pane A |
After clicking pane B |
● ✳ Linear … 23h
● ✳ Linear … 22m |
● ✳ Redis Look-aside … 23h
● ✳ Redis Look-aside … 22m |
How can we reproduce it?
- Open a terminal tab and start an agent (e.g. Claude Code). Let it work long enough to set a task title via OSC.
- Split the pane and start a second agent with unrelated work in the new split.
- Look at the two agent rows for that tab in the left sidebar — both carry the same name.
- Click the other split. Both rows relabel to that pane's title.
Root cause
Introduced by #9989, which labels sidebar and dashboard agent rows with conversation names. Its design note states "There is no additional preference: row identity consistently follows tab identity" — split panes were not considered, and they are the case where one tab holds several independent sessions.
src/renderer/src/components/dashboard/use-agent-row-conversation-name.ts looks the tab up by agent.tab.id and returns getAgentRowConversationName(tab, …). The pane is never part of the lookup, so all rows in a tab resolve to one string.
src/renderer/src/components/terminal-pane/pty-connection.ts only propagates the focused pane's OSC title to tab.title (intentional — otherwise two agents in splits make the tab title flicker), and src/renderer/src/components/terminal-pane/use-terminal-pane-lifecycle.ts re-syncs tab.title from the newly focused pane on every focus change. That is what makes the shared label flip on click.
Per-pane titles already exist in state (runtimePaneTitlesByTabId[tabId][paneId], the layout snapshot's titlesByLeafId, and AgentStatusEntry.terminalTitle); the row resolver simply does not consult them.
Anything else that might help:
- Restarting Orca does not cause this, but it makes it visible immediately:
tab.title is persisted, so after a restart both rows already share whichever pane was focused at quit.
- The dashboard pop-out board has the same defect through
build-dashboard-snapshot.ts, which mirrors the hook.
- Tab-owned names (
customTitle, quickCommandLabel) sharing across splits is correct — those are names the user gave the tab. Only the live title needs to be per pane.
- Separate follow-up, not covered here:
generatedTitle is also tab-scoped, so with auto-generated titles enabled both splits still share the first-written name. That value does not change on click, so it is not this symptom.
Operating system
macOS
Orca version
v1.4.160-rc.2
Details
Short summary:
When one terminal tab holds two split panes running separate agent sessions, both sidebar agent rows show the same conversation name, and that name flips to whichever pane was clicked last. The two sessions are indistinguishable in the sidebar.
What happened?
Sidebar agent rows are rendered per pane, but they resolve their label from tab-level state.
tab.titledeliberately tracks only the focused pane, so every row in a split tab renders the focused pane's title, and clicking the other split relabels both rows.Screenshots of the same two rows, before and after clicking the second pane:
● ✳ Linear … 23h● ✳ Linear … 22m● ✳ Redis Look-aside … 23h● ✳ Redis Look-aside … 22mHow can we reproduce it?
Root cause
Introduced by #9989, which labels sidebar and dashboard agent rows with conversation names. Its design note states "There is no additional preference: row identity consistently follows tab identity" — split panes were not considered, and they are the case where one tab holds several independent sessions.
src/renderer/src/components/dashboard/use-agent-row-conversation-name.tslooks the tab up byagent.tab.idand returnsgetAgentRowConversationName(tab, …). The pane is never part of the lookup, so all rows in a tab resolve to one string.src/renderer/src/components/terminal-pane/pty-connection.tsonly propagates the focused pane's OSC title totab.title(intentional — otherwise two agents in splits make the tab title flicker), andsrc/renderer/src/components/terminal-pane/use-terminal-pane-lifecycle.tsre-syncstab.titlefrom the newly focused pane on every focus change. That is what makes the shared label flip on click.Per-pane titles already exist in state (
runtimePaneTitlesByTabId[tabId][paneId], the layout snapshot'stitlesByLeafId, andAgentStatusEntry.terminalTitle); the row resolver simply does not consult them.Anything else that might help:
tab.titleis persisted, so after a restart both rows already share whichever pane was focused at quit.build-dashboard-snapshot.ts, which mirrors the hook.customTitle,quickCommandLabel) sharing across splits is correct — those are names the user gave the tab. Only the live title needs to be per pane.generatedTitleis also tab-scoped, so with auto-generated titles enabled both splits still share the first-written name. That value does not change on click, so it is not this symptom.