Herdr
the runtime your coding agents live on
A GNU screen style terminal multiplexer built on libghostty.
_ .-. | |__ ___ ___ (o o) | '_ \ / _ \ / _ \ | O \ | |_) | (_) | (_) | \ \ |_.__/ \___/ \___/ `~~~'
Sessions that haunt your terminal.
Install | Usage | Automation | Why | Architecture
A GNU screen style terminal multiplexer built on
libghostty
(libghostty-vt), written in Zig.
Every session's output is parsed through Ghostty's terminal emulation core, so boo always knows the exact screen state of every session: contents, styles, cursor, scrollback, and terminal modes. That state is used to rehydrate your terminal on attach, to answer terminal queries for detached sessions, and to let scripts and AI agents read the screen exactly as a human would see it.
Ctrl-A d, reattach with boo attach.boo ui lists sessions in a sidebar.send, peek, wait, and --json output, all usable without a TTY.For Linux and macOS:
curl -fsSL https://raw.githubusercontent.com/coder/boo/main/install.sh | sh
Pre-built binaries are published on the releases page. Set BOO_VERSION to pin a release and BOO_INSTALL_DIR to change the
install location (default: /usr/local/bin when writable, otherwise
~/.local/bin).
boo new # new session running $SHELL, attached boo new work # named session boo new work -d -- make # create detached, running a command boo ui # manage sessions in a full-screen UI (alias: i) boo ls # list sessions boo attach work # reattach (alias: at, a) boo rename work api # rename a session boo kill work # end a session boo kill --all # end every session
With no name, boo new names the session after the current directory,
falling back to the process id when that name is taken or unusable.
Run boo help for the full overview, boo help <command> for flags
and examples, and boo help --all to print every help page at once.
Ctrl-a)Bindings follow GNU screen's defaults, including the C-x variants
(C-a C-d detaches just like C-a d).
| Keys | Action |
|---|---|
C-a d, C-a C-d |
detach |
C-a l, C-a C-l |
redraw |
C-a a |
send a literal C-a |
boo ui adds additional keybinds for switching, resizing and hiding the sidebar, creating sessions, and killing them.
Everything except attach works without a terminal, which makes boo a
natural sandbox for scripts and AI agents driving interactive programs.
The canonical loop:
boo new build -d -- bash # 1. headless session boo send build --text 'make' --enter # 2. type into it boo wait build --idle # 3. let output settle boo peek build --scrollback # 4. read the screen boo kill build # 5. clean up
peek prints the rendered screen reconstructed
from terminal state, not a raw byte log: ordered, fully redrawn, and
stable. --scrollback includes history; --json adds size, cursor,
and title.wait --text <text> blocks until the screen contains
the text; wait --idle until output has been quiet for 2 seconds;
--timeout <dur> exits 4 instead of hanging forever (durations:
500ms, 2s, 1m, 4h, 1d). No more sleep-and-poll loops.send --text is literal: no escape processing, no
implicit newline, no quoting layer to fight. --enter submits,
--key Enter,C-c,Up names control keys, and stdin mode is binary
safe.ls --json and peek --json.0 success, 1 error, 2 usage error, 3 no such
session, 4 wait timed out.See boo help automation for the full page.
GNU screen works the same way boo does, architecturally: it parses all
output through its own built-in terminal emulator and redraws from
that state on reattach. But that emulator is decades old and lags far
behind what modern programs emit. Whatever it doesn't understand gets
dropped or mangled on redraw. boo swaps that layer for libghostty-vt,
Ghostty's VT core, so the saved state matches what your terminal would
actually display, and terminal queries are answered while detached so
TUIs don't hang unattended.
Scripting is the other win: send, peek --json, and
wait --text/--idle instead of -X stuff, hardcopy files, and
sleep loops.
tmux is great, it just solves a different problem. boo keeps screen's
model by design: sessions, a prefix key, and nothing else to learn.
One session per task, with boo ui to juggle them.
Requires Zig 0.15.2.
zig build # binary in zig-out/bin/boo zig build test # unit tests zig build test-integration # end-to-end tests on a real PTY zig build test-all # everything
The libghostty dependency is fetched and built from source
automatically (pinned in build.zig.zon).
With Nix, nix develop opens a shell with the right Zig version, and
nix build builds the package to ./result/bin/boo.
your terminal <-(raw tty)-> boo client <-(unix socket)-> session daemon
`- PTY + ghostty-vt Terminal
src/protocol.zig).ghostty-vt TerminalStream (src/window.zig).TerminalFormatter.This is a young project, not a drop-in GNU screen replacement:
-x sharing.boo ui.C-a prefix is not yet configurable, and pasted bytes containing
0x01 are interpreted as the prefix (GNU screen has the same quirk;
boo ui is immune thanks to bracketed paste).TERM=xterm-256color.Feel free to open an issue if you have questions, run into bugs, or have a feature request.
MIT. Ghostty itself is MIT licensed.
the runtime your coding agents live on
Superpowers skills and runtime bootstrap for coding agents
Next-gen IDE for parallel agentic development
The most RAM efficient harness
Nova versão disponível.