FinderFollow is a lightweight macOS menu bar utility that keeps system file pickers in sync with the folder you are viewing in Finder.
Open an upload, open, or save dialog, switch to Finder and navigate to another folder, then switch back. FinderFollow automatically moves the file picker to that folder.
This application is built with codex.
- Automatically follows the frontmost Finder window when you return to a system file picker
- Supports standard open, save, and upload dialogs
- Uses event-driven accessibility notifications instead of continuous polling
- Provides a global manual-sync shortcut:
Control-Option-Command-G - Runs quietly in the menu bar without a Dock icon
- Can launch automatically when you sign in
- Supports both Apple Silicon and Intel Macs
- Does not connect to the internet or collect file information
- macOS 12 Monterey or later
- Accessibility permission
- Finder Automation permission only when the Accessibility API cannot read the current folder
- Download the latest prebuilt archive from the GitHub Releases page.
- Extract the archive and move
FinderFollow.appto/Applications. - Open FinderFollow. It appears as a folder icon in the menu bar and does not appear in the Dock.
- When prompted, open System Settings > Privacy & Security > Accessibility and enable FinderFollow.
- If macOS asks whether FinderFollow may control Finder, choose Allow. This permission is used only as a fallback for reading Finder's current folder.
Prebuilt development releases are ad-hoc signed. If Gatekeeper prevents the app from opening, Control-click FinderFollow.app, choose Open, and confirm. Alternatively, allow it from System Settings > Privacy & Security.
After replacing the app with a newer build, macOS may require you to enable its Accessibility permission again.
- Open a system file picker in any application.
- Switch to Finder.
- Navigate to the folder you want to use.
- Switch back to the original application.
FinderFollow moves the file picker to Finder's current folder automatically. Automatic sync is enabled by default and can be paused from the menu bar.
With a system file picker in the foreground, press:
Control-Option-Command-G
You can also choose the manual sync command from the FinderFollow menu bar menu.
| Permission | Why it is needed |
|---|---|
| Accessibility | Detects system file pickers, reads the active Finder window, and enters the destination path into the file picker. |
| Automation: Finder | Provides a fallback for reading Finder's current folder when it is unavailable through Accessibility. |
FinderFollow does not read file contents, send analytics, or make network requests.
- Finder virtual locations such as Recents, search results, and tags do not have normal filesystem paths and cannot be followed.
- Applications that use a custom file browser instead of the standard macOS file picker may not be supported.
- Opening iCloud, network, or external-drive folders can still be delayed by the underlying storage provider.
- The app must remain running in the menu bar.
Install the Apple Command Line Tools if they are not already available:
xcode-select --installBuild the universal application bundle:
./Scripts/build-app.shThe resulting application is written to:
dist/FinderFollow.app
The build script compiles both arm64 and x86_64 executables, combines them into a universal binary, generates the app icon, and applies an ad-hoc signature. A public production release should use a Developer ID certificate and Apple notarization.
Run the standalone smoke tests with:
./Scripts/test.shThe project uses Swift 5.8 and does not require third-party dependencies or a full Xcode installation.
FinderFollow combines several native macOS APIs:
NSWorkspaceobserves application activation and deactivation.AXObserverlistens for Finder and file-picker accessibility events.- The Accessibility API identifies the active file picker and reads Finder's current directory.
- Finder Apple events provide a fallback when the directory is unavailable through Accessibility.
- The app opens the native Go to Folder field, enters the captured path, and confirms it.
All interaction delays are centralized in AppTiming.swift and currently set to 50 milliseconds.