Tabs and attention
What a tab knows about itself — its kind, whether it is working, and whether it needs you.
A tab in Overterm carries two things beyond its title: what kind of thing is running in it, and what that thing currently wants. Both are read from what the terminal already reports, so nothing needs configuring in the agent or the shell.
The four kinds
The glyph on a tab’s tile says which of four things it is. The rule is one function and it is checked in this order:
| Kind | When |
|---|---|
| Agent | the tab was started as an agent tab (Claude or Codex) |
| Remote | the title starts with ssh or mosh, or is user@host |
| Server | something in the tab’s process tree is listening on a port |
| Shell | none of the above |
The title is what the shell last set, which with shell integration is the
running command — the only cheap evidence there is. The port check is an
lsof over the tab’s own pids, so a plain shell that starts a dev server
becomes a server tab while the server runs, and its port appears as a pill
in the pane header.
Working, and the mark
Separately from its kind, a tab tracks whether it is working and what it has to tell you. The second of those is a single mark, ranked by urgency, and a tab shows the most urgent one it has had since you last looked at it:
| Mark | Means |
|---|---|
| none | nothing to say |
| done | work finished while you were not looking |
| failed | error progress, or a long command that exited non-zero |
| waiting | it wants you: a bell, or an agent’s notification |
Four terminal events feed it:
| Event | Sequence | Effect |
|---|---|---|
| bell | BEL |
mark waiting |
| notification | OSC 777 | mark waiting, with the notification’s own text as the note |
| progress | OSC 9;4 | sets and clears working; the error state marks failed, and clearing while working marks done |
| command finished | shell integration | a command that ran 10 seconds or more marks done or failed by its exit code |
Three details are worth knowing. A command shorter than ten seconds finishing is not news, so it raises no mark. A mark is only raised while the tab is not the selected tab of the key window — if you watched it happen, there is nothing to tell you. And a fresh progress report clears a waiting mark, because an agent that has started working again is an agent whose question was answered.
Claude Code needs no setup for any of this. Because Overterm sets
TERM_PROGRAM=ghostty, Claude’s default notification channel is the OSC 777
desktop notification and its progress bar is on by default (checked against
Claude Code 2.1.280).
Where the mark shows up
In the strip. A working tab gets a breathing glyph and a sliding bar; a waiting tab a ringing yellow dot; done a green check; failed a red mark.
In the pane header. The strip can only say that something happened; the 38 pt header beside the tab’s title says what — the notification’s own text, or “Waiting for you”, “Finished”, “Failed”.
As a notification. While Overterm is in the background, a mark going up posts a macOS notification. Settings ▸ Notifications has a switch for the feature and one each for waiting, finished and failed.
On the Dock icon. The badge counts tabs with any mark at all
(notifications.dockBadge).
As the attention chip. When anything is marked, a chip appears in the tab strip — “3 need you”. Clicking it lists them, blocked first, then failed, then finished, and a row takes you to that tab. The chip exists because a collapsed island or a tab scrolled out of the strip shows nothing at all.
Jumping to the next one
⌥⌘↓ — Next Failure or Tab That Needs You — selects the next marked tab instead of making you find it. It is the one shortcut worth learning first, and the chip’s tooltip names it.
For answering rather than visiting, use the Agent Inbox (⌘I), which puts every blocked agent’s question and choices in a column so you never have to reach the tab.
Naming, pinning and colour
Right-clicking a tab opens its menu. (The title bar eats right-clicks, so this is handled by a window-level event monitor rather than a normal context menu — it behaves the same, but that is why.) The menu holds:
- Rename Tab… and Reset Name — a tab keeps a custom name over whatever the shell sets. A new task’s tab is named after its branch.
- Show Info… — the tab’s live popover: its checkout and branch, every process under it with CPU and memory, what it is listening on, its Claude session, and the checkout’s disk usage.
- Pin Tab / Unpin Tab — pinned tabs sort to the front of the strip, are never part of an island, and ignore a shell exiting.
- Color — nine fixed marks (red, orange, yellow, green, cyan, blue, purple, pink, grey) and None. A fixed set rather than a colour picker, so two marks never come out indistinguishable.
- New Tab to the Right, Close Tab, Close Other Tabs, Close Tabs to the Right.
- Copy Working Directory, Reveal in Finder.
- the grouping items — see Islands.
Two more views of the same tabs
⇧⌘A Agent Overview draws every tab as a card over the window, refreshed every two seconds, waiting-for-you first. Per card: the tab’s status, the agent found running in it, where it works and on which branch, that branch’s pull request, and for Claude the session’s title, your last prompt, its last reply and the tool call after it — what it is doing now.
⇧⌘E Tab Peek is the other half of that: not state, but shape. See Panes and Tab Peek.