Skip to content
overterm
Documentation

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.