you@anywhere ❯ tmux attach — without the terminal

A native macOS + iPadOS front-end for 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: the sidebar's Agents section sorts coding agents into Needs You, Just Finished and Working, each row showing its project, branch, what it's doing and its uncommitted changes, above a Pinned session and the Local host's sessions and windows; the selected Claude Code session fills the rest
macOS — libghostty surfaces, with twenty built-in themes to pick from

2:features

3:agents

Run Claude Code, Codex, OpenCode or pi inside your tmux windows and the sidebar's Agents section sorts them by what needs you: Needs You first, then Just Finished, then Working — with each one's project and branch, what it's doing right now, and its uncommitted +/−. ⌘1–9 jumps straight to one; ⇧⌘A opens an Agents window with the full table.

Per-host status hooks install (and uninstall) with one click, and never touch your other hooks. On macOS the Dock badge counts only the agents waiting for you — 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 DMG (universal, macOS 14+) and drag it 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.

also from me — stayupfront

The all-in-one customer support platform for small B2B SaaS teams — one always-current portal for your customers, one workspace for your team.

stayupfront.com →