Resource governor
Several agents, each with its own builds, test runners and language servers, can exhaust a machine. The governor measures what every terminal panel is using and acts before macOS does. It never kills a process without asking.
What it measures
Every two seconds, off the main thread, the governor walks each terminal panel's process tree: the shell and every process below it, up to 512 processes. For each process it reads the physical memory footprint (the figure Activity Monitor and the kernel's memory killer use) and CPU time. The totals appear as a badge in the panel's title bar, for example 1.2G 140%. CPU is a percentage of one core, so it can exceed 100. The badge turns amber when a tree uses 2 GiB or more, or 300% CPU or more.
A process counts as an agent if it is the claude process in the panel's foreground, or its executable is named claude, or its path contains claude-code.
Pressure levels
The governor combines the kernel's memory pressure level, the share of RAM in use (active, wired and compressed memory), the thermal state and Low Power Mode into one of three levels:
| Level | When |
|---|---|
| Normal | None of the conditions below. |
| Under pressure | Kernel memory pressure at warning, thermal state serious, Low Power Mode on, or 92% or more of RAM in use. |
| Critical | Kernel memory pressure critical, or thermal state critical. |
The level rises immediately and falls only after five seconds at a lower level.
Held launches
Every Claude launch from Smalti goes through the governor: Claude Here, resuming a session, and Claude Here in the sidebar. A launch starts immediately only if the level is Normal, fewer than 10 agents are running, nothing else is queued, and you have not turned on Hold all new launches. Otherwise it is queued and a message gives the reason, for example "Launch held: Memory pressure. It starts when things calm down."
When conditions allow, queued launches start one at a time, at least four seconds apart. The N held chip at the bottom left of the canvas opens a list of queued launches with Start now and Cancel for each. The palette has Hold New Agent Launches and Release Held Launches. The hold and the queue are not saved when the app quits.
Pausing a runaway process
At the Critical level only, the governor looks for the largest subtree of 2 GiB or more that is not a shell, not an agent, and has no agent below it, typically a build or a test run. It pauses that subtree with SIGSTOP and shows a banner naming it and its size. Pausing stops the memory growing but does not free it.
- Resume sends
SIGCONT. The process is then left alone for two minutes. - Kill sends
SIGKILL, which frees the memory.
Claude itself is never paused, only one subtree is paused at a time, and nothing is killed unless you press Kill.
During calls
When the microphone or a camera is in use, agent panels you are not looking at run at background priority, as with taskpolicy -b. Normal priority returns when the call ends. Smalti only checks whether the devices are in use; it does not access audio or video. macOS may ask for microphone and camera permission for this check.
The status chip
The chip at the bottom left of the canvas shows a coloured dot for the level, the share of memory in use, and the number of agents running, with icons when a call or high temperature is affecting the policy. Clicking it shows the level, the reason launches are held if they are, and the hold switch.
Limits
The thresholds are fixed in this version and have no settings. Only processes inside terminal panels are measured or signalled; agents started in other terminal apps are not.