peterknego/roost

Remote dev workspace for Claude Code and other coding agents in your browser: persistent terminals, live diffs. Single Rust binary, no Node.

3

stars

656

commits

Rust

primary language

Sep 6, 2026

updated

claude
claude-code
remote
remote-access
terminal

README

roost

roost

Run your long-running coding sessions on server. Watch them through your browser.

This project started because I was scratching my itch: I wanted a simple remote termnal that survives any interruption, preferably runs through browser, and has a few must-haves: file tree, file upload, diff window, editor and preview. I managed to get by with mosh/tmux/md-tui, but that setup just did not understand projects and worktrees. So I created a lightweight Rust tool that gives any coding project its own browser tab and all needed info in one place. Backed by dtach shells that survive tab close, laptop sleep, network down and even restart of roost itself.

CI Release License Rust

roost workspace: file tree and git changes on the left, an editor in the middle, and Claude Code in a terminal on the right reviewing an uncommitted edit

Why

Because you want a simpler way to have remote access to your server box. Roost is a 4MB Rust binary that gives your every project or worktree a tab in a browser.

roostttyd / Wettycode-servertmux + ssh
Terminals survive restartn/a
Editor + diffs + tree
Mirrors across browsers
Claude Code IDE protocol
Paste a screenshot to the agent
Single binary, no Node
Auto-reconnects after the laptop sleeps
Needed on the laptopbrowserbrowserbrowserssh client + terminal
Drag-and-drop files to upload
Multiple git worktrees, switchable
Server binary4 MB0.7 MB235 MB download1.3 MB
Server memory16 MB (7 shells)9 MB (1 shell)770 MB (1 workspace)3 MB (1 shell)

Install

# dtach and git must be on PATH
brew install dtach          # or: apt install dtach

cargo install --git https://github.com/PeterKnego/roost

ROOST_ROOTS="$HOME/Projects" roost 8444
# open http://127.0.0.1:8444/

Prebuilt Linux x86_64 binaries are on the releases page. macOS is used daily; Windows is untested.

roost has no authentication of its own. It only binds to 127.0.0.1. Put auth layer in front of it - tailscale serve is what I use. Read Security model before exposing it.

Features

A tab per project/worktree

Every tab represents project/worktree, and has panes in familiar IDE-like arrangemet: file-tree, file-diffs, file priview/editor, terminal.

Terminals that survive reload/re-attach/restart

Each terminal is a PTY owned by roost and wrapped in dtach, so sessions survive a tab reload, network disconnect, laptop sleep, and even a roost restart.

All state lives on the server and mirrors live

Open a file in one browser and it opens in every connected browser. Layout and unsaved buffers persist across restarts, stored outside the repo — so pane drags never show up in git status.

Drag-n-drop files/images or paste images

Drag-n-drop files into file tree for instant upload to remote filesystem. As for images, you can drag them or paste them into claude terminal and they will be uploaded and pasted directly into claude as image - this is a must-have feature when you just want to quickly paste a screenshot into claude for analysis.

Claude Code integrates with the project

A claude running in a terminal pane connects back to roost via IDE protocol, same as VS Code or Jetbrains IDEs. This gives it unique integration abilities: paste image, links to @file, "live" links in terminal that open when clicking on it and claude initiated file diff viewer (if in manual permission mode).

A proposal tab showing the two lines Claude wants to delete, with Accept, Reject and Edit buttons, beside the terminal where Claude is asking for the same approval

Desktop notifications

Roost supports sending desktop notifications from any terminal. Clicking notification will take you directly to that terminal. Also, Roost can install hooks into claude to enable notification every time claude needs attention. See docs/notifications.md.

Security model

roost only binds to 127.0.0.1 and is meant to be fronted by an auth layer, such as tailscale. More about it in SECURITY.md

Contributors

PeterKnego

656 commits

peterknego/roost

Remote dev workspace for Claude Code and other coding agents in your browser: persistent terminals, live diffs. Single Rust binary, no Node.

3

stars

656

commits

Rust

primary language

Sep 6, 2026

updated

claude
claude-code
remote
remote-access
terminal

README

roost

roost

Run your long-running coding sessions on server. Watch them through your browser.

This project started because I was scratching my itch: I wanted a simple remote termnal that survives any interruption, preferably runs through browser, and has a few must-haves: file tree, file upload, diff window, editor and preview. I managed to get by with mosh/tmux/md-tui, but that setup just did not understand projects and worktrees. So I created a lightweight Rust tool that gives any coding project its own browser tab and all needed info in one place. Backed by dtach shells that survive tab close, laptop sleep, network down and even restart of roost itself.

CI Release License Rust

roost workspace: file tree and git changes on the left, an editor in the middle, and Claude Code in a terminal on the right reviewing an uncommitted edit

Why

Because you want a simpler way to have remote access to your server box. Roost is a 4MB Rust binary that gives your every project or worktree a tab in a browser.

roostttyd / Wettycode-servertmux + ssh
Terminals survive restartn/a
Editor + diffs + tree
Mirrors across browsers
Claude Code IDE protocol
Paste a screenshot to the agent
Single binary, no Node
Auto-reconnects after the laptop sleeps
Needed on the laptopbrowserbrowserbrowserssh client + terminal
Drag-and-drop files to upload
Multiple git worktrees, switchable
Server binary4 MB0.7 MB235 MB download1.3 MB
Server memory16 MB (7 shells)9 MB (1 shell)770 MB (1 workspace)3 MB (1 shell)

Install

# dtach and git must be on PATH
brew install dtach          # or: apt install dtach

cargo install --git https://github.com/PeterKnego/roost

ROOST_ROOTS="$HOME/Projects" roost 8444
# open http://127.0.0.1:8444/

Prebuilt Linux x86_64 binaries are on the releases page. macOS is used daily; Windows is untested.

roost has no authentication of its own. It only binds to 127.0.0.1. Put auth layer in front of it - tailscale serve is what I use. Read Security model before exposing it.

Features

A tab per project/worktree

Every tab represents project/worktree, and has panes in familiar IDE-like arrangemet: file-tree, file-diffs, file priview/editor, terminal.

Terminals that survive reload/re-attach/restart

Each terminal is a PTY owned by roost and wrapped in dtach, so sessions survive a tab reload, network disconnect, laptop sleep, and even a roost restart.

All state lives on the server and mirrors live

Open a file in one browser and it opens in every connected browser. Layout and unsaved buffers persist across restarts, stored outside the repo — so pane drags never show up in git status.

Drag-n-drop files/images or paste images

Drag-n-drop files into file tree for instant upload to remote filesystem. As for images, you can drag them or paste them into claude terminal and they will be uploaded and pasted directly into claude as image - this is a must-have feature when you just want to quickly paste a screenshot into claude for analysis.

Claude Code integrates with the project

A claude running in a terminal pane connects back to roost via IDE protocol, same as VS Code or Jetbrains IDEs. This gives it unique integration abilities: paste image, links to @file, "live" links in terminal that open when clicking on it and claude initiated file diff viewer (if in manual permission mode).

A proposal tab showing the two lines Claude wants to delete, with Accept, Reject and Edit buttons, beside the terminal where Claude is asking for the same approval

Desktop notifications

Roost supports sending desktop notifications from any terminal. Clicking notification will take you directly to that terminal. Also, Roost can install hooks into claude to enable notification every time claude needs attention. See docs/notifications.md.

Security model

roost only binds to 127.0.0.1 and is meant to be fronted by an auth layer, such as tailscale. More about it in SECURITY.md

Contributors

PeterKnego

656 commits

Languages

Rust

68.9%

JavaScript

28.3%

CSS

2.8%