Repository navigation
Releases: WhileEndless/Tether
Release list
Tether 0.10.2
Tether 0.10.2
Released 2026-11-03
Highlights
- Port forwarding is much simpler: say what you want in plain words, and Tether picks a free port, says what will happen and starts it at once.
New
- Forward a Port… offers four plain choices: open a port of the server on this Mac, reach another machine through the server, let the server reach this Mac (or a machine on its network), or browse through the server with a SOCKS proxy.
Improved
- The port on this Mac follows the port you want to reach (the same number when it is free, the next free one otherwise; ports below 1024 open as 8000 and up), and the editor says in one sentence what the forward will do, with the server's name and the real ports. A port already in use offers a free one.
- Adding a forward starts it right away (Add and Start); saving a running forward makes it again with the new values.
- Each forward says whether it is on, off, waiting for its server or failed, and what that means ("Off — nothing listens on port 8090 of this Mac"). A failed one offers Try Again, and a free port when its own is taken.
- Updates are never installed without asking: a downloaded update waits until you choose Restart to Update and confirm. Quitting Tether no longer installs it, and the setting is now called Download updates in the background.
- "Other devices on my network can use it" replaces typing a bind address (custom addresses stay under Advanced).
- Ports the server listens on show the forward already made for them, with its address and a browser button, or Turn On when it is off. With monitoring off, the panel says how to forward a port by number.
Fixed
- The scroller no longer shrinks with every key while a program such as Claude Code draws on the normal screen, and scrolling up there no longer shows the same screen with Back to Live.
- A tab reopened after a relaunch no longer takes such redraws for older output: scrolling to the top stays in the terminal when it already holds everything.
- The Ports tab no longer appears for this Mac, where forwarding does not apply.
- ⇧⌘G back through matches in a session's recording reads the part that holds the match once, from where the search found it: in a long coding-agent session a step took about ten seconds and now takes about two.
- The tab bar's arrows show only when there are more tabs that way: at the first or last tab its arrow is hidden (its place kept, so the tabs do not move), also after scrolling with the arrows.
- Re-attaching to a tmux session fetches only what was printed while away: Tether keeps track of how far the server's history had grown and asks for about that much first (further back only when the place is not in it). Rows a program redrew in place (Claude Code's prompt box and status line, with the conversation above them unchanged) no longer count as lost: the output above them is enough to find the place, and new messages that took the old box's place are added. Before, Tether then looked back through 1,000, then 10,000 rows, then the whole history (up to 100,000), and printed the last 1,000 again marked "earlier lines may repeat".
- Ctrl+L (or
clearand Return) while scrolled up, even a little, now goes to the bottom and shows the cleared screen with the prompt at the top; a program clearing by itself still leaves the view where you are reading. - Starting Claude Code (or another program that asks the terminal about itself) in a tmux tab no longer prints text such as
^[[?65;4;1;2;6;21;22;17;28cor^[P>|SwiftTerm: tmux answers those questions itself, and Tether no longer types a second, late answer into the pane.
Tether 0.10.1
Tether 0.10.1
Released 2026-11-02
Highlights
- Updates no longer ask for your Mac's password to use saved passwords each time, build much faster, and no longer fail with "unable to spawn process 'metal'".
Improved
- Updates build faster: the build folder is kept between updates (in ~/Library/Caches, which macOS may clear), so only what changed is compiled again and the packages Tether uses are not downloaded again. A build folder that no longer builds is built once more from scratch by itself.
- Builds are signed with a local certificate made once on your Mac ("Tether Local Signing" in your login keychain), so macOS recognises each update as the same app: the keychain no longer asks for your Mac's password after every update, and folder permissions stay granted.
make installsays that Tether may still be running in the menu bar when it refuses to replace it, and how to install what was just built without building again.
Fixed
- Building no longer fails with "unable to spawn process 'metal'" when the Swift toolchain uses its newer build system: Tether asks for the build system that needs no Metal compiler (the terminal's shaders are compiled when Tether runs).
Notes
- The first build signed with the local certificate (the update to 0.10.1, unless you ran
make signing-identitybefore) is a new app to macOS once more: it asks for the Mac's password to let Tether use its saved passwords — choose Always Allow — and folder permissions are asked for again. Later updates no longer ask. - The faster builds start with the update after 0.10.1 (the version you update from runs the update).
Tether 0.10.0
Tether 0.10.0
Released 2026-11-02
Highlights
- Signing in once is enough again: reconnecting after the Mac slept, and new tabs to the same server, no longer ask for the password or Touch ID while it is remembered.
- Changing networks no longer leaves tabs on "Connecting": a connection made over the old network is checked before it is used, every step of connecting has a limit, and the tab says what did not answer.
- Sessions you leave running on a server are listed under the host by their tab's name and open again with a click; paused tabs whose session ended there close by themselves, and nothing is ended on a server without you.
New
- Quitting asks first when plain shells, transfers or port forwards would end (with Quit When Transfers Finish); Restart to Update says the same.
- Port forwards come back after a relaunch (those listening only on this Mac by themselves, others when you say so), and also for hosts without an open tab when the network returns.
- A server without tmux says so once (ever), with how to install it.
- Recordings never fill the disk: with less than 5 GB free (Settings ▸ Recordings ▸ Keep free space on the disk, adjustable or off), they are compressed and the oldest closed ones removed, also below the storage limit and while Tether is locked.
Improved
- One question per server: a password you type also answers that server's other sign-ins for a minute — further connections for many tabs, a file window, a retry — also with Remember sign-in passwords turned off. Cancelling (or a refused password) stops the server's other waiting connections from asking in turn.
- Take your time answering: an open sign-in question never times out on Tether's side, the server gets 2 minutes to check the answer, and an answer given after the server's own login time signs in again without asking.
- Passwords are remembered and filled in for more servers: host names from wildcard or
Matchblocks,%hand HostKeyAlias, directory accounts with "@" in the user name, and PAM's other wordings of the password question. - App Lock no longer forgets remembered passwords; nothing signs in while Tether is locked, and tabs sign in once it is unlocked. Unlocking counts as the Touch ID check for saved passwords.
- A password typed in Quick Connect goes to that connection without Touch ID, also when you saved it.
- Patient keep-alives are on by default: every 60 s, so firewalls and routers do not forget an idle connection, but a connection ends only after 10 minutes without any answer. A keep-alive interval set in your ssh_config is kept, with its count raised to last as long.
- Checking a connection after waking or a network change runs nothing on the server any more (it asks the server to refuse a forward instead): a slow or busy server is no longer taken for a dead one, and a connection that is still receiving data is never closed. After a long sleep or on another network the check decides quickly, and tabs come back without an extra wait.
- Retry no longer closes a connection that is merely slow; only one found dead is replaced.
- A change of network on the same interface (another Wi-Fi network, a VPN with a new address) is now noticed.
- A plain-shell tab on a server whose other tabs use tmux gets a connection of its own, so it cannot take the others' connection down while the Mac sleeps.
- Turning off connection sharing no longer cuts off running plain shells, transfers and forwards.
- Your ssh_config is respected: its ConnectTimeout is used, its forwards are set up once (and never fail a sign-in), and a RemoteCommand no longer stops every tab from connecting (the tab says it is not run).
- The key-login check behind the "Set Up SSH Key" offer runs once per host instead of at every launch, and never through jump hosts.
- A plain shell (no tmux or screen) that lost its connection starts again in the same tab, as its notice says, instead of ending after a needless sign-in.
- GNU screen tabs share the session with other displays instead of pushing them out (two Macs no longer take it from each other), and screen's detach key or
tmux detachleave the tab waiting for Reconnect instead of ending it. - Transfers keep the Mac awake while they run, survive a sleep, are tried again after a lost connection, and previews or drags to Finder no longer wait behind them.
- What you type while a tab's connection is away is shown in the question about it, which comes only when another program is in front by then.
- A quick reconnect shows the small banner instead of covering the terminal, which stays scrollable.
- Private tabs end their own tmux or screen session on the server when closed.
- The Connection Log says much more about sign-ins and drops: the kind of each question and how it was answered, why nothing remembered answered, every forgotten password and why, the keep-alive each connection uses, ssh's own last words when a connection ends, why a tab tries again, how long the Mac slept, and the settings that matter (at launch and when they change). Tabs have numbers; copied and saved logs carry a header, local times, and no tab titles (which can hold command lines). Filtering by server keeps the sleep and network events.
- While Tether is locked, or recordings are encrypted, notifications no longer show what programs printed; locking removes those already shown.
- Two names for the same server (aliases, Quick Connect) share its connections and its tab limit.
- File tabs and host panels follow changes to the ssh settings, a failed folder listing loads again when the network returns, and host status that stopped updating is shown faded and restarted.
- A saved password asks for Touch ID when it is read from the keychain; after that it is remembered like a typed one, also through sleep and a locked screen (Settings ▸ Passwords ▸ Also forget them when the screen locks or the Mac sleeps still forgets everything).
- A remembered password belongs to the server ssh goes to (host name, port, user, jump host), no longer to the connection's socket name, which also depends on the Mac's own name and could change with the network.
- When ssh asks for a password although passwords are remembered, the Connection Log says why; it also notes when a password was remembered and when a saved one was used.
- A tab's recording says Paused while the Mac slept for a sleep, not Connection lost.
- On a server that asks a one-time code (or a push to approve) after the password, all tabs, file windows and transfers share one connection, so the code is asked once.
- Transfers stopped by a lost connection, the server's session limit or a sign-in nobody could answer are sent again by themselves as soon as the server can be reached (the network back, the server signed in, Tether unlocked), instead of once after five seconds.
- Folders whose listing failed load again as soon as their server signs in, also in the inspector and in Files windows, and also a first listing.
- With connection sharing off, a password typed for a transfer or a file listing is remembered and answers the others, and a time limit no longer ends an open password question.
- A port forward whose connection ended is noticed at once (it waits to be made again on the next connection) instead of up to 30 seconds later.
- No step of connecting waits for ever: getting the connection, starting the session and restoring it each have a limit while nothing happens (time spent answering a question does not count). The tab then says what did not answer ("No answer from example.com while restoring the session") and tries again; Retry, and the network coming back, also replace an attempt that went silent.
- Only a question you can see holds other connections back: one waiting unseen (for a tab in the background, or while Tether is locked) no longer keeps every tab, file window and transfer to that server on "Connecting".
- A server behind a jump host that the jump host cannot reach says so — "The jump host answered, but could not reach the server (No route to host)" — in tabs, file windows and transfers, instead of "refused" or "closed during the handshake"; it is tried again in the server's rounds.
- File windows: a folder that no longer exists (remembered from the last run, or deleted while shown) shows the nearest folder that does, and says so; one you typed says it does not exist, with Open Nearest Folder. A listing or a folder's size stops on the server when you go elsewhere or close the tab, and failed listings in tabs you are not looking at load when you show them, not all at once.
- File listings and other commands have one limit that includes connecting, and their errors name the cause ("did not answer", "cannot be reached from this network", "the jump host could not reach …").
- Host panels (processes, connections, GPUs) ask a server that does not answer less and less often, and at once again when it answers.
- A transfer whose connection is lost several times is sent again each time the server can be reached (up to six tries, waiting longer each time), and says how far it had come; nothing is ever written over.
- Sessions a closed tab left running on a server are listed under the host one by one, under the tab's name and color, and open again with a click as that tab, instead of being summed up as "leftover sessions" with a Clean Up button. Opening or ending them all at once is in the host's menu (Open or End Detached Sessions…); like Terminate All Sessions, it now acts only on sessions tabs of this Mac left there, never on another Mac's or another person's on a shared account, and leaves one alone that somebody attached to meanwhile.
- Paused tabs (suspended, or waiting for a sign-in or Reconnect) close by themselves once their server answers and their session is found gone there; their output stays in the archive. Only tmux or screen saying so counts, asked twice.
- Names, titles and command lines from servers are shown without control, bidirectional...
Tether 0.9.0
Tether 0.9.0
Released 2026-10-30
Highlights
- Connections stay up like plain ssh: a short outage, a Wi-Fi hand-over, locking the screen or the Mac sleeping no longer ends them, so nobody has to sign in again.
- One sign-in per server, however many tabs, file windows, transfers and port forwards want it at once — and a typed password can answer the same server's later sign-ins while Tether runs (Settings ▸ Passwords ▸ Signing In Again).
- A terminal scrolls back, finds (⌘F) and jumps between commands (⌘↑ / ⌘↓) through its whole session, however long, from its recording — without the memory growing.
- The file manager copies, pastes and drags files between servers, terminals and Finder, and searches a folder and everything below it on the server.
- Tether updates itself: Help ▸ Check for Updates… builds the new release in the background and installs it when you quit.
New
- Scrolling back past what is in memory shows the session's earlier output from its recording, however long — hundreds of thousands of lines. It is read in the background (decrypting and decompressing included) a chunk at a time as you scroll, keeping the line you look at in place, in a view over the terminal: the terminal itself is never rebuilt, so what runs in it goes on untouched (its screen, the modes a program set, prompts), and nothing in the earlier output acts as new (terminal queries are not answered, old titles, folders or OSC 52 copies do not replace the current ones). The scroller stands for the whole session: drag it anywhere and that part is shown. Lines wrap exactly as the terminal does, also after a resize or a move to another screen; selected text is kept and copied with ⌘C, Copy or the terminal's new right-click menu (Copy, Paste, Select All); ⌘K shows the cleared terminal. Typing, scrolling down or Back to Live returns to the terminal at once. This also works in tabs brought back after Tether reopened.
- Find in the terminal (⌘F) also looks through the earlier output in the recording, from its end back: the matches nearest to what you see come first, shown and counted while older ones are still looked for ("12+ found · 40 %", how far in its tooltip), marked beside the scroller for the whole session, and ↩ / ⌘G / ⇧⌘G step through them as they arrive — to each next match in the text, in both directions, also where a program redrew its output in place (docker compose, build progress, coding agents). A match in the recording is shown selected and flashes, as one in memory does; ⌘F while scrolled back selects the match on screen at once. Regular expressions and the other options work there too, and a long recording is searched many times faster than it is laid out. Output that cannot be read (encrypted while Tether is locked, or with another key) is left out, shown by a lock in the find bar. The Search window looks through ended sessions' recordings the same way.
- ⌘↑ / ⌘↓ go to the previous or next command however much output lies between (from the recording when it left memory), and ⇧⌘↑ / ⇧⌘↓ select whole commands of any length ("3 commands selected · 52,340 lines"), copied in full with ⌘C or Copy. Commands are noted in the recording (invisibly, with the time), so this works far back and across relaunches; quick repeated presses each count.
- File manager copy and paste across servers: files copied (⌘C, Edit ▸ Copy) in one file manager paste (⌘V) into another server's file manager, a terminal or Finder. On their own server they are copied there (into a terminal: their paths typed); from another server they come through this Mac, the temporary copy removed afterwards; pasted into another server's terminal they go where files pasted from Finder go (Settings ▸ Transfers: the terminal's folder, /tmp, or asked). The work under way shows with a spinner ("Getting 3 items from web-1…"), then how it went ("Pasted 3 items from web-1 into data", with what was renamed or could not be downloaded), and the pasted items are selected; a macOS notification tells how it ended when Tether is in the background. Folders and files can be mixed, many files travel as one packed stream, and nothing is replaced. File manager windows have Transfers (⌥⌘L) in their toolbar too. Dragging files onto another file manager or a terminal does the same; dropped back into their own folder, nothing happens.
- File manager search: the search field (⌘F in a file manager) filters the folder as you type, and ↩ searches it and every folder below on the server — names containing the text, a name pattern (
*.log,report-202?.pdf), or files containing the text. Results show which folder they are in, every action works on them (copy, download, drag, delete…), and Show in Enclosing Folder opens their folder. Hidden folders are searched only with hidden files shown; it stops after 1,000 matches or when you press Stop. Uses onlyfind,grepandstaton the server (PowerShell on Windows). - Tether updates itself: a newer release is downloaded and built in the background (from its source, at low priority; needs Apple's command line tools) and installed with make install when you quit — or now with Restart to Update. Help ▸ Check for Updates… opens the Software Update window: what the new version brings, the download's and the build's progress (with Cancel), and Restart to Update once it is ready; the first time the updated Tether opens, it shows what changed. Settings ▸ General ▸ Updates turns the daily check and the automatic install on or off (both on by default). Without the build tools you get the release page.
- Settings ▸ Passwords ▸ Signing In Again: a password you type (or a saved one unlocked with Touch ID) also answers the same server's later sign-ins while Tether runs — a reconnect after the connection really ended, a further connection for many tabs. It is kept only after the server accepted it, only for that connection (host, port, user and jump host), encrypted by a Secure Enclave key that exists only until Tether quits, and never written anywhere; it never answers sudo, a one-time code or a server's own text, and a saved password remembered this way still asks for Touch ID as set. It is forgotten as soon as a sign-in it answered fails (also when the server hangs up instead of saying no), so a changed password is never retried on every reconnect, and a server's connections sign in one after another, so it is never sent by several at once. Each remembered entry is listed with Forget; choose to forget them 1 hour, 8 hours or a day (the default) after they were typed (using one does not extend it) or only when Tether quits, and optionally when the screen locks. A key's passphrase is remembered the same way, for the key: typed once, it opens that key for every server and tab that uses it while Tether runs, also a jump host and its target using the same key, and it stays when a server turns the key down. See docs/connections-and-passwords.md.
- Help ▸ Connection Log: sign-ins (how long they took, how ssh signed in, and its steps: where it connected, the server's software, which ways of signing in the server offered), connection checks, connections closed and how long they lived, tabs connecting, connected, letting go, trying again and re-attaching (with how many lines were printed while away), sleep and network events with the network interfaces in use, App Lock, port forwards. Each event names its host and tab. Show everything, notices and problems, or problems only; filter by host or kind of event, or search. Copy and Save… take what is shown. In memory only (the last 3,000 events), never a password; also in macOS's log with host names private.
- A shell or tmux session that ends on the server without being asked to says why when the server tells: "the server's kernel ended example-worker for lack of memory at 09:30", low memory, an idle limit (TMOUT), a restart, a signal. One short read-only look over the connection; also in the Connection Log.
- Ending a tmux or screen session whose connection is down reaches the server first (one sign-in if needed); if it cannot be reached, choose End When Connected (done as soon as it can be, also after relaunching; the sidebar shows "Ends when connected", and opening the session or Don't End takes it back) or Disconnect.
- A tab on a system without tmux or screen (its shell ends when the connection drops) offers Keep Shells Running… in its footer: the install command for that system's package manager (
sudo apt-get install tmux,brew install tmuxon the Mac, …), typed into the terminal for you to run — Tether installs nothing itself. It can be turned off per host. - Settings ▸ SSH ▸ Multiplexing ▸ Keep connections open after quitting (off by default): relaunching within the time set signs in nobody.
- Docker, Docker Compose and Podman in a terminal show their own symbol on the tab and in the sidebar, moving while they work, with what they are doing in its tooltip (building an image, running services, following logs, inside a container, …), as coding agents do. Settings ▸ Terminal has the switch.
- A failed transfer can be sent again with Retry in the Transfers list: from the start, with free names chosen again, never overwriting anything.
- When Tether stops answering for a few seconds, or takes long to quit, it keeps a record of where it waited (macOS's
sample, in ~/Library/Logs/Tether, on this Mac only; the last five) and notes it in Console; a slow tab switch is noted too.
Improved
- Connections: Tether sends no keep-alives by default (your ssh_config still applies; forced ones ended connections after 30 s of silence, also right after waking). Each shared connection holds a silent channel, so it never closes merely because no tab used it for a while, also when every tab was moved to the background and across sleep. Before the Mac sleeps, tmux and screen tabs let go of their server sessions and monitoring pauses, so servers send nothing to a sleeping Mac; after wakin...
Tether 0.8.1
Tether 0.8.1
Released 2026-10-26
Highlights
- Re-attaching over a slow connection is dependable: tmux sessions are no longer reported as ended or closed while they are still running on the server.
Fixed
- A slow server or connection no longer makes a reconnecting tab look like a plain shell, which showed tmux's control text in the terminal and could end with "Shell exited" or "The remote session no longer exists" although the session was still there.
- When tmux drops the connection for another reason than a detach (for example a client that fell too far behind on a slow link), Tether checks the server and re-attaches instead of reporting "Session ended".
- Output printed while you were away is fetched in steps (1,000 lines, then 10,000, then everything the server kept) instead of the whole history at once, and the restore shows how much has arrived.
Tether 0.8.0
Tether 0.8.0
Released 2026-10-26
Highlights
- Tether looks the way you want: light, dark or following your Mac; an accent color; the size of text and icons; five sidebar styles; and terminal themes chosen separately from the window, so a light window can keep a dark terminal.
- On first launch, a short setup asks how Tether should look, with a preview of each choice.
- Fewer password prompts: connections that survive sleep are kept, background work never asks, and only the tab you are looking at asks.
- Files pasted or dropped into a terminal go to the folder it is in.
New
-
Settings ▸ Appearance: window appearance (Automatic, Light, Dark) shown as pictures, accent color, and text and icon size for the sidebar, tabs and host panel (View ▸ Text and Icon Size, ⌥⌘+ / ⌥⌘− / ⌥⌘0).
-
Sidebar styles: Detailed (as before), Compact (one line per row), Folders (a Finder-like tree: groups are folders, hosts open to their sessions), Minimal (names only, without "Local" and "Hosts" headers; status shows only when something needs you) and Flat (every host in one list without headers, favorites first with a star). Switch in Settings ▸ Appearance or View ▸ Sidebar Style; addresses, row buttons, counts and Favorites can each be hidden.
-
Terminal colors are separate from the window: Match the App (a light and a dark theme), Always Light, Always Dark, or a Terminal.app profile. Themes: Tether Light and Dark, Paper, Graphite, Rosé Pine Dawn, Solarized, Gruvbox, One Dark, Dracula, Nord, Tokyo Night and Terminal.app's Basic, each with a live sample.
-
First-launch setup (when no settings are saved yet): window, sidebar and terminal in a few steps, every choice applied at once. Settings ▸ Appearance ▸ Set Up Appearance Again, or View ▸ Set Up Appearance…, opens it later.
-
Files pasted (⌘V) or dropped into a server's terminal are uploaded into the terminal's current folder (asked fresh from tmux or the shell). Settings ▸ Transfers can make it /tmp or ask every time; Edit ▸ Paste Files To… (⌥⌘V), or ⌥ while dropping, always asks. When the folder cannot be told, cannot take the files, or a program in front connects elsewhere (ssh, docker exec), Tether asks before sending anything.
-
Download To… in the file manager picks a folder; Settings ▸ Transfers sets the default download folder or asks every time.
-
A tab whose login needs a password while you look at another tab waits with a key mark and asks when you show it.
-
Many tabs to one server sign in with one password: the others use its connection, and a password you just typed (not saved) also answers the server's other logins for two minutes — a second connection when a server limits sessions per connection, or several servers behind the same jump host. It stays in memory only, is never sent to another host, is dropped as soon as the server refuses it (so a wrong one is not tried again by every tab) and when Tether locks.
-
Cancelling a password prompt stops that tab and the server's other background tabs from asking again; they wait until you show them. A password typed into a prompt that waited longer than the server allows goes to a fresh login instead of a closed one.
-
The host panel says "Sign in to see this host's details" with an Open Terminal button when a server needs a password and no tab is signed in.
Improved
-
Tether's own terminal themes use soft backgrounds (no pure white or black) and keep every normal color readable on them.
-
Host rows no longer repeat the host's name under it when its address is the same as its name; the line then shows only the user, port and jump host, or nothing.
-
The archive button in the sidebar no longer shows a count; its tooltip still says how many ended sessions there are.
-
Background work (monitoring, latency, the platform check, port forward keep-alives) never asks for a password or a host key, also through jump hosts: it uses a tab's connection, keys or the agent. A server that needs a password gets no further attempts until a tab signs in, so no failed logins pile up in its log.
-
Uploaded paths are typed as one bracketed paste, quoted for PowerShell on Windows servers; while a full-screen program (vim, htop) is open they are copied to the clipboard instead.
-
Session marks in the sidebar sit in the middle of their row, also when a coding agent adds a second line, and line up with the marks of file tabs and server sessions.
-
Clicking into a terminal, or on the tab already in front, makes the sidebar and the host panel follow it again after a host was clicked in the sidebar.
Fixed
-
After a font size change (⌘+ / ⌘−, Settings), terminals tell the program their new size at once, also in tabs that are not in front; full-screen programs (vim, htop) no longer look broken until something else resizes them.
-
After sleep, Tether no longer closes every shared connection: each is checked over its own link (also on Windows servers and full connections) once the network is really back, and only dead ones are closed. Tabs that had stayed connected no longer log in again and ask for the password.
-
Typing a password into a prompt whose ssh had already ended could quit Tether without a crash report (SIGPIPE). Such prompts now disappear by themselves, and answering a prompt twice (Return and the button) is harmless.
-
After the server refused a sign-in (a wrong or changed password) or the password prompt was cancelled, a tab no longer retries — and asks — again and again: it waits with "Not connected" and the reason until you press Reconnect Now; its card can also close the tab.
-
A tab's prompt that waited in the background longer than the server allows is withdrawn; the tab signs in afresh when shown instead of sending the password to a closed login.
-
Download and Download All in the file manager's detail pane could overwrite a file in Downloads; every download now picks a free name, also when the name was taken while it waited in the queue, and Show in Finder points at the downloaded copy.
-
A packed upload of same-named files from different folders could lose one; names that differ only in case (README, readme) no longer land on each other on the Mac; a downloaded item whose name was taken meanwhile is kept under the next free name instead of being discarded.
-
Copy in the file manager no longer clears the clipboard when nothing could be downloaded; its temporary copies are removed after a day.
-
A server without tmux or screen: the "Not persistent" label explains that the shell ends with the connection, and the notice when the connection drops says a reconnect starts a new shell instead of promising the old one back.
-
Cancelling a password prompt ends that login instead of letting ssh send an empty password (a failed login on the server) and ask again; ending a login also ends the ssh it started for a jump host. A login Tether stopped is no longer taken for a successful one, a wrong password typed with "Remember" is not sent a second time from the keychain, and a reconnect never starts while another attempt of the same tab is still running.
-
A password typed once also answers the other logins already waiting for the same user and host; one-time codes and "New password" questions are never remembered or reused. A prompt of a tab that was closed is never shown, and a prompt for a tab in front is never timed out.
-
Pasting files into a network device or limited shell says at once that Tether sends such hosts no files; while the terminal's folder is looked up, "Finding the terminal's folder…" shows (5 seconds at most, then Tether asks).
-
A folder reported by the shell with unencoded spaces no longer shows up as a raw file:// address.
-
Less CPU while terminals print a lot (a coding agent at work): tmux output is read in one pass per chunk instead of line by line, status symbols in the sidebar stay still (the tab bar shows them moving), the window title and agent state redraw only when what they show changes, and tabs not on screen are asked about their activity half as often.
Notes
- Saved terminal colors carry over: the Terminal.app profile, Light, Dark and Solarized stay what they were. New installs start with Match the App (Tether Light / Tether Dark).
- The terminal's colors, font and cursor moved from Settings ▸ Terminal to Settings ▸ Appearance.
Tether 0.7.0
Tether 0.7.0
Released 2026-10-26
Highlights
- Coding agents waiting for you are noticed: Claude Code asking for plan approval, a question or a permission marks its tab with a raised hand and notifies you, in any tab — nothing to set up in Claude Code.
- Tabs show what is happening: coding agents get their own symbol, a command that is working gets a moving mark, and programs that are only open (vim, less) stay quiet.
- Everything Tether runs for a host can be switched off, for all hosts or for one: monitoring as a whole, each host panel tab, and each background job.
New
- Settings ▸ Monitoring lists everything Tether runs on hosts with a switch each; every host can choose for itself (System Setting / On / Off) in its editor, from the sidebar's Monitoring menu or the host panel's menu. "What Runs on Hosts" says which switch stops each script.
- The Containers and Kubernetes tabs show only on hosts that have Docker/Podman or kubectl/k3s/microk8s/oc (a setting; a host can still show them).
- Tether understands the Program Status Protocol (OSC 7501) and unwraps tmux passthrough, so programs' notifications reach Tether's tmux tabs too.
- Settings ▸ Terminal ▸ Tabs: agent symbols, a faint dot for idle programs, when a quiet command counts as working. Settings ▸ Terminal ▸ Behavior: notify when an agent waits or is done, and how often agents are looked at.
- Network devices, firewalls and limited shells (Cisco, Junos, FortiOS, RouterOS, PAN-OS, menus, git-shell) are recognised on first contact and get a plain login with their own command line; Tether then runs nothing else on them. Downloads (classic scp) and port forwards still work. Edit Host ▸ Shell, or the host's Monitoring menu, sets it by hand.
- View ▸ Allow Mouse Reporting (⌘R while connected, as in Terminal.app) turns mouse reporting on or off for the terminal in front; while it is not connected, ⌘R still reconnects.
- ⌘E opens the file manager in the current terminal's folder, as its Browse button does (it was ⇧⌘O). Use Selection for Find moves to ⇧⌘E.
- The tab bar's "+" opens a new tab like the one in front (⌘T); hold it for a local terminal, a private tab or a new connection.
Improved
- The toolbar's New Connection button has its own symbol, and the sidebar's add menu says "Add", so the three buttons are no longer mistaken for one another.
- The Kubernetes tab keeps its header at the top in every state, and messages are aligned to the top and selectable; no host panel tab can move the panel's header to the middle any more.
- Tab numbers (⌘1…⌘9) no longer stay on screen after ⌘ was released in another app or during ⌘Tab.
Fixed
- The host-key question for a new host was asked twice (monitoring started its own login at the same time); background work now waits for the first login, and the same question from several ssh processes is shown once.
- After
clear, the prompt could move to the middle of the screen when the window grew (at launch, when a tab was shown, on resize); it stays at the top, and the cleared lines stay in the scrollback. - Text selected in the history no longer disappears when the command keeps printing: the selection stays unless the program in the terminal tracks the mouse itself.
- Changed ssh settings now reach host monitoring without restarting Tether.
- A host whose shell does not know
exit(some device CLIs) no longer fails to connect with connection sharing on, and a session that never starts Tether's shell (a menu) no longer waits for ever behind "Connecting".
Notes
- "Load system information automatically" (Settings ▸ Monitoring) is now the "Monitor the host" switch and really stops monitoring when off; check it if you had switched it off before.
Tether 0.6.0
Tether 0.6.0
Released 2026-10-26
Highlights
- Find in the terminal shows where you are: "3 of 14" in the find bar, the line of the current match highlighted across the terminal, the match itself in a solid box that bounces and blinks when you reach it, and marks beside the scroller for every match in the history.
- Secrets in the archive are masked: when a session ends, API keys, tokens, private keys and passwords in its recording are replaced with
[REDACTED****]. The list of patterns can be extended.
New
- ⌘F opens Tether's own find bar in terminals: type to search, ↩ / ⇧↩ (or ⌘G / ⇧⌘G) for the next and previous match, options for case, whole words and regular expressions, and a track showing how far through the matches you are.
- Settings ▸ Terminal ▸ Find in Terminal: line and match colors, tinting of the other matches, scroller marks, what happens when a match is reached (bounce, blink, both or nothing; nothing moves with Reduce Motion), and how long typing must pause before the terminal is searched (300 ms by default, so long histories are not searched for every letter; ↩ searches at once).
- Settings ▸ Security ▸ Secrets in the Archive: built-in patterns (AWS, GitHub, GitLab, OpenAI, Anthropic, Google, Slack, Stripe, npm, Hugging Face, JWTs, bearer tokens, passwords in URLs,
*_KEY=/*_TOKEN=/*_PASSWORD=values, private key blocks), each can be switched off; add your own rules, try them on a sample line, and apply the rules to the whole archive again. - Settings ▸ Terminal ▸ Floating Bars: the find bar closes by itself after a while unused (20 seconds by default, or never), and how long finished or failed uploads stay on screen.
Improved
- The search window says it is searching while it looks (with how many sources it has gone through and how many matches so far) and shows "No Matches" only once the search has finished; a stopped search says so.
- Opening a match from the search window starts the terminal's find bar on that match.
make privacyalso looks for API keys and tokens, andmake hooksruns it before every commit.
Notes
- Masking applies to recordings of archived sessions, including those archived before this version (done once in the background after launch). Open sessions are never changed. Secrets keep their length, so recordings, transcripts and search work as before. Masking is a safety net: secrets in unusual formats, split by colors or line breaks, or kept elsewhere (the server's shell history) are not caught.
Tether 0.5.1
Tether 0.5.1
Released 2026-10-26
Highlights
- Keys with a passphrase work smoothly: create one in the key setup, and Tether gives ssh its passphrase from your keychain at every login, also after a restart.
New
- Set Up SSH Key… can create an RSA 4096 key for older servers, besides Ed25519.
- Settings ▸ SSH ▸ Keys lists your keys, shows which have a passphrase, and adds, changes or removes it (the key file is backed up while it changes and put back if anything fails), or copies the public key.
- Set Up SSH Key… can also add the new key to the macOS ssh-agent, so Terminal and git use it too (the host's config gets AddKeysToAgent and UseKeychain). Off by default (Settings ▸ SSH ▸ Keys).
Improved
- The passphrase of a new key is typed twice, and kept in Tether's keychain when you choose (on by default), so ssh is answered at every login, after Touch ID when that is on.
- Checking that the new key logs in works for keys with a passphrase too, and says what ssh answered when it fails.
- Hosts that already log in with a key that has a passphrase are no longer offered “Set Up SSH Key…”.
- A key's passphrase asked inside a terminal of this Mac (ssh-add, git) and by Tether's own ssh is now one keychain item.
- Using an existing key with a passphrase asks for it once in the key setup, and can remember it.
Fixed
- A key created with a passphrase asked for it again after a restart (it was only given to the macOS agent, which forgets it).
- A key file name that was already taken could make the key setup fail; existing keys are never replaced, and the wizard says so before it starts.
- A key whose path is longer than 100 characters had its passphrase asked every time: ssh cuts such paths in its question, and Tether now finds the key file the cut path belongs to.
Notes
- Passphrases never appear on a command line: ssh-keygen, ssh-add and ssh get them through Tether's askpass helper.
Tether 0.5.0
Tether 0.5.0
Released 2026-10-25
Highlights
- Tether runs on macOS 14.4 (Sonoma) and later, on Apple silicon and Intel Macs (the download holds both). macOS 26 keeps its Liquid Glass look; earlier systems get the standard one.
- Very long sessions take much less space: while a session runs, its earlier output is compressed in pieces, and scrolling back still feels the same. One busy session can no longer push every other recording out when space runs out.
New
- Search and plain-text export show what the terminal showed: full-screen programs (vim, less, htop) no longer fill them with their screens, progress bars and spinners give their final line, and programs that redraw everything (Claude Code) appear once instead of once per redraw.
- Settings ▸ Terminal ▸ Programs may clear the scrollback (off by default): off,
clearand programs that redraw everything clear the screen but never the history above it. The recording keeps everything either way. - With encryption on, output and command history are kept while Tether is locked too: they are sealed to the public half of the recording key, and only unlocking opens them. Before, nothing was recorded while locked, and command history recorded then was lost at quit.
- Recordings note the terminal's size, so transcripts replay at the width they were shown.
- Tabs running Claude Code, Codex or opencode (in tmux) are named after the agent's session, unless you renamed them (Settings ▸ General ▸ Tabs & Windows ▸ Name tabs after coding agent sessions). The sidebar then shows whether the agent is working.
- Browse (⇧⌘O) in a terminal of this Mac opens its folder in Finder (Settings ▸ General ▸ Tabs & Windows ▸ Browse folders of this Mac in Finder; off, Tether's file manager as before). Hosts keep using the file manager.
- Every table of the host panel exports as CSV: processes, listening ports, logged-in users, TCP connections, services, containers, Kubernetes pods and GPUs.
- A middle click on a terminal or file tab in the sidebar closes it, like its close button (as in the tab bar).
- Settings ▸ Recordings ▸ Compress long sessions while they run (every 16 MB by default, or never). The latest output stays as it is, so scrolling back stays fast.
- Settings ▸ Recordings ▸ When space runs out, shorten the largest session first (on by default): a session holding more than half of the storage limit loses its oldest output before any other recording is removed. This works for sessions kept in parts (not with compression while running set to Never).
- The command history exports as three tables: one row per command (now with the hosts it connected to and the programs it ran), one row per process, and one row per connection (remote address, host, port, service, bytes and peak speed). The JSON export names every field with its unit and includes processes, connections and the graph.
- Exported connections and traffic by process include the remote host, port and service, and the bytes moved.
Improved
- Search finds the history of a session while a full-screen program (vim, less) is open in it, not only that program's screen.
- Where a session's recording meets what the terminal still holds is found by content, so search neither repeats nor skips lines there (when it cannot be sure, a line may show twice; none is left out). Save Session takes plain text from the recording, so a Claude Code session is saved without its redraws.
- A clear that arrives cut in two by the network is still seen whole, so it can never erase the history on screen.
- Scrolling back past memory in a session that redraws a lot reads further instead of stopping, and a replayed
clearno longer erases the history it loads. - Scrolling back reads at most 16 MB of a recording at a time and brings at most 250,000 lines into memory, so output with few line breaks (full-screen programs, progress bars) never fills memory.
- When writing a recording fails (the disk is full), recording goes on once there is space again, and the recording says how much output is missing.
- Folders and connection logs left in /tmp by earlier runs are removed after a day.
Fixed
- After reopening Tether, full-screen programs (Claude Code, vim) in tabs that were restored in the background fit the window when the tab is shown, without resizing the window by hand.
- Starting Tether a second time (for example a copy in another folder) brings the running one to the front instead of running twice; two copies at once could remove each other's open recordings and break password prompts.
- Turning encryption on or off no longer runs at the same time as the regular maintenance of recordings.
- Copies of remote files made for Quick Look and dragging are removed after a day.
- Exporting search results reports a failure instead of silently writing nothing, and never leaves half a file.
- Closing a tab that was restored at launch, or opened to attach to a server session, while it was still connecting no longer ends that tmux or screen session on the server.
- Deleting an archived session also deletes its recording when the recording was compressed.
- A cancelled or failed copy (scp) no longer leaves a partial file behind under a normal name.
- Command history that could not be saved (a full disk) is written again later instead of only at the next change.
- After the Tether password is reset, encrypted command history files that can no longer be opened are removed, and new history is saved again.
- A damaged settings-like file (hosts, archive, open sessions, windows) is kept aside as
name.unreadable-<date>.jsoninstead of being overwritten. - An encrypted recording reopened after a crash keeps everything written afterwards readable.
- Playing back the start of a compressed recording showed its end.
Notes
- tmux or screen started by hand inside a tab use the alternate screen, so search and plain-text export treat them like a full-screen program (their output is in the transcript and the raw recording). Tether's own tmux and screen sessions are not affected.
- Changed default: Browse in a terminal of this Mac opens Finder; turn off Settings ▸ General ▸ Tabs & Windows ▸ Browse folders of this Mac in Finder for Tether's file manager.
- Recording while locked starts after the first unlock with this version (that is when the key's public half is saved).
- Requires macOS 14.4 or later (was macOS 26). Building from source is tested with Xcode 26;
make installbuilds for the Mac it runs on,make zipfor Apple silicon and Intel. - A second Tether started with the same data folder now shows the running one instead (test and demo runs keep their own folders).
- What Tether keeps on this Mac, where, for how long and what goes first is described in docs/data-storage.md.
- Recordings of long sessions made before this version are not split into parts; only their size counts.