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
REA, an MCP server plus a 23 KB agent skill, passed 318,000 GitHub stars in October 2026 and now ships inside Perplexity Computer.
Its one tools/list reply is 207 tools and 3,158,403 bytes, and 81 percent of that is output schemas, not tool descriptions.
REA installs no analysis engines. Deep work still runs on your own Ghidra, Hopper, IDA or JADX; REA routes, runs and records.
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.
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 |
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.
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.
§ 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
| 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 |
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.
§ 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.”
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 |
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.
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.



