
# REA
> Part of [Hermes Official Plugins](../README.md), Nous Research's official plugins for Hermes Agent.
Reverse engineer programs from Hermes with [REA](https://rea.tools)
([morluto/rea](https://github.com/morluto/rea), MIT): inspect native
executables and libraries, .NET assemblies, Electron and JavaScript
applications, Android packages, firmware images, packet and browser captures,
and the running behaviour of browser, Electron and terminal programs. REA
returns structured Evidence (decompiled code, call graphs, application graphs,
captures) and Hermes explains it or builds from it.
This is a portable [Agent Plugins v1](https://agent-plugins.org) package. One
install ships:
- `mcp.json`: the REA MCP server (`rea`), launched as
`npx -y rea-agents@6.7.0 mcp` over stdio for every new session while the
plugin is enabled. No `mcp_servers` edit in config.yaml.
- `skills/reverse-engineer-anything/`: REA's own workflow skill (target
routing, summary-first evidence paging, investigation planning), adapted for
Hermes: it connects through this plugin instead of `rea setup`, finds tools
through Hermes' tool search, and asks before steps that run or change
something.
- `skills/crash-triage/`: from a Linux core dump and the binary that crashed to
a root cause and a bug report you can paste into an issue. It reads the crash
with `inspect_recorded_crash`, places the program counter with
`inspect_binary_layout` and a small standard-library helper that decodes the
core's mapped-file list and checks the binary's build ID against the core,
classifies the crash (NULL dereference, stack overflow, abort, ...), and
never runs the program. Stripped binaries work too: the helper names
functions from the unwind tables, and the skill walks back from the crashing
function to the caller that produced the bad value (in the disassembly, or
in REA's pseudocode when a decompiler provider is available). Adapted from
[crashlens](https://github.com/mingleiw/crashlens) (MIT).
## Install
```bash
hermes plugins install rea # from the Nous plugin catalog
hermes plugins enable rea
```
Then start a new Hermes session and ask, for example, "Use REA to inspect
/Applications/Notes.app and explain how CSV export works." or "./parser
crashed and left ./core. Why?"
Requirements:
- Node.js 22.19+, 24.11+ or 26+ with `npx` on PATH (REA does not support Node
23 or 25). The first start downloads the pinned package into npm's cache.
- Nothing else for static JavaScript/Electron/ASAR analysis, archive and
package inventory, Go/Rust binary metadata, PE resources, .NET metadata and
saved HAR captures.
- For core dumps and offline ELF layout (`inspect_recorded_crash`,
`inspect_binary_layout`): a Python with pwntools 4.15.0, pyelftools 0.33 and
Unicorn 2.1.2, named in `~/.hermes/.env` as
`REA_PWNTOOLS_PYTHON=/path/to/venv/bin/python`. Hermes passes MCP servers only
a small set of environment variables, so `mcp.json` forwards this one
explicitly; a value exported only in your shell does not reach REA.
- Nothing else for the newer built-in readers: Go build info
(`inspect_go_binary`), cargo-auditable Rust dependencies
(`inspect_rust_binary`), Electron fuses (`inspect_electron_fuses`), Flutter
and Dart AOT build facts, HarmonyOS package graphs. `inspect_sqlite_database`
needs Node.js 24.15+ or 26+.
- Bring your own engine for the rest: Ghidra plus a JDK, Hopper, IDA or Kuna for
native decompilation; JADX and Java for Android code; Binwalk/Unblob for
firmware extraction; TShark/capinfos, sigrok-cli, WABT, GNU objdump, GDB,
Rizin/Cutter or Frida for their formats and debuggers. REA never installs
these, and the skill tells the agent not to either.
Engines found on `PATH` (objdump, gdb, rizin) work as is. Engines REA locates
through an environment variable do not: Hermes passes MCP servers only a small
set of environment variables, and this plugin forwards only
`REA_PWNTOOLS_PYTHON`. To use Kuna (`REA_KUNA_COMMAND`), TShark
(`REA_TSHARK_COMMAND`, `REA_CAPINFOS_COMMAND`), sigrok (`REA_SIGROK_COMMAND`),
WABT (`REA_WABT_BIN_DIRECTORY`) or Ghidra/JDK locations, add them to a
same-name `mcp_servers.rea` override as shown in the
[recovery guide](skills/reverse-engineer-anything/references/connection-and-recovery.md)
(keep the pinned launch command).
Do not also run `npx rea-agents setup --client hermes`. It writes its own
`mcp_servers.rea` entry to config.yaml, which replaces this plugin's pinned
server.
## Native analysis wait budget
Every REA call runs under Hermes' normal MCP tool deadline (300 seconds by
default). The plugin sets Ghidra's internal startup deadline to 900 seconds
so a large import is not cut short on REA's side. A per-server Hermes call
budget for REA ships with Hermes v0.23.0; this package will declare it once
that release is out, so it installs on every current Hermes release today.
`open_binary` validates a target, but the first Ghidra-backed query imports and
analyzes it. Large executables can take several minutes. Subsequent queries
reuse that session; reopening or restarting discards its ephemeral analysis.
Cancellation remains available, and a completed open is not a progress signal.
In a binary-first test on WinSCP 6.7, the console launcher imported in about
30 seconds. The GUI executable exceeded the upstream 330-second default and
completed in 663 seconds with a 1000-second Hermes budget, which needs
Hermes v0.23.0 or newer. A subsequent real Hermes
chat using the same native target completed its first query in 580 seconds,
then made successful follow-up decompilation and caller queries. Both runs
recovered 28,701 procedures. The Windows executable was analyzed statically,
never launched. These are observations on one Linux host, not completion-time
guarantees. See the bundled
[recovery guide](skills/reverse-engineer-anything/references/connection-and-recovery.md)
for deadline troubleshooting.
Pseudocode is decompiler output, not reconstructed original source. The skill
asks Hermes to cross-check consequential claims with assembly and references,
label inferred names/types, and report missing symbols and analysis warnings.
## What you get
207 tools from REA 6.7.0, registered as `mcp__rea__`
(`mcp__rea__open_binary`, `mcp__rea__analyze_function`,
`mcp__rea__analyze_javascript_application`, `mcp__rea__inspect_android_package`,
...). Their input schemas and descriptions total roughly 800 KB, so Hermes keeps them behind its
on-demand tool search instead of the model's visible tool list: a session pays
only for the tools it looks up. REA's six MCP prompts are available through
the server's prompt tools.
## What runs on your machine
Most REA tools read files you name and never execute the target. A few run or
change things, and Hermes does not prompt before them:
- `capture_process_scenario` runs a command you or the agent choose under a
PTY and records what it does.
- `capture_browser_scenario`, `capture_electron_scenario` and
`capture_native_ui_scenario` launch or drive an application window.
- `install_adb_package`, `uninstall_adb_package`, `push_adb_file`,
`start_adb_app`, `start_adb_activity` and `stop_adb_app` change a connected
Android device.
- `observe_native_calls` launches the active macOS binary under LLDB.
- `instrument_with_frida` and the Frida session tools (`start_frida_session`,
`load_frida_script`, `resume_frida_session`, `unload_frida_script`,
`close_frida_session`) attach to, spawn or inject JavaScript into a process,
locally or on a remote Frida server.
- `start_gdb_session`/`gdb_console`/`close_gdb_session` and
`start_rizin_debug_session`/`rizin_debug_command`/`close_rizin_debug_session`
drive an unrestricted debugger that can run the target.
- `execute_rizin_command` and `cutter_command` run one arbitrary Rizin command,
which can execute code, write files or reach the network through Rizin
plugins.
- `export_evidence_bundle` and `close_binary` can overwrite a file at a path
you give them.
The bundled skill tells the agent to name the exact command, app or device and
ask you before any of these, and to skip them in unattended runs. Analyse
untrusted programs in an environment you chose for it. REA sends no
telemetry. Its tools reach the network only for the target you point them at:
a debugging endpoint, a device, or a web page whose source maps a browser
capture fetches.
## Version pinning
`mcp.json` pins `rea-agents@6.7.0` (published 2026-10-18) and the skill is
REA's `reverse-engineer-anything` skill from the same release tag. Bumping
either is a commit to this repo followed by a reviewed SHA bump in the
[hermes-agent plugin catalog](https://github.com/NousResearch/hermes-agent/tree/main/plugin-catalog).
`@latest` is deliberately not used.
## Attribution
REA is made by [morluto](https://github.com/morluto) and released under the MIT
license. The skill in `skills/reverse-engineer-anything/` is adapted from REA's
bundled skill; its license is reproduced in [LICENSE](LICENSE). The workflow in
`skills/crash-triage/` is adapted from
[crashlens](https://github.com/mingleiw/crashlens) by mingleiw (MIT).