Inspect a program
+- Read
input.exeKeep evidence.
const value = a < b ? "x_y" : "&";\n keepIndent();
+ Evidence
Hidden evidence remains available.
npx rea-agents setup
diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md
index e58c4d94f2..98d4af57fe 100644
--- a/THIRD_PARTY_NOTICES.md
+++ b/THIRD_PARTY_NOTICES.md
@@ -60,7 +60,7 @@ pin inspection sources; they are not included in the npm package.
| ghidra-nativeaot | [MIT](https://github.com/Washi1337/ghidra-nativeaot/blob/effeb734fc570c32650f88b159608979dc7b423e/LICENSE.md) | Pinned inspection source; derived parser attribution above. |
| JADX | [Apache-2.0](https://github.com/skylot/jadx/blob/v1.5.6/LICENSE) | The audited jadx-headless-mcp source uses JADX 1.5.6 for Android decompilation; the engine JAR is separately supplied. |
| jadx-headless-mcp | [Apache-2.0](https://github.com/1013503897/jadx-headless-mcp/blob/5844800a486d2248fa949b74c9896285f5b54de2/LICENSE) | v0.7.1; pinned submodule and user-supplied JAR. |
-| Kuna | [Apache-2.0](https://github.com/Noelo-Lab/kuna/blob/v1.988/LICENSE), with its [NOTICE](https://github.com/Noelo-Lab/kuna/blob/v1.988/NOTICE) | Bring your own `kuna`; REA verified 1.988 and never downloads, installs or bundles it. REA invokes it as a separate process. |
+| Kuna | [Apache-2.0](https://github.com/Noelo-Lab/kuna/blob/v1.990/LICENSE), with its [NOTICE](https://github.com/Noelo-Lab/kuna/blob/v1.990/NOTICE) | Bring your own `kuna`; REA verified 1.990 and never downloads, installs or bundles it. REA invokes it as a separate process. |
| Apktool | [Apache-2.0](https://github.com/iBotPeaches/Apktool/blob/master/LICENSE.md) | User-supplied Android resource decoder. |
| Binwalk | [MIT](https://github.com/ReFirmLabs/binwalk/blob/4fdab3d464d97b68e0af9088df3f9e2e1545b21c/LICENSE) | v3.1.0; pinned submodule and user-supplied firmware engine. |
| Unblob | [MIT](https://github.com/onekey-sec/unblob/blob/1fcc7a0a584a70a96c31f5a276c20944d199a089/LICENSE) | 26.6.4; pinned submodule and user-supplied firmware engine. |
diff --git a/bridge/ghidra/ReaGhidraBridge.java b/bridge/ghidra/ReaGhidraBridge.java
index eb26f63d84..05cbb01781 100644
--- a/bridge/ghidra/ReaGhidraBridge.java
+++ b/bridge/ghidra/ReaGhidraBridge.java
@@ -179,6 +179,8 @@ public final class ReaGhidraBridge extends HeadlessScript {
private Listnpx rea-agents setup
diff --git a/docs/readme/README_de.md b/docs/readme/README_de.md
index d71d77ab73..1301036c8d 100644
--- a/docs/readme/README_de.md
+++ b/docs/readme/README_de.md
@@ -20,6 +20,8 @@
**[Website](https://rea.tools/de/) · [Anleitungen](https://rea.tools/de/guides/) · [Fallstudien](https://rea.tools/de/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_el.md b/docs/readme/README_el.md
index 6bd0fbc369..e5e450cce2 100644
--- a/docs/readme/README_el.md
+++ b/docs/readme/README_el.md
@@ -19,6 +19,8 @@
**[Ιστότοπος](https://rea.tools/) · [Οδηγοί](https://rea.tools/guides/) · [Μελέτες περίπτωσης](https://rea.tools/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_es.md b/docs/readme/README_es.md
index bcf465c0f5..0d276c8a42 100644
--- a/docs/readme/README_es.md
+++ b/docs/readme/README_es.md
@@ -20,6 +20,8 @@
**[Sitio web](https://rea.tools/es/) · [Guías](https://rea.tools/es/guides/) · [Casos prácticos](https://rea.tools/es/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_fa.md b/docs/readme/README_fa.md
index b90329aa87..494317aa50 100644
--- a/docs/readme/README_fa.md
+++ b/docs/readme/README_fa.md
@@ -20,6 +20,8 @@
**[وبسایت](https://rea.tools/fa/) · [راهنماها](https://rea.tools/fa/guides/) · [نمونههای عملی](https://rea.tools/fa/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_fr.md b/docs/readme/README_fr.md
index 48832fdb1f..2f165982fe 100644
--- a/docs/readme/README_fr.md
+++ b/docs/readme/README_fr.md
@@ -20,6 +20,8 @@
**[Site web](https://rea.tools/fr/) · [Guides](https://rea.tools/fr/guides/) · [Études de cas](https://rea.tools/fr/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_id.md b/docs/readme/README_id.md
index 4a994ea102..b283dba9b3 100644
--- a/docs/readme/README_id.md
+++ b/docs/readme/README_id.md
@@ -20,6 +20,8 @@
**[Situs Web](https://rea.tools/id/) · [Panduan](https://rea.tools/id/guides/) · [Contoh Penggunaan](https://rea.tools/id/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_it.md b/docs/readme/README_it.md
index f3f305e22c..ad7f25de50 100644
--- a/docs/readme/README_it.md
+++ b/docs/readme/README_it.md
@@ -20,6 +20,8 @@
**[Sito web](https://rea.tools/it/) · [Guide](https://rea.tools/it/guides/) · [Showcase](https://rea.tools/it/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_ja.md b/docs/readme/README_ja.md
index 31dc75c7c8..1918517ff6 100644
--- a/docs/readme/README_ja.md
+++ b/docs/readme/README_ja.md
@@ -20,6 +20,8 @@
**[ウェブサイト](https://rea.tools/ja/) · [ガイド](https://rea.tools/ja/guides/) · [事例](https://rea.tools/ja/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_ko.md b/docs/readme/README_ko.md
index cd420f6b31..4a4755cb04 100644
--- a/docs/readme/README_ko.md
+++ b/docs/readme/README_ko.md
@@ -20,6 +20,8 @@
**[웹사이트](https://rea.tools/ko/) · [가이드](https://rea.tools/ko/guides/) · [사례](https://rea.tools/ko/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_ml.md b/docs/readme/README_ml.md
index c71fa179fc..05e2d110a2 100644
--- a/docs/readme/README_ml.md
+++ b/docs/readme/README_ml.md
@@ -20,6 +20,8 @@
**[വെബ്സൈറ്റ്](https://rea.tools/) · [ഗൈഡുകൾ](https://rea.tools/guides/) · [ഉദാഹരണങ്ങൾ](https://rea.tools/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_pl.md b/docs/readme/README_pl.md
index 7954c97566..590f32e636 100644
--- a/docs/readme/README_pl.md
+++ b/docs/readme/README_pl.md
@@ -20,6 +20,8 @@
**[Strona internetowa](https://rea.tools/pl/) · [Przewodniki](https://rea.tools/pl/guides/) · [Przykłady zastosowań](https://rea.tools/pl/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_pt-BR.md b/docs/readme/README_pt-BR.md
index 4be1a409c0..366325f3fc 100644
--- a/docs/readme/README_pt-BR.md
+++ b/docs/readme/README_pt-BR.md
@@ -20,6 +20,8 @@
**[Site](https://rea.tools/pt-BR/) · [Guias](https://rea.tools/pt-BR/guides/) · [Casos de uso](https://rea.tools/pt-BR/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_ro.md b/docs/readme/README_ro.md
index 5755c5b54a..c16fde180d 100644
--- a/docs/readme/README_ro.md
+++ b/docs/readme/README_ro.md
@@ -20,6 +20,8 @@
**[Site web](https://rea.tools/) · [Ghiduri](https://rea.tools/guides/) · [Studii de caz](https://rea.tools/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_ru.md b/docs/readme/README_ru.md
index 13e9ba09ad..b873e2cd0f 100644
--- a/docs/readme/README_ru.md
+++ b/docs/readme/README_ru.md
@@ -20,6 +20,8 @@
**[Сайт](https://rea.tools/ru/) · [Руководства](https://rea.tools/ru/guides/) · [Примеры](https://rea.tools/ru/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_th.md b/docs/readme/README_th.md
index 9f442bfea1..9621f78793 100644
--- a/docs/readme/README_th.md
+++ b/docs/readme/README_th.md
@@ -20,6 +20,8 @@
**[เว็บไซต์](https://rea.tools/th/) · [คู่มือ](https://rea.tools/th/guides/) · [ตัวอย่างการใช้งาน](https://rea.tools/th/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_tr.md b/docs/readme/README_tr.md
index 6037f0e2f0..58b79a5428 100644
--- a/docs/readme/README_tr.md
+++ b/docs/readme/README_tr.md
@@ -20,6 +20,8 @@
**[Web sitesi](https://rea.tools/tr/) · [Rehberler](https://rea.tools/tr/guides/) · [Örnek çalışmalar](https://rea.tools/tr/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_uk.md b/docs/readme/README_uk.md
index 937e62dec1..a181184b4b 100644
--- a/docs/readme/README_uk.md
+++ b/docs/readme/README_uk.md
@@ -20,6 +20,8 @@
**[Сайт](https://rea.tools/uk/) · [Посібники](https://rea.tools/uk/guides/) · [Приклади](https://rea.tools/uk/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_ur-Latn.md b/docs/readme/README_ur-Latn.md
index b8f3c86e56..cff973fdbf 100644
--- a/docs/readme/README_ur-Latn.md
+++ b/docs/readme/README_ur-Latn.md
@@ -20,6 +20,8 @@
**[Website](https://rea.tools/) · [Guides](https://rea.tools/guides/) · [Showcases](https://rea.tools/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_vi.md b/docs/readme/README_vi.md
index bf1e56258c..dd1ed47c8d 100644
--- a/docs/readme/README_vi.md
+++ b/docs/readme/README_vi.md
@@ -20,6 +20,8 @@
**[Trang web](https://rea.tools/vi/) · [Hướng dẫn](https://rea.tools/vi/guides/) · [Các nghiên cứu điển hình](https://rea.tools/vi/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_zh-TW.md b/docs/readme/README_zh-TW.md
index d12645c4ec..a01bb80e28 100644
--- a/docs/readme/README_zh-TW.md
+++ b/docs/readme/README_zh-TW.md
@@ -20,6 +20,8 @@
**[網站](https://rea.tools/zh-TW/) · [指南](https://rea.tools/zh-TW/guides/) · [案例](https://rea.tools/zh-TW/showcase/)**
+npx rea-agents setup
diff --git a/docs/readme/README_zh.md b/docs/readme/README_zh.md
index cfc29c463d..5a0609472e 100644
--- a/docs/readme/README_zh.md
+++ b/docs/readme/README_zh.md
@@ -20,6 +20,8 @@
**[网站](https://rea.tools/zh-CN/) · [指南](https://rea.tools/zh-CN/guides/) · [案例](https://rea.tools/zh-CN/showcase/)**
+npx rea-agents setup
diff --git a/docs/reverse-engineering-tools.md b/docs/reverse-engineering-tools.md
index 645fef254f..58fb66f0e7 100644
--- a/docs/reverse-engineering-tools.md
+++ b/docs/reverse-engineering-tools.md
@@ -14,7 +14,13 @@ can run.
## GNU objdump
-`inspect_with_objdump` and `rea inspect-with-objdump` capture stdout and stderr as inline Evidence. Artifact inspection Evidence records SHA-256 digests before and after the provider call and whether those observed digests differ; this cannot prove the exact bytes consumed if the artifact changes during execution. Choose one artifact operation: `file_headers`, `section_headers`, `symbols`, `relocations`, `dwarf`, `disassemble`, or `disassemble_all`. `disassemble` maps to `-d`; `disassemble_all` maps to `-D` and has different symbol-boundary semantics. The pathless `inspect_with_objdump {"operation":"architectures"}` MCP call or `rea list-objdump-architectures` CLI command maps to `-i` and produces subjectless provider-capability Evidence describing BFD targets compiled into the installed binary, not a guarantee that a target is supported.
+REA sends GNU-style arguments to the selected command but does not verify its
+implementation or version. Evidence identifies the command profile as
+`objdump.command` and retains the selected executable; it does not claim that
+the executable is GNU objdump. Other implementations may accept some commands
+while differing in supported options and output.
+
+`inspect_with_objdump` and `rea inspect-with-objdump` capture stdout and stderr as inline Evidence. Artifact inspection Evidence records SHA-256 digests before and after the provider call and whether those observed digests differ; this cannot prove the exact bytes consumed if the artifact changes during execution. Choose one artifact operation: `file_headers`, `section_headers`, `symbols`, `relocations`, `dwarf`, `disassemble`, or `disassemble_all`. `disassemble` maps to `-d`; `disassemble_all` maps to `-D` and has different symbol-boundary semantics. The pathless `inspect_with_objdump {"operation":"architectures"}` MCP call or `rea list-objdump-architectures` CLI command maps to `-i` and produces subjectless Evidence containing the selected command’s output, not a guarantee that any target is supported. GNU objdump uses this option to list its compiled-in BFD targets.
Failure to launch the selected executable reports provider unavailability, the
configured command and the host error under `boundary: "provider-launch"`.
@@ -25,7 +31,7 @@ their rejected fields in input issues before artifact reads or provider launch.
For DWARF, REA does not follow local debug links by default. Set `follow_debug_links` to `true` to pass `-WK`; external debug-file identities are not bound to Evidence when following links is enabled. The CLI flag is `--follow-debug-links`; `--no-follow-debug-links` or `--follow-debug-links=false` keeps the default. A separate `true` or `false` word after the flag is not its value. REA clears `DEBUGINFOD_URLS` in the objdump child environment to disable debuginfod network access on GNU binutils versions that do not support `-WE`. The complete raw output is authoritative; REA does not normalize it into a version-independent disassembly schema.
-For a known native symbol, use `operation: "disassemble", symbol: "my_function"` in MCP or `--symbol my_function` in CLI. REA passes `--disassemble=my_function` to objdump before collecting output, rather than producing the whole disassembly and filtering it afterward. Omit `symbol` to keep full code-section disassembly. Other operations reject this selector. Use a nonempty, NUL-free name with well-formed Unicode; unsupported values are rejected before reading the artifact or starting objdump. Symbol names are passed unchanged; matching, versioned symbols, aliases and the end of the disassembly follow the installed GNU objdump's semantics. Evidence records the selector and actual arguments. An empty match does not establish artifact-wide absence, and the selected observation does not contain the omitted disassembly; request the complete operation when needed.
+For a known native symbol, use `operation: "disassemble", symbol: "my_function"` in MCP or `--symbol my_function` in CLI. REA passes `--disassemble=my_function` to objdump before collecting output, rather than producing the whole disassembly and filtering it afterward. Omit `symbol` to keep full code-section disassembly. Other operations reject this selector. Use a nonempty, NUL-free name with well-formed Unicode; unsupported values are rejected before reading the artifact or starting objdump. Symbol names are passed unchanged; matching, versioned symbols, aliases and the end of the disassembly follow the selected executable's semantics. Evidence records the selector and actual arguments. An empty match does not establish artifact-wide absence, and the selected observation does not contain the omitted disassembly; request the complete operation when needed.
```sh
rea inspect-with-objdump ./program disassemble
@@ -40,7 +46,7 @@ Captured stdout and stderr are retained up to a 16 MiB combined limit; `output_t
## GDB
-Persistent GDB sessions, including the MCP workflow and one-shot `rea debug-with-gdb` CLI, are available only on Linux. REA verifies a live inferior's output descriptors through `/proc` before detaching it; it does not claim equivalent descriptor verification on macOS. Windows is also unsupported because owned Job Object cleanup can terminate debugger inferiors. On supported Linux hosts, `start_gdb_session`, `gdb_console`, `gdb_session_status`, and `close_gdb_session` manage a persistent GDB/MI session in MCP. The one-shot CLI requires a caller-selected durable TTY: `rea debug-with-gdb --inferior-tty /dev/pts/7 'file ./program'`. The TTY must remain available after GDB exits so a detached inferior can continue writing. MCP starts GDB with `--nx --quiet --interpreter=mi3`, retries initialization with MI2 if MI3 initialization returns an error and cleanup succeeds, waits for its prompt, and disables auto-loading. Pass optional `inferior_tty` to select the terminal that future inferior runs use; REA configures it before the session becomes ready and checks the exact value with GDB/MI. `gdb_session_status` reports the selected path, whether REA still considers the configuration verified, and whether invalid UTF-8 has been observed in MI bytes (`mi_invalid_utf8`) or stderr (`stderr_invalid_utf8`). Commands that can change the inferior TTY or redirect a run revoke that verification permanently for the session, so close retains GDB ownership if a live inferior remains. The complete built-in inspections `show inferior-tty` and `help inferior-tty` preserve verification; compound commands still use the conservative mutation checks. Closing a session with one live inferior and a verified TTY automatically detaches the target, which can resume execution; MCP clients receive destructive-operation annotations for this behavior. The console remains unrestricted and can run shell commands, change target state, access files, and use network in the REA process user's security context. Raw MI records and console/target/log streams are returned with Evidence; command output is retained up to 16 MiB and explicitly marked when truncated. GDB startup waits 10000 ms and each MI command waits 120000 ms. This release has no runtime override for those deadlines, the 16 MiB command output budget, session capacity, or the pending-command queue. `command_timeout_ms` does not change them.
+Persistent GDB sessions, including the MCP workflow and one-shot `rea debug-with-gdb` CLI, are available only on Linux. REA verifies a live inferior's output descriptors through `/proc` before detaching it; it does not claim equivalent descriptor verification on macOS. Windows is also unsupported because owned Job Object cleanup can terminate debugger inferiors. On supported Linux hosts, `start_gdb_session`, `gdb_console`, `gdb_session_status`, and `close_gdb_session` manage a persistent GDB/MI session in MCP. The one-shot CLI requires a caller-selected durable TTY: `rea debug-with-gdb --inferior-tty /dev/pts/7 'file ./program'`. The TTY must remain available after GDB exits so a detached inferior can continue writing. MCP starts GDB with `--nx --quiet --interpreter=mi3`, retries initialization with MI2 if MI3 initialization returns an error and cleanup succeeds, waits for its prompt, and disables auto-loading. Pass optional `inferior_tty` to select the terminal that future inferior runs use; REA configures it before the session becomes ready and checks the exact value with GDB/MI. `gdb_session_status` reports the selected path, whether REA still considers the configuration verified, and whether invalid UTF-8 has been observed in MI bytes (`mi_invalid_utf8`) or stderr (`stderr_invalid_utf8`). Commands that can change the inferior TTY or redirect a run revoke that verification permanently for the session, so close retains GDB ownership if a live inferior remains. The complete built-in inspections `show inferior-tty` and `help inferior-tty` preserve verification; compound commands still use the conservative mutation checks. Closing a session with one live inferior and a verified TTY automatically detaches the target, which can resume execution; MCP clients receive destructive-operation annotations for this behavior. The console remains unrestricted and can run shell commands, change target state, access files, and use network in the REA process user's security context. Raw MI records and console/target/log streams are returned with Evidence; command output is retained up to 16 MiB and explicitly marked when truncated. A single console, target or log record over the 16 MiB MI line limit is dropped and the command is marked truncated, while an oversized result or async record still stops the session. GDB startup waits 10000 ms and each MI command waits 120000 ms. This release has no runtime override for those deadlines, the 16 MiB command output budget, session capacity, or the pending-command queue. `command_timeout_ms` does not change them.
With multiple live inferiors, or a live inferior without a verified TTY, manual
close requests an explicit disposition and keeps the session ready. Use
diff --git a/docs/specs/agent-environments/fidelity-compare/spec.md b/docs/specs/agent-environments/fidelity-compare/spec.md
index 9fe7091413..56fce988eb 100644
--- a/docs/specs/agent-environments/fidelity-compare/spec.md
+++ b/docs/specs/agent-environments/fidelity-compare/spec.md
@@ -86,7 +86,10 @@ credentials and resets it between sequences.
environment refused the call), `not-served`, `no-tool` and `unmapped-id`, each with a JSON pointer and short values.
- The report gives agreement overall, per probe and per tool, agreement ignoring item order beside it, the counts per
category, the ids mapped and the values normalised, the records left uncompared, and each step's differences (at most
- 20 per step).
+ 20 per step). Each step gives `differences_total` before that cap, `differences_omitted`, and
+ `differences_truncated`, true when entries were omitted. Equality and categories use all differences.
+ Omitted entries are not retained and `--full-output` cannot recover them; further investigation uses the original
+ capture and probe Evidence.
## Non-goals
diff --git a/docs/testing-lanes.md b/docs/testing-lanes.md
index 4a8dcd65cf..5663dca76b 100644
--- a/docs/testing-lanes.md
+++ b/docs/testing-lanes.md
@@ -269,8 +269,8 @@ APK for the negative check. No engine or external tool is involved. Record:
Flutter Gallery 2.9.2 (112 MB, arm64-v8a / armeabi-v7a / x86_64) — every
ABI reports the same agreeing snapshot hash
(`65817c30a78bb44c3dc3771876b6010a`, two sections each) read 20 bytes after
-the Dart snapshot magic, per-ABI engine GNU build-ids, no labeled Dart
-version string (expected for a release engine build), and the Android
+the Dart snapshot magic, per-ABI engine GNU build-ids, an unlabeled
+Dart-shaped version candidate, and the Android
clang/LLVM toolchain line; the AOT inspection locates all four snapshot
symbols through the dynamic symbol table on both ELF64 and ELF32 images,
validates the data-section headers, agrees with the identification hash,
@@ -284,7 +284,7 @@ prefixes, with no private local-file dependency. The verifier now compares
compiled CLI and stdio MCP Evidence on every ABI, including data-header kind
and declared lengths. Add
`--expectations scripts/fixtures/flutter-gallery-expectations.json` for the
-documented Gallery APK to assert its pinned digest, hash, exact engine labels
+documented Gallery APK to assert its pinned digest, hash, exact engine strings
and per-ABI URI counts. The verifier requires complete structural snapshot
coverage, reports bounded pool coverage as partial/unverified, and reports
exact labels/counts on other APKs unverified without an expectations file.
@@ -421,7 +421,10 @@ the first cold pseudocode answer comes from a single-function run or an export
that already finished, assembly waits for and serves from that export, and
pseudocode and both dossier facets match their recorded file spans and digests,
a fresh server reuses the export without rebuilding it, staging is empty after
-a completed export, and no owned process survives. Pass
+a completed export, and no owned process survives. A separate forced 1 ms
+project deadline checks that a timed-out inventory recommends raising the
+project deadline without changing jobs; a fresh server retries with 60 seconds
+and the same two-worker setting. Pass
`--targets DIR --functions a,b` to add caller-built binaries laid out as
`DIR/input.exeKeep evidence.const value = a < b ? "x_y" : "&";\n keepIndent();
+ Hidden evidence remains available.