Roost
A desktop terminal for running several coding agents without losing the thread.
A native macOS + Linux terminal that keeps Claude Code, Codex, OpenCode, and regular shells organized by project. Built on libghostty-vt, with quick theme/font switching, scriptable launch points, and early native agent integration.
$ roostctl claude install >> ~/.zshrc
→ wired Claude Code hooks to this Roost
$ roostctl tab list
[api-gateway] 1 claude running ●
[billing] 4 claude needs_input ●
[web] 3 codex idle ✓
$ roostctl tab focus --tab 4
✓ billing / tab 4 focused, badge cleared
Overview
Roost is a desktop terminal built for running several coding agents at once. Instead of a flat row of identical tabs, it organizes work around active projects: a left rail of repos, tabs per project, and one libghostty-vt terminal in each. A project might have Claude Code in one tab, strix in another, a regular shell for ad hoc commands, and sometimes another agent working in a different worktree. Notifications can jump back to the tab asking for attention, which keeps multitasking across agent sessions organized.
It’s the terminal I reach for every day, so it has grown around the work I actually do with agents: less typing code, more reading, reviewing, and reacting to work in flight. A command palette switches theme, font, and size, which sounds small until you spend a day reading agent transcripts in different rooms, different lighting, and different levels of fatigue.
The extension points are intentionally small. A launcher can open strix when I want to inspect the diff, or a provider script can build a quick menu for creating or opening a shed. The extension guide shows the same patterns with fixed command = entries, dynamic provider = menus, and scripts that can call back into Roost when they need to open a tab or present a choice.
The native agent integration is still early. Claude Code hooks can tell Roost when a tab is running, finished, or waiting for input, and the UI can route you back to it. That path is useful today, but the notifications, UI policy, and deeper Claude integration are still being refined. Once that feels right, Codex and OpenCode integrations are the obvious next step.
Roost owes a lot to two projects. Its terminal is libghostty-vt and its bundled themes are Ghostty’s own. I like Ghostty, have a lot of respect for Mitchell Hashimoto’s work, and libghostty felt like the natural starting point for a native terminal app. Roost’s project-and-tab shape is inspired by cmux. Both projects are excellent and more featureful than Roost; Roost is the leaner one, tuned to the workflow I run.
Where it stands
Roost is the surface much of StrideLabs is built from. Most of these tools, and this site, were written in Claude Code running in a Roost tab, and strix began as a command behind one of its launchers. Where the other tools sharpen a single workflow, Roost is where I run them and the agents that drive them.
Roost is my daily terminal on macOS, which is where it is most polished. Linux is a first-class target and the feature set is intended to stay aligned, but it sees less day-to-day use and will keep getting refined. The install docs cover both macOS and Linux.
Projects, not tabs
A sidebar of active repos; each project expands into the tabs that belong to that work: Claude Code, strix, ad hoc shells, or another agent in a different worktree.
Built on libghostty-vt
Each tab is a libghostty-vt surface, so terminals are fast and render what agents emit (truecolor, images, OSC 8 hyperlinks) with no browser-terminal lag. The bundled themes are Ghostty's own; Roost owes its terminal to that project.
Switch theme and font on the fly
A command palette picks from bundled themes and installed fonts, and a per-tab hotkey bumps the size. It sounds small until your main job is reading and reviewing long agent transcripts in changing light.
Launchers and extension points
Fixed command launcher entries and dynamic provider menus let Roost fit around your tools: open strix for a diff, build a quick shed picker, or script Roost to open tabs and present choices.
Agent integration, still early
Claude Code hooks can mark a tab running, finished, or waiting for input, then route you back to it. The notification policy and deeper agent integrations are still maturing; Codex and OpenCode are natural next steps.
Two native UIs, no daemon
Swift + AppKit on macOS and Rust + gtk4-rs on Linux, each embedding the workspace, PTY supervisor, and a JSON-IPC server in-process. External tooling talks to the running UI over a Unix-domain socket.