Notifications and the menu bar
Opsty calls you back only when you are not looking at the tab, and you can often answer right there in the notification. Its mark also sits in the menu bar, where any app can see it: click it for the Glance, right-click it for the menu.
When Opsty calls you back
Only when you are not looking at the tab: you are in another app, on another tab, or the window is hidden. In front of you, a program’s notification is a small message inside the window instead. What calls you back:
- an agent’s turn begins: it finished, or it is asking you something;
- a program rings the bell, or sends a notification (OSC 9, 99 or 777) in its own words;
- a command that ran for five seconds or more stops with an error;
- a command that ran for ten seconds or more finishes;
- a command you asked the Running list to keep up stopped five times in two minutes, and Opsty gave up on it.
Each is a macOS notification titled with the tab’s folder or host:
- an agent that finished:
shop · Claude Code: your turn
, with what the agent says it did underneath, such asnpm test passed; 42 tests
, or else its own title, such as✳ Fix login bug
; - an agent that asks permission:
shop · Claude Code · Bash command
, quoting what it asks, such asnpm test · Do you want to proceed?
; - a command that stopped:
shop · stopped
, with the command and its exit code, Opsty’s sentence when it recognizes the error, and the line it read, or else the program’s own last error line; - a command that finished:
shop · finished
, with how long it took.
Clicking one brings Opsty forward with that tab open; clicking a stop’s opens the Running list at its reason. The Dock icon counts the calls you have not looked at, an agent’s turn or a stop, and never a command that simply finished; looking at the tab clears it. A stopped tab keeps its red cross until you act, by running something there, pressing Clear
or closing its failure card.
Answering from the notification
You don’t always have to come back. When Claude Code stops to ask permission, the notification offers Claude’s own first answer as a button, word for word (usually Yes
), beside Open Tab
. The button sends the key that chooses that answer, but only if the same question is still on Claude’s screen when you click and that answer is the one selected; otherwise the click just opens the tab. A quiet notification then confirms it: Sent "Yes". It is working again.
When an agent has simply finished, the notification has a reply field instead, Reply to Claude Code…
. What you type is typed at the agent’s prompt, followed by Enter, if it is still waiting at the same turn. Opsty does not read Codex’s or Gemini’s questions yet, so their notifications carry the reply field when it is simply their turn, and only open the tab when Gemini or Codex asks for an answer.
macOS shows buttons and reply fields only on alert-style notifications, which stay until you act. Opsty asks for that style, and System Settings ▸ Notifications ▸ Opsty can change it. Settings
▸ Helpers
▸ Answer from the notification
takes the button and the field away and keeps the notifications.
The menu bar, the Glance and Quick Terminal
Opsty’s mark also sits in the menu bar: the lamp and the cursor from its icon. The lamp is an empty ring at rest and turns while something works. On your turn it lights up and the cursor blinks for a few seconds, and when something stopped it becomes a cross. The number beside it counts the calls you have not looked at, or else what is working; an agent working over ssh counts as working. With an update ready and nothing else going on, an arrow stands on the cursor. Under Reduce Motion nothing turns or blinks.
npm install papaparse, with its own answer, Yes, as a button; shop’s server stopped, with why and
Restart · npm run dev; then one line for each thing running, among them two Next builds an agent left in a scratch folder, told apart by their folders,
new/frontend and orig/frontend, and one line counting the rest, which opens the Running list.Click the mark for the Glance, a small panel over whatever app you are in, read from the same list as Running. From the top:
- what needs you, at most two cards. An agent asking you something has what it asked on one line, its question word for word, its own first answer as a button and
Open Tab
. The answer is sent only after Opsty reads the agent’s screen again, as from a notification, and only when the whole question fits on the card; a longer one hasOpen Tab
alone and saysThe whole question is in the tab
. An agent that simply finished hasReply to Claude Code…
. A stop has its tab, the line it rests on,Restart · npm run dev
, which names the command it types, andWhy?
, which opens the Running list at its detail. More than two calls make one line that counts them and opens the Running list; - then one line for each thing running: your tabs in the order of their strip, a server an agent started in a tab as that tab’s port, servers no tab owns by the folder they run in, and tunnels by where they go and their host. At most six, then one line that counts the rest and opens the Running list. The selected line shows its one action where its age was:
Open
,Copy
orGo to tab
; Start again
, only when nothing is calling and little is running: up to three servers, watchers or tunnels you started in the last two weeks that are not running now, from your history.New tab
puts the command in a new tab, and you press Enter.
At its foot are Find… tabs, servers, history
(⇧⌘P), then Show Everything Running
(⇧⌘R) and two round buttons, Quick Terminal and Settings, whose shortcuts are in their tooltips; the shortcuts work while the Glance is open. ↑ and ↓ move between rows, ⏎ presses the selected row’s button, never an answer, a restart or a stop, and esc or a click elsewhere closes it. Opening it clears nothing: a call is cleared when you look at its tab.
The Glance is as tall as what it holds, up to 560 points; with more, the list scrolls. With Blur
off it is solid, so nothing behind it shows through.
Right-click the mark for its menu, the same rows under the same headers as the Running list: Waiting for you
, Stopped
, Running in tabs
, No tab
and Tunnels
, five to a header, then a line counting the rest that opens Show Everything Running
. A server no tab owns is named with its folder (next-server :3917 · new/frontend) and a tunnel with its host (doclife.me · :13307 → :3306). Each row opens to its actions, each naming what it does, such as Go to Tab
, Open · http://localhost:3000/
, Copy Address · localhost:5433
, Restart · npm run dev
, Why?
, Stop · ⌃C
and Stop · kill 48211
. Below them: Show Everything Running
, Quick Terminal
, New Window
, Settings…
, the update when one is ready, and Quit Opsty
.
Quick Terminal drops an Opsty window from the top of the screen, from any app, across the whole width of the display, with the tab that needs you in front: the window that tab is in, or the one you used last when nothing needs you. It is off until you switch it on in Settings
▸ General
; its chord is then ⌥Space, unless you record another. Press the chord again and the window goes back where it was, and so do you: the app you were in has the keyboard again. While it is down, Hide · ⌥Space
at the right of the tab strip does the same. A window in full screen is brought forward instead.
Its other doors work whether the chord is on or off: Window
▸ Show or Hide Quick Terminal
, the Glance and the menu bar’s menu, and the launcher. Settings
▸ General
has a switch for Lamp in the menu bar
and one for Quick Terminal
, beside a button that records a new chord: click it and press the keys, with ⌘, ⌥ or ⌃ among them. Raycast and the ChatGPT app both use ⌥Space too, and only one app can hold a chord; if another app already holds it, Settings says so as soon as you switch Quick Terminal on: ⌥Space is held by another app
.
Turning them off
Settings
▸ General
▸ When a tab needs me
turns the notifications off. The lamps, the menu bar and the Dock count still change. How notifications look, and whether they show at all, is also up to System Settings ▸ Notifications ▸ Opsty and your Focus settings.