Netcode bugs only show up with real clients. Satura Space runs a host and up to three more clients as live Unity instances in one grid, with no player build.
Ownership, prediction, join order and disconnects only misbehave with real clients. The usual fix is a player build, several copies and alt-tabbing, then a rebuild for every change.
Each extra player is a real hidden Unity editor on a stub project that links your Assets and Packages and reads the main Library, the technique behind Unity's Multiplayer Play Mode. Nothing re-imports, so a clone boots in seconds.
Every client is an editor, so:
An agent adds players with satura_exec on the Unity MCP server, opens the scene with unity_open_scene, and calls your handles with unity_exec on one player or all of them. unity_logs reads each player's console and tag logs.
One handle covers the whole match:
[SaturaHandle("Host starts the match, clients join and move")]
public static IEnumerator HostOrJoin()
{
if (SaturaHandles.PlayerIndex == 0) yield return StartHost();
else yield return JoinAndMove();
}
The agent starts it everywhere at once with unity_exec(player="all") and SaturaHandles.StartAt(SameMoment(3), "HostOrJoin"). Every player runs it on its first frame after that moment and reports its own result. The agent reads them, fixes what broke and re-runs, and with no build in the loop that cycle is short.
Clones are editors: Mono, the editor asset pipeline, editor performance. They find logic and netcode bugs early; still test an IL2CPP build on target hardware before you ship.
Up to 4The primary plus three clones, in one auto-arranged grid.
SecondsStub project links to your Assets and Packages, reads the main Library. No re-import.
Stream · console · inputPlus its own hot-reload, so one fix reaches every client.
satura_execTo add or remove players, with unity_exec to start handles on every one.
Up to four per session: the primary plus three clones. Git worktrees give you more separate sessions.
Yes. It adds players with satura_exec and starts a handle on every player at the same moment. The handle branches on SaturaHandles.PlayerIndex, so each client plays its part.
Reproduce the netcode bug, fix it, and re-run the match without leaving the app.