macOS input customization
BetterTouchTool, and the permission it quietly shares with an AI desktop agent
Most overviews of BetterTouchTool stop at the feature list. This one starts there too, then follows the one wire that connects it to a very different kind of tool: the single macOS permission that lets any app reach into your other apps.
Direct answer · verified 2026-06-18
BetterTouchTool (BTT) is a paid macOS app from folivora.ai, written by Andreas Hegenberg. It lets you customize trackpad and Magic Mouse gestures, keyboard shortcuts, the Touch Bar, window snapping, the clipboard, and screenshots, all through trigger-to-action rules you configure yourself. It is not free: there is a free trial, then a paid Standard license (about two years of updates) or a Lifetime license, both covering two Macs. Current pricing lives at folivora.ai/buy.
What BetterTouchTool actually does
BTT has been around for over a decade, and it has accreted a lot. The core idea has stayed the same the whole time: take an input you can produce (a three-finger swipe, a keyboard chord, a mouse click in a screen corner, a Touch Bar tap) and bind it to an action you want your Mac to perform. The app is a giant, very well-built mapping table between triggers and actions.
In practice people reach for it for a handful of things:
- ·Window snapping and management. Drag a window to an edge and have it tile, or bind a shortcut to move and resize windows to exact fractions of the screen. This is the most common reason people install it.
- ·Custom trackpad and mouse gestures. Define multi-finger swipes, taps, and click-and-drag motions on the trackpad or Magic Mouse, and fire any action from them.
- ·Keyboard shortcuts and remapping. Replace or add system-wide and per-app shortcuts, including chained and conditional ones.
- ·Touch Bar, menu bar, and notch widgets. Build custom controls and live readouts where Apple left blank space.
- ·Clipboard manager and screenshot tools. Keep a history of copied items, and annotate screenshots on the fly.
The through-line: everything BTT does, you set up first. You decide the gesture, you decide the action, and BTT executes that pairing faithfully, forever, until you change it. That determinism is the whole appeal. It is also where this story turns.
The one thing the feature lists skip
When you first launch BetterTouchTool, it asks for Accessibility permission: System Settings, Privacy and Security, Accessibility, flip the toggle for BTT. People click through this without thinking about what it actually grants. It is worth thinking about, because it is the most powerful checkbox on your Mac.
Accessibility permission gives an app a read-and-write handle on the macOS accessibility tree: the structured, hierarchical model of every window, button, text field, and menu in every running app. With it, a program can inspect what is on screen and synthesize clicks and keystrokes into other apps. That is how BTT moves a window that belongs to Safari, or sends a shortcut into Final Cut. It is reaching through the accessibility API to touch another app it does not own.
Here is the part nobody writing about BTT mentions: this is the exact same permission, the exact same accessibility tree, that an AI desktop agent uses. When Fazm asks for Accessibility access, it is asking for precisely what BTT asked for. The grant is identical. What each tool does with the tree once it has it is where they completely diverge.
Two ways to drive the same tree
Given the same accessibility tree and the same ability to click and type into other apps, there are two fundamentally different ways to decide what to do next.
BTT is rule-based. You author the decision ahead of time. Trigger X always fires action Y. There is no interpretation step at runtime: the swipe happens, the bound action runs, done. This is wonderful for things you do a hundred times a day and want to be instant and identical every time. It is useless for anything you did not anticipate when you sat down to configure it.
An agent is intent-based. You state the outcome (in Fazm, in plain language or by holding a key and talking), and a model decides at runtime which accessibility actions to string together to reach it. There is an interpretation step every time, which makes it slower and less deterministic than a hard-wired gesture, but it handles open-ended, never-before-seen tasks that you would never bother to script.
Neither is better in the abstract. They are tools for different shapes of work. The comparison below is not "which one wins," it is "which one fits the task in front of you."
Rule-based vs intent-based, on the same permission
| Feature | BetterTouchTool (rule-based) | Fazm (intent-based agent) |
|---|---|---|
| How you set it up | Wire each trigger to an exact action, by hand, in advance | Describe the outcome in plain language or by voice; no wiring |
| Best at | Fixed, repeated motions: snap window, fire shortcut, gesture | Open-ended, one-off tasks you would never sit down to script |
| Runtime behavior | Deterministic: same input, same action, every time | Interprets each request; adapts to what is actually on screen |
| macOS permission needed | Accessibility (read AX tree, synthesize input) | Accessibility (the same grant, the same tree) |
| Reaches into other apps | Yes, via the accessibility tree | Yes, plus the browser and Google Workspace in one loop |
| Natural-language / voice input | No | Yes, hold a hotkey and talk |
| Source | Closed source, paid license | Open source, free to start, runs locally |
This is a fit comparison, not a winner. For muscle-memory window snapping, a hard-wired BTT rule beats any agent on speed and predictability.
What "intent-based" looks like underneath
Say you tell the agent: "put my notes window on the left half and the browser on the right." In BTT you would have pre-bound two snap actions and triggered each one. In an agent, the same accessibility tree gets walked at runtime to find the two windows and move them. The sequence below traces that single request from spoken words to AX calls.
One spoken request, resolved against the live AX tree
A BTT rule does the last two steps directly, with no enumeration and no matching, because you already told it exactly which window and exactly where. That is faster. The agent path costs you an interpretation round trip, and buys you the ability to phrase the request differently every time, or to ask for something you never configured.
The macOS 26 quirk both kinds of tool hit
Because BTT and an agent lean on the same Accessibility permission, they inherit the same sharp edges in how macOS reports that permission. The worst one showed up on macOS 26 (Tahoe): the standard check, AXIsProcessTrusted(), reads from a per-process cache that can go stale after an OS update or an app re-sign. The user has granted the permission, the toggle is on, and the API still answers "not trusted." Any AX-based tool can get stuck here, showing a "please grant access" screen for a permission that is already granted.
Fazm handles this by not trusting the cached answer. In Desktop/Sources/AppState.swift, when the cheap check is ambiguous, it probes the live TCC database the only way you can from user space: it tries to create a listen-only CGEvent tap. Tap creation either succeeds (permission is genuinely live) or fails, and unlike the trusted-process call it is never served from a stale cache.
// Desktop/Sources/AppState.swift
/// Probe accessibility permission by attempting to create a CGEvent tap.
/// Unlike AXIsProcessTrusted(), event tap creation checks the live TCC
/// database, bypassing the per-process cache that can go stale on
/// macOS 26 (Tahoe).
private func probeAccessibilityViaEventTap() -> Bool {
let tap = CGEvent.tapCreate(
tap: .cgSessionEventTap,
place: .tailAppendEventTap,
options: .listenOnly,
eventsOfInterest: CGEventMask(1 << CGEventType.mouseMoved.rawValue),
callback: { _, _, event, _ in Unmanaged.passRetained(event) },
userInfo: nil
)
if let tap = tap {
CFMachPortInvalidate(tap)
return true
}
return false
}There is a second guard in the same file. When an AX call returns the ambiguous cannotComplete error, it could mean the permission is broken, or it could mean the frontmost app simply does not implement accessibility well (some Qt, OpenGL, and Python-based apps do not). Before concluding the grant is dead, Fazm re-runs the same check against Finder, a known AX-compliant app. If Finder also fails, the permission really is stuck; if Finder works, the original failure was that one app's problem, not a permission problem. That disambiguation is the difference between an honest "you need to relaunch" message and a false alarm that sends you digging through System Settings for nothing.
You will not find that in a BetterTouchTool overview, because it is not about BTT. It is about the shared substrate both tools stand on, and it is the kind of detail that only matters once you understand that "an app that customizes your trackpad" and "an app that runs an AI agent on your Mac" are reaching through the exact same door.
So which should you run?
Honestly, for a lot of people the answer is both, for different jobs. BTT owns the muscle-memory layer. An agent owns the open-ended layer. Here is the rough test I use when something feels automatable.
Reach for BetterTouchTool when
- You do the exact same motion many times a day
- You want it instant, identical, and deterministic
- It maps cleanly to one gesture or one shortcut
- Window snapping, Touch Bar, clipboard, remapping
Reach for an agent when
- The task is open-ended or different every time
- You would never bother to sit down and script it
- It spans several apps, the browser, or Workspace
- You want to just say it out loud and move on
If the task has a fixed shape, a rule will always beat a model on speed and reliability, so keep BTT for those. If the task is fuzzy, one-off, or crosses app boundaries, that is exactly where a rule falls apart and an agent earns its keep. They coexist on the same permission without stepping on each other.
Curious where an agent fits next to your BTT setup?
Bring the repetitive Mac work that does not map to a single gesture, and we will look at whether an intent-based agent earns a place in your workflow.
BetterTouchTool, common questions
Frequently asked questions
What is BetterTouchTool?
BetterTouchTool (BTT) is a paid macOS app from folivora.ai, written by Andreas Hegenberg. It lets you redefine how you interact with your Mac: custom trackpad and Magic Mouse gestures, keyboard shortcuts, Touch Bar widgets, window snapping and resizing, a clipboard manager, a screenshot tool, and scripting triggers. You configure trigger-to-action rules yourself, and BTT runs them.
How much does BetterTouchTool cost?
It is not free, but it ships a free trial. After that you buy a license on the folivora store: a Standard license that includes roughly two years of updates, or a Lifetime license that keeps receiving updates for as long as the product exists. Both cover two Macs. The exact totals depend on your region, tax, and any active discount, so check folivora.ai/buy for the current number rather than trusting a figure quoted elsewhere.
Is BetterTouchTool open source?
No. BetterTouchTool is closed-source, paid, commercial software. Its plugins are on GitHub, but the app itself is not. If open source matters to you for something that can read and click around inside your logged-in apps, that is a real distinction worth weighing.
Does BetterTouchTool need Accessibility permission?
Yes. To move windows, send keystrokes into other apps, or read what is on screen, BTT needs macOS Accessibility permission under System Settings, Privacy and Security, Accessibility. This is the same permission an AI desktop agent like Fazm requests, because both reach into other apps through the same macOS Accessibility tree.
What is the difference between BetterTouchTool and an AI agent like Fazm?
The automation model. BTT is rule-based: you predefine each trigger (a gesture, a shortcut, a corner) and the exact action it fires. It does precisely what you wired, every time. Fazm is intent-based: you describe the outcome in plain language or by voice, and an agent loop figures out which accessibility actions to take to get there. BTT is faster and more deterministic for fixed, repeated motions. An agent handles open-ended, one-off tasks you would never sit down to script.
Can I use BetterTouchTool and an AI agent together?
Yes, and it is a reasonable setup. Keep BTT for the muscle-memory layer (window snapping, gesture shortcuts, Touch Bar) where determinism and speed win. Use an agent for the open-ended work: read this, summarize that, fill out this form across three apps. They both sit on the same Accessibility permission and do not conflict.
Does BetterTouchTool work on the latest macOS?
Yes, folivora ships frequent updates and tracks new macOS releases. One thing to know on macOS 26 (Tahoe): the system's accessibility-permission cache can go stale after an OS update or an app re-sign, so a granted permission can read as not granted until you relaunch. That quirk affects any AX-based tool, not just BTT.
Keep reading
An AI agent for macOS, end to end
What it looks like when one agent reaches past the terminal into your browser, native Mac apps, and Google Workspace through the accessibility tree.
macOS Accessibility APIs and Electron apps
Where the AX bridge breaks for Slack, Discord, and VS Code, and the disambiguation Fazm ships so an app quirk is not mistaken for a broken permission.
An AI agent for desktop tasks
The boring back-office work that is a good fit for a desktop agent, and the parts you still want a deterministic rule for.
Comments (••)
Leave a comment to see what others are saying.Public and anonymous. No signup.