Если окно Finder, Telegram или любого другого приложения на маке постоянно теряет фокус и тут же получает его обратно, а работать с ним невозможно – попробуйте в терминале:
killall WindowManager
macOS сразу запустит процесс заново: окна не закроются, выходить из системы не нужно. Ниже – подробнее и о том, как я до этого докопался.
Как это выглядит
Открываю Finder на рабочем столе – и не могу ничего сделать. Окно получает фокус, теряет его, снова получает, как будто кто-то сидит рядом и раз в секунду жмёт Cmd+Tab, перекидывая фокус между окном и рабочим столом. Клики не проходят, текст не печатается. С Telegram, к слову, то же самое.

Реконструкция, не запись экрана: баг уже вылечен. Окно переключается в тех же интервалах, что и в настоящем логе.
Ловлю это уже не первый месяц. Раньше помогала перезагрузка, и руки разобраться, честно говоря, так и не доходили.
Где воспроизводилось у меня:
- macOS 26.6 (Tahoe);
- включён Stage Manager;
- «Показывать рабочий стол по клику на обои» стоит по умолчанию, «Всегда».
Как лечить
killall WindowManager. WindowManager – системный процесс, который отвечает за Stage Manager и показ рабочего стола; после killall система поднимает его заново примерно за секунду.
Если баг возвращается, в Системных настройках → Рабочий стол и Dock поставьте «Показывать рабочий стол по клику на обои» → «Только в Stage Manager». То же советуют в вики yabai: без этой настройки у них ненадёжно работает переключение фокуса.
Можно и просто выключить Stage Manager – в сети чаще всего советуют именно это. Но мне он нужен, так что вариант не мой.
Сколько процесс уже работает, можно посмотреть так:
ps -o etime= -p $(pgrep -x WindowManager)
У меня WindowManager висел 40 дней без перезапуска. Что дело именно в аптайме, я не доказал – это пока один случай. Но после перезапуска мигание пропало сразу.
Как я это нашёл
Итак, сначала я был уверен, что виноват мой код. Я пишу десктопное приложение на Electron, внутри которого AppleScript и tell application ... to activate, и версия напрашивалась сама собой: при закрытии где-то не снимается обработчик, и он продолжает дёргать фокус.
Отдал проект Claude Code поресерчить. Код он посмотрел, но гадать по нему дальше не стал и написал маленький Swift-скрипт, который каждые 100 мс пишет в лог, какое приложение macOS считает активным (NSWorkspace.frontmostApplication) и чьё окно сейчас на самом деле сверху (CGWindowListCopyWindowInfo). События активации приложений тоже логируются.
Я воспроизвёл баг, и в логе было вот что:
12:16:47.422 front=Finder topwin=Finder(679)
12:16:47.517 front=Finder topwin=WindowManager(665)
12:16:47.619 front=Finder topwin=Finder(679)
12:16:47.718 front=Finder topwin=WindowManager(665)
12:16:47.818 front=Finder topwin=Finder(679)
12:16:47.921 front=Finder topwin=WindowManager(665)
...

Тот же лог, проигранный в реальном темпе: до и после killall WindowManager.
Активное приложение всё время – Finder, и ни одного события активации. Значит, никто фокус не крадёт и Cmd+Tab тут ни при чём. А вот верхнее окно примерно десять раз в секунду меняется: то окно Finder, то окно процесса WindowManager.
Моего приложения в логе не было вообще. После killall WindowManager я замерил ещё раз – всё чисто. Окно WindowManager мелькает на долю секунды при переключении приложений, но это обычная анимация Stage Manager.
Про AI. Ответа он не знал, и по ходу ещё и раздул одну проблему в моём коде, а потом сам же её опроверг. Зато сразу полез измерять. Такой скрипт на 30 строк я бы и сам написал… но, честно, не стал бы – перезагрузился бы в очередной раз и забыл.
Очевидные вещи не всегда очевидны.
Как проверить у себя
Если у вас похожее мигание и непонятно, тот ли это баг, вот скрипт. Он же лежит в gist. Для сборки нужны Xcode Command Line Tools (xcode-select --install).
// focuswatch — logs app activations and the topmost window to catch focus flicker on macOS.
// Build: swiftc -O focuswatch.swift -o focuswatch
// Run: ./focuswatch | tee focus.log (Ctrl+C to stop)
import AppKit
setvbuf(stdout, nil, _IOLBF, 0)
let fmt = DateFormatter()
fmt.dateFormat = "HH:mm:ss.SSS"
func ts() -> String { fmt.string(from: Date()) }
// 1. Who becomes the active app, and when.
NSWorkspace.shared.notificationCenter.addObserver(
forName: NSWorkspace.didActivateApplicationNotification, object: nil, queue: .main
) { n in
let app = n.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication
print("\(ts()) ACTIVATE \(app?.localizedName ?? "?") pid=\(app?.processIdentifier ?? -1)")
}
// 2. Whose window is actually on top (layer 0 = normal windows), sampled every 100 ms.
var last = ""
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
let opts: CGWindowListOption = [.optionOnScreenOnly, .excludeDesktopElements]
guard let list = CGWindowListCopyWindowInfo(opts, kCGNullWindowID) as? [[String: Any]] else { return }
let top = list.first { ($0[kCGWindowLayer as String] as? Int) == 0 }
let owner = top?[kCGWindowOwnerName as String] as? String ?? "-"
let pid = top?[kCGWindowOwnerPID as String] as? Int ?? -1
let front = NSWorkspace.shared.frontmostApplication?.localizedName ?? "-"
let line = "front=\(front) topwin=\(owner)(\(pid))"
if line != last { print("\(ts()) \(line)"); last = line }
}
RunLoop.main.run()
Что смотреть в логе:
topwinпрыгает между вашим окном и WindowManager, аfrontстоит на месте. Это тот самый баг, помогаетkillall WindowManager.- Появляются строки
ACTIVATEс каким-то приложением. Тогда фокус действительно забирает приложение, и в логе будут его имя и pid. По отзывам часто виноваты Logitech G HUB, Grammarly и утилиты с доступом к Accessibility. - В логе ничего не меняется, а фокуса всё равно нет. Это похоже на соседний баг, «phantom focus», когда фокус уходит в никуда. Там советуют перезапускать Dock или выходить из системы.
Что об этом пишут
На то, что Stage Manager «ворует фокус», жалуются давно: с Ventura, где появился WindowManager, и до Tahoe. Но жалобы раскиданы по разным форумам под разными названиями, и совет почти везде один: выключите Stage Manager.
- Stage Manager stealing focus when switching from Safari. Apple Community, Sequoia. Самое похожее на мой случай: автор тоже своим скриптом увидел, что фокус у WindowManager.
- Stage Manager windows flicker. Apple Community, окна мигают при переключении между Finder и Настройками.
- Phantom Focus. Apple Community, тот соседний баг, где фокус пропадает.
- Вики yabai, про настройку клика по обоям.
Разбора, где кто-то смотрел на порядок окон и заметил, что активное приложение при этом не меняется, я не нашёл. killall WindowManager тоже почти нигде не предлагают как лечение. Обычно его выполняют, чтобы применились настройки после defaults write.
Я отправил это в Apple: FB25381630. Если поймаете такое у себя, заведите свой отчёт в Feedback Assistant (open -a "Feedback Assistant") и укажите, что он похож на FB25381630. Так Apple увидит, что баг не единичный.
И напишите мне, сколько у вас прожил WindowManager: хочется понять, правда ли дело в аптайме.
ПС. Забавно, что всё это время я подозревал собственный код – а он оказался единственным в этой истории, кто ни при чём.