A Mac app that supervises detachable terminal sessions. It is not a general local-shell terminal.
Each tab is a place: a saved attach target. Click a tab to attach. Sleep drops the local process. The remote herdr, tmux, or screen session keeps running. Wake does not reconnect. Click the tab or choose Reconnect.
A place is user, host, and backend (herdr, tmux, or screen). tmux and screen also need a session name.
- Empty host,
localhost, or127.0.0.1is this Mac. No SSH. Label:you@localhost:herdr. - A real host uses
/usr/bin/ssh. Label:user@host:herdroruser@host:tmux(foo).
herdr attach uses the binary that owns herdr.sock on that machine. PATH herdr can be a different version.
The catalog is ~/Documents/rterm/*.rterm-place. The app writes it. Edits on disk reload. Use + or Place → Add Place….
Tab dots: grey idle, green alive, red failed. SSH keepalives make a dead path exit.
| Shortcut | Action |
|---|---|
| ⌘1 … ⌘9 | Select place 1–9 |
| ⌘0 | Select place 10 |
| ⌘N | Add place |
| ⌘R | Reconnect the selected place |
| ⌘V | Paste text, or an image-only clipboard as a PNG path |
| Ctrl+V | On a remote place, same image upload as ⌘V. On a local place, the process reads the Mac clipboard. |
An image-only paste writes /tmp/rterm-paste-<id>.png on the destination and types that path. A corner chip shows a spinner, Writing image… or Uploading image…, and a bar for bytes written. Remote upload uses the live SSH connection. Files larger than 10 MiB beep, show Paste failed, and do not paste.
One window only. Splits belong to herdr or tmux on the destination.
You need Xcode and mise.
git clone https://github.com/lewtec/rterm.git
cd rterm
mise install
mise runmise run builds and launches. mise run generate writes rterm.xcodeproj. mise run test runs the unit tests.
The public version is the git tag. svu picks the next tag. The Release build stamps that tag into MARKETING_VERSION. Do not commit a version bump.
Same operator API as the other lewtec repos:
- GitHub → Actions → Autorelease → Run workflow
- Pick
next,patch,minor, ormajor - That runs
mise release $NEW_VERSION: tag withsvu, build a universal DMG, publish with GoReleaser
First release: pick minor (0.1.0). There are no tags yet, so patch would mint 0.0.1.
Locally: mise release minor. A DMG without a GitHub release: VERSION=0.1.0-dev mise package.
The DMG is unsigned. First open: right-click rterm → Open.
Design rules live in SPEC.md.


