The Ledger

Every command you run gets a mark when it ends, in the margin beside it, so a glance down the window says what worked, what failed and how long each took. The rows a program marked as failed or warned are lit where they are, and nothing is ever drawn over what it printed.

The marks

A command that succeeded gets a green mark in the margin and ✓; one that failed gets a red mark and ✕ with its exit code. How long it took sits at the end of its row, and a command still running says ● running with its time so far.

The marks sit in the margin and at the end of the command’s own row only, never over a program’s output, and they step aside while a full-screen program such as vim or Claude Code’s interface is open.

Problem rows

doclife’s release check, as it printed it: the two ✗ rows tinted red and the ! row amber, under the text, each with a lit dot in the margin, and ✓ 7 · ✗ 2 · ! 1 on the command’s row.

A row a program marked as a problem is tinted under its text, red for a failure and amber for a warning, with a lit dot beside it in the margin: a line starting with ✗ or ✘, ! or ▲, a log line at ERROR or WARN, npm ERR!, an Error: line, a TypeScript error, a container that exited. The text itself is exactly what the program printed, selectable and found by ⌘F as always.

When the output is a checklist, the command’s row sums it up in a small chip, such as ✓ 7 · ✗ 2 · ! 1, when the row has room for it beside the time. A dev server’s rows are marked as they arrive, while it is still running. Past 5,000 rows Opsty stops counting, and the chip says — rather than a number it did not finish.

Show formatted

Opened from the chip: the checks by section, each section with its own count, the first failure highlighted, and every line in the order printed.

Show formatted lays a command’s output out again, beside it, only when you ask: click a lit dot or the summary chip, choose it from the command’s margin menu, or Block ▸ Show formatted. It reads the output and shows it in the shape it has:

  • Checks, by section, each section with its counts; sections with nothing wrong start folded in long output;
  • Tables, realigned in columns that hold Korean and wide characters;
  • Logs, in columns of time, level and message, a stack trace kept under its line;
  • Containers from docker compose, and JSON as a tree.

Every line is there, in the order printed; a run of quiet lines in long output folds into one row that you can open. Click a row to see it in the output: the view moves beside it, and the row flashes. Select rows and copy them, and you get the lines exactly as printed, indentation and all; part of one row gives that part of its line. esc, typing at the prompt or a click elsewhere closes it and gives the keyboard back to your shell.

Acting on a command

Hover a finished command for Copy output, Copy command, Run again and ⋯ (More). Run again puts the command back on your line, and you press Enter to run it; the same is Block ▸ Run again · put it on the line (⌘⏎).

Click the command’s mark in the margin, right-click it, or choose ⋯, for its menu:

Copy for an AI chat
The command, its folder, exit code and duration, and the useful part of its output, as Markdown ready to paste into a chat. Passwords, tokens and keys are removed first, and Opsty says how many it removed.
Copy as image
A picture of just that command and its output, in your theme, on the clipboard. It is drawn on your Mac.
Copy output only
What it printed, as plain text.
Show formatted
The output laid out again, as above.
Run again
As above.

The first two are in the launcher too. ⌘↑ and ⌘↓ (Block ▸ Previous prompt and Next prompt) move between commands, and stop at a running server’s errors as well.

When the screen is cleared

The marks go with the text they belong to, whatever erased it:

  • ⌃L moves the screen up into the scrollback, as in Terminal, and the marks move with their lines.
  • clear erases the scrollback and the screen, so there is nothing to scroll back to, and the marks go with them.
  • Clear to Start (⌘K) erases the scrollback and the screen. At a prompt your shell then draws its prompt again, with what you were typing. With a program in front, the line it is on stays and nothing is sent to it. A full-screen program such as vim is left alone, and Opsty says Not cleared: a full-screen program is in front. On a tab that stopped, it also puts out the red cross.
  • Clear Scrollback (⌥⌘K) erases only what has scrolled out of sight; the screen stays.
  • tput reset, reset, printf '\ec' and a test watcher’s rerun, such as vitest’s in watch mode, reset the terminal, and every mark from before goes with the old screen.

A command still running when its output is erased keeps its mark from the top of what is left, and its problem rows go on counting. A test runner that rewrites its summary, from ✗ to ✓, takes the old row’s tint away too.

An erased command is still yours: Run again (⌘⏎) and Copy command work as before, and ⌘↑ and ⌘↓ skip it. Its output is gone, so copying it says Its output was cleared. Your shell’s history and the Running list are not touched.

Which files it changed

While a command runs in a folder on your Mac, Opsty notes the names of the files created, changed or deleted there, from macOS’s file events. An agent’s turns count too. Hover the command’s mark and the end of its row says 12 files changed; click the mark for the list, each file with M, A or D as git status writes them, and Place diff to put git diff -- on your line.

Only names are noted, never contents, and only in memory. Folders macOS guards (Documents, Desktop, Downloads, iCloud Drive), other disks, your home folder itself and top-level system folders are never watched, and nothing is over ssh. Settings ▸ Privacy ▸ Changed files turns it off.

Rewind

View ▸ Rewind (⇧⌘←) opens a timeline under the pane, with commands as ticks and failures in red. Drag along it, or press ← and →, and the pane shows the screen as it was at that moment, read-only, including an agent’s full-screen view that has since been redrawn. esc, or Back to now (esc), returns to now.

The snapshots are kept in memory, within a size limit, and go when the tab or the window closes; nothing is written to disk. Settings ▸ Privacy ▸ Rewind the screen turns it off and drops what was kept.