← All writing

REA: how reverse engineering becomes an evidence-based workflow

How REA connects a coding agent to software analysis tools, what the evidence can tell you, and how to turn findings into a tested implementation.

A familiar feature becomes much harder to rebuild when the original application is the only specification. The interface shows the result, but leaves questions open: where is the data stored, which component applies the rule, and what happens when the user resumes an unfinished task?

REA, short for Reverse Engineer Anything, helps a coding agent investigate those questions through software analysis tools. Its value is the connection between a concrete question and inspectable evidence. The engineering task is then to turn that evidence into a specification and test the new implementation against it.

What REA adds to a coding agent

The official REA project exposes analysis through MCP, the tool protocol used by compatible agents, and a CLI. It covers several kinds of software artifacts, with capabilities depending on the target, release, provider and host environment.

Think of three responsibilities. The analysis tool reports what it can establish. The agent organizes findings and proposes an explanation. The engineer decides what to preserve, what to change and how to verify it. Keeping these responsibilities visible makes the investigation easier to review.

A useful request is specific: “Find how this application's export represents item identifiers and quantities, show the evidence, and list what remains unknown.” An open request to “clone everything” makes it harder to define completeness or choose a meaningful test.

Start with the artifact and the question

First identify the exact package or executable and preserve a reference copy. A filename alone is weak identity: two releases may share it while behaving differently. Record the version when available, a digest, and the particular workflow being examined.

Then choose the analysis route. A packaged JavaScript application raises different questions from a native executable. For JavaScript and Electron, REA's artifact reconstruction guide documents static inspection of directories and ASAR packages, including modules, imports and Electron boundaries. This analysis reads the supplied files without running their code.

For native code, the CLI and Evidence guide describes provider-based investigation, including function inspection, references, assembly and pseudocode. A missing provider is a limit on the investigation. It does not mean the target lacks the feature being sought.

Follow one feature through its boundaries

Suppose the feature is saving study progress. I would want to establish the action that triggers a save, the fields serialized, the storage location, the validation applied during loading, and the point at which the interface considers saving complete.

That list becomes an investigation plan. A string containing “progress” is a lead. A write operation and its caller provide a stronger explanation. A controlled restart test can answer a different question: whether the chosen saved state actually survives the application's lifecycle.

The same method applies to an import parser or a clipboard feature. Follow the relevant data across boundaries, then test the assumptions that matter. A screenshot can document a visible state; it cannot establish the persistence contract behind that state.

Keep observation, inference and uncertainty separate

“Two functions mention the same channel” and “this message reaches that handler during use” are different claims. The first may come from static analysis. The second needs supporting runtime evidence or must remain an inference.

A small findings ledger helps: question, source, observed fact, interpretation, coverage and unresolved issue. It prevents a plausible explanation from becoming an accidental guarantee in the final specification.

Historical captures need the same care. REA's network capture documentation describes offline inspection of retained captures without fetching their recorded URLs. Such a record can help investigate an exchange, but does not establish what a live service currently accepts.

Turn findings into acceptance criteria

The most useful output is often a set of behavior tests. For the progress example, those might include saving after a question, resuming after closing the window, rejecting malformed imported state, and preserving the last valid profile after a failed write.

Some recovered behavior deserves preservation. Some deserves an explicit change. If the old program overwrites progress after a malformed load, reproduce the useful user outcome and document the new recovery policy.

This is also where a rebuild becomes more than a visual imitation. The new implementation needs its own clear data model, boundaries and maintainable tests. REA provides evidence for the investigation; development and verification remain engineering work.

Where the benefits appear

For maintenance, the benefit can be a narrower search: identify the module or rule involved before changing code. For interoperability, it can be a clearer format contract. For modernization, it can be a record of behavior that would otherwise exist only inside an old application.

These are practical possibilities, not measured savings. An investigation earns its cost when it resolves a decision that matters. If the source repository and supported documentation already answer the question, use those directly.

Work on software you are authorized to inspect, and review what analysis results enter the agent's context. Local analysis does not by itself settle every data-handling question.

A concrete reconstruction

Our CODE RIAD work made these distinctions useful: resource inspection, extracted Lua, question data and recovered media supplied different kinds of evidence for a new Electron application. The important decisions included scoring, corrections and persistence, not only the new interface.

For document systems, the same discipline informs the engineering behind Kaliits: establish how the existing process works, identify the uncertain boundary, and make the resulting behavior testable. Start with one feature whose correct behavior you can describe and verify.

Sources checked on 15 October 2026. Capability availability varies by installed REA release and configured providers. The investigation method and acceptance examples above are engineering recommendations, not a benchmark.

All writing ↗