Skip to content

Releases: nathandale/shuttle

v1.4.9 – Fix Ghostty TCC prompt (use NSWorkspace)

Choose a tag to compare

@nathandale nathandale released this 25 Feb 00:07

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

Choose a tag to compare

@nathandale nathandale released this 24 Feb 23:49

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

Choose a tag to compare

@nathandale nathandale released this 24 Feb 23:46

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

Choose a tag to compare

@nathandale nathandale released this 24 Feb 23:40

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

Choose a tag to compare

@nathandale nathandale released this 24 Feb 23:35

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

Choose a tag to compare

@nathandale nathandale released this 24 Feb 22:54

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:

  • -e is not a valid flag for +open, so the SSH command was never passed through
  • Even the fallback open -b path only delivers --args on 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

Choose a tag to compare

@nathandale nathandale released this 24 Feb 22:40

[1.4.3] - 2026-02-24

Changed

  • About Window: Added "Fork by Nathan Dale" attribution as requested.

v1.4.2: Terminal & UI Final Fixes

Choose a tag to compare

@nathandale nathandale released this 24 Feb 22:39

[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 NSAppleScript to 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

Choose a tag to compare

@nathandale nathandale released this 24 Feb 22:29

[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/open to 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

Choose a tag to compare

@nathandale nathandale released this 24 Feb 22:12

[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 NSAppleScript instead of osascript sub-processes.
    • Improved grouping in the Dock for Ghostty and other third-party terminals using NSWorkspace.
  • 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 + categories JSON structure for easier management.
  • Updated "About" window with new repository links and attribution.