An agent is working in subtank subtank is waiting for you subtank is in front, with its question on screen Answered. The agent carries on
The terminal you don’t have to watch.
Start your dev server and your coding agent, then go back to your work. When the agent needs you, answer it from the notification.
Free · no account · updates itself · macOS 13 or later
New in 0.7.0 Tab takes the grey text, ⌘K clears, and one line for each thing running
This Mac looks like it has an Intel processor. Opsty needs Apple silicon (M1 or later), so the download won’t open here.
Opsty is a Mac app. Open this page on a Mac with Apple silicon to download it.
The window is Opsty’s real interface, rendered with made-up projects.
One day, left running
Start things, go do your work, and come back to a terminal that tells you what happened.
-
Monday morning
The server starts. An agent gets to work.
npm run devin doclife, and Claude Code on saju’s login bug. Each tab’s lamp says which is which: green for a server, a turning ring for an agent at work. -
Monday, mid-morning
subtank’s agent asks you something.
Its tab says
your turn
with a violet pulse. If you’re in another app, a notification brings the question to you, and you can answer it there. -
Monday afternoon
shop’s server stops. Opsty says why.
The package zod isn’t installed.
Put on the line
placesnpm installat your prompt, and nothing runs until you press Enter. -
Monday evening
Before you go, everything still running is in one list.
Running
shows all of it: the tab that needs you first, and a server on port 5173 that no tab started. When you quit, Opsty remembers what was running. -
Tuesday morning
Opsty offers to start it all again.
Running when you left · yesterday
: tick what you want and pressStart
. Each tab types the command it shows, and each Claude Code tab picks up its own conversation.
Explained, in plain words
When a command fails with one of twenty common errors, one sentence says the usual cause and one fix goes on your line. Opsty never runs it: the Enter is yours.
exit 1 · npm run dev in shop
Port 3000 is taken. Opsty says by what.
Another server is already using port 3000
, and the card names it: your tab doclife. Go to that tab
, Stop it and run here
, or Another port
. The one that runs something shows the command it will run.
From the error it printed · ps · lsof, on this Mac only
exit 1 · npm run dev in shop
A package is missing. Opsty says which, and why.
Dependencies weren’t installed, or an AI added one without installing it. Put on the line
places npm install at your prompt, and it runs only when you press Enter.
From the error it printed. Written in advance, not by a model.
before you press Enter
rsync, read back in a sentence.
Type rsync -a ./site/ staging:/srv/www/ and the helper says what Enter would do: copy what’s inside ./site/ into /srv/www/ on staging. The trailing slash becomes a choice you can see: the folder itself, or only what’s in it.
Options checked against the manual on this Mac.
It also marks an error from a dev server that keeps running, walks you through a block of commands pasted from a chat one step at a time, and explains a word you select, citing where the words came from. The sentences come from a table of known errors and the manuals on your Mac, not a model.
Everything you left running
Servers, agents and ssh sessions keep going while you look at something else. Opsty keeps track of them from what is actually running, with nothing to describe in a config file.
⇧⌘R
Every server, even the ones no tab started.
Running
lists what each tab is doing, the ones that need you first. A Vite server on port 5173 that no tab started is there too, under No tab
, with Stop
.
Read from ps and lsof, on this Mac only.
back after 52 minutes
Come back to what each tab did.
One line per tab: subtank’s agent took a turn and changed four files, and it’s your turn now. shop’s server stopped. saju is still working, and its tests failed once, then passed.
Goes when you type · hover a tab to see it again
the next morning
Start yesterday again, one tick each.
Each tab types the command it shows, exactly. Each Claude Code tab comes back as claude --resume with its own conversation, its task beside it.
Commands run on a host marked as production are never brought back.
Arm a server’s restart on the list and Opsty runs it again when it stops, the command it shows, giving up after five stops in two minutes. Select a server on the list and, a moment later, its detail shows the page it serves, loaded from your own Mac.
Nothing cut off
Every list lines up, nothing is cut short without a way to read the rest, and nothing is drawn over what a program printed. Commands, paths and output can be selected, and copying gives them back exactly as they were written.
⇧⌘R
A stopped command says why, beside the list.
Running
is now a list and the detail of what you select. shop’s server stopped: its detail quotes the line Opsty read, Error: Cannot find module 'zod', and offers the fix, with Go to the block
as the Enter.
With no explanation that fits, it quotes the program’s own last error lines.
npm run check in doclife
Problem rows, marked under the text.
The ✗ and ! rows are tinted under what the program printed, with a lit dot in the margin, and the command’s row sums it up: ✓ 7 · ✗ 2 · ! 1. Click that for Show formatted
, the checks by section, every line in the order printed.
Copying gives the lines as printed
⇧⌘H
The launcher lines up, and shows the server.
One set of columns per list, so moving the highlight moves nothing. Servers
shows the highlighted host beside the list: its lines in ~/.ssh/config, its other names, the tabs on it and the tunnels to it.
Read from ~/.ssh/config and lsof, on this Mac only.
And in the menu bar, Opsty’s mark: the lamp and the cursor from its icon. It turns while something works, lights up with the cursor blinking when it is your turn, and becomes a cross when something stops. Click it for the Glance: the agent’s question and its first answer, why something stopped, and one line for each thing running. Right-click it for the menu. The menu bar, in the guide.
Room to move
As many windows as you want, and tabs and panes that move between them. Whatever runs in them keeps running: moving a tab never restarts its shell, its server or its agent.
⌘N
Tear a tab off. Drop it back.
Drag doclife’s tab out of the strip and let go: it becomes a window of its own, its server still on :3000. Drop it on another window’s strip to bring it back, or choose Merge all windows
.
The same shell, scrollback and Ledger move with the tab.
⌘D ⇧⌘D
Split it, and unsplit it without losing a shell.
The server on the left, its tests and a shell on the right. Move pane to new tab
takes a pane out of the split, still running; Split into tabs
does it for every pane at once.
Drag a pane by the grip at the top of its margin.
⇧⌘⏎
One pane fills the tab. The others aren’t forgotten.
Maximize pane
lets the server fill the tab, and the tab says 1 of 3
until you press it again. If a hidden pane’s agent asks you something, that mark turns to its lamp.
The hidden panes keep running.
⌘Z
Closed the wrong tab? Undo.
A tab with a server in it closes at once, with no question, but the server keeps running, hidden, for ten seconds. Undo
puts the tab back exactly as it was. After that, Reopen closed tab
(⇧⌘T) opens it again in its folder, with its old scrollback.
Closed tabs are kept in memory only, until you quit.
⇧⌘\
Every tab in every window, in one list.
Show all tabs
puts the ones that need you first, under Needs you
, then each window’s, with what each is doing. Type to narrow it; ⏎ goes to the tab, in its own window.
Here, subtank’s agent is waiting in the other window.
Make it yours
Eight themes in four families, each with a light and a dark member that follow your Mac. Pick one and every window on this page repaints.
In the app, Settings ▸ Appearance can also import a Terminal or iTerm2 profile, with its font and size, and offers to adjust any color that would be hard to read.
What leaves your Mac
A terminal sees everything you type. So Opsty keeps what it learns on your Mac and makes one request of its own.
- Never reports on you. Its one network request is the update check, about once a day, with no account and no install ID, and you can turn it off. Fetching only what changed in an update can tell the server which version you had. No analytics, no crash reports.
- No account, no telemetry, no AI inside. Its explanations were written in advance and ship inside the app. No model makes them up.
- Never runs what you didn’t see. A fix is placed on your line. The buttons that do type something, like
Restart
,Start
or an agent’s own answer in a notification, show it first. - Never owns your input line. Everything goes to the shell as keys. If Opsty’s window crashes mid-keystroke, your shell carries on.
- Never restarts by itself. An update waits until you say so or until you quit, and first lists what a restart would stop.
- Never records production. Mark a server as production and nothing you run there is kept, and the tab bar turns red while you’re on it.
It never edits your dotfiles. What it keeps is in ~/.config/opsty, plus the update it downloaded. The programs it starts (ps and lsof, plus a few macOS tools when it installs an update), every file it reads and writes, and exactly what the update check sends are on the privacy page, with how to check it yourself.
Opsty 0.7.0
A signed, notarized disk image. Open it, drag Opsty to Applications, and from then on it updates itself.
This Mac looks like it has an Intel processor. Opsty needs Apple silicon (M1 or later), so the download below won’t open here.
Opsty runs on macOS only for now, on Macs with Apple silicon. Windows and Linux are planned for later. to open it on your Mac.
Download for Macopsty-0.7.0-arm64.dmg · 142 MBThis Mac has Apple silicon, so this is the right file.
curl -fsSL opsty.sh | shOr paste that into Terminal. It downloads the same disk image, checks it against SHA256SUMS and Apple’s notarization, and copies Opsty to Applications, or to the Applications folder in your home folder if the main one isn’t writable. It never asks for your password. To read it first: curl -fsSL opsty.sh | less. (Yes, Opsty itself would point out that this is a pasted curl | sh.)
- Needs
- macOS 13 Ventura or later, on a Mac with Apple silicon (M1 or later). In Apple menu ▸ About This Mac,
Chip: Apple M…
means Opsty runs there. - Costs
- Nothing, for any use. No account.
- Checks
- SHA256SUMS lists one line per file. Compare it with
shasum -a 256, or let the Terminal line check it for you. - Updates
- About once a day Opsty checks for a new version, downloads it quietly and installs it when you say so. Settings ▸ Privacy turns the check off. Have 0.3.0? It can’t update itself: download this one once and drag it over the old one.
- Speaks
- English and 한국어, following your Mac’s language.
- Intel
- Not supported. Opsty is built for Apple silicon only.