Compare commits

...
Author SHA1 Message Date
Kaoru0822andClaude Opus 5.5 c048b853f8 docs(website): make the analysis guides easier to start
- Each guide opens with a short "Before you start" box: difficulty,
  what you need, a link to the step-by-step setup and a one-line
  explanation of Electron or native programs.
- The browser guide gives commands to open Chrome on Mac and Windows
  Command Prompt, not only Linux, and its prompt includes the
  debugging address.
- Multi-line terminal commands note that Windows Command Prompt needs
  them on one line without the backslashes.
- The guide hub lists guides from easiest to hardest, with what each
  one needs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 02:26:15 +00:00
Kaoru0822andClaude Opus 5.5 0ac6832aa6 docs(website): add a step-by-step setup guide for first-time users
People who have only used AI chat in a web browser found the existing
setup page hard to follow. The new guides/setup page walks through each
step with plain wording and pictures of what the terminal shows:

- getting a desktop AI app (Claude Desktop, Codex or an existing agent)
- installing Node.js and checking it with node -v
- opening the terminal on Mac, Windows (Command Prompt) and Linux
- running setup, ticking an app, reviewing the plan and restarting
- asking a first question about the supplied Notes example
- fixes for the common first-run errors

The setup screens were recorded from rea-agents 6.3.0 in a throwaway
home folder and are kept as selectable HTML. The guide hub now starts
with this page, and Get started links to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 02:23:18 +00:00
8 changed files with 1104 additions and 32 deletions
+1 -1
View File
@@ -123,7 +123,7 @@ describe its recorded investigation; update them only when repeating that work.
- `public/showcase/ctf/index.html`: DownUnderCTF's masked-squares flag checker, extracted equations and real process captures. - `public/showcase/ctf/index.html`: DownUnderCTF's masked-squares flag checker, extracted equations and real process captures.
- `public/get-started/index.html`: agent setup, first CLI result and provider guides. - `public/get-started/index.html`: agent setup, first CLI result and provider guides.
- `public/faq/index.html`: concise answers about setup, updates, analysis and troubleshooting. - `public/faq/index.html`: concise answers about setup, updates, analysis and troubleshooting.
- `public/guides/`: a guide hub and native, JavaScript/Electron and browser examples. - `public/guides/`: a guide hub, a step-by-step setup with recorded setup screens for first-time users, and native, JavaScript/Electron and browser examples.
- `public/examples/`: downloadable Electron source and an interactive Notes browser app. - `public/examples/`: downloadable Electron source and an interactive Notes browser app.
- `public/assets/`: shared styles, interactions, favicon and explanatory figures. - `public/assets/`: shared styles, interactions, favicon and explanatory figures.
+151
View File
@@ -1443,6 +1443,32 @@ pre code {
border-radius: 3px; border-radius: 3px;
color: #414b55; color: #414b55;
} }
.guide-entry .guide-needs {
margin-bottom: 0.9rem;
color: var(--ink);
font-size: 0.9rem;
}
.before-start {
margin-bottom: 2.5rem;
padding: 1.2rem 1.4rem;
border: 1px solid #ced9e5;
border-left: 3px solid var(--accent);
border-radius: 5px;
background: #fafbfc;
}
.before-start-title {
margin-bottom: 0.6rem;
font-weight: 650;
}
.before-start ul {
margin: 0;
}
.before-start li + li {
margin-top: 0.45rem;
}
.before-start .caption {
margin: 0.8rem 0 0;
}
.example-files { .example-files {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@@ -1454,6 +1480,121 @@ pre code {
.example-files li + li { .example-files li + li {
margin: 0; margin: 0;
} }
.step-label {
margin: 0 0 0.4rem;
color: var(--accent);
font-size: 0.8rem;
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
}
.choice-list,
.numbered-steps {
margin-block: 0 1.4rem;
}
.choice-list li + li,
.numbered-steps li + li {
margin-top: 0.55rem;
}
.numbered-steps ul {
margin-top: 0.45rem;
}
kbd {
display: inline-block;
padding: 0 0.4em;
border: 1px solid #c9d2db;
border-bottom-width: 2px;
border-radius: 4px;
background: var(--soft);
font-family: inherit;
font-size: 0.85em;
line-height: 1.5;
white-space: nowrap;
}
.word-list {
display: grid;
grid-template-columns: max-content minmax(0, 1fr);
gap: 0.6rem 1.2rem;
margin: 0;
}
.word-list dt {
font-weight: 600;
}
.word-list dd {
margin: 0;
color: var(--muted);
}
.screen-figure {
margin: 1.5rem 0 1.8rem;
}
.screen {
overflow: hidden;
border: 1px solid #303d4a;
border-radius: 8px;
background: #202933;
color: #f1f4f8;
}
.screen-bar {
display: flex;
align-items: center;
gap: 0.7rem;
padding: 0.55rem 1rem;
border-bottom: 1px solid #384551;
color: #bdc8d4;
font-size: 0.8rem;
}
.screen-body {
padding: 1.1rem 1.2rem;
font-size: 0.8rem;
line-height: 1.6;
}
.screen mark {
padding: 0.05em 0.25em;
border-radius: 3px;
background: #3f6593;
color: #ffffff;
}
.chat-screen {
border-color: var(--line);
background: #fafbfc;
color: var(--ink);
}
.chat-screen .screen-bar {
border-color: var(--line);
color: var(--muted);
}
.chat-screen .terminal-dots i {
background: #b8c2cc;
}
.chat-screen mark {
background: #dce8f6;
color: var(--ink);
}
.chat-body {
display: grid;
gap: 0.9rem;
padding: 1.2rem;
font-size: 0.9rem;
}
.chat-message {
max-width: 85%;
margin: 0;
padding: 0.75rem 1rem;
border-radius: 10px;
}
.chat-you {
justify-self: end;
background: #e8eef5;
}
.chat-ai {
border: 1px solid var(--line);
background: var(--page);
}
.screen-figure figcaption {
margin-top: 0.7rem;
color: var(--muted);
font-size: 0.8rem;
}
.example-app { .example-app {
max-width: 720px; max-width: 720px;
padding-block: 3.5rem; padding-block: 3.5rem;
@@ -2289,6 +2430,16 @@ pre code {
} }
@media (max-width: 640px) { @media (max-width: 640px) {
.word-list {
grid-template-columns: minmax(0, 1fr);
gap: 0.2rem;
}
.word-list dd + dt {
margin-top: 0.6rem;
}
.chat-message {
max-width: 100%;
}
.home-definition { .home-definition {
grid-template-columns: 1fr; grid-template-columns: 1fr;
gap: 0.8rem; gap: 0.8rem;
+3 -1
View File
@@ -142,7 +142,9 @@
terminal. terminal.
</p> </p>
<p class="requirements"> <p class="requirements">
You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+, and npm. You'll need Node.js 22 (22.19+), 24 (24.11+) or 26+, and npm. New to
the terminal or AI apps?
<a href="../guides/setup/">Follow the step-by-step setup</a>.
</p> </p>
</div> </div>
<div class="article-layout"> <div class="article-layout">
+67 -10
View File
@@ -157,6 +157,27 @@
</ul> </ul>
</nav> </nav>
<article class="article" aria-label="Browser observation"> <article class="article" aria-label="Browser observation">
<aside class="before-start" aria-labelledby="browser-before">
<p class="before-start-title" id="browser-before">
Before you start
</p>
<ul>
<li>
<strong>About 10 minutes.</strong> You paste one command to open
Chrome, then click a button.
</li>
<li>
<strong>You need</strong> REA connected to an AI app and Google
Chrome. New to this?
<a href="../setup/">Set up REA step by step</a>.
</li>
<li>
<strong>Your normal browsing stays separate.</strong> The
command opens Chrome with an empty profile, without your tabs,
logins or history.
</li>
</ul>
</aside>
<section class="article-section" id="example"> <section class="article-section" id="example">
<h2>What happens when you click Export?</h2> <h2>What happens when you click Export?</h2>
<p> <p>
@@ -207,16 +228,48 @@
<h2>Open Chrome with remote debugging</h2> <h2>Open Chrome with remote debugging</h2>
<p> <p>
Open the hosted Notes example with a separate browser profile and Open the hosted Notes example with a separate browser profile and
a local debugging port. On Linux: a local debugging port. Copy the command for your computer into
the terminal and press <kbd>Enter</kbd>.
</p> </p>
<div class="code-block"> <div class="code-block">
<div class="code-header"> <div class="code-header">
<span>Start the example browser</span <span>Start the example browser · Mac</span
><button
class="copy-button"
type="button"
data-copy="browser-start-mac"
aria-label="Copy start the example browser on a Mac"
>
Copy
</button>
</div>
<pre><code id="browser-start-mac">open -na "Google Chrome" --args \
--remote-debugging-port=9222 \
--user-data-dir=/tmp/rea-notes-browser \
https://rea.tools/examples/notes-web/</code></pre>
</div>
<div class="code-block">
<div class="code-header">
<span>Start the example browser · Windows Command Prompt</span
><button
class="copy-button"
type="button"
data-copy="browser-start-windows"
aria-label="Copy start the example browser on Windows"
>
Copy
</button>
</div>
<pre><code id="browser-start-windows">start chrome --remote-debugging-port=9222 --user-data-dir="%TEMP%\rea-notes-browser" https://rea.tools/examples/notes-web/</code></pre>
</div>
<div class="code-block">
<div class="code-header">
<span>Start the example browser · Linux</span
><button ><button
class="copy-button" class="copy-button"
type="button" type="button"
data-copy="browser-start" data-copy="browser-start"
aria-label="Copy start the example browser" aria-label="Copy start the example browser on Linux"
> >
Copy Copy
</button> </button>
@@ -227,9 +280,8 @@
https://rea.tools/examples/notes-web/</code></pre> https://rea.tools/examples/notes-web/</code></pre>
</div> </div>
<p> <p>
Use your installed browser's executable path on macOS or Windows. A new Chrome window opens on the Notes example. You can replace
You can replace the page URL with another page you want to the page URL with another page you want to inspect.
inspect.
</p> </p>
<p> <p>
REA connects to this existing browser. You keep control of the REA connects to this existing browser. You keep control of the
@@ -256,15 +308,16 @@
<p class="terminal-prompt"> <p class="terminal-prompt">
<span class="prompt-symbol" aria-hidden="true">›</span <span class="prompt-symbol" aria-hidden="true">›</span
><span id="browser-prompt" ><span id="browser-prompt"
>Use REA to inspect this page while I click Export notes. What >Use REA with the browser at http://127.0.0.1:9222 to inspect
the Notes example page while I click Export notes. What
request does it make, and how is the CSV built?</span request does it make, and how is the CSV built?</span
><span class="terminal-cursor" aria-hidden="true"></span> ><span class="terminal-cursor" aria-hidden="true"></span>
</p> </p>
</div> </div>
<p class="caption"> <p class="caption">
Example prompt. Give your agent the debugging endpoint, Example prompt. <code>http://127.0.0.1:9222</code> is the
<code>http://127.0.0.1:9222</code>, and the page URL. Let it start debugging address from the command above. Keep that Chrome window
the capture before you click. open, and let your agent start the capture before you click.
</p> </p>
<p> <p>
Your agent discovers the page target, starts an observation Your agent discovers the page target, starts an observation
@@ -290,6 +343,10 @@
<pre><code id="browser-targets">npx -y rea-agents@latest list-browser-targets \ <pre><code id="browser-targets">npx -y rea-agents@latest list-browser-targets \
http://127.0.0.1:9222 --json</code></pre> http://127.0.0.1:9222 --json</code></pre>
</div> </div>
<p class="caption">
In Windows Command Prompt, put the command on one line and leave
out the <code>\</code> characters.
</p>
<p> <p>
Choose the target with the Notes example URL. Replace Choose the target with the Notes example URL. Replace
<code>TARGET_ID</code> below with its ID, then run: <code>TARGET_ID</code> below with its ID, then run:
+40 -18
View File
@@ -6,7 +6,7 @@
<title>Reverse Engineering Guides — REA</title> <title>Reverse Engineering Guides — REA</title>
<meta <meta
name="description" name="description"
content="Learn REA through short worked examples: a native calculation, an Electron CSV export and a browser request." content="Learn REA through short worked examples: an Electron CSV export, a browser request and a native calculation."
/> />
<!-- website:sharing:start --> <!-- website:sharing:start -->
<!-- prettier-ignore --> <!-- prettier-ignore -->
@@ -18,7 +18,7 @@
<!-- prettier-ignore --> <!-- prettier-ignore -->
<meta property="og:title" content="Reverse Engineering Guides — REA" /> <meta property="og:title" content="Reverse Engineering Guides — REA" />
<!-- prettier-ignore --> <!-- prettier-ignore -->
<meta property="og:description" content="Learn REA through short worked examples: a native calculation, an Electron CSV export and a browser request." /> <meta property="og:description" content="Learn REA through short worked examples: an Electron CSV export, a browser request and a native calculation." />
<!-- prettier-ignore --> <!-- prettier-ignore -->
<meta property="og:url" content="https://rea.tools/guides/" /> <meta property="og:url" content="https://rea.tools/guides/" />
<!-- prettier-ignore --> <!-- prettier-ignore -->
@@ -39,7 +39,7 @@
<!-- prettier-ignore --> <!-- prettier-ignore -->
<meta name="twitter:title" content="Reverse Engineering Guides — REA" /> <meta name="twitter:title" content="Reverse Engineering Guides — REA" />
<!-- prettier-ignore --> <!-- prettier-ignore -->
<meta name="twitter:description" content="Learn REA through short worked examples: a native calculation, an Electron CSV export and a browser request." /> <meta name="twitter:description" content="Learn REA through short worked examples: an Electron CSV export, a browser request and a native calculation." />
<!-- prettier-ignore --> <!-- prettier-ignore -->
<meta name="twitter:image" content="https://rea.tools/assets/social-card.png" /> <meta name="twitter:image" content="https://rea.tools/assets/social-card.png" />
<!-- prettier-ignore --> <!-- prettier-ignore -->
@@ -138,26 +138,31 @@
<p class="breadcrumb"><a href="../">Home</a> / Guides</p> <p class="breadcrumb"><a href="../">Home</a> / Guides</p>
<h1>REA guides.</h1> <h1>REA guides.</h1>
<p class="lede"> <p class="lede">
Analyze a native function, an Electron export or a browser request. Follow an Electron export, observe a browser request or analyze a
Each guide includes a prompt, code and results. native function. Each guide includes a prompt, code and results.
</p> </p>
</div> </div>
<div class="guide-index"> <div class="guide-index">
<section class="guide-entry"> <section class="guide-entry">
<p class="eyebrow">Native binaries</p> <p class="eyebrow">Start here</p>
<div> <div>
<h2>Recover a sound-pan calculation</h2> <h2>Set up REA, step by step</h2>
<p> <p>
Start with a Windows game executable. Inspect instructions, follow Only used AI in a web browser? Install an AI app and Node.js, run
a caller, read numeric constants and check the recovered C. one command and ask your first question. Each step shows what you
should see.
</p> </p>
<div class="guide-route"> <div class="guide-route">
<span>Instructions</span> <b aria-hidden="true">→</b> <span>AI app</span> <b aria-hidden="true">→</b>
<span>Caller</span> <b aria-hidden="true">→</b> <span>Node.js</span> <b aria-hidden="true">→</b>
<span>Constants</span> <b aria-hidden="true">→</b> <span>REA setup</span> <b aria-hidden="true">→</b>
<span>C function</span> <span>First question</span>
</div> </div>
<a class="text-link" href="native/">Native analysis guide</a> <a class="text-link" href="setup/">Step-by-step setup</a>
<p>
Already use a coding agent? Follow the
<a href="../get-started/">short setup</a>.
</p>
</div> </div>
</section> </section>
<section class="guide-entry"> <section class="guide-entry">
@@ -174,6 +179,9 @@
<span>Preload API</span> <b aria-hidden="true">→</b> <span>Preload API</span> <b aria-hidden="true">→</b>
<span>IPC</span> <b aria-hidden="true">→</b> <span>CSV file</span> <span>IPC</span> <b aria-hidden="true">→</b> <span>CSV file</span>
</div> </div>
<p class="guide-needs">
<strong>Good first guide.</strong> Needs only REA setup.
</p>
<a class="text-link" href="javascript/" <a class="text-link" href="javascript/"
>JavaScript &amp; Electron guide</a >JavaScript &amp; Electron guide</a
> >
@@ -196,15 +204,29 @@
<span>Captured request</span> <b aria-hidden="true">→</b> <span>Captured request</span> <b aria-hidden="true">→</b>
<span>Export script</span> <span>Export script</span>
</div> </div>
<p class="guide-needs">Needs REA setup and Google Chrome.</p>
<a class="text-link" href="browser/">Browser observation guide</a> <a class="text-link" href="browser/">Browser observation guide</a>
</div> </div>
</section> </section>
<section class="guide-entry"> <section class="guide-entry">
<p class="eyebrow">First investigation</p> <p class="eyebrow">Native binaries</p>
<div> <div>
<h2>Set up REA</h2> <h2>Recover a sound-pan calculation</h2>
<p>Connect your coding agent or use REA from the terminal.</p> <p>
<a class="text-link" href="../get-started/">Get started with REA</a> Start with a Windows game executable. Inspect instructions, follow
a caller, read numeric constants and check the recovered C.
</p>
<div class="guide-route">
<span>Instructions</span> <b aria-hidden="true">→</b>
<span>Caller</span> <b aria-hidden="true">→</b>
<span>Constants</span> <b aria-hidden="true">→</b>
<span>C function</span>
</div>
<p class="guide-needs">
<strong>Advanced.</strong> Needs REA setup and Ghidra, Hopper or
IDA.
</p>
<a class="text-link" href="native/">Native analysis guide</a>
</div> </div>
</section> </section>
</div> </div>
+30 -2
View File
@@ -157,6 +157,29 @@
</ul> </ul>
</nav> </nav>
<article class="article" aria-label="JavaScript &amp; Electron"> <article class="article" aria-label="JavaScript &amp; Electron">
<aside class="before-start" aria-labelledby="javascript-before">
<p class="before-start-title" id="javascript-before">
Before you start
</p>
<ul>
<li>
<strong>Good first guide.</strong> About 10 minutes, no coding
experience needed.
</li>
<li>
<strong>You need</strong> REA connected to an AI app. New to
this? <a href="../setup/">Set up REA step by step</a>.
</li>
<li>
<strong>You don't need</strong> Electron or the app running. REA
reads the app's files.
</li>
</ul>
<p class="caption">
An Electron app is a desktop app built with web technology, like
VS Code, Discord or Notion.
</p>
</aside>
<section class="article-section" id="example"> <section class="article-section" id="example">
<h2>Where does “Export notes” go?</h2> <h2>Where does “Export notes” go?</h2>
<p> <p>
@@ -236,8 +259,9 @@
</p> </p>
</div> </div>
<p class="caption"> <p class="caption">
Example prompt. Include the absolute path to the application Example prompt. Add the full path to the application folder or
folder or <code>app.asar</code>. <code>app.asar</code> at the end;
<a href="../setup/#ask">here's how to copy a path</a>.
</p> </p>
<p> <p>
REA reads the application files and builds a map of entrypoints, REA reads the application files and builds a map of entrypoints,
@@ -371,6 +395,10 @@
<pre><code id="javascript-command">npx -y rea-agents@latest analyze-javascript-application \ <pre><code id="javascript-command">npx -y rea-agents@latest analyze-javascript-application \
/absolute/path/to/notes-example --json</code></pre> /absolute/path/to/notes-example --json</code></pre>
</div> </div>
<p class="caption">
In Windows Command Prompt, put the command on one line and leave
out the <code>\</code> characters.
</p>
<p> <p>
Replace the path with the folder you unzipped. You should find one Replace the path with the folder you unzipped. You should find one
IPC channel and one matching handler in IPC channel and one matching handler in
+33
View File
@@ -156,6 +156,35 @@
</ul> </ul>
</nav> </nav>
<article class="article" aria-label="Native analysis"> <article class="article" aria-label="Native analysis">
<aside class="before-start" aria-labelledby="native-before">
<p class="before-start-title" id="native-before">
Before you start
</p>
<ul>
<li>
<strong>Advanced guide.</strong> New to REA? Start with the
<a href="../javascript/">JavaScript guide</a>; it needs no extra
tools.
</li>
<li>
<strong>You need</strong> REA connected to an AI app (<a
href="../setup/"
>step-by-step setup</a
>) and a native analysis tool: Ghidra, Hopper or IDA, connected
as in
<a href="../../get-started/#native">Set up native analysis</a>.
</li>
<li>
<strong>To follow along,</strong> use your own copy of the
Windows game DX-Ball 1.07, or any other program you want to
study.
</li>
</ul>
<p class="caption">
A native program is compiled to machine code, such as a Windows
<code>.exe</code> file. Its original source code isn't included.
</p>
</aside>
<section class="article-section" id="example"> <section class="article-section" id="example">
<h2>Calculate left/right sound panning</h2> <h2>Calculate left/right sound panning</h2>
<p> <p>
@@ -343,6 +372,10 @@ return (DxBallInt)pan;</code></pre>
<pre><code id="native-command">npx -y rea-agents@latest function /absolute/path/to/program main \ <pre><code id="native-command">npx -y rea-agents@latest function /absolute/path/to/program main \
--provider ghidra --json</code></pre> --provider ghidra --json</code></pre>
</div> </div>
<p class="caption">
In Windows Command Prompt, put the command on one line and leave
out the <code>\</code> characters.
</p>
<p> <p>
Replace the target path and <code>main</code> with your own Replace the target path and <code>main</code> with your own
function name or address. Each CLI invocation imports and analyzes function name or address. Each CLI invocation imports and analyzes
+779
View File
@@ -0,0 +1,779 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Set Up REA Step by Step — REA</title>
<meta
name="description"
content="Set up REA with pictures, starting from a web-browser AI chat: install an AI app and Node.js, run one command and ask your first question."
/>
<!-- website:sharing:start -->
<!-- prettier-ignore -->
<link rel="canonical" href="https://rea.tools/guides/setup/" />
<!-- prettier-ignore -->
<meta property="og:type" content="website" />
<!-- prettier-ignore -->
<meta property="og:site_name" content="REA" />
<!-- prettier-ignore -->
<meta property="og:title" content="Set Up REA Step by Step — REA" />
<!-- prettier-ignore -->
<meta property="og:description" content="Set up REA with pictures, starting from a web-browser AI chat: install an AI app and Node.js, run one command and ask your first question." />
<!-- prettier-ignore -->
<meta property="og:url" content="https://rea.tools/guides/setup/" />
<!-- prettier-ignore -->
<meta property="og:image" content="https://rea.tools/assets/social-card.png" />
<!-- prettier-ignore -->
<meta property="og:image:type" content="image/png" />
<!-- prettier-ignore -->
<meta property="og:image:width" content="1200" />
<!-- prettier-ignore -->
<meta property="og:image:height" content="630" />
<!-- prettier-ignore -->
<meta
property="og:image:alt"
content="REA — Find out how software works. Reverse engineering with your coding agent."
/>
<!-- prettier-ignore -->
<meta name="twitter:card" content="summary_large_image" />
<!-- prettier-ignore -->
<meta name="twitter:title" content="Set Up REA Step by Step — REA" />
<!-- prettier-ignore -->
<meta name="twitter:description" content="Set up REA with pictures, starting from a web-browser AI chat: install an AI app and Node.js, run one command and ask your first question." />
<!-- prettier-ignore -->
<meta name="twitter:image" content="https://rea.tools/assets/social-card.png" />
<!-- prettier-ignore -->
<meta
name="twitter:image:alt"
content="REA — Find out how software works. Reverse engineering with your coding agent."
/>
<!-- website:sharing:end -->
<meta name="theme-color" content="#ffffff" />
<link rel="icon" href="../../assets/favicon.svg" type="image/svg+xml" />
<link rel="stylesheet" href="../../assets/styles.css" />
<script src="../../assets/main.js" defer></script>
</head>
<body id="top">
<a class="skip-link" href="#main">Skip to content</a>
<!-- website:header:start -->
<!-- prettier-ignore -->
<header class="site-header">
<div class="container header-inner">
<a class="brand" href="../../" aria-label="REA home"
><span class="brand-name">REA</span
><span class="brand-caption">Reverse Engineer Anything</span></a
>
<nav class="navigation" aria-label="Main navigation">
<a href="../../showcase/">Showcases</a>
<a href="../../blog/">Blog</a>
<a href="../../get-started/" class="nav-start">Get started</a>
<a href="../../guides/" aria-current="page">Guides</a>
<a href="../../faq/">FAQ</a>
</nav>
<div class="header-social">
<a
class="nav-github"
href="https://github.com/morluto/rea"
aria-label="REA on GitHub"
title="REA on GitHub"
>
<svg
width="22"
height="22"
viewBox="0 0 16 16"
aria-hidden="true"
focusable="false"
>
<path
fill="currentColor"
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82a7.65 7.65 0 0 1 2-.27c.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"
/>
</svg>
<span class="nav-github-count" hidden aria-hidden="true"></span>
</a>
<a
class="nav-discord"
href="https://discord.gg/GkcryMnJDM"
aria-label="Join REA on Discord"
title="Join REA on Discord"
>
<svg
width="22"
height="22"
viewBox="0 0 24 24"
aria-hidden="true"
focusable="false"
>
<path
fill="currentColor"
d="M20.317 4.3698a19.7913 19.7913 0 0 0-4.8851-1.5152.0741.0741 0 0 0-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 0 0-.0785-.037 19.7363 19.7363 0 0 0-4.8852 1.515.0699.0699 0 0 0-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 0 0 .0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 0 0 .0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 0 0-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 0 1-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 0 1 .0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 0 1 .0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 0 1-.0066.1276 12.2986 12.2986 0 0 1-1.873.8914.0766.0766 0 0 0-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 0 0 .0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 0 0 .0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 0 0-.0312-.0286ZM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189Zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"
/>
</svg>
</a>
<a
class="nav-x"
href="https://x.com/reatools"
aria-label="Follow REA on X"
title="Follow REA on X"
>
<svg
width="18"
height="18"
viewBox="0 0 24 24"
aria-hidden="true"
focusable="false"
>
<path
fill="currentColor"
d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"
/>
</svg>
</a>
</div>
</div>
</header>
<!-- website:header:end -->
<main id="main" class="container">
<div class="page-heading">
<p class="breadcrumb">
<a href="../../">Home</a> / <a href="../">Guides</a> / Setup, step by
step
</p>
<h1>Set up REA,<br />one step at a time.</h1>
<p class="lede">
Only used AI in a web browser? Start here. Each step says what to
click, what to type and what you should see.
</p>
<p class="page-meta">
About 15 minutes · Mac, Windows or Linux · No coding needed
</p>
</div>
<div class="article-layout">
<nav class="contents" aria-label="On this page">
<p>Steps</p>
<ul>
<li><a href="#pieces">How the pieces fit</a></li>
<li><a href="#app">1. Get an AI app</a></li>
<li><a href="#node">2. Install Node.js</a></li>
<li><a href="#terminal">3. Open the terminal</a></li>
<li><a href="#run">4. Run REA setup</a></li>
<li><a href="#choose">5. Choose your AI app</a></li>
<li><a href="#approve">6. Approve the changes</a></li>
<li><a href="#restart">7. Restart your AI app</a></li>
<li><a href="#ask">8. Ask your first question</a></li>
<li><a href="#trouble">If something goes wrong</a></li>
</ul>
</nav>
<article class="article" aria-label="Step-by-step REA setup">
<section class="article-section" id="pieces">
<h2>How the pieces fit</h2>
<p>
The AI chat in your web browser can't open programs or files on
your computer. A desktop AI app can, once a tool such as REA is
connected to it. REA is the part that looks inside a program and
reports what it finds.
</p>
<figure class="workflow-figure">
<p class="figure-title">Who does what</p>
<ol class="flow-steps">
<li>
<span class="flow-label">You</span
><span class="flow-node">Ask a question in plain words</span
><span class="flow-note"
>“What happens when I click Export in this app?”</span
>
</li>
<li>
<span class="flow-label">Your AI app</span
><span class="flow-node">Decides what to look at</span
><span class="flow-note"
>Claude, ChatGPT's Codex or another agent on your
computer.</span
>
</li>
<li>
<span class="flow-label">REA</span
><span class="flow-node">Reads the program's code</span
><span class="flow-note"
>Returns the code and where it was found, so the AI can
explain it.</span
>
</li>
</ol>
<figcaption>
You need two things on your computer: an AI app and REA. The
steps below install both and connect them.
</figcaption>
</figure>
<details class="evidence-details">
<summary>Words you'll see on this page</summary>
<dl class="word-list">
<dt>Terminal</dt>
<dd>
A window where you type instructions instead of clicking.
Every computer has one.
</dd>
<dt>Command</dt>
<dd>
One line of text you paste into the terminal and run by
pressing Enter.
</dd>
<dt>Path</dt>
<dd>
The address of a file or folder, such as
<code>/Users/sam/Downloads/notes-example</code>. Step 8 shows
how to copy one.
</dd>
<dt>MCP</dt>
<dd>
The standard way AI apps connect to tools like REA. Setup
configures it for you; you never edit it by hand.
</dd>
</dl>
</details>
</section>
<section class="article-section" id="app">
<p class="step-label">Step 1</p>
<h2>Get an AI app for your computer</h2>
<p>Pick the one that matches the AI you already use:</p>
<ul class="choice-list">
<li>
<strong>You use Claude in the browser.</strong> Install
<a href="https://claude.ai/download">Claude Desktop</a> and sign
in with the same account.
</li>
<li>
<strong>You use ChatGPT.</strong> Install
<a href="https://developers.openai.com/codex">Codex</a>,
OpenAI's coding agent, and sign in with your ChatGPT account.
</li>
<li>
<strong>You already use a coding agent</strong> such as Claude
Code, Cursor or Gemini CLI. Keep it and go to step 2.
</li>
</ul>
<p>
Open the app once to finish signing in, then leave it. This guide
shows Claude Desktop; the other apps follow the same steps.
</p>
</section>
<section class="article-section" id="node">
<p class="step-label">Step 2</p>
<h2>Install Node.js</h2>
<p>
REA runs on Node.js, a free program that many developer tools use.
REA doesn't install it for you, so do this once:
</p>
<ol class="numbered-steps">
<li>
Open the
<a href="https://nodejs.org/en/download"
>Node.js download page</a
>.
</li>
<li>
Choose the <strong>LTS</strong> version (“long-term support”)
and the <strong>installer</strong> for your computer: a
<code>.pkg</code> file on a Mac or an <code>.msi</code> file on
Windows.
</li>
<li>
Open the downloaded file and click <strong>Continue</strong> or
<strong>Next</strong> until it finishes. Keep the default
options.
</li>
</ol>
<p class="caption">
On Linux, use the instructions for your distribution on the same
page. REA works with Node.js 22 (22.19 or newer), 24 (24.11 or
newer) and 26 or newer.
</p>
</section>
<section class="article-section" id="terminal">
<p class="step-label">Step 3</p>
<h2>Open the terminal</h2>
<ul class="choice-list">
<li>
<strong>Mac:</strong> press <kbd>⌘ Command</kbd> +
<kbd>Space</kbd>, type <code>Terminal</code> and press
<kbd>Return</kbd>.
</li>
<li>
<strong>Windows:</strong> press the <kbd>Windows</kbd> key, type
<code>cmd</code> and press <kbd>Enter</kbd> to open
<strong>Command Prompt</strong>. Use Command Prompt rather than
PowerShell for these steps.
</li>
<li>
<strong>Linux:</strong> press <kbd>Ctrl</kbd> + <kbd>Alt</kbd> +
<kbd>T</kbd>, or open Terminal from your apps.
</li>
</ul>
<p>
Check that Node.js is installed. Type this line, then press
<kbd>Enter</kbd>:
</p>
<div class="code-block code-inline">
<code id="setup-node-version">node -v</code>
<button
class="copy-button"
type="button"
data-copy="setup-node-version"
aria-label="Copy Node.js version check"
>
Copy
</button>
</div>
<figure class="screen-figure">
<div class="screen">
<div class="screen-bar">
<span class="terminal-dots" aria-hidden="true"
><i></i><i></i><i></i></span
>Terminal
</div>
<pre class="screen-body"><code>$ node -v
<mark>v24.11.1</mark></code></pre>
</div>
<figcaption>
Example result. A number starting with <code>v22</code>,
<code>v24</code> or <code>v26</code> means you're ready. The
<code>$</code> stands for the text your terminal shows before
the cursor; it differs on every computer.
</figcaption>
</figure>
<p>
If the terminal says <code>command not found</code> or
<code>is not recognized</code>, close the terminal, open a new one
and try again. A terminal opened before the installation can't see
Node.js yet.
</p>
</section>
<section class="article-section" id="run">
<p class="step-label">Step 4</p>
<h2>Run REA setup</h2>
<p>
Click <strong>Copy</strong>, paste the command into the terminal
and press <kbd>Enter</kbd>:
</p>
<div class="code-block code-inline">
<code id="setup-command">npx rea-agents@latest setup</code>
<button
class="copy-button"
type="button"
data-copy="setup-command"
aria-label="Copy REA setup command"
>
Copy
</button>
</div>
<p class="caption">
To paste: <kbd>⌘ Command</kbd> + <kbd>V</kbd> on a Mac,
<kbd>Ctrl</kbd> + <kbd>V</kbd> in Windows Command Prompt, or
<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>V</kbd> in most Linux
terminals.
</p>
<p>
The first time, npm asks before downloading REA. Type
<kbd>y</kbd> and press <kbd>Enter</kbd>.
</p>
<figure class="screen-figure">
<div class="screen">
<div class="screen-bar">
<span class="terminal-dots" aria-hidden="true"
><i></i><i></i><i></i></span
>Terminal
</div>
<pre class="screen-body"><code>$ npx rea-agents@latest setup
Need to install the following packages:
rea-agents@6.3.0
Ok to proceed? (y) <mark>y</mark></code></pre>
</div>
<figcaption>
The version number will be newer when REA releases an update.
This only downloads REA; nothing on your computer changes until
step 6.
</figcaption>
</figure>
</section>
<section class="article-section" id="choose">
<p class="step-label">Step 5</p>
<h2>Choose your AI app</h2>
<p>Setup shows a list of AI apps. Use the keyboard:</p>
<ol class="numbered-steps">
<li>
Press <kbd>↓</kbd> to move to your app, for example
<strong>Claude Desktop</strong>.
</li>
<li>
Press <kbd>Space</kbd> to tick it. The empty box
<code>◻</code> turns into a filled box <code>◼</code>.
</li>
<li>Press <kbd>Enter</kbd> to continue.</li>
</ol>
<figure class="screen-figure">
<div class="screen">
<div class="screen-bar">
<span class="terminal-dots" aria-hidden="true"
><i></i><i></i><i></i></span
>Terminal
</div>
<pre class="screen-body"><code>┌ REA setup
│ Understand local apps and binaries from your terminal or agent.
│
◆ No agents detected. Choose any supported agent below.
│
│ Keys: ↑/↓ navigate · Space toggle · Enter confirm · Ctrl-C cancel
│
◆ Which agents should use REA?
│ ◻ Claude Code
│ <mark>◼ Claude Desktop</mark> (Not detected · configuration is still available)
│ ◻ Codex
│ ◻ Cursor
│ ◻ Gemini CLI
│ …
│ ↑/↓ to navigate • Space: select • Enter: confirm
└</code></pre>
</div>
<figcaption>
Recorded from REA 6.3.0 with Claude Desktop ticked; the full
list is longer. “Not detected” is fine: setup can still connect
an app it didn't find.
</figcaption>
</figure>
<p>
On a Mac or Linux, setup may also ask
<strong>“Install Hopper for deep binary analysis?”</strong> Press
<kbd>Enter</kbd> to keep <strong>No</strong>. You only need Hopper
for compiled programs, and you can add it later from the
<a href="../../get-started/#native">native analysis setup</a>.
</p>
</section>
<section class="article-section" id="approve">
<p class="step-label">Step 6</p>
<h2>Approve the changes</h2>
<p>
Before it changes anything, setup lists exactly what it will do.
</p>
<figure class="screen-figure">
<div class="screen">
<div class="screen-bar">
<span class="terminal-dots" aria-hidden="true"
><i></i><i></i><i></i></span
>Terminal
</div>
<pre class="screen-body"><code>◆ Ready to review
│
│ <mark>CREATE Claude Desktop</mark>
│ ~/Library/Application Support/Claude/claude_desktop_config.json
│ Add the REA MCP registration for Claude Desktop;
│ preserve unrelated configuration.
│
│ <mark>INSTALL REA reverse-engineering skill</mark>
│ ~/.agents/skills/reverse-engineer-anything
│ Install or update the bundled REA reverse-engineering
│ skill and on-demand references.
│
◆ Apply these 2 changes?
│ <mark>● Yes, apply</mark> / ○ No, cancel
└</code></pre>
</div>
<figcaption>
Shortened from a REA 6.3.0 recording on a Mac: some detail lines
are left out, long lines are wrapped and your home folder is
shown as <code>~</code>.
</figcaption>
</figure>
<ul class="choice-list">
<li>
<strong>CREATE</strong> adds REA to your AI app's settings file.
Your other settings stay as they are; if the file already
exists, setup keeps a backup.
</li>
<li>
<strong>INSTALL</strong> adds a short instruction set that
teaches coding agents how to use REA.
</li>
</ul>
<p>
<strong>Yes, apply</strong> is already selected. Press
<kbd>Enter</kbd>. To stop instead, press <kbd>Ctrl</kbd> +
<kbd>C</kbd>; nothing is changed.
</p>
</section>
<section class="article-section" id="restart">
<p class="step-label">Step 7</p>
<h2>Restart your AI app</h2>
<p>When setup finishes, it tells you what to restart:</p>
<figure class="screen-figure">
<div class="screen">
<div class="screen-bar">
<span class="terminal-dots" aria-hidden="true"
><i></i><i></i><i></i></span
>Terminal
</div>
<pre class="screen-body"><code>◆ What you can do now
│ Agent access: Claude Desktop
│ Guided reverse-engineering workflows: installed
│ CLI: npx rea-agents capabilities
│ Try in Claude Desktop: "Explain how a feature works in
│ /path/to/app and show the evidence."
│
└ <mark>Restart Claude Desktop to load REA.</mark></code></pre>
</div>
<figcaption>Recorded from REA 6.3.0 on a Mac.</figcaption>
</figure>
<p>
Quit the app completely, then open it again. Closing its window
isn't enough:
</p>
<ul class="choice-list">
<li>
<strong>Mac:</strong> click the app, then press
<kbd>⌘ Command</kbd> + <kbd>Q</kbd>.
</li>
<li>
<strong>Windows:</strong> choose <strong>Quit</strong> or
<strong>Exit</strong> from the app's menu, or right-click its
icon next to the clock and choose <strong>Quit</strong>.
</li>
<li>
<strong>A terminal agent</strong> such as Claude Code or Codex:
exit it and start it again.
</li>
</ul>
<p>You can close the terminal now.</p>
</section>
<section class="article-section" id="ask">
<p class="step-label">Step 8</p>
<h2>Ask your first question</h2>
<p>
Try REA on a small example app with an
<strong>Export notes</strong> button. You don't need to run it;
REA reads its code.
</p>
<ol class="numbered-steps">
<li>
<a
href="../../examples/notes-example.zip"
download="notes-example.zip"
>Download the example ZIP</a
>
and unzip it: double-click it on a Mac, or right-click it on
Windows and choose <strong>Extract All</strong>.
</li>
<li>
Copy the prompt below and paste it into your AI app. Don't send
it yet.
</li>
<li>
Copy the path of the <code>notes-example</code> folder:
<ul>
<li>
<strong>Mac:</strong> right-click the folder, hold
<kbd>⌥ Option</kbd> and choose
<strong>Copy “notes-example” as Pathname</strong>.
</li>
<li>
<strong>Windows:</strong> right-click the folder and choose
<strong>Copy as path</strong>. On Windows 10, hold
<kbd>Shift</kbd> while you right-click.
</li>
</ul>
</li>
<li>
Paste the path at the end of your message and send it. If your
app asks whether it may use a REA tool, allow it.
</li>
</ol>
<div class="agent-terminal">
<div class="terminal-header">
<span class="terminal-title"
><span class="terminal-dots" aria-hidden="true"
><i></i><i></i><i></i></span
>Your AI app</span
>
<button
class="copy-button"
type="button"
data-copy="setup-first-prompt"
aria-label="Copy first question"
>
Copy
</button>
</div>
<p class="terminal-prompt">
<span class="prompt-symbol" aria-hidden="true">›</span
><span id="setup-first-prompt"
>Use REA to look at the small app in the folder below. What
happens when I click Export notes, and where is notes.csv
saved? Show the files and lines. Folder:</span
><span class="terminal-cursor" aria-hidden="true"></span>
</p>
</div>
<figure class="screen-figure">
<div class="screen chat-screen">
<div class="screen-bar">
<span class="terminal-dots" aria-hidden="true"
><i></i><i></i><i></i></span
>Your AI app
</div>
<div class="chat-body">
<p class="chat-message chat-you">
Use REA to look at the small app in the folder below. What
happens when I click Export notes, and where is notes.csv
saved? Show the files and lines. Folder:
<mark>/Users/sam/Downloads/notes-example</mark>
</p>
<p class="chat-message chat-ai">
The button calls <code>notes.exportCsv()</code>, which sends
a <code>notes:export</code> message to the main process.
There, <code>main.js</code> (lines 8–12) formats the notes
as CSV and writes <code>notes.csv</code> to your Downloads
folder…
</p>
</div>
</div>
<figcaption>
Illustration with an example path. Your path and the AI's
wording will differ; look for the
<code>notes:export</code> message, <code>main.js</code> and the
Downloads folder.
</figcaption>
</figure>
<p>
<strong>You're set up.</strong> To understand that answer and
check one detail yourself, continue with
<a href="../../first-investigation/#answer"
>your first investigation</a
>. To try your own programs, pick a guide:
</p>
<ul class="reading-list">
<li>
<a href="../javascript/">Trace an Electron CSV export</a
><span
>Desktop apps built with web technology. No extra tools
needed.</span
>
</li>
<li>
<a href="../browser/">See what happens when you click</a
><span
>Websites, using Chrome or another Chromium browser.</span
>
</li>
<li>
<a href="../native/">Recover a calculation from a game</a
><span
>Compiled programs such as <code>.exe</code> files. Needs
Ghidra, Hopper or IDA.</span
>
</li>
</ul>
</section>
<section class="article-section" id="trouble">
<h2>If something goes wrong</h2>
<details class="evidence-details">
<summary>
“command not found: npx” or “'npx' is not recognized”
</summary>
<p>
The terminal can't find Node.js. Close every terminal window,
open a new one and run <code>node -v</code>. If it still fails,
install Node.js again from <a href="#node">step 2</a>.
</p>
</details>
<details class="evidence-details">
<summary>“running scripts is disabled on this system”</summary>
<p>
You're in Windows PowerShell, which blocks <code>npx</code> on
many computers. Open <strong>Command Prompt</strong> instead (<a
href="#terminal"
>step 3</a
>) and paste the command there.
</p>
</details>
<details class="evidence-details">
<summary>Setup says my Node.js version isn't supported</summary>
<p>
Install the current LTS version from
<a href="#node">step 2</a>, open a new terminal and run setup
again.
</p>
</details>
<details class="evidence-details">
<summary>My AI app doesn't use REA</summary>
<p>
Quit the app completely and open it again (<a href="#restart"
>step 7</a
>). If it still doesn't, check the connection from the terminal.
For Claude Desktop:
</p>
<div class="code-block code-inline">
<code id="setup-doctor"
>npx rea-agents@latest doctor --client claude_desktop</code
>
<button
class="copy-button"
type="button"
data-copy="setup-doctor"
aria-label="Copy connection check"
>
Copy
</button>
</div>
<p>
The first line should say <code>healthy: true</code>. Lines
about Hopper, Ghidra and IDA only matter for compiled programs.
For another app, replace <code>claude_desktop</code> with
<code>codex</code>, <code>claude_code</code>,
<code>cursor</code> or <code>gemini_cli</code>.
</p>
</details>
<details class="evidence-details">
<summary>I chose the wrong app, or want to add another</summary>
<p>
Run the setup command from <a href="#run">step 4</a> again. Apps
you already connected are ticked; tick the one you want and
press <kbd>Enter</kbd>.
</p>
</details>
<p>
Still stuck? Read the <a href="../../faq/">FAQ</a>, ask in the
<a href="https://discord.gg/GkcryMnJDM">REA community</a> or
<a href="https://github.com/morluto/rea/issues"
>report a problem</a
>. Include what you typed and what the terminal printed.
</p>
</section>
</article>
</div>
</main>
<!-- website:footer:start -->
<!-- prettier-ignore -->
<footer class="site-footer">
<div class="container footer-inner">
<p>REA · Reverse Engineer Anything</p>
<div class="footer-links">
<a href="https://github.com/morluto/rea">Source</a
><a href="https://github.com/morluto/rea/blob/main/LICENSE">MIT license</a
><a href="https://discord.gg/GkcryMnJDM">Join the community</a
><a href="https://x.com/reatools">Follow us on X</a>
</div>
</div>
</footer>
<p class="sr-only" id="copy-status" role="status" aria-live="polite"></p>
<a class="back-to-top" href="#top" aria-label="Back to top">
<span aria-hidden="true">↑</span> Top
</a>
<!-- website:footer:end -->
</body>
</html>