Permanent reference · Searoom 0.8.1

Everything Searoom does

What the app actually does, control by control, with the limit attached to each.

Applies to Searoom 0.8.1 on macOS 14 or later, Apple Silicon. This page is updated in the same commit as the version bump, so it describes the shipping release rather than a plan.

Searoom is a menu-bar instrument for watching what a Mac has left while something heavy runs on it. This page is the complete list of what it does. Where a capability has a limit, the limit is stated next to it rather than in a footnote.

If you want the meaning of an individual number rather than the controls around it, that is the metric reference.

The menu bar

The status item is the part of Searoom that is always on screen, so what it shows is a choice rather than a default you have to accept.

Choose up to five metrics, in any order. Settings has an ordered list with add, remove and reorder, plus a live preview of the resulting menu-bar string so the width is visible before it reaches the menu bar. The status item's own Menu Bar submenu toggles the same set; once five are chosen the rest are disabled, so the only way forward is to remove one.

Twenty-five metrics are available.

Every metric the menu bar can show
GroupMetrics
CPUCPU Usage, CPU Pressure
MemoryRAM Used, RAM Free, RAM Free / Used, Memory Pressure
SwapSwap Used, Swap In, Swap Out
ThermalTemperature, Thermal Pressure, Fan Activity
GPUGPU Usage, GPU Pressure, GPU Memory
NetworkNetwork Download, Network Upload, Network Upload/Download
DiskDisk Read, Disk Write, Disk Free
SystemPower, Uptime
Searoom itselfSearoom CPU, Searoom RAM

Two layouts. Stacked puts each label above its value on two small lines, which is roughly 61% of the width of the alternative for the same five metrics. Inline puts label beside value on one larger line. Stacked is the default.

Choosing nothing is a valid choice. An empty selection shows the Searoom mark alone, in a square item. It is the quietest the app gets while still running.

The item does not resize as readings change. Values are padded to fixed column widths in a monospaced face, so a CPU figure moving from 9% to 100% does not shift everything beside it. This is why the menu bar stays still while the numbers move.

Out of the box the menu bar shows CPU Usage, RAM Used and Temperature, stacked.

The dashboard

Clicking the status item opens the dashboard. So does a global shortcut, if you record one.

Ten sections. CPU, Memory, GPU, Thermal, GPU Memory, Disk, Top Processes, Network I/O, Fan and Uptime, and Engine Room. The first six are half-width cards; the last four span the full width.

Reorder them. Drag a card to move it, or use the card order list in Settings, which is the keyboard and VoiceOver equivalent of the same operation. The order is remembered across launches.

Top Processes names the suspects. The five heaviest readable processes by CPU rate and the five by resident memory, refreshed at the sampling interval like the other live readings. Clicking a row selects it and Command-C copies the name; Escape or a click elsewhere releases it. A process can use several cores at once, so its CPU figure can exceed 100 percent, the same unclamped quantity as Searoom's own cost line. The scan is a public sysctl read of the whole process table; sandboxed helpers and other-user daemons that refuse inspection are omitted rather than shown as zero, and the rankings are never written to history, because process names do not belong in stored archives.

Searoom reports its own cost. The last telemetry line always shows Searoom's own CPU, its own RAM, and the current sample interval. It is not optional and it cannot be reordered away, because a monitoring tool that hides its own overhead is asking to be trusted on exactly the point it is least entitled to.

Trends

Seven trend graphs sit inside the cards: CPU, memory, GPU, thermal, GPU memory, disk capacity and network. The memory trend draws two series, the used and compressed ratios, on the same axes.

Hover to scrub. Moving the pointer across a graph reads out the value at that moment. The six primary trends share one synchronized hover, so the pointer over the CPU graph also marks the same instant on memory, GPU, thermal, GPU memory and disk — which is what makes a cause visible next to its effect. The network graph keeps its own hover, because its vertical scale is unrelated.

The scrub snaps to a real retained sample rather than interpolating, so the value under the cursor is one that was actually recorded.

The trend window runs from 15 minutes to 24 hours. The stops are 15 and 30 minutes, then every hour to 24. Settings presents it as a slider that snaps to those stops.

Sampling

One sampler, at a rate you choose. Every whole second from 1 to 10, on a slider. The default is 2 seconds.

There is exactly one timer in the app. Expensive reads are tiered behind it rather than given timers of their own: disk, thermal and GPU are cached behind staggered deadlines of five, six and seven seconds so their cost does not land in one burst, and battery, disk capacity and the process count refresh more slowly still. The rate you pick is the rate of the cheap counters; the expensive ones are deliberately slower.

History

Trends survive a relaunch. History is kept in a bounded ring in memory and written to ~/Library/Application Support/Searoom/history.plist at most once every 60 seconds. Nothing else is stored.

A long window does not cost more than a short one. Windows longer than three hours keep their full span but retain every nth sample rather than every one, capped at 10,800 stored samples. A 24 hour window therefore costs no more memory, disk or scan time than the three hour window does. Nothing changes on screen, because every series is already downsampled to its pixel width before drawing, and the live readings at the top of each card are never thinned.

The command line

Every reading is also available as JSON. The same signed binary is a searoom command with thirteen read-only subcommands: one primed sample, a JSON Lines stream, a derived status, the persisted history, and the machine-readable contracts describing all of it. It is linked on first launch, so it answers in a terminal without being switched on first, and the Searoom CLI switch in Settings turns it off again and remembers that you did.

Coding agents can be taught to use it. Settings installs Searoom's Agent Skill into the folders Claude Code, Codex, Cursor and OpenCode read, individually or all at once: one SKILL.md per agent and nothing else.

It is not a second product: no daemon, no port, no privileged helper, and no network request on any telemetry or documentation command. Live CLI samples are never written into the app's history, so a script cannot pollute the trends. The full contract is the command line reference.

Feedback and input

Trackpad haptics on the controls that have detents: each stop of the sample-rate and trend-window sliders, each time a dragged card would land in a new slot, and each time a chart scrub crosses into the next retained sample. Chart scrubbing is floored at 25 taps a second, because the snapped sample changes about once per pixel column and an unthrottled sweep reads as a buzz rather than a series of detents.

One switch turns all of it off. Every haptic in the app routes through a single gate, so the preference cannot be half-observed. It is on by default, and it is a no-op on hardware without a Force Touch trackpad.

A global shortcut, if you want one. Record any combination in Settings to toggle the dashboard from anywhere. None is set by default.

Keyboard and VoiceOver throughout. Both reorder lists, every slider and every button carry accessibility labels and work from the keyboard. Card reordering has a list-based equivalent precisely so it does not require a drag.

Updates and what leaves the Mac

Nothing leaves the Mac unless you ask. There is no account, no analytics, no crash uploader and no remote configuration. Telemetry and history stay local.

There is no background updater. Check for Updates, in Settings and in the status item menu, reads a version number from a small manifest on this site when you click it. It sends nothing describing the Mac and it installs nothing; if there is a newer version it points you at the release page. Full detail is on the privacy page.

Launch at login is a checkbox, registered through the system service rather than a login item you have to clean up by hand.

Requirements, and what Searoom is not

Scope and limits
ItemDetail
macOS14 or later
HardwareApple Silicon only. Intel Macs are not supported.
PriceFree, MIT licensed, source published
DependenciesNone at runtime. Swift 6 with direct AppKit drawing.
Privileged helperNone. Searoom installs nothing outside the app bundle.

Searoom is not a fan controller. It reads fan speed where the sensor is available and never writes to it.

Some sensors are best-effort. Direct temperature, fan speed and GPU utilization come from interfaces whose availability varies by Mac model and macOS release. Where a reading is unavailable Searoom says unavailable; it never substitutes a zero, because a fabricated zero is worse than an admitted gap. On the M5 Pro generation the package temperature reads directly and is labelled CPU PACKAGE; machines without a readable key fall back to the battery pack, labelled BAT.

Searoom is not a profiler. It answers how much capacity is left and where the contention is, not which line of your code caused it.

Where to go next

The command line reference covers the searoom command in full. The metric reference defines every value named here and the limit on each. Memory pressure and thermal throttling cover the two conditions people most often need to tell apart. The download page has the disk image, the Homebrew one-liner and the checksums.