The agent writes a few lines of JavaScript with satura_exec: press Play, drive the game through your handles, record the run, hand you a Tuner. Every step is awaited until it's really done.
A narrow tool does one thing per round trip, and its schema rides along in every request. Satura Space registers one. The agent writes the body of an async function, and every call in it settles when the work is really done: Play entered, compile finished, video saved. One script compiles, plays, drives the game, films it and opens a report.
unity.exec reaches every Editor API and package you have, with no recompile or domain reload.DialogBlocked in about a second instead of hanging, and unity.answer presses its button.It's written into .mcp.json and the Claude Code, Cursor and Codex configs for you, with no API key. Other CLI agents still work in a normal shell.
satura_execunity.exec with no domain reload, compile, Play and Stop, logs, screenshots, dialogs, and Unity's source and docs at your version.[SaturaHandle] handles on one player or all of them.Each line waits for the one before it. Failures are exceptions the agent can branch on: CompileError, HandleError, DialogBlocked, UnityTimeout.
await unity.refresh()
await unity.play('Assets/Scenes/Pond.unity')
await handles.call('PrepareStageForFishTest')
const bite = await handles.call('WaitForBite', 10)
await unity.stop()
return bite.value
When a value needs your eye, the agent hands it over and ends its turn:
return await tuner.open({
name: 'arena-lights',
note: 'Balance the arena lights, then copy your changes to me',
objects: [{ path: '**', components: [
{ type: 'Light', fields: ['m_Intensity', 'm_Color'] }
] }]
})
The reply is the return value plus each step with its time, the failed one marked. Scripts get no file access and run up to 300 seconds by default.
Claude Code, Codex and Cursor. Any MCP client can be pointed at it, and other CLI agents still work in a normal shell.
Every tool's schema rides along in every request, and a narrow tool does one thing per round trip. With one tool the agent chains compile, Play, handles, video and a report in a single script and gets one reply.
No. The server runs locally and everything rides local loopback. Crash reports are anonymous and scrubbed.
The call throws DialogBlocked in about a second instead of hanging. unity.dialogs() reads the dialog and unity.answer('Save') presses its button from outside the editor process.
One tool, registered for you, on a Unity session that is already running.