The problem
Once I had agents running in several terminals on three machines, I lost the plot. Which session is blocked? What has today cost? Is the Mac’s disk about to fill again? The answers existed, but in five places: Headlines for events, Cronitor for schedules and thresholds, a process tracker for what agents had started, transcripts for spend, the vault for host vitals. Checking all of them was a job in itself.
What I built
Surface is the cockpit: one persistent pane of glass docked to the right edge of the screen. ⌃⌥M slides it in and out. It holds an activity log of agentic actions, a band of pinned headlines at the top, a burn bar of today’s spend, one tab per session, a vitals tile per machine, a Processes screen, and Disk and Memory screens.
It started life as Max Pane. I renamed it Surface, because that’s what it is: a single surface where I see everything agentic worth caring about, processes and system resources included.
How it works
- The activity log, the headline band and the session tabs read Headlines’ event stream. An event that’s blocking and still open makes its session’s tab breathe amber. An event that resolves an earlier one clears its headline.
- The burn bar reads Headlines’ spend rollup. It shows simulated cost (what today’s sessions would cost at API prices) against actual billed spend, grouped by session, billing route or model.
- Host vitals read samples that each enrolled machine writes to the vault on a schedule. A machine that’s expected but silent shows grey with “no reading 17h”. Silence must not read as healthy.
- Processes come from a tracker that only knows about things an agent session started. Stop and Kill go through that tracker, which refuses anything it didn’t record.
- A companion daemon,
diskmapd, scans the disk on tiers — every 30 minutes for build output and fast growers, up to twice a day for a full scan — then a small model sorts directories between tiers. Only fixed rules can call a directory lossless or rebuildable; the model may move things between tiers and nothing more.

Decisions worth noting
It shows; it never decides. Cronitor keeps thresholds, the process tracker keeps the process tree, Headlines carries events. Surface displays all of them and never re-decides what counts as bad. A vitals tile shows levels only; a threshold crossing reaches the pane as a headline from the system that owns the threshold.
It never fetches from your service. If the pane needs something, it belongs in an event. That keeps every producer ignorant of the pane and keeps the pane from growing a dozen bespoke integrations.
A panel that never takes focus. The window is a non-activating macOS NSPanel: on every Space, over full-screen apps, and it doesn’t steal the keyboard from the terminal I’m typing in. When I do want to drive it, it takes keys on show — j/k to move, p to pin, a to acknowledge (never to answer a blocking question), s to snooze, / to search.
No bundler, no front-end dependencies. The page is plain HTML, CSS and JavaScript inside a Tauri shell. A headless-Chrome test drives the real app.js through keyboard, search, filters, bursts, snooze, pins and the Escape order.
Where it fits
Surface is a viewer: it produces no events. It reads Headlines (events and spend), the vault (the gauges each machine records), and the process tracker; Cronitor’s threshold crossings arrive as headlines. Machines join by running a node-enroll skill. It carries live menu-bar icons for Loop and Mac the Reaper and opens each one’s own app. Its disk maps are the input Mac the Reaper reaps from: Surface measures, Mac the Reaper deletes.
Outcome
The screenshot shows why it earns its corner of the screen. The burn bar reads about $358.55 of usage at API prices for the day, all but a few cents of it covered by my subscription and $0.00 actually billed. The Mac’s disk sits at 99%, Flex hasn’t reported in 17 hours, and Tower has one unhealthy container. Without the pane, that’s four places to look. With it, it’s one glance, and the disk number is what Mac the Reaper works from.