ClydeCLI

oMLX on an 18 GB Mac — what its SSD cache buys

Research note, 2026-10-22. Machine: Apple M3 Pro, 18 GB. oMLX v0.7.2 (mlx 0.32.4, mlx-lm 0.31.4.dev, native Metal kernels built). One run per number.

The headline

After a server restart, oMLX answered a 3,555-token prompt as fast as a warm repeat: its SSD cache tier restored the prompt's KV state instead of recomputing it. That restart case, not a warm repeat, is where it pays: Clyde starts and stops oMLX's server, and an 18 GB Mac evicts models often.

Measurements

Model Parable-Qwen3-4B-Claude-Fable-5-MLX-8bit (Qwen3 4B, 8-bit, 4.2 GB), served from ~/.lmstudio/models through Clyde's own start path, window 8192 (CLYDE_CONTEXT_TOKENS).

RequestFirst token
Cold: SSD and in-memory caches cleared first7.56 s
Warm: the same prompt again1.01 s
After a full server restart0.96 s (101% of the way from cold back to warm)

Peak oMLX resident memory 3.25 GB, swap 0 throughout, memory pressure normal. The cache left 468 MB in ~/.omlx/cache.

Method. The server was started through OMLXProvider._ensure_server() with the balanced memory guard. Both caches were cleared through oMLX's admin API (/admin/api/ssd-cache/clear, /hot-cache/clear) right before the cold request, so an earlier run's cache could not make "cold" look fast. A throwaway request (hi) loaded the model before each timed one, so loading isn't counted. The prompt was the first 15,000 characters of src/agent/agent_loop.py plus a one-word question, streamed with max_tokens 4. First token means the first chunk carrying generated content or reasoning: oMLX streams an empty role chunk before prefill, and timing that one gave a meaningless 0.01 s in an earlier attempt. The restart killed the omlx-server process and started it again through the same path. A watcher checked swap and memory pressure every 2 seconds and would have stopped the run.

The memory guard on 18 GB

GuardCeiling it gave4.2 GB model
safe1.58 GB, with 8.2 GB free + inactiverefused: HTTP 507 "does not fit under the dynamic memory ceiling"
balanced4.1 GB with nothing loaded, rising as neededloaded; numbers above
custom 9 GB9.0 GB fixednot timed; checked that it starts with that ceiling

safe reserves at least 6 GB, so on this machine it needs about 10 GB free before it loads even a 4 GB model. Clyde starts oMLX with balanced and offers the others in /settings.

Other measurements

  • Download through oMLX's own downloader: mlx-community/Qwen3-0.6B-4bit, 351 MB in 14 s.
  • Clyde's installer from a clean folder (pinned source, uv venv, Metal kernels): 33.5 s with uv's package cache warm from an earlier install. A first install downloads 111 packages, so expect minutes.

What this does not show

  • No comparison with LM Studio or plain mlx-lm on this prompt. The lift measured here is oMLX's restart against its own cold and warm runs. For a cross-engine number, Michael Hannecke's comparison (M4 Max, 64 GB, oMLX 0.4.4, 8k-token prefix) found warm prefill and decode a tie, while after a restart mlx-lm recovered 51% of the way to warm and oMLX 97%. That is a different machine and version, not a measurement of ours.
  • One model, one run per number. Directional, not a benchmark.
  • Resident memory comes from ps and undercounts the Metal memory oMLX wires for the model.
  • oMLX's community benchmarks list no M3 Pro results at 18 GB or less, so there is no published number for this machine to check against.

Edit this page on GitHub