tool for detachable ptys with optional tailscale discovery

readme.md

tobi keeps commands running in detachable sessions across your devices.

tobi -- nu spins up a daemon with the command running. the daemon will automatically detach if you close your terminal window. detached sessions will be cleaned up after 24h of them being detached. tobi host.id -- nu creates a session on that target, and since host is optional you can tobi .id -- nu to create a session with that specific id! hosts can carry a user (tobi you@host.id) when your ssh config doesn't already set one, or you want to use a different user.

you can access it from any of your other devices on your tailscale network by running tobi, which opens up a fuzzy selector with all the sessions across your network, one row per host: enter on a host row starts a login shell there, so you can open a session without leaving the picker, and ctrl+x on a session kills it. hosts that are offline or unreachable are listed but can't be picked. you can also just do tobi hx, tobi host.<TAB> or tobi hs.id to attach a session using fuzzy search.

unlike tmux, tobi doesn't nest. running tobi inside a tobi session will just replace your session with the target session. multiple viewers can attach to a single tobi session (in that case minimum terminal size will be used).

clipboard images #

tobi passes osc 5522 (kitty's clipboard protocol, used for pasting images) and the CSI ? 5522 $ p probe that detects it through to your terminal. with several viewers attached, only the one that typed last sees them, so one paste doesn't prompt every terminal. your terminal still has to implement it.

requirements #

tobi uses tssh if it's in PATH, otherwise ssh. tailscale binary is only required for discovery to function, nothing else.

installation #

there is a nix flake so you can use that, just do nix profile add git+https://tangled.org/ptr.pet/tobi. or nix-env -f . -i tobi (or nix profile add -f .). otherwise get go and compile it!

if you run target tobi to a host that doesn't have it, then tobi will install itself onto the user's ~/.local/bin (or equivalent) automatically, or upgrade an outdated tobi if the one on the target host is a different version.

if you use the nix package or build with carriers (see ./scripts) then you can infect other machines with tobi as long as the os/arch is supported, which are linux amd64, arm64 & macos arm64.

acknowledgements #

charm ui libs and tailscale. llms were also used while making this (i leave how much up to the reader if you care ^^).