Timex 1.6.0 вышел 5 октября без поста о релизе. Из двух версий она была крупнее и заслуживала его. Timex 1.7.0 вышел вчера и добавляет одно: теперь Timex обновляется сам. Этот пост охватывает обе версии и начинается с единственного шага, который тебе нужно сделать.

Эту версию поставь вручную

В копиях старше 1.7.0 нет механизма обновления, поэтому сами они этот релиз не найдут. Поставь 1.7.0 один раз: скачай её или выполни brew upgrade --cask muvon/tap/timex. Укажи cask явно. Обычный brew upgrade пропускает casks, которые обновляются сами, а cask Timex помечен так с самого создания. Твои данные остаются на месте, в том же локальном файле SQLite.

Начиная с 1.7.0 Timex раз в день проверяет gettimex.app и скачивает новую версию в фоне. Устанавливает он её, когда ты закрываешь Timex. Приложение в строке меню закрывают редко, поэтому установка случится и тогда, когда ты отойдёшь от Mac на 10 минут или на заданный тобой порог простоя, если он больше. Timex не ставит обновление, пока на экране перерыв или предупреждение о нём, во время фокус-сессии и пока отслеживание на паузе. Затем Timex перезапускается. При закрытии он сначала записывает открытый отрезок в базу, так что перезапуск ничего не теряет.

В Settings → General → Updates два переключателя, "Check for updates daily" и "Download and install updates automatically", и кнопка "Check for Updates…". Тот же пункт есть в меню по правому клику на значке в строке меню и в меню приложения. Если выключить автоматическую установку, найденное в фоне обновление подождёт в панели как "Update to Timex …", а не всплывёт окном за приложением, в котором ты работаешь.

Проверка скачивает фид с gettimex.app. Она не отправляет ничего ни о тебе, ни о твоей активности; в запросе есть только версия Timex. Sparkle, механизм обновления в Timex, проверяет подпись каждого обновления перед установкой.

Лицензия задаёт одно ограничение. Лицензионный ключ покрывает Timex до определённой основной версии, и Timex не ставит обновления дальше неё. Ежедневная проверка молча пропускает такую версию; проверка, которую ты запускаешь сам, сообщит, что это платное обновление. Пробная копия принимает любое обновление. Даже если лицензия покрывает новую основную версию, Timex спросит, прежде чем её ставить.

Если твоя копия из Mac App Store, всё это к ней не относится. В той сборке механизма обновления нет вообще, её обновляет App Store.

Перерывы, которые ждут удобного момента

До 1.6 окно перерыва появлялось по расписанию, посреди звонка или на полуслове. Теперь назревший перерыв ждёт удобного момента. Это Smart timing в Settings → Breaks, и он включён по умолчанию. Во время звонка перерыв ждёт его конца и ещё минуту. Если впереди полноэкранное приложение или презентация, он ждёт до 10 минут. Пока ты печатаешь, он ждёт трёхсекундной паузы, но не дольше минуты. Во время звонка не появляется и предупреждение, так что оно не попадёт в демонстрацию экрана. Вне расписания отслеживания напоминания тоже стоят на паузе.

Предупреждение о перерыве теперь кликабельно. "+5 min" сдвигает перерыв на пять минут, "Start now" начинает его, а кнопка закрытия прячет предупреждение, но перерыв всё равно придёт вовремя. В окне перерыва тоже есть "Postpone 5 min", но только пока ты ничего не отметил, и отложенный перерыв не считается сделанным. На один перерыв даётся два откладывания. Бесконечное откладывание превращает напоминание в то, что привыкаешь смахивать.

Новое меню рядом со статусом перерыва в панели даёт остальное: отложить следующий перерыв, пропустить его, поставить напоминания на паузу на час или до завтра и снова их включить. Длинные перерывы — новая и необязательная функция: один из каждых двух–шести перерывов, от 5 до 30 минут, по умолчанию 15, с четырьмя упражнениями вместо трёх. Они выключены, пока ты не выберешь ритм.

Фокус-сессии

То же меню в панели запускает фокус-сессию на 25, 50 или 90 минут. В строке меню вместо текущего приложения идёт обратный отсчёт, а в панели есть "+5 min" и "End".

Перерывы ждут, пока сессия не закончится. Если она дошла до конца и напоминания о перерывах включены, следом идёт перерыв. Если закончить раньше, время сохраняется, а перерыв не навязывается. Во время сессии Timex присылает уведомление после двух минут в категории, которую ты отметил как отвлекающую, даже при выключенных оповещениях и не чаще раза в 30 минут.

Паузу отслеживания теперь тоже можно ограничить по времени. Кликни правой кнопкой по значку в строке меню, выбери Pause tracking и укажи 15 минут, час, до завтра или до ручного возобновления. Пауза со сроком заканчивается сама, так что забытая пауза не съест остаток дня. У MCP-клиентов есть соответствующие инструменты: start_focus_session, end_focus_session, snooze_break, pause_break_reminders и get_break_status, а pause_tracking принимает число минут.

Проекты

Категории описывают, какой была работа. Проекты описывают, для чего она была: клиент, организация, продукт. Это независимые вещи, поэтому один и тот же час может быть и Development, и «Клиентом А».

Правило проекта ищет текст в заголовке окна или в URL без учёта регистра. Оно может работать в одном приложении или во всех, а может забрать приложение целиком. Кликни правой кнопкой по заголовку окна в Today и выбери "Add to project…" или кликни правой кнопкой по приложению и выбери "Add app to project…". Проект можно создать в том же окне. Список хранится в Settings → Projects. Если подходят несколько проектов, побеждает тот, что выше в списке; порядок меняется перетаскиванием. Правила действуют и на прошлое время, так что правило, написанное сегодня, разложит и прошлую неделю. Ручным записям тоже можно назначить проект.

Как только появится хотя бы один проект, в Today будет разбивка Projects, а Unassigned окажется последней строкой. Кликни по проекту, чтобы включить фильтр: итог в заголовке и список приложений сузятся до него, а временная шкала приглушит всё остальное. Кликни ещё раз, чтобы снять фильтр.

В экспорте CSV и JSON проектов пока нет, и MCP их не видит. Если ты выставляешь счета по проектам, итоги видны в Today, но выгрузить их по проектам пока нельзя.

Energy подстраивается под тебя

Пост о 1.5.0 заканчивался планом калибровать Energy по твоим собственным оценкам. В 1.6 это появилось, и модель поменялась настолько, что часть того поста уже устарела. Energy по-прежнему оценка запаса, а не показатель здоровья.

Ползунка запаса больше нет; если ты его двигал, эта настройка больше не действует. Запас начинается с четырёх часов сложной работы и медленно подстраивается под твою недавнюю нагрузку, не дальше чем на 10% в любую сторону. Он смотрит на последние 14 дней и учитывает только дни со сложной работой. Today показывает запас, как только он отходит от четырёх часов.

Обратная связь необязательна. У уведомления "Today's demanding-work allowance is used" теперь две кнопки: "Still have energy" и "Out of energy". "Out of energy" уменьшает запас на 2% за каждый день за последние две недели, когда ты так ответил, но не больше чем на 20%. "Still have energy" учитывается только после действительно насыщенного дня, и обратная связь может поднять запас максимум до пяти часов. В Today также есть Energy check-in с двумя вопросами: насколько ты сейчас устал умственно и насколько сложным был последний рабочий блок. Timex предлагает его не чаще двух раз в день, с промежутком в 90 минут, а "Later" убирает предложение.

Оценка сложности учит Timex твоим категориям. Каждая оценка относится к категории, которая преобладала в предыдущий час, и сдвигает её нагрузку к твоим оценкам; полный вес набирается после восьми. Оценка меняет модель с этого момента. Прошлые дни она не переписывает.

Ввод теперь учитывается в трёх режимах. Нажатие клавиши за последние 10 секунд считается полностью. Мышь или трекпад без набора текста — на три четверти. Отсутствие ввода дольше 10 секунд — наполовину; в 1.5.0 порог был 30 секунд. После восьми оценённых рабочих блоков Timex может выучить твои собственные коэффициенты для мыши и тишины и поправку на время суток. Он применяет их, только если они предсказывают твои последние оценки хотя бы на 10% лучше значений по умолчанию.

Звонки определяются уже. В 1.5.0 любое приложение с включённым микрофоном делало время High. Теперь звонок — это микрофон в Zoom, Microsoft Teams, FaceTime, Slack или Discord либо в браузере на странице встречи Google Meet, Teams или Zoom. Диктовка и голосовые заметки больше не считаются High.

Отдых работает иначе. В 1.5.0 перерыв мог убрать только усталость текущего отрезка. Теперь время вдали от Mac снимает и дневное напряжение, медленно, с периодом полураспада четыре часа: час вдали убирает около 16%. Вдали — значит заблокированный экран, сон, тишина дольше твоего порога простоя, перерыв Timex или отмеченное тобой восстановление. Пауза отслеживания, исключённые приложения и время вне расписания отдыхом не считаются. 90-минутный отрезок по-прежнему восстанавливается с периодом полураспада 10 минут, а check-in до и после перерыва может уточнить его для каждого вида восстановления. Nap больше не сбрасывает отрезок мгновенно: он восстанавливает постепенно, как и любой другой отдых. Workout больше не добавляет запас.

Перенос стал меньше. Вчерашний перерасход теперь считается по напряжению, которое у тебя ещё оставалось, когда ты закончил работать, а не по сырым минутам. Применяется четверть от него, не больше 10% запаса, и check-in может скорректировать оба значения. Отрезок, который переходит через полночь, остаётся одним отрезком: полночь делит отчёты, а не работу. Многодневный график теперь считается так же, как карточка в Today, поэтому они совпадают.

Цели, напоминания и итоги недели

Оповещения по-прежнему выключены, пока ты их не включишь. В Settings → Alerts → Goals & nudges появилась дневная цель фокуса: от одного до шести часов в категориях, которые ты отметил как фокусные. Когда цель достигнута, приходит одно уведомление. Напоминание об отвлечении, если ты его настроишь, придёт после 10–60 минут подряд в отвлекающих категориях, не чаще раза в 30 минут: "Still what you meant to do? No judgment, just a check-in."

Итоги недели приходят в первый день твоей недели в 9:00. В них отслеженное время прошлой недели, Focus Score и часы фокуса в сравнении с позапрошлой неделей. Они включаются вместе с оповещениями. Ежедневная сводка теперь показывает ещё прогресс к цели, сделанные и пропущенные перерывы и фокус-сессии.

Хранить меньше, выгружать больше

В Settings → General появилась настройка "Keep window titles & URLs". По умолчанию стоит Forever. Выбери 7, 30, 90 или 365 дней, и Timex будет автоматически стирать более старые заголовки и URL. Приложения, сайты, категории и итоги остаются, а строки, совпавшие с правилом по ключевому слову, сохраняют свою категорию и проект. В резервных копиях старые данные живут ещё до семи дней.

В экспорте появился подробный журнал в формате JSON. Экспорт CSV теперь обезвреживает ячейки, похожие на формулы электронной таблицы: иначе заголовок окна вроде =HYPERLINK(...) сработал бы как формула при открытии файла.

Кроме того, Timex меньше работает в фоне. Окно Today обновляется только пока его видно, а панель перестаёт обновляться, как только закрывается. Отслеженное время записывается каждые 30 секунд вместо пяти и ещё раз при закрытии приложения. Зависшее приложение больше не замораживает Timex на несколько секунд.

Исправления

Когда тишина превышает порог простоя, запись теперь заканчивается на твоём последнем вводе. Раньше она шла, пока не срабатывал порог, поэтому при стандартных двух минутах каждый уход добавлял около двух минут, когда тебя не было. Итоги могут стать немного меньше.

Stay awake теперь держит ещё и системную блокировку сна (power assertion) — ту же, что берёт caffeinate -s, — поэтому Mac на питании от сети продолжает работать с закрытой крышкой, как описано в посте о работе с закрытой крышкой. До 1.6 этой блокировки не было, а одна лишь блокировка сна при простое закрытую крышку не покрывает. От батареи macOS по-прежнему засыпает, когда ты закрываешь крышку.

Панель открывается и работает поверх полноэкранного пространства другого приложения. Исправлен сбой в macOS 26, когда панель меняла высоту, будучи открытой. Спиннеры и значки статуса, которые терминальные инструменты ставят в заголовок окна, больше не дробят одну сессию на множество строк. Окно перерыва закрывает и дисплеи, подключённые или отключённые посреди перерыва. Если сократить интервал между перерывами, перерыв больше не начинается сразу.

В 1.7.0 проверка лицензии, которая не смогла связаться с сервером, больше не деактивирует лицензию. Это делает только явный отказ сервера лицензий.

Чего он по-прежнему не различает

Timex всё ещё не отличает чтение от ожидания. Определение звонков охватывает перечисленные выше приложения и страницы встреч; любой другой звонок считается по нагрузке своей категории. Energy теперь учится на твоих оценках, но это грубые самоотчёты. По нескольким оценкам Timex вносит лишь небольшие поправки, а крупные сначала проверяет на более поздних оценках. Это отсекает часть шума. Сон, болезнь и все различия между двумя задачами это не учитывает. Если оценка не совпадает с твоим самочувствием, ошибается по-прежнему оценка.

Вот и 1.6 с 1.7. Всё ещё один локальный файл SQLite. Всё ещё без аккаунта и телеметрии; ежедневная проверка ничего о тебе не отправляет. Timex требует macOS 15 или новее и Apple Silicon. Если это твой Mac, скачай свежую версию. Её ты скачиваешь вручную в последний раз.

— DK