App rules
Hide individual apps from the switcher, or pass Command-Tab straight through to them.
Most filtering settings are global. appExceptions is the escape hatch for the one
app that needs to behave differently — a menu-bar utility you never want listed, or a
game that needs ⌘Tab for itself.
In the settings window this is the Apps pane. In config.json it is an array of
objects, one per app:
{
"appExceptions": [
{ "bundleID": "com.apple.ActivityMonitor", "hide": "whenNoWindows" },
{ "bundleID": "com.valvesoftware.steam", "ignore": "whenFullscreen" },
{ "bundleID": "com.some.menubarapp", "hide": "always" }
]
}An app with no entry follows the global settings. Both hide and ignore are
optional — an entry can set either or both.
Finder is seeded for you
On a first launch with no rules yet, BetterCmdTab writes one entry itself:
com.apple.finder with hide: "whenNoWindows". Finder never really quits, so without
it every switcher would carry a permanent Finder row. Delete or change the entry freely
— it is only a starting default, not re-applied afterwards.
Fields
Per-app rules. An app with no entry follows the global settings.
| Field | Type | Description |
|---|---|---|
bundleID required | string | Bundle identifier of the app this rule applies to. |
hide | string | Whether this app is hidden from the switcher.
|
ignore | string | Whether the switcher shortcut is passed through to this app instead of opening the panel.
|
Finding a bundle ID
osascript -e 'id of app "Safari"'
# com.apple.SafariOr read it straight out of the bundle:
mdls -name kMDItemCFBundleIdentifier -r /Applications/Safari.apphide vs. the global filters
hide is evaluated on top of the global contents settings, and it only ever removes
entries. If showWindowlessApps is already off, an
app with no windows is absent whether or not it has a whenNoWindows rule.
"dontHide"— the default. The app is listed like any other."whenNoWindows"— listed while it has an open window, hidden when it doesn't. Good for apps that keep running in the background with nothing on screen."always"— never listed. Use it for helpers and menu-bar-only apps that show up as switchable but aren't.
Hiding an app does not stop it from running, and does not remove it from search
results if it is installed and
searchIncludesLaunchableApps is on.
ignore: passing ⌘Tab through
ignore decides what happens when the switcher shortcut is pressed while that app
is frontmost. Instead of opening the panel, the keystroke is handed to the app.
"never"— the default. The switcher always opens."whenFullscreen"— the app gets ⌘Tab only while it is fullscreen. This is the setting you want for games and remote-desktop clients: normal windowed use keeps the switcher, fullscreen sessions get the raw keystroke."always"— the app always gets ⌘Tab. Reserve this for a virtual machine or remote session that has its own task switcher.
With "always" there is no way to switch away using ⌘Tab while that app is focused —
that is the point of the setting, but it means you need another route out (a scoped
shortcut, an app hotkey, or Mission Control). Prefer "whenFullscreen" unless you
are sure.
Related keys
Two other lists take bare bundle IDs and are simpler than appExceptions:
pinnedBundleIDs— apps kept at the front of the switcher, in the order given.hideAllExcludedBundleIDs— apps the "hide all windows" shortcut leaves alone.
{
"pinnedBundleIDs": ["com.apple.Safari", "com.googlecode.iterm2"],
"hideAllExcludedBundleIDs": ["com.spotify.client"]
}excludedBundleIDs is the superseded predecessor of appExceptions. It is read only
on a launch that has no appExceptions key at all, where its bundle IDs become
hide: "always" entries. On any install that already has appExceptions — which is
every install after the first launch — it is ignored, and it is never deleted from the
file. Set appExceptions directly.