· Now
macOS switches applications. ⌘Tab lands you on an app and leaves you to find which of its six windows you meant. This switches windows: hold ⌥, press Tab, and every window on the desktop you are looking at is a tile with its own title and a picture of itself, most recently used first. Let ⌥ go and you are there. Minimized windows and the windows of hidden applications are in the list too. A switch faster than 100 ms draws nothing at all.
- ⌥Tab and not ⌘Tab, which is the product decision rather than a default. Taking ⌘Tab means switching the system's own switcher off, and that setting outlives whatever set it — uninstall carelessly and the machine has no switcher at all. Both stay, you compare them on the same desktop, and the chord is yours to change once you have.
- Minimized windows looked structurally impossible to list until the reason turned up: leaving the screen rewrites a window's Accessibility subrole to AXDialog. A filter asking for AXStandardWindow cannot see them, nor the windows of a hidden application. AXDialog is accepted only on that evidence, so a dialog genuinely on screen is still refused.
- The list is built CoreGraphics-first. The window server decides which windows exist and in what order — front to back is the most-recently-used order — and Accessibility is asked only about the survivors, for a title and a handle. That keeps the sweep small, and it runs concurrently against a 30 ms deadline, so one wedged application costs 30 ms rather than everybody's turn.
- An empty answer from Accessibility is not an answer. It returns success and no windows for an application plainly holding them, and lists of elements that every later call rejects: six windows on screen and two in the switcher. An application counts as having answered only if a window id could be read out of it; otherwise its windows stay, named by their application and raised at application granularity.
- A screen capture costs 45–50 ms whatever size you ask for, because the price is the round trip and not the pixels. So pictures are taken when a window is focused rather than when the panel opens, and the panel is usually already complete by the time it appears.
- Committing is the modifier coming back up, watched two ways. A local event monitor is the fast path and cannot be the only one — it delivers only while the app is active, activation is asynchronous, and that race is genuinely lost some of the time. A 16 ms poll of the session's flag state backs it, because losing it once means a panel that never goes away.
- The panel is shown 100 ms late on purpose, so a ⌥Tab faster than that switches with nothing drawn at all. It is built once at launch and never closed, only emptied and ordered out: construction costs tens of milliseconds against well under one to show a window that already exists, and the first ⌥Tab must never be the one that pays it.
- No Dock icon, and nothing in the menu bar unless it is asked for. Opening the application is what opens its settings, and the ⇥ icon is in the menu bar for as long as that window is. Told apart by an argument the launch agent passes, because being wrong means a settings window in the face of someone who only logged in.
- The build refuses to ship a log call in the key-handling path: a stray print there is a plaintext keylog, and the launch agent writes stderr to a file. And since swift test runs nothing without Xcode, the tests are a twenty-line harness over the parts that deserve one — the window filter, the switching state machine, the shortcut model.
