I built this because I couldn't find a window switching/management solution that worked for me. I tried all kinds of different solutions, virtual desktop extensions, obscure GUI window managers, you name it. Overtime I realized I wanted something that prioritizes one window at a time, is keyboard driven with has minimal if no GUI elements. I figured this part out, but knew something was missing. I had my eureka moment when I realized I could combine my switching method with a prediction algorithm. This led to the creation of Smart Switcher.
Smart Switcher is a data driven window switcher aimed at improving the overall window switching experience. It logs data on your windows switching, then a prediction algorithm analyzes this data and uses it to predict which window you would want to switch to next. When you need to switch windows, you press the switch shortcut to switch to the next predicted window. If this isn't the window you wanted, press the override shortcut to switch to the next most likely window. You can press the override shortcut as many times as needed until you arrive at your desired window.
It’s a paid app with a demo and trial version. There is a introductory discount and some additional discount tiers for early adopters.
Any feedback is appreciated! Thanks!
Personally (as someone with ADHD), this would just relentlessly grind my gears. My thoughts are unpredictable by nature and so I value the "reliability" of knowing my chrome is two alt+tabs away, etc.
If an algorithm started messing with this and changing throughout the day... Damn, I'd go crazy.
From an information perspective, prediction can only be right as frequently as there is redundant data capable of being compressed.
https://www.cs.utexas.edu/~eunsol/courses/data/bitter_lesson...
I've used an auto hotkey script for years that has served me perfectly. I press my shortcut modifier (the right Alt key) and then the letter of the app I want to switch to. For example, Right Alt + C will switch to my code editor VS Code. Right Alt + T will switch to MS Teams.
Repeating key presses will switch through all instances of that app so Right Alt + C, C, C will switch to the third open VS Code window.
The top row can be temporarily assigned to any open window for using on windows I have open that I'm switching to frequently but only while I have work in progress.
The scripts are at https://github.com/dattiimo/ahk-scripts for anyone interested.
I used hammerspoon for something similar, but it worked on the window title. So, I could add custom titles to my chrome/iterm/code windows, and switch by pressing a shortcut and then typing 1-4 letters to match the title. It was my favorite window management UI for my work laptop with an absurd amount of tabs open.
You switch to the app, then use macOS's native window-switching keybind (command+backtick) or App Exposé or etc.
So after switching, they will need a short moment to reorient: understand where they were taken, check if it matches where they wanted to go, and then either switch again or stop the switching process to resume work. In UX design, it's better if you can complete a longer process without having to halt and reorient many times in the process (like opening a menu that was hidden and wait for a loading animation to complete, until you can actually read the menu items are).
If it's impossible to keep a mental model of where you are in the system, and how you can move to another specific window, then actually EVERY window switch requires much more effort and conscious thought.
I think windowing systems, virtual desktops, spotlights, stage managers, exposés, mission controls, are all too complicated... I don't know what the solution is, and I think it's great that people are working on novel solutions. But I do know I want to easily switch between 2-4 windows without the order randomly changing.
The main problem with them is system support, they are buggy when tacked on top of a desktop OS (PaperWM), or require a pretty finicky custom setup (Niri).
I feel like the only predictable workflows are when I'm cycling through N windows repeatedly. Tabbing works great for N=2 already due to reorganizing the list so the first element is always the previous window. But N=3 or 4 and maybe 5 are also common for me and kind of annoying with tabbing. Of course I don't know how predictable those are either, they're annoying to tab because the patterns are almost regular but also have frequent exceptions.
I am sorta talking myself into wanting normal tabbing alongside a browser style forward/back (which would NOT reorder the alt/cmd tab list). That way once I have my N windows as most recent, it's all back/forward navigation and the path to each window is something I would remember for the session.
I did a lot of testing so it’s a fully working version, not a beta. This would just a thank-you for helping out early. You can reach me at hello@aboveaverageuser.com
Thanks everyone!
I wonder, OP, what is it that you dont like about how it just uses your most recent windows in order of last opened?
For those who do try the demo or trial version, or purchase the full version, if you want to take a more active role in providing feedback, you can email me at hello@aboveaverageuser.com.
Alt+tab is an optimal controller.
Maybe operating on the order of items in the queue, and use your prediction to sort windows, allowing faster selection? Even that disrupts sense of place - I know what applications I have open and where they are, and if I'm using alt+tab over 5 or more, I know the order in which I've opened them, and "where" I need to go to navigate to them.
There are second and third order impacts to changing interface behaviors, so the superficial benefit you might gain will be lost by creating friction at different levels.
A single key is insufficient for granular control, and no AI widget short of human level AI is going to capture the edge cases, which will create friction, at which point I will aggressively remove the offending piece of software.
I'd go back to the drawing board and work on a more complex model of window switching and all the ways in which people use alt+tab, and see if there's a use case for your idea at a different level. As it is, for me, it would interfere with a reliable and predictable interface, and I would be very unhappy.
Having to iterate through your windows is not optimal. I use sway, with windows divided across workspaces. So if I want to switch to my web browser I hit super+1. If I want to switch to my code editor I hit super+2. If I want to switch to my terminal(s) I hit super+3. I use 4 through 0 for other random windows (for example, I usually launch games or videos on 0. If I'm working in two code bases I generally put the editor and terminal for the 2nd code base on 4 and 5).
What takes you O(n) takes me only O(1).
Super+h/j/k/l (left, down, up, right) to move focus spatially feels much more natural, given that you can know at a glance which window is to the left of yours but they typically give no indication about whether a window is the 6th most recently touched or the 7th...
cmd + shift + {key} takes me right there
J = Chrome K = Terminal H = 1Password ... etc
Hammerspoon setup: https://github.com/joeyagreco/dotfiles/blob/aab6c4631c4c6b09...
Global maps: https://github.com/joeyagreco/dotfiles/blob/aab6c4631c4c6b09...
(local maps are not version controlled for obvious reasons)
Cmd-Tab on Mac and Alt-Tab on Windows does the same thing every time. Its consistency lets me use it extremely quickly, with confidence. It does what I want it to, every time. I don't wish to sound dramatic, but if I hit a shortcut with a window in mind, and this app picked the wrong window even once, I would uninstall it immediately. "Cmd-Tab, but it doesn't work sometimes" sounds frustrating and strictly worse than the system shortcut.
Maybe it should look more like GitHub Copilot. It watches what you're doing and shows a small indicator somewhere of the window it thinks you want to switch to. If the app guessed right, you hit a keyboard shortcut and switch to it. If the app guessed wrong, you just ignore the suggestion, like with Copilot.
When you begin alt-tabbing, you cycle between your other open windows, arranged by how recently they were last open. Cmd-Tab is the same, but between apps. Both features rearrange items only based on recency, and always keep the same order.
Sounds like tiling window managers like sway or i3. Those don't have any sort of predictive switching but otherwise:
- My window management is done via keybindings
- The status bar is completely optional (personally I use it but there is no *need* to use it)
- I set `hide_edge_borders smart_no_gaps` so if I only have 1 window open in a workspace, it doesn't have any border at all. No titlebar, no close/minimize/maximize buttons, just the window content.
You can also set any number of standard layouts that you like, and toggle through them with Mod-Space. So full screen could be the primary one, two-pane split screen the secondary one, all windows visible be the 3rd one, etc.
And as others have mentioned, using this in conjunction with virtual desktops is quite powerful. E.g. moving windows between desktops is just a key combo and is very quick, so it's easy to switch between full screen and side-by-side of any two tiles just by moving one to the same desktop as the other.
My personal hot take is also that most people who think they really need another monitor are just addressing these symptoms because they're exhausted by alt-tabbing through 15 windows. They would be more productive on a single screen with a nice workspace configuration, though there are of course plenty of good reasons to want multiple monitors.
One way to implement this is to use window manager with one workspace per window (or multiple related windows) and use a single hotkey to switch to it. Very muscle memory efficient and takes no confirmation delay.
Top middle is browser. Bottom left is everything chat and communication. Center left is the editor. Whatever is out of place is mercilessly closed or moved if I'm feeling generous.
I also use a tiling WM (awesomeWM). I tend to keep one window per workspace, and then merely select multiple workspaces if I need to see multiple windows in tandem.
For my work Windows laptop, I've installed a virtual workspace manager.
"I want the primary thing I'm working on to be right in front of me, not all over the place." is exactly why people use tiling window managers. The screenshots where people have dozens of apps all shown on a single monitor are mostly memes or to flex their uncommon layout engine.
I just place windows wherever based on what feels right at that moment. I haven't minimized one in years.
Two windows side by side makes them both too large to be practical. I'd have to get creative enough tiling them I never bothered. We don't tile the papers on our desks either, nobody complains.
Browser? Probably front and center. Chat window? Somewhere in my peripheral vision. If I'm doing a lot of things, I might move some windows over to another virtual desktop.
I would love to see your workflow in action for a real use case, unless your real use case is switching between calculator and paint…