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, on the machine you already have, without a player build.
You can reason about single-player logic from the code alone. You cannot do that with netcode. Ownership, prediction, reconciliation, join order, late joins, disconnects: these only misbehave once two or more real clients are talking to each other, and reproducing them means getting several clients into the same state at the same time.
The conventional answer is to build a player, launch two or three copies, alt-tab between them, and rebuild for every change. The build is the expensive part, and it sits directly in the middle of the loop.
Satura Space adds each extra player as a real hidden Unity editor, not a built player. The clone is pointed at a small stub project that links back to your Assets and Packages and reads the main project's Library, which is the same technique behind Unity's Multiplayer Play Mode. Nothing is re-imported, so a clone boots in seconds rather than minutes.
Because every client is an editor instance, the whole session shares one code path:
Library clones instantly with no extra disk.The version worth setting up has an agent driving those four windows instead of you. Through the Unity MCP server an agent calls unity_add_player to shape the grid, opens a scene, enters Play Mode, and runs a TddScenario across every client at once.
The scenario branches on which client it is running as, so one file describes the whole match:
public class HostJoinTest : TddScenario
{
public override IEnumerator Run()
{
if (IsHost) yield return StartHost();
else yield return JoinAndMove();
}
}
PlayerIndex, PlayerCount and IsHost are set per instance before the scenario starts, and each side writes its own pass or fail result. The agent reads those results, fixes what broke, and re-runs the match. With no build in the loop, that cycle is short enough to iterate on.
They are editor instances, so they behave like the editor: Mono scripting backend, editor-time asset pipeline, editor performance characteristics. This is the right tool for finding logic and netcode bugs early. It does not replace testing a real 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.
unity_add_playerWith unity_remove_player and unity_open_scene to run the match.
Each clone is a real hidden editor pointed at a stub project that links back to your Assets and Packages and reads the main Library (the same trick as Unity's Multiplayer Play Mode), so it boots in seconds with no re-import.
Four per session: the primary plus three clones. For more, run additional sessions in git worktrees, where each one gets its own checkout and its own instances.
No. Every client is an editor instance, so there is no build step anywhere in the loop, and code changes reach all of them through hot-reload.
Yes. unity_add_player shapes the grid, and a TddScenario branches on IsHost and PlayerIndex so every client plays its part and reports pass or fail.
Yes, as a real keyboard and mouse device, if your game reads Unity's Input System. Legacy Input Manager games won't see injected input.
Normal and Headless Graphics modes support the full grid. Headless NoGraphics drops rendering entirely and is single-player only.
TddScenario, write Run(), and let every client prove the change works.
C# hot-reloadFix netcode mid-match; the patch reaches every client without a rebuild.
Unity MCP serverThe tools an agent calls to add players, open scenes and read each console.
Coding agentsClaude Code, Codex, Cursor and more, each in its own live terminal.
Reproduce the netcode bug, fix it, and re-run the match without leaving the app.