Terminal first
The agent session is the center of the screen, streamed over the relay. Everything else is a panel you can close.
shu's IDE
shuside runs each coding thread in a full KVM virtual machine on your own cluster. Claude Code or Codex works inside it with a real kernel, real services, and real devices. You watch from a browser IDE built for many machines at once.
Why a whole machine
Branches isolate files. They do not isolate port 5432, the Docker daemon, the GPU, or the phone plugged into your desk. Put four agents on one host and they fight over all of it.
How a thread runs
A .shuside/ directory in your project says what a VM looks like and how to build it. Every thread boots from that, on your cluster.
project.yaml sets cpu, memory, disk, and whether the thread needs a GPU. A build script installs what the project needs, once, into a qcow2.
The hash covers project.yaml and the build inputs. Same hash, same image, pulled from storage. Nothing rebuilds unless the definition changed.
The controller picks a node with room, and a free GPU if you asked for one. The worker boots a KVM guest, checks out your branch, and starts Claude Code or Codex in it.
The terminal streams through the relay to your browser or your phone. Pause it, resume it, or release it when the PR is up.
instance: cpu: 8 mem_mb: 32768 disk_gb: 120 gpu: true base_image: shuside-base build_inputs: - vm/ # vm/build.sh installs toolchains, services, # and emulators into the image. Run once per hash.
The IDE
Opinionated in the direction of VS Code and Cursor. The left rail is every thread you own across every project, each one a machine.
The agent session is the center of the screen, streamed over the relay. Everything else is a panel you can close.
noVNC to the guest display, for when the agent opens a browser, an emulator, or something with a window.
Working tree against the base commit, a git graph, and per-file discard behind a confirmation. Served by the guest.
One button stages, commits, pushes, and opens the pull request through a GitHub App. Nobody types commit messages.
Same app, no separate build. The rail becomes a drawer, the panels become tabs, and the terminal stays usable.
Sign in with the subscriptions you already pay for. Credentials sit in Vault and each thread picks one.
Coworkers
A thread is a prompt, a branch, and a machine. Start it from your phone on the train, check the terminal from another laptop, come back to a pull request. The VM does not care which device you attached from, or whether you attached at all.
Self-hostable
Supabase for the backbone, KVM and libvirt on Linux machines you own, a tailnet between them. Every non-FOSS piece sits behind a named slot with a documented swap.
Opinionated on purpose
shuside is heavier than a sandbox because the problems it is for are heavier than a sandbox. It assumes Linux hosts with KVM, a tailnet, and a project where an agent needs a machine, not a folder.
Bring a Linux host with KVM and a project that has outgrown a worktree. shuside does the rest.
Open shusideUnder development. Expect rough edges.