The Mac App Switcher Developers Terminal Heavy Data Engineers Reach for All Day
If your day looks like a VS Code window with a Jupyter notebook open, three iTerm windows running dbt run, airflow scheduler, and psql, a Chrome window split across Snowflake, BigQuery, and a Databricks notebook, a SQL client like DBeaver or TablePlus, plus Slack and a runbook in Notion, then app switching is the most-repeated action you take. A Mac app switcher built for terminal-heavy data-engineering days is not a productivity toy — it is the difference between staying in a query and losing the thread every time a dashboard pings. This page is the honest case for Manico as that switcher.
You already know Cmd+Tab works. The question is whether it still earns its place once your open-app count crossed ten and half of those slots are different terminal sessions and notebook tabs.
Why Cmd+Tab fails the modern mac app switcher workflow for data engineers
Cmd+Tab is fine when three apps are open. It starts leaking time the second your data-engineering workflow has VS Code, iTerm with a long-running pipeline, a second iTerm window for ad-hoc SQL through psql, Chrome with five tabs in two different cloud consoles, DBeaver, JupyterLab, Slack, and a Linear ticket. Cmd+Tab fans those out in a strip ordered by recency, and you hold Tab while your eyes do a linear scan for the icon you want. Miss it, release, try again.
The recency ordering is the sneakiest part. The app you want next is almost never the second-most-recent — it is the one you use structurally every few minutes, the terminal where the pipeline is running, which usually drifts to the middle of the strip exactly because you keep coming back to it. The more apps you have open, the worse the fight gets, and data engineers are the demographic most likely to have fifteen things open at 11am because each pipeline stage wants its own log tail.
Then there is the window problem. Cmd+Tab gets you to iTerm; it does not get you to the specific iTerm window where the airflow scheduler log is scrolling. Cmd+backtick cycles every iTerm window until you recognize the one you wanted, which is exactly the cognitive overhead nobody budgets for in the middle of debugging a failed task.
How Manico fits a data engineer’s hands
Manico is a keyboard-first macOS app switcher built on a single idea: you already know which app you want, so the switcher should not ask you to pick from a list. You assign one letter to each app that matters — V for VS Code, T for iTerm or Ghostty, C for Chrome, D for DBeaver, J for JupyterLab, L for Slack, N for Notion — and from then on, switching is trigger + letter. That is it.
The default trigger is Ctrl+Tab. Hold it, press your per-app letter, release. The target app comes forward. If that app has several windows open — three iTerm windows tailing different logs, two VS Code projects, four Chrome windows on different cloud consoles — Manico shows a compact window picker overlay. Pick the window you want with a key, an arrow, or a number, then Return. One keystroke to the app, one more to the right window. Done.
The muscle memory builds fast. Day one is awkward. By day three your fingers are pre-loading the letter before your eyes have parsed the new alert. By week two the cycling habit is gone and your brain has reclaimed whatever low-watt process used to manage it. Manico lives in the menu bar only — no Dock icon, no background windows — and it uses the Accessibility API the same way Mission Control does, so there is nothing fragile running under the hood.
A starter keymap for a data engineering day
You do not need to assign every app. Most data engineers land on six to ten letters and let Cmd+Tab handle the long tail. A starter layout that works for a lot of folks:
- V for VS Code, with the Jupyter and Python extensions loaded, as the editor of record
- T for iTerm, Ghostty, or Warp — wherever you run
dbt,airflow,python, andpsql - C for Chrome where the Snowflake, BigQuery, and Databricks consoles live, plus the Airflow web UI
- D for DBeaver, TablePlus, or Postico when you need a real SQL client outside the warehouse UI
- J for JupyterLab if you run it as a desktop app, or as a Chrome PWA
- G for DataGrip if you use the JetBrains family
- L for Slack, where most pipeline-failure pings arrive
- N for Notion or your runbook tool, K for Linear if you live in tickets
Pick a letter that maps to something obvious in the app name. When two apps start with the same letter, pick the more ergonomic key. The whole point is that after two weeks you stop thinking about the mapping and your hands just go. Review your map at the end of week one and shuffle anything that feels awkward.
This guide leans into the data-engineering half of the developer day. If you split your time more evenly between web work and infra, the broader app switcher for developers guide covers the IDE-and-Slack triad with the same mechanics.
Honest comparison with Raycast, Alfred, and Spotlight
Data engineers often already have a launcher installed. Raycast and Alfred are excellent tools — clipboard history, snippet expansion, scripts, custom commands, window management. Both can switch apps by typing a name fragment.
The difference is that launchers are optimized for discovery. You trigger, you type, you read, you pick. That is a great paradigm when you do not remember the app name or you want to run a command. It is a slower paradigm when you already know you want iTerm and your fingers know where the T key is. Manico is narrower on purpose: it skips the search step entirely and fires on the first keystroke after the trigger.
Most power users end up running both. Raycast handles commands, snippet expansion, and one-off launches. Manico handles the twenty switches per hour between the same handful of apps. The two tools sit in different lanes and do not conflict as long as their triggers are distinct.
One honest caveat. Manico does not launch apps that are not running. It is a switcher, not a launcher. If DBeaver is quit, press Cmd+Space, type a few letters, press Return — that is the faster path. Manico takes over once the app is open and you need to come back to it dozens of times an hour.
Accessibility permission and hotkey conflicts
Two things to know before you install. First, Manico requires the Accessibility permission in System Settings > Privacy & Security > Accessibility. It uses it to read the running-window list and tell macOS to bring a specific window to the front. It does not capture keystrokes outside its own hotkey listener and never reads screen contents. If your work Mac is managed by IT, check that unsandboxed Accessibility apps are allowed before buying.
Second, Ctrl+Tab is the default trigger and that chord is also bound in VS Code, JetBrains IDEs, and most browsers for tab cycling. If that overlap bothers you, open Preferences and rebind to a chord that is free — Option+Space, Ctrl+Space, a hyper key, or a function key. The per-app letters you assign are independent of the trigger, so rebinding only affects how you open the switcher.
Manico requires macOS 13 Ventura or later. It is sold as a one-time $15 purchase through Paddle, not a subscription. If the keyboard-first model is not what you thought it was, we refund any purchase within fourteen days — email support@mariuti.com.
If this matches how your brain already wants to work, install Manico from the home page or go straight to buy Manico for $15. The ten minutes it takes to assign letters is the best time investment a data engineer can make this month — the muscle memory pays back every time a pipeline finishes and you bounce between three windows to verify the result.
| Criteria | Default Cmd+Tab | Raycast / Alfred | Manico |
|---|---|---|---|
| Switch to terminal mid-pipeline run | Hold Cmd, tap Tab N times | Trigger + type "iter" + Return | Trigger + T (one key) |
| Jump to a specific notebook window | Cmd+backtick roulette after the app switch | List of windows after search | Window picker after the app key |
| Multi-monitor SQL review | Activates last-used Space | Activates last-used window | Activates the right window on its display |
| Snowflake tab in browser vs DBeaver desktop | Treats the browser as one slot | Both indexed by name | Pin browser to C, DBeaver to D |
| Cost scales with open apps | Yes (linear with apps) | No (fuzzy matches stay fast) | No (one key stays one key) |
| Has to read a list before acting | Yes (icon strip) | Yes (result list) | No (fires on keypress) |
| Conflicts with VS Code Ctrl+Tab editor cycle | Rarely | Rarely (custom trigger) | Default Ctrl+Tab clashes — rebindable |
| Price | Free, built in | Free tier + paid Pro | $15 one-time |
Frequently asked questions
Does Manico work with Jupyter notebooks and VS Code Notebooks?
Yes. Notebooks live inside their host app — JupyterLab inside a browser tab, .ipynb files inside VS Code or PyCharm — and Manico switches at the app level. Pin V to VS Code and the notebook window comes forward like any other editor file. If you run JupyterLab in Chrome or Safari, pin that browser to C or S and use the browser's own tab navigation to land on the notebook tab. The window picker shows every open notebook window when the app has more than one.
I run tmux inside iTerm with eight panes. How does Manico see that?
Manico sees iTerm as one application with however many top-level windows you have open. It does not split the picker by tmux pane — that is invisible to the macOS Accessibility API. In practice this is the right behaviour: pin T to iTerm, jump back to whichever window is running your dbt run or airflow scheduler, then use your tmux prefix to move between panes. One layer for app switching, one layer for terminal multiplexing.
Ctrl+Tab is bound in VS Code for editor tab cycling. Does Manico steal it?
By default yes, and the fix is one setting. VS Code uses Ctrl+Tab to cycle open editor tabs and Manico's default global trigger is the same chord. Open Manico Preferences and rebind to something free — Option+Space, Ctrl+Space, a hyper key, or a function key all work. The per-app letters you assign are independent of the trigger, so changing it only affects how you open the switcher, not how you reach VS Code.
I have one screen of Grafana dashboards and one for code. Does Manico find the right window?
Yes. Manico uses the Accessibility API to enumerate windows across every Space and every external monitor. When you press a shortcut, it activates the specific window on whichever display it lives on, switching Space if needed. Your dashboard wall stays put; your editor window comes forward on the monitor where you left it. No per-monitor configuration.
What is a sensible starter keymap for a data engineering day?
A common layout is V for VS Code, T for iTerm or Ghostty, C for Chrome (where Snowflake, BigQuery, Databricks, and Airflow UIs live), D for DBeaver or TablePlus, J for JupyterLab if you run it as a desktop app or N for Notion if your runbooks live there, and L for Slack. Six or seven letters covers most of the day, and Cmd+Tab still handles the long tail of one-off windows.
Does it require Accessibility permission, and is that a problem on a managed work Mac?
Yes, Manico needs Accessibility permission to read the window list and activate a specific window. It does not log keystrokes outside its own hotkey listener and does not read screen contents. If your laptop is managed by IT and your MDM blocks unsandboxed Accessibility apps, ask before purchasing — Manico is distributed outside the Mac App Store because the sandbox forbids the window APIs it depends on.
Ready to switch apps at the speed of thought?
Buy Manico for $15