§0
Open source · MIT · 176k GitHub stars

REA: Reverse Engineer Anything

What it is, how it works, and how to use it

REA just gave your AI agent X-ray vision for the apps on your computer.

See a feature you love in an app, and your agent can now show you exactly how it works.

It finds the hidden pieces, shows you the proof, and helps you build your own version.

It's free, it's open source, and setup is one command.

Stick with me, because I tested it on a real app today, and one thing it did surprised me.

See a featurein any app you useREA opens it upno source code neededEvidence + unknownsproof, not guessesBuild your versionyour agent writes it
The official sources, read them yourself ↓

"See a feature you like. Understand how it works, down to the binary level."

— the REA README, github.com/morluto/rea (v6.4.0, Oct 2026)

§1 I · The problem

The Black Box Problem.

You open an app and see a feature you love.

Maybe it saves your half-typed message even after a crash.

Maybe it pastes images in a clever way.

You want that feature in your own product.

But the app is a sealed box, and you can't see inside it.

So you guess, you search forums, and you copy someone else's guess.

Days later, you still don't know how it really works.

REA lets your AI agent open that box and show you what's inside.

Thinking it? "Reverse engineering sounds way too technical for me."

You don't touch the scary tools yourself.

You ask your AI agent a question in plain English, and the agent drives REA for you.

§2 II · How it works, in simple words

Your agent gets X-ray goggles.

REA is one add-on (an "MCP server", a plug-in your AI agent can call) that hands your agent 170 tools for looking inside finished apps.

Youask in plain EnglishYour AI agentClaude Code, Codex, Cursor…REA (one MCP)170 tools · runs on your computerNative appsHopper · Ghidra · IDAJS / Electronno extra installWebsitesChrome-familyAndroid / .NET+ firmware, moreAnswers come back as evidence your agent can check
A golden pocket watch split into glowing layers: shell, wires, gears, circuits and a core of machine code

An app is layers. REA peels them one at a time, from the window you click down to the machine code.

§3 III · Exactly how it works, step by step

One question's journey.

  1. It's a program on your computer. REA comes from npm (a free app store for code tools), runs locally, and is open source under the MIT licence.
  2. Setup plugs it into your agent. One command adds REA to Claude Code, Codex, Cursor, Gemini CLI and 20+ other agents.
  3. You ask a normal question. "How does this app save my drafts? Show me the proof."
  4. Your agent picks the right tools. Desktop apps built on web tech get a code map; native apps go through Hopper, Ghidra or IDA (pro code-reading programs).
  5. REA traces the feature. It follows the path from the button you click, through the app's messages, to the code that does the work.
  6. Everything comes back with receipts. Each answer carries where it was found, how sure REA is, and what is still unknown.
  7. Your agent builds your version. It uses the findings to explain the feature, then write and test something similar for your project.
The app's packed codeapp.asar · 6,695 files1Read every script4,484 parsed · 0 failures2Map how parts talk157 window-to-app messages3Name every channel76 named · e.g. draft-set4Hand back the proof26,122 findings + every unknown5

Real numbers from my test run on the OpenCode desktop app (open source), Oct 13 2026.

So when someone asks "but what IS it?", the answer is simple: a free plug-in that lets your AI agent read finished apps and prove what it finds.

§4 IV · Three beliefs to drop

What's holding you back.

Wrong: Reverse engineering is only for hackers with twenty years of experience.

Right: You ask in plain English, and your agent drives all 170 tools for you.

Wrong: Looking inside apps is always shady or illegal.

Right: REA is built for lawful work: your own software, apps you're allowed to examine, learning and security research. It refuses cracking and cheats.

Wrong: AI will just make up how an app works.

Right: REA attaches evidence to every answer and lists what it doesn't know. My test listed 60,838 open questions instead of guessing.

Don't take my word for it

158 pages of members who broke through beliefs like these, in their own words.

Read the 158-page wins doc →
§5 V · What REA can open

Not just apps. Almost anything.

Desktop apps, websites, phone apps, databases, even firmware. Each one gets its own set of tools.

20 kinds of things REA can openNative appsWebsitesJS / Electron.NETAndroid APKsAndroid devicesGo binariesWASMSQLite DBsFirmwareFlutter appsNetwork capturesPacket capturesCrash dumpsEVM bytecodeApple bundlesProcess runsJEB projectsLogic signalsELF layout
Thinking it? "Do I need expensive pro tools like IDA?"

No. Web-tech desktop apps, websites and .NET apps need nothing extra.

Native apps need one code-reading engine: Ghidra is free and open source, and setup can install Hopper for you with your approval.

§6 VI · Step 1: Install REA

One command. Then restart.

You need Node.js (free) installed, then run this in the Terminal app:

❯npx rea-agents setup

What you're watching: the real setup run (in a sandbox folder so my own setup stayed untouched). Dry run first, then apply, then the exact two lines it adds.

Thinking it? "Will this mess up my agent's settings?"

Setup shows you its plan before it changes anything, and backs up your existing config.

Add --dry-run and it changes nothing at all.

§7 VII · Step 2: Ask your agent

Ask it like a curious friend.

Restart your agent, then paste this (swap in your app and feature):

Understand how search works in the Notes app, show me the evidence, and build a similar feature for my project.

What you're watching: the exact tool calls an agent makes, which I sent to REA's real server myself. It hits a size limit, recovers the way REA tells it to, admits when a search finds nothing, then lands the answer with line numbers.

Setup also installs REA's skill file, the instruction manual your agent follows. Here's the real one, all 221 lines:

  ~/.claude/skills/reverse-engineer-anything/SKILL.md
---
name: reverse-engineer-anything
description: Reverse engineer native, managed, Electron/JavaScript, packaged, firmware, and browser targets with REA. Use shipped-artifact or requested runtime evidence to explain features, compare versions, decompile code, or guide a reconstruction. Skip REA for ordinary source-repository architecture analysis.
metadata:
  version: "37"
  tool_count: 170
---

# REA

Use REA when a claim depends on a shipped binary or package, decompilation,
passive application runtime evidence, or comparison with
behavior not established by available source. For ordinary analysis of a
complete source repository, use normal repository tools and do not run REA
readiness or provider commands.

## Connect only when needed

Installing this skill supplies instructions; it does not register the REA MCP
server, install analysis engines, or add tools to an already-running agent.

If REA tools are available and their registration is not known to be stale,
proceed directly to the target. Do not run diagnostics or setup before every
investigation. Use the connected server's actual tool list and input schemas;
a skill installed from repository main may describe capabilities absent from
an older npm release. Keep complete inline Evidence when that server does not
advertise retained references.

If tools are absent, a call is blocked by the client, or a required provider is
unavailable, read [connection and recovery](references/connection-and-recovery.md).
Diagnose the observed blocker, continue useful supported work, and resume the
original task after repair. Client approval, shell PATH, registration and engine
availability have different remedies; avoid repeating setup for all of them.

Prefer an existing `rea` CLI. When none is installed and REA package acquisition
is within the authorized scope, use `npx -y rea-agents@6.4.0` in its place.
Configuration repair starts with a read-only setup plan; show paths, backups and
skill replacement before applying authorized changes. Preserve existing approval
and target-execution boundaries. REA setup never installs or upgrades unrelated
software, including Node.js, npm, Homebrew, Java, Ghidra, IDA, JADX, Binwalk or Unblob.

## Route the target first

Choose the first tool from the target the user supplied. Use `open_binary` for
active-target native or archive workflows; target-free tools take their own
explicit path or endpoint and do not need it.

- ASAR or extracted JavaScript/Electron tree:
  `analyze_javascript_application`.
- Archive/package member inventory (ZIP/APK/IPA/MSIX/AppX or DMG):
  `open_binary` with the supplied local path; use `inspect_artifact` when its
  graph and findings help answer the question.
- Android APK code, classes, methods, or incoming references:
  `inspect_android_package`, then focused Android tools when advertised.
  Archive member inventory still uses the archive route above.
- Managed PE/CLI assembly: `inspect_managed_artifact`.
- Firmware image: `inspect_firmware_regions` when advertised. Use
  `extract_firmware` when extraction is requested, with a caller-selected new
  absolute output directory. These tools use caller-supplied Binwalk/Unblob on
  Linux; see the [firmware guide](https://github.com/morluto/rea/blob/main/docs/firmware-analysis.md).
- .NET NativeAOT PE/ELF: native Ghidra analysis. Native code can yield pseudocode;
  consult the NativeAOT workflow in `references/native-and-artifacts.md` for
  optional metadata recovery and its supported host/layout boundary.
- User-owned browser page already open: `list_browser_targets`.
- Retained HAR/native mitmproxy capture: `inspect_web_network_capture`. Select
  original record ordinals when useful; inspect producer fields and byte/number
  sidecars without fetching recorded URLs or claiming live attribution. See
  [historical captures](https://github.com/morluto/rea/blob/main/docs/web-network-captures.md) for the exact upstream
  profile and credential exclusions.
- User-owned Electron runtime already open: `list_electron_targets`.
- Explicit local EVM bytecode carrier: `inspect_evm_interface` with caller-selected
  `raw` or `hex` encoding. Preserve carrier/decoded digests and treat selectors,
  argument strings and mutability as inferred candidates; this performs no chain
  lookup or target execution. See the
  [EVM bytecode guide](https://github.com/morluto/rea/blob/main/docs/evm-bytecode.md).
- Explicit Linux ELF file for offline layout, symbols, relocations or static
  mitigation evidence: `inspect_binary_layout`. This target-free operation uses
  caller-supplied pwntools without opening a disassembler database. Preserve its
  raw locations and inference/coverage limits; see the
  [offline binary guide](https://github.com/morluto/rea/blob/main/docs/binary-diagnostics.md).
- Supplied Linux x86-64 ELF core: `inspect_recorded_crash`. Read every recorded
  thread, raw note and source-bound register without opening a live target.
  Historical PIDs do not select live processes. Request `include_debugger_context`
  only when core-only mapping candidates help; see the
  [recorded crash guide](https://github.com/morluto/rea/blob/main/docs/recorded-crashes.md).
- PE resource type/name/language trees and static icon group references:
  `inspect_pe_resources` with an explicit path. This portable operation requires
  no active target or engine; opaque payloads retain file ranges and SHA-256.
- Native executable, library, or analysis database: `open_binary`, then
  use focused analysis tools directly; call `binary_overview` when metadata or
  inventory context is useful and available from the selected provider.

For an existing IDA MCP configuration, use `open_binary` with the original
input binary and `provider_id: "ida"`; do not pass an `.idb` or `.i64` database.
The legacy attached profile binds the already-open GUI input by SHA-256 and
leaves its database open. The modern headless profile creates and closes an
owned private database without saving. Installation and registration reuse
[mrexodia/ida-pro-mcp](https://github.com/mrexodia/ida-pro-mcp); see the
[IDA provider guide](https://github.com/morluto/rea/blob/main/docs/ida-provider.md).
Proceed directly to `analyze_function`, pseudocode, or function/string searches
after opening; IDA does not supply `binary_overview`. Consult session availability
when composing broader workflows. Modern direct callers and unsupported dossier
facets remain unknown; live IDA results are not replayed from snapshots.

If the user says only "my app" without a name, path, or target already selected
for this task, ask which app before searching for artifacts. Paths in unrelated
saved reports and nearby test fixtures do not select the user's target. Resolve
an actual human-readable app name to one clear installed artifact when possible;
ask when matches are ambiguous. Never choose an example app on the user's behalf.

In a target-free session, use `open_binary` to bind any archive/package or
native target whose analysis tool operates on the active target. Do not call an
unadvertised tool; inspect `binary_session` with `{}` and its
`result.tool_availability` for availability reasons and remediation. The tool
list stays complete; availability depends on the operation, target, and host.

## Work summary-first

Start with the default result and use its inline Evidence and graph context.
For a JavaScript application or ELF layout whose size is unknown or large,
call `analyze_javascript_application` or `inspect_binary_layout` with
`"detail": "summary"`, then inspect the retained `parent_evidence_id` with
`inspect_analysis_view`.
Page module identities and select the returned `node_id` before requesting an
item; a single file path can represent several graph roles. Do not repeat an
identical analysis or rejected call without a changed input or resolved blocker.
Recheck session state when a lifecycle change makes that status useful.
Make a focused follow-up only when the
returned result leaves a specific question unanswered.

If MCP reports `resource_constraint` with `details.resource: "transport"`, call
`inspect_analysis_view` with its reported same-session Evidence reference for a
summary, one section/module, or a stable page. Use `trace_application_feature`
once a seed is known, or call `export_evidence_bundle` to write the complete
session to a selected path. The analysis remains complete in the ledger; avoid
repeating it merely to request the same oversized response. Complete CLI JSON
output also streams without a single MCP frame.

When the retained parent ID is unknown, use `get_evidence_bundle` with
`detail: "summary"` and exact filters for operation, target SHA-256,
analysis-profile digest or canonical procedure address. Select its returned
Evidence ID for the next view instead of requesting the complete bundle.
`retention: "complete-record"` means the whole record is stored; native
value-flow truncation and unknown metadata remain separate. For an exported
portable bundle, use `rea inspect-evidence-bundle` with JSON containing `path`,
`detail: "summary"` and the same `filters`. Reading that file still requires
validating its full contents within the local memory budget.

A client can also truncate a successful tool result without a REA transport
error. Treat that preview as incomplete; use the retained parent ID for smaller
views or export when the full record is needed. Do not parse the preview as
canonical JSON or repeat the producer. For JavaScript, read the
[module-view and trace recipes](references/javascript-applications.md) before
drilling into a large graph; a broad bidirectional trace can expand unrelated
containment relationships even after summary analysis.

Every conclusion must distinguish observations, inferences, and unknowns. Cite
Evidence IDs, preserve limitations and incomplete coverage, and never imply
that static analysis observed execution. Runtime requests execute the declared
target and lifecycle; do not broaden the target or action beyond those fields.

Within the user's requested investigation, call available analysis tools
directly. REA does not require permission grants or per-call approval flags.
The agent client can independently require approval. Follow the declared request
scope and the host's actual access requirements; use the recovery guide for an
observed client-policy rejection.

## Plan broader investigations

For requests that span multiple features or subsystems, use a staged workflow:

1. Turn the request into a checklist of questions and the evidence each answer
   needs. Resolve target identity and constraints from the conversation and
   workspace before asking for information again.
2. Inspect the current REA session, artifact identity, saved analysis database,
   bookmarks, and prior evidence. Reuse matching state; do not open duplicate
   sessions or repeat identical analysis.
3. Start with the smallest useful overview or inventory. Follow each question
   from its entry point through relevant data and state changes to its result.
   Batch related operations around a specific hypothesis, then expand only when
   the returned evidence leaves a concrete gap.
4. Inspect relevant packaged resources and configuration alongside code when
   they affect the question. Use format-aware inventory and parsers; do not
   infer behavior from filenames, strings, or layout alone.
5. Corroborate a conclusion with the evidence type it requires. Use runtime
   observation only when static evidence cannot answer the question and the
   required host runtime and OS access are available. For JavaScript behavior,
   run probes against the actual app through the available browser, Electron,
   or process capture workflow.
6. Decompose work into independent questions. When parallel workers are
   available and the questions do not depend on one another, assign distinct
   scopes, point workers to existing evidence, and ask them to return sources,
   conclusions, and unresolved gaps. Otherwise, work sequentially.
7. Keep a concise finding ledger linking each conclusion to Evidence IDs,
   confidence/evidence type, search boundary, and remaining unknowns. Update
   the shared index or investigation report so later passes can reuse results.

Before finishing, revisit the original checklist. Mark each question as
answered, partially answered, or unresolved based on its evidence; keep
bounded negative searches bounded, and do not describe a broad investigation
as complete while required questions remain open.

## Read only the relevant guide

- Native binaries, managed assemblies, archives, and extraction:
  [references/native-and-artifacts.md](references/native-and-artifacts.md)
- ASARs, extracted JavaScript, feature tracing, and version comparison:
  [references/javascript-applications.md](references/javascript-applications.md)
- Android APK declarations, classes, methods, and static references:
  [references/android-applications.md](references/android-applications.md)
- Passive browser/Electron observation and static/runtime reconciliation:
  [references/runtime-observation.md](references/runtime-observation.md)
- Evidence paging, comparisons, residual unknowns, and verification:
  [references/evidence-workflows.md](references/evidence-workflows.md)

## Finish the task

Explain findings in plain language and tie them to returned evidence. When the
user asks to build something, use normal coding tools and separate observed
behavior from design choices. Close an opened native session with
`close_binary` when the investigation is complete.

Real file from REA v6.4.0 (MIT licence). It tells your agent when to use REA, how to recover from errors, and to keep evidence separate from guesses.

§8 VIII · Step 3: Or use the terminal

No agent? Still works.

Every tool is also a terminal command (129 of them). This one maps a desktop app built on web tech:

❯npx -y rea-agents@latest analyze-javascript-application /path/to/app --json

What you're watching: my real run on the OpenCode desktop app. REA stops on a mismatched file, explains why, and continues with the flag it suggests.

Thinking it? "Does REA upload the app somewhere?"

No. The analysis runs on your own computer.

Your agent sees the results, and its AI provider has its own data policy, so pick your agent with that in mind.

§9 IX · The test, in plain English

What I actually did.

  1. The setup. I picked OpenCode, an open-source AI coding app I already had installed, so looking inside it is clearly allowed.
  2. The question. "How does this app talk between its window and its engine?" That's how features like draft-saving work.
  3. The surprise. REA stopped straight away: four built-in files didn't match their recorded fingerprints. It refused to trust them silently.
  4. The fix. It printed the exact flag to continue and marked those four files "untrusted" in the results.
  5. The result. Three minutes later it had read 4,484 scripts with zero failures and named 76 message channels, like draft-set and read-clipboard-image.
  6. The answer. Your unsent drafts leave the window on line 73, hit a handler on line 2153, and land in a small drafts.sqlite file. REA gave me the exact lines; I opened them to confirm.
4,484scripts read, 0 failures
157window ↔ app messages mapped
2:59minutes for 6,695 files
Inside OpenCode: 157 window ↔ app messagesmain-process handlers81messages the window sends69sends matched to a handler55sends REA couldn't pin down13window listeners7sends with no handler found1
What REA hands back: three honest pilesObserved26,122findings with a locationInferredderivedlabelled as a conclusionUnknown60,838open questions, listedMost tools hide what they don't know.REA writes it down, so your agent never fakes it.Real counts from the OpenCode test, Oct 13 2026
A robed archivist, fully clothed in a long hooded robe, pins golden threads between sealed cards on an evidence board, some threads solid and some dashed

Solid threads are proven links. Dashed threads are marked as unknown. That's how REA keeps your agent honest.

"It refused to guess. That's the whole point."
§10 X · Old way vs new way

Guessing vs knowing.

Old waydays of guesswork
  • Stare at the feature and guess
  • Search forums for someone else's guess
  • Open a pro tool you can't read
  • Copy code that might be wrong
  • No idea what you missed
  • Usually give up
New way~3 min for a big app
  • One command to install
  • Ask your agent in plain English
  • REA opens and maps the app
  • Trace the exact feature path
  • Evidence plus a list of unknowns
  • Your agent builds and tests your version
§11 Skip the setup

Get REA set up for you.

You can wire REA up yourself with the steps above. Or get it running inside the Agent Operating System, already connected to the agents you use.

The Agent OS with REA-ready agents: Claude Code, Codex, Hermes and more on one dashboard
Ready-made REA prompts for tracing any feature, ready to paste
4 weekly coaching calls where we set up tools like this live with you
Daily tutorials on every new AI tool the week it ships
A 30-day roadmap to turn ideas into working builds
A room of 3,400+ founders across 38 countries, someone online 24/7
Get the Agent OS → Inside the AI Profit Boardroom · skool.com/ai-profit-lab
Set up in an afternoon · used in 38 countries · new tools added the week they ship
Thinking it? "Doesn't running an Agent OS burn a fortune in tokens?"

That's the biggest myth about it. The everyday 90% runs on free local models on your own machine, and free APIs slot in for more.

For frontier work it drives the CLIs you already pay for, like the Claude Code CLI in your Claude subscription, so you never pay twice. Inside the Boardroom there are full token-saving tutorials too.

§12 XI · What people have built

Real case studies.

What you're watching: the official rea.tools site, including the Notion case study that traces how Notion copies text and HTML.

classic gameDX-Ball sound panningRebuilt in C, passes 3,205 tests, matches all 63 original bytes. desktop appNotion's clipboardTraced from the page, through the app's messages, to the clipboard writer. 1990s gameTH04 bullet ringsRecovered the angle maths from 16-bit code and compared the rebuild.
§13 XII · The rules

Use it the right way.

REA's own disclaimer is clear: look inside what you own or are allowed to examine, and never use it to break protections.

Built forNot for✓Software you own✓Apps you're allowed to examine✓Interoperability + debugging✓Security + malware research✓Learning, CTFs, preservation✕Cracking DRM or licence checks✕Game cheats or anti-cheat bypass✕Breaking into systems✕Copying someone's code or assets✕Sharing AI accounts or keys

Paraphrased from REA's DISCLAIMER.md. Laws differ by country and some app licences restrict this, so check before you dig.

§14 XIII · Keep it working

Update often. Check health.

REA ships fixes fast. Refresh your setup with:

❯npx rea-agents@latest setup

Something not working? Ask REA what's missing:

❯npx rea-agents doctor

On my Mac, doctor said Node was healthy and named the one missing piece for native apps (a code-reading engine), with the exact fix.

§15 Your move

Stop guessing. Start knowing.

REA shows your agent how any feature works. The Agent OS gives that agent a home: shared memory, every CLI you already pay for, and a team of builders who use tools like this every week.

The full Agent OS, install-ready in an afternoon
The REA setup walkthrough, step by step on video
Coaching calls where you bring your own app idea
The prompt library and a member map to meet builders near you
3,400+ founders and 258 documented member wins
Get the Agent OS → Inside the AI Profit Boardroom · skool.com/ai-profit-lab
258 documented wins · 38 countries · new tools covered the week they ship
§16 XIV · The short version

Here's what's left.

Apps used to be sealed boxes.

Now your agent can open them, trace a feature, and show you the proof.

Install with one command, ask in plain English, and build your own version.

Just stick to apps you own or are allowed to examine.

"See it. Understand it. Build your own."