morluto/rea (REA morluto): Reverse Engineering Tools for AI Agents
morluto/rea gives an AI agent the tools a reverse engineer would normally reach for by hand. It is a local MCP server, so the agent inspects a binary, an app bundle or a website and gets back findings with the evidence attached, then reasons on top of them.
What REA adds to an agent
Most agent toolchains describe code that is already readable. morluto/rea — REA — covers the case where nothing readable exists: a stripped binary, a packaged desktop app, an APK, firmware, a minified bundle. It is an MIT-licensed TypeScript MCP server that the agent calls the same way it calls a file reader or a shell.
The design decision that matters for agents is evidence. Each tool result carries the code it found, the references it followed and the questions it could not answer. The agent can therefore explain what it learned, say what remains unknown, and go back for a second pass — instead of producing a confident paragraph that nobody can check.
One MCP server, many ways in
REA treats each target type as a separate inspection rather than pushing everything through one decompiler. The set that ships today covers:
- Native binaries, offline ELF layout and recorded Linux crashes — pseudocode, symbols, registers and signal context, via Hopper, Ghidra or IDA.
- JavaScript, Electron apps and packaged websites — module and IPC graphs, source maps, routes, scripts and network observations.
- .NET assemblies — metadata, CIL instructions and native dependency declarations, read without executing.
- Android — APK manifests and decompiled methods, live device packages, logs, screen captures and JEB projects.
- WASM artifacts and EVM bytecode — validation, WAT forms and dispatch selectors.
- Firmware and packages — region maps, extraction results, file inventories, plist and Apple bundle anatomy.
- Process behaviour — terminal output, interactions, exit and filesystem observations, plus run comparisons.
Set it up in one command
Installation targets the agent, not a desktop GUI. npx rea-agents@latest setup
installs REA and registers the MCP server with the agent it finds. A global copy (npm install --global
rea-agents, then rea update) keeps the CLI on the same version, and any single analysis can be
run without installing at all:
npx -y rea-agents@latest analyze-javascript-application /path --json
The JSON output is what makes the same server useful outside a chat session — a scheduled job or a review step can call it and store what came back.
Requirements, engines and permissions
Node.js 22.x (>= 22.19), 24.x (>= 24.11) or 26+ is required. Deep native analysis needs Hopper, Ghidra or IDA installed locally; REA drives whichever is present and can launch Hopper itself. Everything else — JavaScript, .NET, HAR captures and the static target types — runs without any native engine.
Static inspection never runs the target. Runtime capture does interact with it, under your own
user account and permissions, which is why the guides describe the effects before the commands. Timeouts for very
large binaries are configurable with REA_GHIDRA_STARTUP_TIMEOUT_MS and
REA_HOPPER_STARTUP_TIMEOUT_MS.
Worked examples from the project
- DX-Ball's sound pan — REA's reconstruction passes 3,205 original x86 cases and reproduces all 63 compiled function bytes, which is the standard the project uses for a faithful rewrite.
- Notion's clipboard bridge — the Electron IPC path that copy and paste depends on, walked through the packaged app and reimplemented.
- TH04's bullet ring — a PC-98 DOS shooting-game effect reconstructed and compared against the historical compiler output.
Full write-ups are published at rea.tools.
FAQ
Does any of my code leave the machine? No. Detection and analysis run locally; the files are never uploaded. Only the agent's own conversation with its model provider is sent, under whatever policy you have configured there.
Which agents work with it? Any client that supports local MCP servers. Setup covers Claude Code, Codex, Cursor, Gemini CLI and Grok Build; anything else registers the server by hand.
Is a decompiler licence required? Only for deep native work. Hopper, Ghidra or IDA is needed there; Ghidra is free, and the static target types need nothing extra.
How does it handle targets from other platforms? Android devices, PC-98 and 16-bit DOS targets are covered as their own operations rather than being forced through a generic path, and each one has a guide on the project site.