🛠 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.

01

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."

02

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.

03

Driving

Emit controller input, run input scripts, replay recorded sequences. Deterministic, headless, and scriptable — the same run/see/drive loop every time.

04

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.

05

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.

06

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.

07

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.

08

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