Skip to content
AI EmployeeSuper-AgentsAgent-to-AgentBenchmarksPricingBlog

We Reverse Engineered REA, the Viral Reverse Engineer

At a glanceQuick answers
What is REA?
Reverse Engineer Anything: an MCP server, a CLI and an agent skill that let a coding agent take apart software it has no source for, and return findings with evidence.
Does it decompile anything itself?
No. Deep native analysis uses your own Ghidra, Hopper or IDA, and Android uses JADX. REA routes the work, runs the tool and records the result.
What does it cost an agent?
Its tool list alone is 207 tools and 3.16 MB. Clients that load every definition up front pay that before the first question; Claude Code defers it.
Data illustration on a near-white ground: a teal machine labeled REA lifts off its own side panel with its own probe arm and amber magnifier, revealing gears and schema sheets inside, beside three huge numbers, 207 MCP tools, 3.16 MB of tool schemas and 234 MB of evidence from one run
Fig 0We installed REA and pointed its own analyzer at its own package. Made by CellCog's image agent, running GPT Image 2.5.

The most-starred new repository on GitHub this month is a reverse-engineering tool, and the fastest way to understand it is to point it at itself. REA, short for Reverse Engineer Anything, lets a coding agent take apart shipped software it has no source for: Electron apps, native binaries, APKs, .NET assemblies, firmware. By October 18, 2026, GitHub’s API put it at 318,860 stars and 80,864 forks. On October 16, Perplexity’s Aravind Srinivas announced that the skill now ships inside Perplexity Computer.

So we installed it, read its skill file, measured its tool surface, and ran its own analyzer over its own npm package. Every number below came out of that session on October 18, on rea-agents 6.7.0.

On this page · 7 sectionsOpen
  1. What REA actually is
  2. The 3.16 MB handshake
  3. We pointed REA at REA
  4. Where it was already caught missing something
  5. The real invention is the evidence record
  6. The fork that deletes the server
  7. What we would take from this
Key points5 · 9 min full read
  1. A padlocked software package being opened by a magnifying glass, with a star badge.
    REA, an MCP server plus a 23 KB agent skill, passed 318,000 GitHub stars in October 2026 and now ships inside Perplexity Computer.
  2. A long scroll unrolling out of a server rack into a small open box.
    Its one tools/list reply is 207 tools and 3,158,403 bytes, and 81 percent of that is output schemas, not tool descriptions.
  3. An open empty toolbox with three loose tools standing outside it.
    REA installs no analysis engines. Deep work still runs on your own Ghidra, Hopper, IDA or JADX; REA routes, runs and records.
  4. A syntax tree funnelling down into a large amber storage drum beside a stopwatch.
    Pointed at its own npm package it parsed 1,706 files and 3,315,012 AST nodes in 289 seconds, and wrote 234 MB of evidence JSON.
  5. A balance scale weighing a tall server against a single small sheet of paper.
    A fork called leanrea replaced the whole server with one 8 KB skill file and matched it on accuracy at 62 percent less wall time.

§ 01What REA actually is

REA is three things in one package: an MCP server, a CLI, and an agent skill. The skill is the part people mean when they say “one prompt”. It is a 23,510-byte SKILL.md that teaches an agent how to route a target to the right tool, plus six reference guides totalling 50,982 bytes that it tells the agent to read one at a time.

The crucial line is in REA’s own skill, not in the hype: analysis engines are yours, not REA’s.

“REA setup never installs or upgrades Node.js, npm, Homebrew, Java, Ghidra, IDA, JADX, Kuna, Binwalk, or Unblob. Use existing prerequisites.”

Deep native work still runs on Ghidra, Hopper or IDA. Android still runs on JADX. Packet work still runs on tshark. REA is the layer that decides which one to reach for, runs it, and returns the result in a fixed shape with its limits attached.

Thing Measurement How we got it
GitHub stars 318,860 GitHub REST API
Forks 80,864 GitHub REST API
Repository created 2026-04-14 GitHub REST API
Releases 6.0 to 6.7 Oct 8 to Oct 18 GitHub releases API
Installed package size 32 MB npm i rea-agents@6.7.0
Runtime dependencies 40 package.json
Source lines, excluding tests 337,359 find src -name '*.ts'
Test files 1,582 repository clone
MCP tools advertised 207 stdio tools/list
Size of that one reply 3,158,403 bytes stdio tools/list
Table 1REA 6.7.0, measured October 18, 2026

That bottom row is the one worth sitting with.

§ 02The 3.16 MB handshake

An MCP server tells the agent what it can do by answering tools/list. We spoke the protocol directly: initialize, then tools/list, and measured the frame. The server identified itself as rea version 6.7.0, took 2.66 seconds to initialize and 0.92 seconds to answer, and returned 207 tools in 3,158,403 bytes.

The split matters more than the total.

What fills REA's 3.16 MB tool list, in megabytesBar chart of the tools/list reply by part: output schemas 2.56 MB, input schemas 0.72 MB, descriptions 0.09 MBOutput schemas2.56Input schemas0.72Descriptions0.09What fills REA's 3.16 MB tool list, in megabytesBar chart of the tools/list reply by part: output schemas 2.56 MB, input schemas 0.72 MB, descriptions 0.09 MBOutput schemas2.56Input schemas0.72Descriptions0.09
Fig 1What fills REA's 3.16 MB tool list, in megabytes

Eighty-one percent of that payload is output schemas: machine-readable descriptions of what each tool returns. Two tools alone, compare_web_captures and inspect_analysis_view, account for 381 KB between them. The part an agent actually reads to choose a tool, the descriptions, is 92,754 bytes, under 3% of the frame.

This is the cost people miss. On October 14, HackerNoon’s Ishank Choudhary measured the same handshake on version 6.4.0 and got 170 tools in 1,954,704 bytes. Four days and three releases later we measured 207 tools in 3,158,403 bytes. The tool surface grew 22% and the payload grew 62% in four days.

Whether your agent pays for all of it depends on the client. Claude Code defers tool search, loading definitions on demand, so the resting cost is small. A client that loads every definition up front pays for the whole frame before the first question.

Animation: two rows; in the top row the REA server sends a scroll of 207 tools across to the agent and fills its context almost to the top, leaving a sliver labeled What is left; in the bottom row only a single amber card labeled One tool travels across and the agent's context stays nearly empty
Fig 2What the handshake costs before the first question

§ 03We pointed REA at REA

The cleanest way to test a JavaScript analyzer is to feed it a large JavaScript project. REA ships as one, so we ran its own static analyzer over its own installed package:

bash rea analyze-javascript-application ./node_modules/rea-agents --json > self.json

Animation: a teal machine labeled REA takes its own rea-agents package into its hopper, three counters climb to 1,706 files parsed, 3,315,012 AST nodes and 15,124 findings, a stopwatch stops at 289 s, and its output chute fills a large amber drum labeled 234 MB that towers over a single sheet of paper
Fig 3One command on one package, and a 234 MB ledger
Measure Result
Wall time 289.4 s
Peak memory 1,681 MB
Output JSON 234,364,650 bytes
Files read 1,710
JavaScript files parsed 1,706
Parse failures 0
Text read 26,009,357 bytes
AST nodes walked 3,315,012
Findings 15,124
Application graph 6,450 nodes, 12,040 edges
Semantic graph 100,000 nodes, 98,985 relations
Recorded unknowns 47,158
Stated limitations 2,529
Table 2REA 6.7.0 analyzing its own npm package, one run, October 18, 2026

Zero parse failures across 1,706 files is genuinely good engineering. So is 3.3 million AST nodes in under five minutes. The number that stops you is 234 MB: a single command produced a quarter of a gigabyte of JSON about one npm package, which is roughly 7,300 times the size of the skill file that tells an agent how to use it.

No agent reads 234 MB. REA knows this, which is why its skill opens with instructions to work “summary-first”, ask for the summary detail level, and then page into the retained record by evidence_id. The full record is the ledger, not the answer.

Stacked bar: output schemas 2.56 MB, input schemas 0.72 MB, descriptions 0.09 MB, totalling 3.16 MB across 207 tools

01What REA hands an agent before the first question

Pipeline: 1,706 files parsed, 3,315,012 AST nodes walked, 15,124 findings, 234 MB of evidence JSON, in 289 seconds and 1.7 GB of memory

02One command, pointed at REA's own package

Paired bars: leanrea 388 seconds and $2.17 against REA 627 seconds and $3.36 over twelve runs, at the same accuracy

03The fork that removes the server

1 / 3
Fig 4Three measurements from one session with REA 6.7.0

§ 04Where it was already caught missing something

Fast and thorough are not the same as complete. On October 14, HackerNoon’s Ishank Choudhary ran REA 6.4.0 against a real 100 MB Electron app and checked its output against the unpacked source with grep. Most counts matched exactly: five browser windows, two context-bridge APIs, four main-process IPC handlers, six renderer transmissions, five renderer listeners.

Two did not. REA reported zero preload entrypoints and zero exposed API members for an app with two preload files, because the windows load them through a helper call that static analysis could not resolve into a path. On a toy app where he knew every answer, it also missed a sender check hidden behind a helper function.

That is the honest shape of static analysis, and REA’s own limitations say as much. It is also the argument for the discipline below: a zero from a tool that cannot see through a helper call is an unknown, not an absence.

§ 05The real invention is the evidence record

Strip away the tool count and REA’s contribution is a data shape. Every operation returns one record with the same fields: an evidence_id, the normalized_result, the raw provider output when it differs, the target’s SHA-256, and a confidence and authority label. Our self-run came back with a confidence of derived and an authority of shipped-artifact, meaning: inferred from a file someone shipped, not observed running.

Then come the limitations, and they are the best part of the design. Among the 2,529 our run produced:

“Electron relationships are derived from inert syntax; runtime registration, reachability, defaults, and enforcement remain unproven.”

“Graph coverage is incomplete; unavailable facts remain explicit and must not be read as absence.”

The skill enforces the same discipline on the agent: “Every conclusion must distinguish observations, inferences, and unknowns. Cite Evidence IDs, preserve limitations and incomplete coverage, and never imply that static analysis observed execution.”

Animation: an evidence card assembles row by row, evidence_id, target SHA-256 and normalized_result, then two chips reading confidence derived and authority shipped-artifact, and finally a wide amber band clamps onto the bottom edge carrying 47,158 unknowns and 2,529 limitations
Fig 5Every answer carries its own blind spots

That is the anti-hallucination mechanism, and it is a writing rule, not an algorithm. REA’s 47,158 recorded unknowns exist so an agent cannot quietly turn “I did not find it” into “it is not there”. Anyone building agent tools should steal this: a tool that reports its own blind spots is worth more than a tool that sounds certain.

§ 06The fork that deletes the server

On October 17, a developer published leanrea: one 8 KB skill file, no MCP server, no tools. It tells the agent which plain command to run for each target, asar extract, otool, nm, go version -m, jadx, and leaves the agent to run them in Bash. It had 574 stars within a day.

Its author benchmarked all three arms side by side on Claude Code with Sonnet 5.5: four reverse-engineering tasks, three repetitions each, answers graded against hand-written keys.

Arm Wall time Cost Turns Tokens Score
leanrea, 8 KB skill 388 s $2.17 55 2.40 M 74/75
No skill at all 479 s $2.21 81 3.11 M 67/75
REA, MCP plus skill 627 s $3.36 124 5.93 M 75/75
Scroll to compare all columns
Table 3leanrea’s benchmark, 12 runs per arm, Sonnet 5.5, October 16, 2026
Total wall time over twelve benchmark runs, in secondsBar chart: leanrea 388 seconds, no skill 479 seconds, REA 627 secondsleanrea388No skill479REA627Total wall time over twelve benchmark runs, in secondsBar chart: leanrea 388 seconds, no skill 479 seconds, REA 627 secondsleanrea388No skill479REA627
Fig 6Total wall time over twelve benchmark runs, in seconds

Read it carefully in both directions. REA scored perfectly, 75 out of 75, and was the only arm with no misses. It also took 62% longer and cost 55% more than a text file. The bare model with no skill at all scored 67 and refused one task outright, so the skill layer earned its place; the server layer is what the benchmark questions.

The caveats are the author’s own: three repetitions per cell, one model, one machine, three targets, and Ghidra was not installed, so the hardest native path never ran. REA was tested in its best case, with deferred tool loading.

§ 07What we would take from this

Three things, for anyone building or buying agent tooling.

A skill is cheaper than a server. Most of REA’s value in these tasks is knowing which command fits which file. That knowledge is prose, and prose costs kilobytes. A server costs a handshake, a process, a version to keep aligned, and in this case 3.16 MB before any work happens.

A server earns its keep when it owns state. REA’s own best argument is the part leanrea cannot copy: a session that holds an opened binary, a retained evidence ledger you can page through by ID, and comparisons across two versions of an artifact. Raw commands have no memory between calls.

Evidence beats confidence. The limitations, the unknown counts and the observation-versus-inference rule are the transferable idea here, and they cost nothing to adopt.

And the legal line is worth saying plainly, because the viral posts rarely do: studying a shipped binary is legal in many places and a licence violation in others, clean-room rebuilding has rules, and “the agent did it” is not a defence. REA’s skill carries the authorization language; the posts promising you a cloned paid app in one prompt do not.

We build AI employees on this principle. Every CellCog tier runs Claude Opus 5.5, and when one of our employees reads a system it does not own, we want the same discipline REA’s skill demands: cite the file, mark the inference, name the unknown.

Frequently asked5 questions

Q1How many tools does REA expose?

207 on version 6.7.0, measured on October 18, 2026 over a stdio MCP session. Four days earlier, on 6.4.0, an independent test counted 170.

Q2Is REA accurate?

In one independent Electron test its browser window, context bridge and IPC counts matched grep exactly, but it reported zero preload entrypoints for an app with two, because a helper call hid the path.

Q3Do I need Ghidra or IDA?

For deep native analysis, yes. Static JavaScript, Electron and .NET inspection work without a native analysis engine.

Q4What is leanrea?

A fork published on October 17, 2026 that drops the MCP server and keeps one 8 KB skill file telling the agent which plain command to run. Its benchmark matched REA on accuracy.

Q5Is reverse engineering legal?

It depends on where you are and what the licence says. REA’s own skill tells the agent to record scope and authorization first, and using an agent does not change the rules.

Published 18 October 2026 All Choosing a platform →