True memory, measured right
Tracks phys_footprint, the same number Activity Monitor's Memory column reports — so a holding process can't hide behind collapsed RSS.
Focused · Lightweight · Essential
Halothane watches every process's real memory footprint and gently freezes a runaway before it can swallow your RAM and trigger the dreaded out-of-memory panic. No drama. No data lost.
The reason it exists
Halothane was born from a real incident: a bug in an ACP proxy made an editor balloon past 100 GB, choking the system and triggering macOS's memory-panic screen — the one that force-quits your apps and loses unsaved work.
macOS will happily let a single runaway eat every byte of RAM until the kernel panics. There's no early brake, no "this one process is the problem" — just a sudden, system-wide stall. Halothane is that missing brake: a quiet supervisor that spots the runaway early and freezes only the offender, leaving everything else untouched.
The name is the idea. Halothane is an anesthetic — and that's exactly what the app does: it puts a runaway process gently to sleep with a pause, rather than killing it. When you're ready, it wakes back up right where it left off.
How it works
A tight loop that runs a few times a second, costs almost nothing, and never makes a decision you didn't ask for.
Reads every process's true phys_footprint several times a second — including compressed pages that RSS quietly hides.
When a process crosses your threshold — or grows too fast — you get a calm heads-up in the menu bar and an always-on-top HUD.
If you've opted in, Halothane freezes the runaway and its whole process tree with SIGSTOP. It can't allocate another byte.
Always-on-top HUD
A single floating card lists exactly what needs attention — what's warning, what's paused, and the live footprint of each — with the same one-tap actions everywhere: Resume, Quit, Force-Kill, or Exempt.
Everything you need, nothing extra
Tracks phys_footprint, the same number Activity Monitor's Memory column reports — so a holding process can't hide behind collapsed RSS.
Pauses the offending process and all its children, so a runaway can't dodge the brake by spawning workers.
Catches a fast-climbing process by its rate, not just its size — stopping a leak long before it hits a hard ceiling.
Hooks the kernel's memory-pressure signal. On critical system pressure it pauses the largest non-exempt process automatically.
LLM inference, VMs, and big builds are supposed to be heavy. Exempt them, or set custom thresholds per app.
Auto-pause only ever freezes. Quitting or force-killing a paused app is always a deliberate choice you make by hand.
A privileged helper supervises processes across all login sessions — fast-user-switched accounts included.
A pure, UI-free engine sampling a handful of times a second. It lives in your menu bar and stays out of your way.
Heading into a heavy workload on purpose? Pause monitoring for 15 minutes, an hour, or until you say so.
Clinical calm and reliability. It freezes, never kills — your work is always recoverable.
Effortless performance. One small binary doing exactly one job, exceptionally well.
Everything you need, nothing extra. Sensible defaults, opt-in power, zero noise.
Free & open source. Lives quietly in your menu bar. Ready the moment something goes wrong.