`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 ^^).
