Releases: nathandale/shuttle
Release list
v1.4.9 – Fix Ghostty TCC prompt (use NSWorkspace)
What's fixed
Ghostty – no more Privacy & Security nag, and the permission no longer flips back.
Root cause
Every approach that runs the ghostty binary — whether via NSTask or AppleScript do shell script — triggers the macOS App Management TCC prompt against Shuttle. This is because the ghostty binary uses IPC to communicate with the running Ghostty.app process, and macOS attributes that app-to-app traffic back to Shuttle. App Management is a permission macOS will not let third-party apps hold permanently; the slider always resets.
Fix
Ghostty now opens via NSWorkspace openApplicationAtURL:configuration:completionHandler: — the official LaunchServices API. LaunchServices never triggers App Management TCC because it doesn't involve any app-to-app communication; it's the OS opening a new process directly.
createsNewApplicationInstance = YES is set so that --command=<temp script> arguments are always delivered on every click (per Apple docs, arguments are only passed on a fresh launch or when createsNewApplicationInstance is YES).
All other terminals (Alacritty, kitty, Hyper, Rio) are unaffected.
v1.4.8 – Unify terminal launch path
What changed
Refactored the terminal launch code so all terminals (Ghostty, Alacritty, kitty, Hyper, Rio) share one do shell script execution path.
The only Ghostty-specific code is how the launch argument is built: Ghostty's CLI rejects bare words like -e, sh, -c and requires --key=value syntax, so a tiny temp script is written to /tmp and passed as --command=<path>. All other terminals continue to use -e sh -c 'cmd' exactly as before — no other terminal is affected.
v1.4.7 – Fix Ghostty TCC prompt and multiple windows
What's fixed
Ghostty – no more Privacy & Security prompt, and multiple bookmark clicks now open multiple windows correctly.
What went wrong in v1.4.6
Running the ghostty binary via NSTask directly triggers macOS's App Management TCC check against Shuttle. This prompt can't be permanently dismissed because macOS re-evaluates it on every launch.
Fix
Switched back to do shell script (AppleScript) to invoke the ghostty binary — the same approach used for all other terminals. This runs through the user's shell context rather than Shuttle's process, which macOS does not subject to the App Management TCC check.
The --command=<temp script> approach from v1.4.5 is preserved so Ghostty receives valid --key=value CLI arguments. When Ghostty is already running, the binary connects via its IPC socket and opens a new window in the existing process. When it's not running, it launches fresh.
v1.4.6 – Fix Ghostty multiple windows
What's fixed
Ghostty – clicking a bookmark when Ghostty is already running now opens a new window with the SSH session instead of a blank window.
Root cause
open -n -b com.mitchellh.ghostty --args --command=... drops the --args payload when macOS coalesces the new launch into the existing Ghostty process. The result was every click after the first opened a plain CMD-N style window with no SSH connection.
Fix
Shuttle now runs the ghostty binary directly via NSTask. When Ghostty is already running, the binary connects to its IPC socket and tells the existing process to open a new window with --command=<script>. When Ghostty is not running, it launches fresh with the same argument. One code path, both cases handled correctly.
v1.4.5 – Fix Ghostty invalid field errors
What's fixed
Ghostty – bookmarks now open correctly without CLI parse errors.
Ghostty's CLI only accepts --key=value arguments. Passing bare words like sh, -c, and the SSH command via open --args caused:
cli:1: unknown field
cli:2:sh: invalid field
cli:3:-c: invalid field
cli:4:ssh ...: invalid field
The fix writes a tiny temp script to /tmp/shuttle_<uuid>.sh containing the SSH command and passes its path as --command= to Ghostty. This avoids all CLI quoting and parsing issues entirely. Multiple windows continue to work via open -n.
v1.4.4 – Fix Ghostty window launching
What's fixed
Ghostty – bookmarks now open a new window every time.
Previously the launcher used ghostty +open -e via AppleScript IPC, which failed silently for two reasons:
-eis not a valid flag for+open, so the SSH command was never passed through- Even the fallback
open -bpath only delivers--argson a fresh launch; when Ghostty was already running, macOS activated the existing window and ignored the arguments entirely
The fix switches to open -n -b com.mitchellh.ghostty --args -- sh -c '<cmd>'. The -n flag forces a new launch event on every click, so Ghostty always receives the SSH command and opens a fresh window.
v1.4.3: Fork Attribution Update
[1.4.3] - 2026-02-24
Changed
- About Window: Added "Fork by Nathan Dale" attribution as requested.
v1.4.2: Terminal & UI Final Fixes
[1.4.2] - 2026-02-24
Fixed
- Terminal Multiple Windows: Robust fix for terminals like Ghostty where subsequent connection requests previously did nothing. Now uses
NSAppleScriptto call the terminal binary with+open, correctly triggering new windows in existing instances. - Privacy: Bypasses "App Management" privacy prompts by delegating execution to the system script runner.
- About Window: Removed copyright labels entirely and made the GitHub repository link a larger, more accessible clickable button.
v1.4.1: Terminal Fix & About Window Update
[1.4.1] - 2026-02-24
Fixed
- Terminal Multiple Windows: Fixed a bug where subsequent connection requests failed to open new windows in terminals like Ghostty. Now uses
/usr/bin/opento correctly handle IPC/instance communication. - Copyright Attribution: Removed "Nathan Dale" from the copyright as requested; reverted to original author Trevor Fitzgerald.
- About Window: Made the GitHub repository link clickable.
v1.4.0: Major Rewrite for Modern macOS
[1.4.0] - 2026-02-24
Added
- Major Rewrite: Rebuilt for modern macOS (12+) as a Universal Binary (arm64 + x86_64).
- SSH Manager: New native split-view window to manage servers and categories without editing JSON manually.
- LAN Scanner: Subnet scanner (GCD-based) and Bonjour/mDNS discovery for local SSH hosts.
- Modern Terminal Support: Native support for Ghostty, Alacritty, kitty, Warp, Rio, and Hyper.
- Improved Terminal Launching:
- Fixed "App Management" privacy prompts by using
NSAppleScriptinstead ofosascriptsub-processes. - Improved grouping in the Dock for Ghostty and other third-party terminals using
NSWorkspace.
- Fixed "App Management" privacy prompts by using
- Per-Server Settings: Ability to override the terminal and specify an initial directory on a per-host basis.
Changed
- Migrated configuration to a flat
servers+categoriesJSON structure for easier management. - Updated "About" window with new repository links and attribution.