В письмах поддержки появился шаблон, которого я не ожидал.

«Я запустил длинный инференс на Ollama, закрыл MacBook и ушёл. Когда вернулся через два часа, в чате сгенерировалось только 80 токенов, а Timex ничего не показал за этот промежуток.»

Mac заснул. Локальный LLM заснул вместе с ним. Timex тоже заснул. Три вещи остановились одновременно, и только одна из них должна была.

Если ты запускаешь что-то, что должно продолжать работать с закрытой крышкой — Ollama, LM Studio, MLX, длинную транскрипцию Whisper, ночной рендер, бэкап Time Machine, сборку Docker, SSH-туннель — ты сталкивался с этим. Вот что реально происходит и самый чистый способ это починить без покупки очередного приложения строки меню.

Что macOS делает при закрытии крышки

По умолчанию macOS воспринимает закрытую крышку как сигнал к suspend. Дисплей гаснет. Планировщики CPU паркуются. Радио падают в low-power. Твой ноутбук теперь жрёт меньше ватта вместо пятнадцати. Батарея благодарит. Инференс — нет.

Исключение — официальный «clamshell mode» от Apple: если Mac подключён к внешнему питанию, внешнему дисплею и внешней клавиатуре или мыши, macOS оставляет всё бодрствующим, когда крышка закрывается. Это поддерживаемый путь.

Неподдерживаемый-но-работающий путь — удерживать power assertion, предотвращающий idle sleep. macOS даёт это как публичный CLI:

caffeinate -dimsu

Флаги говорят: предотвратить display sleep (-d), idle sleep (-i), system sleep (-s) и держать бодрствующим даже на батарее (-u). Запусти это в терминале — твой Mac не уснёт, пока ты не нажмёшь Ctrl-C, независимо от крышки. Нет GUI, нет индикатора в строке меню, нет автостопа после завершения задачи — это и делает подход хрупким на практике.

Почему это конкретно важно для локальных LLM

Когда Mac засыпает, контекст GPU и Neural Engine, который использует Ollama / LM Studio / MLX, выгружается. Следующий токен приходит не через 30 мс — он приходит, когда ты снова откроешь крышку. Хуже того, в некоторых конфигурациях контекст Metal инвалидируется и модель приходится перезагружать с диска — это может быть 10–30 секунд для модели класса 70B.

Раздражающая часть — это не проблема «твой Mac медленный». Mac в порядке. Он работает под политикой питания, спроектированной для печати email в самолёте, а не для unattended inference.

Другая раздражающая часть: большинство «stay awake» приложений написаны до того, как локальные LLM стали распространены, и они трактуют предотвращение сна как глобальный тоггл. Либо держишь Mac бодрствующим вечно, либо помнишь выключить. Режима «не давать уснуть, пока эта задача не закончится» нет.

Конфигурации, которые реально работают

1. Внешний монитор + питание + USB-периферия. Это поддерживаемый Apple clamshell. Просто работает. Минус — нужны железо и место. Если живёшь в дороге, это не ответ.

2. Closed-lid с caffeinate(1). CLI работает, но надо помнить запустить до закрытия крышки и остановить после. Mac с удовольствием будет работать всю ночь на полной мощности на батарее, если забудешь. Спроси меня, откуда я знаю.

3. Closed-lid с pmset noidle. Тот же результат, что и caffeinate, чуть другой вызов. Тот же режим отказа из-за забывчивости.

4. Приложение wake-keeper в строке меню. Amphetamine, Lungo, KeepingYouAwake — все оборачивают один и тот же механизм ядра. Хорошие добавляют макс. длительность и триггер «пока это приложение не выйдет». Плохие превращаются в adware. Выбирай аккуратно.

5. Режим Stay Awake в Timex. Это тот, что я выпустил, чтобы решить собственную проблему. Переключай из строки меню — Mac остаётся бодрствующим, пока не выключишь. В строке меню чёткая амбра-плашка, чтобы не забыть, и настраиваемая макс. длительность (60 / 120 / 240 минут), чтобы даже если забудешь, Mac уснул до утра.

Я предвзят. Выбирай, что подходит. Суть: не запускай длинную LLM-задачу с дефолтным поведением закрытой крышки и надеждой.

Walkthrough, заканчивающийся выполнением задачи

Скажем, ты хочешь дообучить маленькую модель за ночь или прогнать длинный batch eval, на AC-питании, с закрытой крышкой.

# 1. Подключи к AC. На батарее + закрытой крышке macOS принудительно
#    усыпит независимо от любого приложения — это ограничение ядра.

# 2. Запусти инференс в tmux, чтобы он пережил разрыв терминала.
tmux new -s eval
ollama run llama3:70b < eval-prompts.txt > eval-output.txt
# Отделись через Ctrl-b d

# 3. Включи Timex Stay Awake (Settings → Stay awake или
#    попап строки меню). Тоггл сохраняется между запусками.

# 4. Закрой крышку. Уйди. Вернись утром.

Mac остаётся бодрствующим. Радио остаётся включённым, если нужно. Контекст Neural Engine остаётся загруженным. Timex логирует всю сессию — открыв крышку, ты увидишь точно, когда сгенерировался каждый вывод.

А что с таймером перерывов?

Всегда следующий вопрос: «Если Stay Awake держит Mac бодрствующим, а таймер перерывов срабатывает каждые 25 минут, я вернусь к стопке из 200 банеров?»

Нет. macOS coalesces банеры, когда дисплей был выключен какое-то время. Увидишь самый последний при открытии крышки, не все. И таймер перерывов уважает ту же idle gate, что и трекинг — когда нет ввода 120 секунд, часы перерыва тоже на паузе. Запусти 6-часовой eval без ввода — не получишь 14 уведомлений. Получишь одно при возвращении, обрамляющее последний активный блок работы.

Оговорка «но моя батарея»

Stay Awake не бесплатный. CPU бодрствует, радио включено, SSD крутится. Модель 70B на полной утилизации Metal будет тянуть 30–50 Вт на батарее. У тебя есть 90 минут, может два часа, прежде чем ноутбук умрёт.

Для чего-либо длиннее часа — подключай. «Optimized Battery Charging» от Apple сохранит батарею здоровой даже на 100 % всю ночь, так что стоимость подключения для длинного прогона по сути ноль.

Другая оговорка — тепло. Закрытая крышка ловит тепло у клавиатуры. Современные Apple Silicon Mac впечатляюще термично, но всё равно спроектированы сбрасывать тепло через поверхность клавиатуры. Если ты гоняешь тяжёлую задачу в clamshell часами на мягкой поверхности (диван, кровать, колени), шасси упрётся в thermal throttling и токены/секунду упадут вдвое. Положи на стол. Поставь на бок, если придётся.

Чем это не является

Это не воркэраунд для нужды в настоящих headless-вычислениях. Если ты гоняешь инференс 24/7 для production-трафика, ответ — Mac mini на полке с pmset -a sleep 0 и твой ноутбук вне картины. Stay Awake на MacBook — для случая, когда хочешь продолжить работать завтра на той же машине, но также хочешь, чтобы она перемолола ночное задание без тебя.

Это и не «трюк, чтобы убрать политику сна Apple». Политика сна правильная для ноутбуков в 2026. Время работы от батареи — ключевая фича. Мы намеренно отказываемся для одного конкретного класса долгих задач. Используй тоггл, когда нужно. Выключай, когда не нужно.

TL;DR

  • Сон закрытой крышки — дефолт и корректен для печати в самолёте.
  • Он неправилен для длинных LLM-задач, ночных рендеров и всего, что должно работать, пока ты не за клавиатурой.
  • Поддерживаемый ответ Apple — внешний дисплей + питание + ввод.
  • CLI-ответ — caffeinate -dimsu, с подвохом обязательной остановки.
  • Ответ Timex — тоггл в строке меню для Stay Awake с жёстким max duration, чтобы не работал вечно.
  • Подключай для всего, что дольше часа. Следи за теплом. Добро пожаловать в мир MacBook-ов, заканчивающих то, что начали.

Если гоняешь локальные модели на MacBook, дай тогглу закрытой крышки шанс. Это часть бесплатного tier — без trial-лимита, без лицензии. 100-часовой cap применяется только к стороне трекинга времени. Купи Timex за $49, когда захочешь ещё и безлимитный трекинг.