← Back to Writing
macOS Developer Tools Swift SwiftUI Productivity AI Agents

Air Traffic Controller: The Right Browser, The Right Profile, Every Time

June 10, 2026 · 5 min read

Air Traffic Controller: the right browser, the right profile, every time

If you do serious work on a Mac, you almost certainly run more than one browser, and more than one profile inside them. A work Chrome profile signed into the company Google Workspace. A personal Chrome profile for everything else. Arc or Safari for reading. Maybe a locked-down profile for a single client engagement. Each one holds a different identity, a different set of logged-in sessions, a different set of tabs.

Then you click a link in Slack, and macOS throws it at one browser, the single system default, with no idea which identity it should belong to. So begins the daily ritual: the link opens in the wrong place, you copy the URL, switch to the right browser, switch to the right profile, paste, and carry on. A dozen times a day. It is a small tax, but it compounds, and worse, it routinely leaks the wrong identity into the wrong context.

Why the default-browser model breaks down

macOS treats "default browser" as a single global choice. That made sense when a browser was one window with one identity. It stopped making sense the moment browsers grew profiles, separate, sandboxed identities living inside the same app. The operating system has no concept of "open this in Chrome, but specifically the Work profile."

Neither do most of the link-routing utilities that already exist: they can pick a browser by rule, but they treat each browser as a single destination and ignore profiles entirely, which is exactly where the real friction lives. The thing people actually need, "send this link to the right browser and the right profile, based on where it came from and what it is", is something no tool reliably does.

How Air Traffic Controller closes the gap

Air Traffic Controller is a profile-aware default browser router for macOS. You set it as your system default browser, and from then on every link click passes through it first. It reads the URL, and where available, the app the click came from, evaluates your rules, and dispatches the link to a specific browser and a specific profile. Tagline aside, that is the whole promise: the right browser, the right profile, every time.

flowchart TD Click["Link clicked in Slack, Mail, Terminal …"]:::ghost --> ATC["AIR TRAFFIC CONTROLLER"]:::accent subgraph CTX ["context signals"] direction LR WiFi["Wi-Fi"] ~~~ Time["Time of day"] ~~~ Focus["Focus mode"] ~~~ App["Source app"] end CTX -.-> Rules ATC --> Rules{"rules engine"} Rules -->|"rule matches"| Open["Right browser, right profile"]:::accent Rules -->|"no match"| Picker["Keyboard picker"] Picker -->|"one keystroke"| Open class WiFi,Time,Focus,App dim

A few examples of what that makes possible:

  • *.github.com goes to Chrome, Work profile.
  • Links clicked inside your personal mail app go to Chrome, Personal profile.
  • Anything opened on the office Wi-Fi during work hours goes to a locked-down work profile.
  • Everything else goes to a sensible fallback you choose.

The pieces that make it work

A real rules engine. Rules match on URL host and path, the source application, and a set of context predicates: current Wi-Fi network, time of day, active macOS Focus mode, and held modifier keys. Conditions compose, so "GitHub, on work Wi-Fi, on a weekday" is a single rule. Rules are ordered, testable from a built-in evaluator, and exportable as JSON.

A reactive picker. When no rule applies, or when a rule deliberately asks, a fast, keyboard-driven picker appears, ranks your browsers and profiles by recent and frequent use, and lets you choose in a single keystroke. Hold a modifier on any click to summon it on demand and override a rule.

A launcher, not just a router. A global hotkey (⌥Space by default) opens a Raycast-style launcher for pinned URLs, recent destinations, and direct search, so the same engine that routes your clicks is also the fastest way to open anything.

Multi-engine search. Type a query instead of a URL and it routes to your chosen search engine, with first-class support for several (Google, DuckDuckGo, Brave, Kagi, Perplexity, or your own), per-engine destinations, and @keyword one-shot overrides.

Profile-aware launches across browser families. Chromium and Firefox profiles are first-class; dedicated adapters handle Arc Spaces, Safari, and Zen workspaces. When a launch fails, it falls back gracefully rather than dropping the link.

An optional AI agent. Authoring rules by hand is precise but slow. An opt-in agent, AutoPilot, lets you describe what you want in plain language ("route all my GitHub links to Arc, Personal space"), proposes the exact rule change as a reviewable diff, and applies it only when you approve. It runs against your own API key, and you control exactly what context it can see.

Privacy by default. Routing is entirely local. The activity dashboard that shows where your clicks go logs hosts only unless you explicitly opt into full URLs, and history can be cleared or scrubbed at any time. Nothing about your browsing leaves your machine.

The design stance

Air Traffic Controller is built to behave like its namesake: precise, calm, and invisible when it's working. It sits in the menu bar, makes a decision in milliseconds, and opens the browser before it does any bookkeeping, so routing never feels slower than clicking a link normally. It is written in Swift and SwiftUI as a native macOS app, distributed as a signed and notarized build.

Status: on approach

Air Traffic Controller is in active development and not yet publicly available. The foundation, becoming the default browser, the rules engine, profile-aware launching, the picker and launcher, search, context predicates, the AI agent, and the activity dashboard, is built and being hardened ahead of a public beta. If sending every link to the right place sounds like a problem you have, it's coming.

Enjoyed this? Let me know

1clap