🛠 THE FULL LOOP
One tool surface, whole pipeline
Build → run → see → drive → inspect → patch → iterate. Every capability is a tool your editor's AI can drive over MCP — or, with no MCP, via the Agent Skill the server ships, which calls the tools over plain HTTP.
Building
Bundled per-platform toolchains compiled to WebAssembly — cc65, SDCC, RGBDS, asar, vasm, SGDK, PVSnesLib, libtonc, and more. The agent writes source, compiles it, and gets a real ROM. No PATH fiddling, no "Linux only."
Running & seeing
Load the ROM into an emulated console (libretro cores as WASM) and step it frame by frame. Capture the framebuffer as a PNG and hand it straight to the agent — so what it "sees" is exactly what the hardware draws.
Driving
Emit controller input, run input scripts, replay recorded sequences. Deterministic, headless, and scriptable — the same run/see/drive loop every time.
Asset conversion
Turn external art and audio into native data without leaving the server: PNG → platform tiles/tilemaps (row-major or hardware sprite order), quantize-to-palette, sprite-sheet/Aseprite/GIF loaders, and audio importers — BRR for SNES, XGM2 PCM for Genesis. Path in, native data out.
Reverse-engineering & romhacking
A full RE kit for modifying existing games: the Cheat-Engine value-search loop (memory({op:'search'}) → searchNext), memory({op:'classify'}) (is this "table" really ASCII?), breakpoint({on:'write'}) (the exact instruction that wrote a byte), a bundled cheat database as a free labeled RAM map, and a cross-platform ROM-hacking playbook.
Structural analysis & decompilation
An open-source Rizin + Ghidra engine (as WASM) across all 18 platforms — control-flow graphs, deep cross-refs, auto-detected functions, and C-like pseudocode with hardware registers named. Plus the differentiator no static tool has: live computed-jumptable recovery — running the emulator to resolve the dispatchers static analysis gives up on. No $3,000 IDA license.
Byte-exact rebuild v0.88.1
Disassemble a whole ROM into a rebuildable project, edit a region, then build({output:'reassemble'}) rebuilds it into a byte-identical ROM in one call — on all 15 classic platforms. A same-length edit rebuilds a valid modified ROM; a length-changing edit is refused, not silently corrupted. The "cmp before commit" gate for any structural hack.
Native game runtimes
The same run/see/drive/debug loop also hosts two native formats, not only libretro cores: wasmcart (.wasc — WASM games from any language) and jsgame (.jsgame — JavaScript canvas/WebGL games) — with V8/WASM introspection an emulator can't give.
The deliverable is the ROM
A standard, hardware-valid .nes / .gba / .md that runs on RetroArch, native emulators, flash carts, and real hardware. The bundled WASM cores are the dev instrument, not the distribution runtime.
$ npx romdevtools