you@anywhere tmux attach — without the terminal

A native macOS + iPadOS front-end for real tmux.

A sidebar of hosts → sessions → windows you click to switch, with the selected session's live terminal filling the rest. Local or over SSH. Your sessions live in tmux, exactly as they always have — Belfry attaches; it never owns them. Quit the app, kill the network, switch devices: everything keeps running.

or brew tap robgough/belfry && brew install --cask belfry

1:overview

Belfry on macOS: a Pinned section at the top of the sidebar keeps favourite sessions and windows one click away, above Local and SSH hosts with their sessions and windows, Working and Waiting badges on claude windows, and a live split terminal showing nvim beside a passing test run
macOS — libghostty surfaces, your Ghostty theme picked up automatically

2:features

3:claude code badges

Run Claude Code inside your tmux windows and the sidebar shows what every one is up to, at a glance: Working, Agents still running after its turn, Idle, or Waiting on you. Optional per-host status hooks install (and uninstall) with one click, and label each pin with its Claude session's name. On macOS the Dock badge counts only the windows waiting for your input — you notice from across the room, and only when it matters.

4:build

No toolchain needed on the Mac: brew tap robgough/belfry && brew install --cask belfry, or download the notarized app (universal, macOS 14+), unzip, drag to Applications. Or build from source:

macOS 14+

# needs tmux (brew install tmux) + Xcode
git clone https://github.com/robgough/belfry
cd belfry
scripts/make_app.sh release
open Belfry.app

iPadOS / iOS 17+

# needs xcodegen (brew install xcodegen)
git clone https://github.com/robgough/belfry
cd belfry
xcodegen generate
open BelfryiOS.xcodeproj  # set your team, run

Add hosts in-app: hostname, user, and a password or ed25519 key. Secrets go in the Keychain, never in the hosts file. The remote end just needs sshd and tmux.

5:how it works

Each host gets two planes. The control plane is a tmux -C client attached to a hidden per-launch session — it feeds the sidebar and issues actions, and never sizes your real sessions. The data plane is one terminal surface per visited session running tmux attach.

Both ride a per-platform transport behind a small seam: macOS forks PTYs and drives the system ssh with connection sharing; iPadOS speaks SSH in-process via SwiftNIO, running tmux as exec channels.