Hold ⌘⌥⌃, tap an app's letter, and it's in front of you — launched first if it wasn't running. A resident macOS tool in ~100 lines of Swift.
✓ No Accessibility permission. No prompts. Ever.One file. No dependencies. No network. MIT licensed.
browser focused.
How it works
01 · bind
A tiny dictionary in the source maps letters to apps: "b" for your browser, "s" for Spotify — whatever mnemonics fit your head.
02 · chord
Three modifiers means it collides with almost nothing — no screenshot shortcuts, no app menus. The daemon sits resident, so it fires in milliseconds.
03 · summon
Running? It's unhidden and focused. Closed? It's launched. Either way, same keystroke — you never think about which state it's in.
The differentiator
App switchers and launchers usually demand the Accessibility permission — the broad one that lets an app control your whole screen. AppFocus doesn't move windows around; it activates and launches whole apps, which macOS treats as ordinary, ungated operations.
Accessibility permission — can observe and control everything on screen
Sometimes Input Monitoring too — reads all keystrokes
Permission upkeep — re-grants after updates, mystery breakage
No permission prompts at all — install to working hotkeys with zero trips to System Settings' privacy list
Public, ungated APIs only — NSWorkspace and NSRunningApplication, the same calls the Dock makes
Rebuild freely — change a binding, recompile, relaunch. Nothing to re-grant, ever
Configure
No preference panes, no dotfiles, no sync. The bindings live at the top of the source — edit, rebuild, done. Find any app's bundle ID with osascript -e 'id of app "Spotify"'.
One source file, ~100 lines. Compiled by you, with Apple's toolchain.
Only Apple frameworks. Cocoa and Carbon — nothing fetched, nothing bundled.
Duplicate letters won't compile. The dictionary itself guards against double-booking a key.
No network, no files, no logging. There's no code path for any of it.
// letter -> app. That's the whole config. let appBindings: [Character: String] = [ "b": "com.brave.Browser", "t": "com.googlecode.iterm2", "o": "md.obsidian", "s": "com.spotify.client", ] // focus if running, launch if not: if let app = running(bundleID) { if app.isHidden { app.unhide() } app.activate() } else { NSWorkspace.shared.openApplication(at: url) }
Install
Needs only Apple's command line tools (xcode-select --install). The README walks through bundling it as a background .app and starting it at login.
# clone, edit your bindings, build git clone https://github.com/Neilos-Thumm/AppFocus && cd AppFocus swiftc appfocus.swift -o appfocus -framework Cocoa -framework Carbon # then follow the README: bundle, launch, login item — no permission steps
And that's genuinely it: no privacy-list visits, no re-granting after rebuilds. Sibling project WindowFocus jumps between named windows inside a browser — the two run happily side by side.