[PR #2418] feat(angr): add angr MCP analysis provider #5212

Open
opened 2026-10-31 01:04:51 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/2418
Author: @ltfish
Created: 10/13/2026
Status: 🔄 Open

Base: main ← Head: feat/angr-provider


📝 Commits (10+)

  • 8322837 feat(angr): add angr MCP analysis provider
  • 8af09a8 feat(angr): expose knowledge-base edits and decompilation flavor
  • 190abec fix(angr): verify targets by digest, end owned servers on failed close, degrade on unlisted call edges
  • 1d335f0 fix(angr): share the regex worker, derive effects from transport, carry loader options
  • cf733a3 fix(angr): roll back failed annotations, settle cancelled edits, keep project and provenance state
  • 982892a fix(angr): restore annotation edits the server applied while the reply was lost
  • e57cb7d fix(angr): roll back annotations when the refreshed dossier fails
  • aeb8812 fix(angr): refuse unrepresentable target loader selections
  • 5925211 test(angr): align loader controls with explicit slice refusal
  • badc7ed fix(angr): preserve shared-state and edit failure semantics

📊 Changes

68 files changed (+6797 additions, -54 deletions)

View changed files

📝 .agents/skills/reverse-engineer-anything/SKILL.md (+17 -1)
📝 AGENTS.md (+2 -2)
📝 README.md (+3 -2)
📝 THIRD_PARTY_NOTICES.md (+1 -0)
➕ docs/angr-provider.md (+118 -0)
📝 docs/architecture.mermaid (+6 -0)
📝 docs/index.md (+1 -1)
📝 docs/installation.md (+11 -11)
📝 docs/native-investigation.md (+2 -1)
📝 docs/readme/README_ar.md (+1 -1)
📝 docs/readme/README_de.md (+1 -1)
📝 docs/readme/README_el.md (+1 -1)
📝 docs/readme/README_es.md (+1 -1)
📝 docs/readme/README_fa.md (+1 -1)
📝 docs/readme/README_fr.md (+1 -1)
📝 docs/readme/README_id.md (+1 -1)
📝 docs/readme/README_it.md (+1 -1)
📝 docs/readme/README_ja.md (+1 -1)
📝 docs/readme/README_ko.md (+1 -1)
📝 docs/readme/README_ml.md (+1 -1)

...and 48 more files

📄 Description

Summary

This PR adds angr as a new native binary analysis provider for REA.

This adapter provides two environment variables: REA_ANGR_PYTHON specifies the Python where angr[llm] is installed; REA_ANGR_MCP_CONFIG specifies the path to a JSON configuration file, where you may specify the angr MCP mode (stdio vs http).

This adapter exposes basic static analysis features in angr via MCP, which includes CFG recovery, string listing, function listing, call graph query, data cross-referencing (xrefs), disassembly listing, and decompilation (C pseudocode generation).

This PR directly addresses some aspects of https://github.com/morluto/rea/issues/2258. Additionally, angr parses Go symbols when loading Go binaries (requested by https://github.com/morluto/rea/issues/2297).

angr supports decompiling Rust binaries to Rust pseudocode and Go binaries to Go pseudocode. We will expose it to REA in a later PR.

Problem and expected behavior

angr is a widely used open-source framework for binary analysis.
It would be nice for REA to support it as a native binary analysis provider.

Change and scope

Details.
An MCP-client adapter in src/angr that implements the following components:

  • AngrConfiguration, which reads REA_ANGR_PYTHON or REA_ANGR_MCP_CONFIG. REA_ANGR_PYTHON specifies an absolute path to a Python interpreter with angr[llm] installed. REA_ANGR_MCP_CONFIG specifies the path to a JSON configuration file where you may configure to use either the stdio mode or the http mode for the angr MCP server. We restrict the MCP HTTP endpoint to localhost, 127.0.0.1, and [::1].
  • AngrMcpConnection, which uses the pinned MCP client SDK (StdioClientTransport or StreamableHTTPClientTransport) and decodes FastMCP's structured results.
  • AngrSessionClient, which serializes requests, connects on first use, verifies the upstream tool catalog, calls load_binary and get_cfg once, checks that the server reports the selected target path (realpath-compared), and closes the project it loaded. Failed close retains the project id as cleanupResources.
  • AngrOperationRunner, which maps operations to upstream tools and REA result types.

The current version PR does not ship or install angr with REA.
We can create a new PR if you want to automatically install angr whenever REA needs to analyze native binaries.

Not included.

  • angr's symbolic execution or emulation capabilities.
  • No binary_overview, typed references, comments, referenced strings and names, locals, or basic-block successors: angr's MCP server does not yet report them, and the dossier marks those facets as unknown rather than empty. We can create a new PR later to expose such information.
  • No rea setup installation of angr. Doctor validates the registration only; the angr installation and its MCP extra are checked at analysis start.

Scope decision. New provider; We request the maintainer scope decision in this PR.
The adapter exposes no target execution, injection, mutation, or protection recovery, and the upstream server's edit tools are never called.

Contract and boundary impact

  • Semantic owner and earliest changed stage: src/angr/ is the angr protocol interpretation; AnalysisProviderRegistry (src/composition/binary.ts) is the earliest changed stage. Shared contracts are unchanged.
  • Contribution scope fit and linked maintainer decision: static disassembly, decompilation, and cross-references within the documented scope; decision requested in this PR.
  • CLI and MCP/tool-catalog contract: no new tools or inputs. Provider ids are free-form strings, so --provider angr and open_binary.provider_id: "angr" do not need any schema changes. The product catalog has a new angr provider entry with the declared operations.
  • Provider, bridge, target-format, or platform compatibility: requires a caller-supplied Python with angr[llm] (FastMCP). Declines non-executable formats. No host restriction beyond angr's own.
  • Evidence, artifact, provenance, or reconstruction contract: Evidence carries provider.id = "angr", the live analysis profile (mode, transport, auto_load_libs, CFG options, registration digest), raw upstream observations with their project_id, and partial Evidence on failure after completed upstream replies. Relationship coverage is partial with the indirect-call limitation.
  • Target selection, authority, upstream behavior, and cleanup details: Each REA session owns an angr project. Headless mode owns the server process through the SDK stdio transport and it ends with the connection. Attached mode shares a caller-started server; REA closes only its project and never the server. The original binary is never executed or written; angr loads it read-only.
  • Generated metadata, package, or installation impact: scripts/lib/catalog-core.mjs and catalog-builders.mjs add the angr provider to the generated catalog; no new packaged files (the adapter is compiled into dist/). rea setup publishes a valid REA_ANGR_PYTHON or REA_ANGR_MCP_CONFIG into agent registrations through the existing doctor inspection path. Authored skill text in .agents/skills/reverse-engineer-anything/SKILL.md gains an angr paragraph.

Expected effects:

  • Read existing files or captured data.
  • Launch or attach to a process. (Headless mode launches python -m angr.mcp; attached mode connects to a caller-started loopback server.)
  • Inject instrumentation or run scripts/code.
  • Change process memory, registers, files, or configuration.
  • Contact network services. (Attached mode only, loopback HTTP; headless mode uses stdio.)
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

Evidence and regression coverage

  • Tests added or updated:
    • src/angr/AngrConfiguration.test.ts: interpreter shortcut expansion, direct and mcpServers registrations, rejection of remote endpoints, URL credentials, owned HTTP, malformed and absent files; FastMCP result decoding and tool-error surfacing.
    • src/angr/AngrProvider.test.ts: availability codes (not_configured, executable_missing, available), target support matrix, live profile that does not persist the interpreter path.
    • src/angr/AngrDoctor.test.ts: registration environment for setup, credential redaction, invalid and unconfigured states.
    • tests/composition/angrProvider.test.ts: discovery without connecting, one project per session with verified close, dossier body ranges and relationships, single call-graph fetch, invalid selectors as input errors versus provider-derived selectors as protocol errors, wrong loaded file and missing upstream tools, cancellation draining with retained partial Evidence, incomplete cleanup retained for retry.
    • tests/conformance/angr/providerContracts.test.ts: every operation serializes against its advertised output contract; capabilities advertise no UI or mutation effects.
    • tests/fixtures/angrMcp.ts: recording producer at the connection seam, rejecting unmodeled tools.
    • scripts/verify-real-angr.mjs (npm run verify:angr): real-provider verification through the production CLI and MCP server.
  • Base reproduction or other evidence: on main, open_binary with provider_id: "angr" fails with provider selection errors; the adapter is new.
  • User-visible CLI/MCP output: rea function fauxware main --provider angr --json returns a dossier whose procedure.body is {"available": true, "ranges": [{"start": "0x40071d", "end": "0x4007d4"}], "total_bytes": 184, ...}, 47 assembly lines, angr pseudocode, callers: [__libc_start_main], callees: [puts, read, authenticate, accepted, rejected], and relationship_coverage.status: "partial". rea providers --json lists angr with availability.status: "available" and diagnostics.live_connection_probed: false.
  • Remaining proof gaps: verified only on Linux x64 against an editable angr checkout (10.0.4.dev0, FastMCP 4.0.10) with an x86-64 ELF fixture; no angr release, macOS, Windows, PE, Mach-O, or non-x86 run yet. The simulated producer does not establish real angr behavior beyond the tested behaviors. angr's MCP server records only data xrefs, so xrefs excludes call sites (documented, with guidance to procedure_callers).

For evidence-bearing changes:

  • Observed, derived, and inferred claims remain distinguishable.
  • Artifact identity, source provenance, and failed attempts remain preserved.
  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Validation performed

  • npm run test:local -- src/angr/*.test.ts tests/composition/angrProvider.test.ts tests/conformance/angr/providerContracts.test.ts — 5 files, 26 tests passed.
  • npm run test:local (dirty import graph) — 424 files, 5494 tests passed, 3 skipped.
  • npm run check:fast — typecheck and lint passed.
  • npm run docs:check — passed, including README link parity across the 18 translated READMEs.
  • npm run verify:test-discovery — all 1003 test files discovered exactly once.
  • REA_ANGR_PYTHON=.../angr-venv/bin/python node scripts/verify-real-angr.mjs --target binaries/tests/x86_64/fauxware --procedure main — passed (headless stdio): production CLI function Evidence; MCP open, analyze_function, list_procedures, list_strings, procedure_address, procedure_assembly, procedure_callees, procedure_callers, search_procedures, procedure_pseudo_code, read_function_instructions, search_strings, xrefs; invalid address and unresolvable procedure rejected as invalid_request; CLI/MCP parity of procedure identity, pseudocode, and assembly; original binary digest unchanged.
  • Same lane with REA_ANGR_MCP_CONFIG={"url":"http://127.0.0.1:8765/mcp","mode":"attached"} against a caller-started python -m angr.mcp --transport http --port 8765 — passed; owned project ids absent from the server's list_projects after close.
  • rea doctor --provider angr --json — angr-registration healthy with registrationEnvironment: {"REA_ANGR_PYTHON": ...}; no process launched.

Compatibility, safety, and release

  • Breaking changes or migration steps: none. New optional environment variables REA_ANGR_PYTHON and REA_ANGR_MCP_CONFIG; existing providers and selection behavior are unchanged. With automatic selection, a configured angr becomes one more candidate, so hosts with several configured engines may see ambiguous and need an explicit --provider, which is the existing rule.
  • Real Hopper/Ghidra, browser, or OS coverage: not affected; no shared code paths changed beyond composition and config. Real angr coverage is Linux x64 only, as stated above.
  • Package or release metadata impact: feature release; feat(angr) subject. Catalog gains a provider; package files unchanged.
  • Security, privacy, process, or containment review: headless mode runs a caller-selected interpreter with the caller's environment snapshot; nothing is written outside what angr itself writes (its own caches). Attached mode is loopback-only, credentials are redacted from diagnostics and never enter the analysis profile. The adapter never saves, closes, or edits a shared server's state other than its own project. REA does not install or upgrade angr or Python.

Author readiness

Human owner: @ltfish

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. (Requested in this PR.)
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.

Summary by CodeRabbit

  • New Features
    • Added angr as a native binary analysis provider, with setup guidance for headless and locally attached sessions.
    • Added analysis of functions, disassembly, pseudocode, strings, cross-references, and call relationships. Coverage may vary, and some pseudocode or overview details may be unavailable.
    • Added session-scoped tools for renaming and annotating code, updating variable types and function prototypes, and choosing supported decompilation flavors.
    • Added diagnostics to check angr configuration and availability.
  • Documentation
    • Added an angr provider guide and links to it throughout the documentation.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/2418 **Author:** [@ltfish](https://github.com/ltfish) **Created:** 10/13/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `feat/angr-provider` --- ### 📝 Commits (10+) - [`8322837`](https://github.com/morluto/rea/commit/83228375f8670e28fdf59d458a1662f745114711) feat(angr): add angr MCP analysis provider - [`8af09a8`](https://github.com/morluto/rea/commit/8af09a83ba2f4479e45277f70d0a4e8bec3bf72e) feat(angr): expose knowledge-base edits and decompilation flavor - [`190abec`](https://github.com/morluto/rea/commit/190abec867ef490e18ce4565829d2931252dbdbb) fix(angr): verify targets by digest, end owned servers on failed close, degrade on unlisted call edges - [`1d335f0`](https://github.com/morluto/rea/commit/1d335f0a77087086dc13a7075a64b843ff3650af) fix(angr): share the regex worker, derive effects from transport, carry loader options - [`cf733a3`](https://github.com/morluto/rea/commit/cf733a3d150581f56947d5e55bd5bf04182df5fe) fix(angr): roll back failed annotations, settle cancelled edits, keep project and provenance state - [`982892a`](https://github.com/morluto/rea/commit/982892ad892164162226e574c001dfd6475ceaa9) fix(angr): restore annotation edits the server applied while the reply was lost - [`e57cb7d`](https://github.com/morluto/rea/commit/e57cb7d4d2027c5cc499bcea6410f87729f37322) fix(angr): roll back annotations when the refreshed dossier fails - [`aeb8812`](https://github.com/morluto/rea/commit/aeb881210c52d9742535bceb7c441c0245fe0b66) fix(angr): refuse unrepresentable target loader selections - [`5925211`](https://github.com/morluto/rea/commit/5925211bf6c3cdbc7c9d00d0b442fc2e12084547) test(angr): align loader controls with explicit slice refusal - [`badc7ed`](https://github.com/morluto/rea/commit/badc7eda75a9f67e088a73e2dde2ed42d3658a27) fix(angr): preserve shared-state and edit failure semantics ### 📊 Changes **68 files changed** (+6797 additions, -54 deletions) <details> <summary>View changed files</summary> 📝 `.agents/skills/reverse-engineer-anything/SKILL.md` (+17 -1) 📝 `AGENTS.md` (+2 -2) 📝 `README.md` (+3 -2) 📝 `THIRD_PARTY_NOTICES.md` (+1 -0) ➕ `docs/angr-provider.md` (+118 -0) 📝 `docs/architecture.mermaid` (+6 -0) 📝 `docs/index.md` (+1 -1) 📝 `docs/installation.md` (+11 -11) 📝 `docs/native-investigation.md` (+2 -1) 📝 `docs/readme/README_ar.md` (+1 -1) 📝 `docs/readme/README_de.md` (+1 -1) 📝 `docs/readme/README_el.md` (+1 -1) 📝 `docs/readme/README_es.md` (+1 -1) 📝 `docs/readme/README_fa.md` (+1 -1) 📝 `docs/readme/README_fr.md` (+1 -1) 📝 `docs/readme/README_id.md` (+1 -1) 📝 `docs/readme/README_it.md` (+1 -1) 📝 `docs/readme/README_ja.md` (+1 -1) 📝 `docs/readme/README_ko.md` (+1 -1) 📝 `docs/readme/README_ml.md` (+1 -1) _...and 48 more files_ </details> ### 📄 Description ## Summary This PR adds [angr](https://github.com/angr/angr) as a new native binary analysis provider for REA. This adapter provides two environment variables: `REA_ANGR_PYTHON` specifies the Python where `angr[llm]` is installed; `REA_ANGR_MCP_CONFIG` specifies the path to a JSON configuration file, where you may specify the angr MCP mode (stdio vs http). This adapter exposes basic static analysis features in angr via MCP, which includes CFG recovery, string listing, function listing, call graph query, data cross-referencing (xrefs), disassembly listing, and decompilation (C pseudocode generation). This PR directly addresses some aspects of https://github.com/morluto/rea/issues/2258. Additionally, angr parses Go symbols when loading Go binaries (requested by https://github.com/morluto/rea/issues/2297). angr supports decompiling Rust binaries to Rust pseudocode and Go binaries to Go pseudocode. We will expose it to REA in a later PR. ## Problem and expected behavior angr is a widely used open-source framework for binary analysis. It would be nice for REA to support it as a native binary analysis provider. ## Change and scope **Details.** An MCP-client adapter in `src/angr` that implements the following components: - `AngrConfiguration`, which reads `REA_ANGR_PYTHON` or `REA_ANGR_MCP_CONFIG`. `REA_ANGR_PYTHON` specifies an absolute path to a Python interpreter with `angr[llm]` installed. `REA_ANGR_MCP_CONFIG` specifies the path to a JSON configuration file where you may configure to use either the stdio mode or the http mode for the angr MCP server. We restrict the MCP HTTP endpoint to `localhost`, `127.0.0.1`, and `[::1]`. - `AngrMcpConnection`, which uses the pinned MCP client SDK (`StdioClientTransport` or `StreamableHTTPClientTransport`) and decodes FastMCP's structured results. - `AngrSessionClient`, which serializes requests, connects on first use, verifies the upstream tool catalog, calls `load_binary` and `get_cfg` once, checks that the server reports the selected target path (realpath-compared), and closes the project it loaded. Failed close retains the project id as `cleanupResources`. - `AngrOperationRunner`, which maps operations to upstream tools and REA result types. The current version PR does not ship or install angr with REA. We can create a new PR if you want to automatically install angr whenever REA needs to analyze native binaries. **Not included.** - angr's symbolic execution or emulation capabilities. - No `binary_overview`, typed references, comments, referenced strings and names, locals, or basic-block successors: angr's MCP server does not yet report them, and the dossier marks those facets as unknown rather than empty. We can create a new PR later to expose such information. - No `rea setup` installation of angr. Doctor validates the registration only; the angr installation and its MCP extra are checked at analysis start. **Scope decision.** New provider; We request the maintainer scope decision in this PR. The adapter exposes no target execution, injection, mutation, or protection recovery, and the upstream server's edit tools are never called. ## Contract and boundary impact - Semantic owner and earliest changed stage: `src/angr/` is the angr protocol interpretation; `AnalysisProviderRegistry` (`src/composition/binary.ts`) is the earliest changed stage. Shared contracts are unchanged. - Contribution scope fit and linked maintainer decision: static disassembly, decompilation, and cross-references within the documented scope; decision requested in this PR. - CLI and MCP/tool-catalog contract: no new tools or inputs. Provider ids are free-form strings, so `--provider angr` and `open_binary.provider_id: "angr"` do not need any schema changes. The product catalog has a new `angr` provider entry with the declared operations. - Provider, bridge, target-format, or platform compatibility: requires a caller-supplied Python with `angr[llm]` (FastMCP). Declines non-executable formats. No host restriction beyond angr's own. - Evidence, artifact, provenance, or reconstruction contract: Evidence carries `provider.id = "angr"`, the live analysis profile (mode, transport, `auto_load_libs`, CFG options, registration digest), raw upstream observations with their `project_id`, and partial Evidence on failure after completed upstream replies. Relationship coverage is `partial` with the indirect-call limitation. - Target selection, authority, upstream behavior, and cleanup details: Each REA session owns an angr project. Headless mode owns the server process through the SDK stdio transport and it ends with the connection. Attached mode shares a caller-started server; REA closes only its project and never the server. The original binary is never executed or written; angr loads it read-only. - Generated metadata, package, or installation impact: `scripts/lib/catalog-core.mjs` and `catalog-builders.mjs` add the `angr` provider to the generated catalog; no new packaged files (the adapter is compiled into `dist/`). `rea setup` publishes a valid `REA_ANGR_PYTHON` or `REA_ANGR_MCP_CONFIG` into agent registrations through the existing doctor inspection path. Authored skill text in `.agents/skills/reverse-engineer-anything/SKILL.md` gains an angr paragraph. Expected effects: - [x] Read existing files or captured data. - [x] Launch or attach to a process. (Headless mode launches `python -m angr.mcp`; attached mode connects to a caller-started loopback server.) - [ ] Inject instrumentation or run scripts/code. - [ ] Change process memory, registers, files, or configuration. - [x] Contact network services. (Attached mode only, loopback HTTP; headless mode uses stdio.) - [ ] Recover protected code or work around protections. - [ ] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. ## Evidence and regression coverage - Tests added or updated: - `src/angr/AngrConfiguration.test.ts`: interpreter shortcut expansion, direct and `mcpServers` registrations, rejection of remote endpoints, URL credentials, owned HTTP, malformed and absent files; FastMCP result decoding and tool-error surfacing. - `src/angr/AngrProvider.test.ts`: availability codes (`not_configured`, `executable_missing`, available), target support matrix, live profile that does not persist the interpreter path. - `src/angr/AngrDoctor.test.ts`: registration environment for setup, credential redaction, invalid and unconfigured states. - `tests/composition/angrProvider.test.ts`: discovery without connecting, one project per session with verified close, dossier body ranges and relationships, single call-graph fetch, invalid selectors as input errors versus provider-derived selectors as protocol errors, wrong loaded file and missing upstream tools, cancellation draining with retained partial Evidence, incomplete cleanup retained for retry. - `tests/conformance/angr/providerContracts.test.ts`: every operation serializes against its advertised output contract; capabilities advertise no UI or mutation effects. - `tests/fixtures/angrMcp.ts`: recording producer at the connection seam, rejecting unmodeled tools. - `scripts/verify-real-angr.mjs` (`npm run verify:angr`): real-provider verification through the production CLI and MCP server. - Base reproduction or other evidence: on `main`, `open_binary` with `provider_id: "angr"` fails with provider selection errors; the adapter is new. - User-visible CLI/MCP output: `rea function fauxware main --provider angr --json` returns a dossier whose `procedure.body` is `{"available": true, "ranges": [{"start": "0x40071d", "end": "0x4007d4"}], "total_bytes": 184, ...}`, 47 assembly lines, angr pseudocode, `callers: [__libc_start_main]`, `callees: [puts, read, authenticate, accepted, rejected]`, and `relationship_coverage.status: "partial"`. `rea providers --json` lists `angr` with `availability.status: "available"` and `diagnostics.live_connection_probed: false`. - Remaining proof gaps: verified only on Linux x64 against an editable angr checkout (`10.0.4.dev0`, FastMCP 4.0.10) with an x86-64 ELF fixture; no angr release, macOS, Windows, PE, Mach-O, or non-x86 run yet. The simulated producer does not establish real angr behavior beyond the tested behaviors. angr's MCP server records only data xrefs, so `xrefs` excludes call sites (documented, with guidance to `procedure_callers`). For evidence-bearing changes: - [x] Observed, derived, and inferred claims remain distinguishable. - [x] Artifact identity, source provenance, and failed attempts remain preserved. - [x] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. ## Validation performed - `npm run test:local -- src/angr/*.test.ts tests/composition/angrProvider.test.ts tests/conformance/angr/providerContracts.test.ts` — 5 files, 26 tests passed. - `npm run test:local` (dirty import graph) — 424 files, 5494 tests passed, 3 skipped. - `npm run check:fast` — typecheck and lint passed. - `npm run docs:check` — passed, including README link parity across the 18 translated READMEs. - `npm run verify:test-discovery` — all 1003 test files discovered exactly once. - `REA_ANGR_PYTHON=.../angr-venv/bin/python node scripts/verify-real-angr.mjs --target binaries/tests/x86_64/fauxware --procedure main` — passed (headless stdio): production CLI function Evidence; MCP open, `analyze_function`, `list_procedures`, `list_strings`, `procedure_address`, `procedure_assembly`, `procedure_callees`, `procedure_callers`, `search_procedures`, `procedure_pseudo_code`, `read_function_instructions`, `search_strings`, `xrefs`; invalid address and unresolvable procedure rejected as `invalid_request`; CLI/MCP parity of procedure identity, pseudocode, and assembly; original binary digest unchanged. - Same lane with `REA_ANGR_MCP_CONFIG={"url":"http://127.0.0.1:8765/mcp","mode":"attached"}` against a caller-started `python -m angr.mcp --transport http --port 8765` — passed; owned project ids absent from the server's `list_projects` after close. - `rea doctor --provider angr --json` — `angr-registration` healthy with `registrationEnvironment: {"REA_ANGR_PYTHON": ...}`; no process launched. ## Compatibility, safety, and release - Breaking changes or migration steps: none. New optional environment variables `REA_ANGR_PYTHON` and `REA_ANGR_MCP_CONFIG`; existing providers and selection behavior are unchanged. With automatic selection, a configured angr becomes one more candidate, so hosts with several configured engines may see `ambiguous` and need an explicit `--provider`, which is the existing rule. - Real Hopper/Ghidra, browser, or OS coverage: not affected; no shared code paths changed beyond composition and config. Real angr coverage is Linux x64 only, as stated above. - Package or release metadata impact: feature release; `feat(angr)` subject. Catalog gains a provider; package `files` unchanged. - Security, privacy, process, or containment review: headless mode runs a caller-selected interpreter with the caller's environment snapshot; nothing is written outside what angr itself writes (its own caches). Attached mode is loopback-only, credentials are redacted from diagnostics and never enter the analysis profile. The adapter never saves, closes, or edits a shared server's state other than its own project. REA does not install or upgrade angr or Python. ## Author readiness Human owner: @ltfish - [x] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [x] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [x] I declare this PR ready for initial maintainer review. ## Before merge - [x] This PR addresses a concrete problem or an agreed enhancement. - [ ] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. (Requested in this PR.) - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [x] User-visible CLI/MCP changes include representative output. - [x] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added angr as a native binary analysis provider, with setup guidance for headless and locally attached sessions. * Added analysis of functions, disassembly, pseudocode, strings, cross-references, and call relationships. Coverage may vary, and some pseudocode or overview details may be unavailable. * Added session-scoped tools for renaming and annotating code, updating variable types and function prototypes, and choosing supported decompilation flavors. * Added diagnostics to check angr configuration and availability. * **Documentation** * Added an angr provider guide and links to it throughout the documentation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#5212
No description provided.