Analyse anything. Connect the evidence. Understand the system.
Overview
Analyse anything. Connect the evidence. Understand the system. REAmon is an AI-assisted reverse-engineering workspace and orchestration platform. It accepts arbitrary targets, profiles what it can, resolves compatible analysis capabilities, coordinates tools and agents, stores connected evidence, and presents the investigation through a live project workspace. REAmon is for authorised reverse engineering, software analysis, education, and security research only. Analyse targets you own or are explicitly authorised to inspect. You are responsible for complying with applicable law, contracts, and third-party licences. REAmon orchestrates reverse-engineering engines such as Ghidra, RetDec, JADX, Vineflower, CFR, Androguard's Rust DEX decompiler, and ILSpy on the backend, then presents their output in one investigation workspace. Android APKs use isolated JADX and an alternate isolated Rust DEX decompiler; JVM .class/.jar artifacts can also use isolated Vineflower and CFR.
README
REAmon
Analyse anything. Connect the evidence. Understand the system.
REAmon is an AI-assisted reverse-engineering workspace and orchestration platform. It accepts arbitrary targets, profiles what it can, resolves compatible analysis capabilities, coordinates tools and agents, stores connected evidence, and presents the investigation through a live project workspace.
REAmon is for authorised reverse engineering, software analysis, education, and security research only. Analyse targets you own or are explicitly authorised to inspect. You are responsible for complying with applicable law, contracts, and third-party licences.
What REAmon is becoming
REAmon orchestrates reverse-engineering engines such as Ghidra, RetDec, JADX, Vineflower, CFR,
Androguard’s Rust DEX decompiler, and ILSpy on the backend, then presents their output
in one investigation workspace. Android APKs use isolated JADX and an alternate isolated
Rust DEX decompiler; JVM .class/.jar artifacts can also use isolated Vineflower and CFR.
Vineflower’s Kotlin plugin is experimental. Managed .NET PE assemblies use isolated ILSpy,
and native ELF, PE, and Mach-O files use isolated Ghidra headless analysis with optional
RetDec, Glaurung, and Kuna C-like alternatives. These providers publish
bounded function or code-unit indexes in the code visualizer. Other formats and
dynamic analysis still need matching engines. A workspace can contain multiple
related targets and artifacts:
Workspace
├── Targets and artifacts
├── Environments and tools
├── Capabilities and agents
├── Tasks, findings, hypotheses, and evidence
├── Knowledge graph and timeline
└── Reports and live activity
Targets are intentionally open-ended: files, directories, repositories, processes, devices, services, remote hosts, captures, filesystems, debug sessions, custom targets, and unknown inputs. Platform-specific behavior belongs behind capabilities and plugins rather than in the workspace core.
Product direction and documentation
REAmon’s central job is to turn compiled or obfuscated artifacts into evidence-backed, decompiled code that can be understood, edited, reviewed, and maintained. Explanations support that work; they do not replace source recovery. The roadmap prioritizes decomp.wtf’s bounded, evidence-led process—unit-sized work, shared project knowledge, recorded attempts, meaningful validation, and explicit acceptance—then extends it to languages and formats without a reliable byte-for-byte compiler loop.
The decomp.wtf repository was archived on 2026-10-15 and is now a fixed workflow and code reference, not an active upstream. The maintainer cited community opposition to AI-assisted decompilation; REAmon must follow each target project’s rules and never assume that generated contributions are welcome. The reference portfolio also tracks independent analysis, graph, validation, and syntax-aware editing projects, with license and integration constraints documented before adoption.
| Document | Purpose |
|---|---|
| Product vision | Motivation, product promise, principles, and why decomp.wtf is a core process reference. |
| Goals and roadmap | Outcomes, priorities, and completion checks. |
| Feature matrix | Current product capabilities and gaps across the workflow. |
| Reverse-engineering workflow | Intended artifact-to-maintained-source lifecycle, including review and validation. |
| Language and format matrix | Detailed WIP support levels, integrated providers, and known gaps. |
| Reference portfolio | Reusable projects, why they matter, what REAmon should adapt, priorities, and constraints. |
| Architecture | Workspace model, system boundaries, and persistence design. |
| Upstream reuse | Audited reuse candidates, licenses, and integration decisions. |
| ToCode export adapter | Source-audited design and current status for indexing ToCode exports into REAmon’s database and visualizer. |
| Migration | Migration status and compatibility approach from RedAmon. |
| Release runbook | Release and operational procedures. |
WIP: language and format support
Language support is still in development and depends on the input format and the available analysis engine. A generated C-like listing or assembly representation is not the original source language, and “supported” does not mean that names, types, control flow, or behavior have been recovered exactly. Treat every decompilation as a starting point for review.
| Language or input | Status | What works now | Main gaps |
|---|---|---|---|
Java bytecode (.class, .jar) and Android (.dex, .apk) |
Usable (JADX); early JVM alternates (Vineflower, CFR); early Android alternate (Androguard Rust DEX decompiler) | JADX produces browsable Java source and class/method outlines. Vineflower 1.12.0 supplies a separate JVM output path, including experimental Kotlin output; CFR 0.152 supplies an independent Java reconstruction. The visualizer can compare matching saved JADX, Androguard DEX, Vineflower, and CFR outputs side by side when artifact, path, language, and output-hash provenance match. New decompile/disassemble runs also receive centrally calculated, bounded source hashes, allowing matching outputs from other providers to be compared when their paths and languages align; older runs require provider-supplied hashes. A same-language class from another provider can enter AI rewrite context only when its artifact, relative path, and input hash match; it is labeled provisional evidence. The pinned Androguard Rust engine stores separately attributed Java output, bounded Dalvik method observations, linked instruction-row artifacts for AI context, CFG summaries, direct method-call relationships, and field/string references as typed project evidence. JDK javac semantic symbols, constrained with --release 17, support reviewer-selected local-variable, lambda-parameter, and private method/constructor-parameter renames in single-file source. |
Obfuscation, missing debug metadata, reflection, and native libraries can hide behavior or names. CFR is Java-only and neither JVM analyzer accepts DEX/APK. Android Kotlin apps are still rendered as Java-like output; Vineflower’s Kotlin plugin is experimental. Public, protected, and package-private method parameters remain excluded; cross-file consistency and fixture-backed output comparison remain open. Instruction artifacts, CFGs, call edges, and references have explicit caps. |
C# / managed .NET (.dll, .exe) |
Usable decompilation; early safe renaming and parsing; experimental ConfuserEx cleanup | ILSpy decompiles supported managed PE assemblies to C#; CLR IL instruction sequences are retained as supporting function evidence. A pinned NoFuserEx stage applies static proxy-call, anti-debug, and anti-dump cleanup before ILSpy; changed assemblies and SHA-256 provenance are stored separately, shown on the selected unit, and passed to AI rewrites as bounded lineage metadata. Roslyn identifies local symbols for reviewer-selected single-file renames and parses accepted C# source. | NoFuserEx’s unpack, anti-tamper, constants, and resource passes remain disabled because they execute target methods. Its static subset has container-build evidence but no fixture-corpus validation. Output is reconstructed source. Original comments, formatting, and some compiler-level distinctions are lost. Roslyn support has not had fixture-corpus validation or project/build checks. Visual Basic and F# assemblies are not reconstructed in their original source syntax. |
| Native binaries (ELF, PE, Mach-O; including C/C++ and other compiled languages) | Partial; early obfuscated-string recovery and experimental RetDec alternative | Ghidra provides address-aware functions, disassembly evidence, C-like pseudocode, persisted statement-to-instruction mappings, bounded basic-block/edge metrics, and a per-function basic-block graph in the visualizer. The graph identifies all displayed exit blocks; selecting any block navigates to its starting address in the matching disassembly. An MIT-licensed Ghidra p-code emulator now adds bounded, database-persisted control-flow-flattening recovery evidence and a bounded transition diagram with clickable recovered blocks for selected functions. The pinned RetDec provider emits C-like module output, raw token JSON, disassembly, and bounded provider-attributed source-line/address links. FLOSS 3.1.1 adds bounded stack, tight-loop, and decoded string evidence attached to matching function addresses for AI context and the visualizer. | RetDec module output and address links, and the new control-flow-flattening recovery, have not yet been validated on REAmon fixtures or benchmarked against Ghidra. CFF transitions are confidence-labeled structural leads, not reconstructed source or proof of behavior. Pseudocode is not recovered C/C++ or the original language. Types, class structure, templates, symbols, and control flow can be incomplete or misleading, especially in optimized or stripped binaries. The displayed Ghidra graph is capped at 32 blocks and 48 edges; its topology is partial for larger functions and still needs fixture validation. FLOSS is a static-analysis lead, not proof of runtime string use; its bundled executable is currently amd64-only. Mapping availability is bounded and does not prove semantic equivalence. |
WebAssembly (.wasm) |
Early decompilation bridge | WABT provides WAT evidence and function navigation; pinned unwasm also produces bounded, function-sized Rust translation views linked to the same function addresses, with source-line links to raw Wasm byte ranges. | Rust is a generated bridge representation, not recovered original source or idiomatic Rust. Semantic equivalence and fixture coverage remain to be independently validated. |
| Source files with an available Tree-sitter grammar | Source navigation only | REAmon can build function/method outlines for supported grammars and use them to scope edits to a member. Syntax checks record the selected grammar and language-pack version against the exact source hash. | Parsing source is not decompilation. Grammar availability and language-specific validation vary. |
Python bytecode (.pyc, .pyo) |
Early integration | An isolated pycdc 0.6.0 provider stores reconstructed Python source and exposes it to the source outline and member-edit workflow. Accepted Python source receives a non-executing CPython compile check with the interpreter version and exact source hash recorded. LibCST can propose and apply reviewer-selected renames for function-local variables and parameters, preserving source formatting and recording the result as a database-backed draft. | This is not a source-equivalence guarantee, and the check may use a different Python version than the bytecode target. LibCST does not rename module-level definitions or imports in this first slice; dynamic lookup (for example locals() or getattr) can still affect semantics. The upstream release claims support through Python 3.15, while its published verification covers 2.6–3.14. PyInstaller extraction and bytecode rebuild are not integrated. |
| PHP source files | Source navigation and early syntax validation | Tree-sitter outlines and a versioned php -l lint check that does not execute source. |
No PHP bytecode decompiler is integrated. Lint requires a PHP opening tag; the checker version may differ from the target runtime. |
| Ruby source files | Source navigation and early syntax validation | Tree-sitter outlines and a versioned ruby -c syntax check that does not execute source. |
No Ruby bytecode decompiler is integrated; syntax acceptance does not establish behavior or target-version compatibility. |
Lua and Luau bytecode (.luac, .luau, .lbc) |
Early integration | Isolated providers reconstruct standard Lua 5.0–5.5, LuaJIT, and raw Luau chunks. Pinned unluac-rs adds separately attributed strict-output alternatives for Lua 5.1–5.5, LuaJIT, and Luau, with per-prototype metadata and bounded CFGs. Syntax outlines and project-symbol memory include Lua colon methods and unambiguous assigned function closures. Maintained Lua functions with an exact Lua 5.1–5.5 dialect are parsed by the matching checksum-pinned official luac; Luau source gets pinned compiler parse-only validation on amd64 agent images. |
Alternate engine output is not proof of source fidelity; the unluac-rs upstream is still in a testing phase and REAmon has no fixture-backed comparison across the dialects yet. LuaJIT and dialect-less Lua retain generic grammar validation. Stripped chunks may lose local names; complex control flow, newer Roblox containers, and custom VM variants may need extra work. Syntax validation is not target-host compatibility or behavior proof. |
| Lua source safe renames | Early integration | Standard Lua locals, parameters, and local functions can receive evidence-grounded rename proposals. The pinned LuaLS adapter resolves selected bindings, applies only same-file edits, rejects names already present in the source, and records the attempt and hashes. Luau stays on its own language path. | Rename ranges need fixture comparison for shadowing, closures, loop variables, and method syntax. The adapter does not prove behavior. |
| Go native binaries and source | Early metadata and source validation | Ghidra supplies address-aware C-like pseudocode; GoReSym recovers Go function names, packages, runtime version, and type metadata where available. Bounded unstrip type records, address-matched method signatures, source locations, and interface-dispatch rows are stored with provider provenance for AI rewrite context, MCP dossiers, the selected-unit inspector, and Go-type search. Maintained Go source receives a versioned gofmt -e syntax check, and reviewer-selected local-variable/parameter renames use Go AST positions resolved through go/types object identity with hash-bound attempt history. |
Neither GoReSym nor unstrip reconstructs maintainable Go source. The unstrip path still needs REAmon fixture comparison and release-build validation, and upstream scope is Go 1.18–1.25 on amd64/arm64. Rename capture behavior needs fixture coverage for nested closures and package interactions. Signatures and dispatch rows may be absent or incomplete; line metadata does not prove original source is available. The pinned Go 1.22.10 parser may differ from the target version. Optimizations and stripped metadata can still obscure names and types; the pseudocode remains an approximation. |
| Kotlin/JVM, Swift, Objective-C, and native C++ recovery | Early Kotlin/JVM alternate; early Swift/Objective-C metadata and pseudocode alternate; partial native pseudocode | JVM .class/.jar inputs can use Vineflower’s experimental Kotlin plugin; JetBrains Kotlin metadata is a candidate for symbol enrichment. Android DEX still uses Java-like output. For supported Mach-O inputs, isolated ReIPA metadata is stored with the exact artifact/run; Ghidra names and ReIPA’s experimental pseudocode alternatives are attached only to exact-address Swift/Objective-C matches, shown in provider comparison, and can ground same-run AI rewrites as provisional context. |
Kotlin reconstruction has not been fixture-validated and the alternate does not accept DEX/APK. REAmon does not yet reconstruct Swift, Objective-C, or C++ source idioms or project structure; ReIPA output is early C-like pseudocode, not recovered source. See the language matrix and upstream reuse audit for scope and limits. |
| Rust native binaries | Early optional integration (Oxidizer) | The isolated Oxidizer/angr provider stores per-function Rust-like pseudocode, address identities, same-run call edges, source hashes, and provider revision alongside Ghidra’s output. | Fixture comparisons with Ghidra have not been run. Oxidizer output is pseudocode, not guaranteed compilable or equivalent to the original Rust source. |
JavaScript bundles (.js, .jsx, .mjs, .cjs) |
Early integration | webcrack unminifies code, reverses some obfuscator.io patterns, and extracts webpack / Browserify modules into indexed source units. Accepted maintained source up to 512 KiB receives a hash-bound, versioned Babel syntax check. | Output is reconstructed source, not guaranteed original source or behavior. REAmon runs the string-array decoder in an isolated V8 runtime with resource limits; fixture validation is still needed. |
| TypeScript bundles and JavaScript runtime bytecode | Not integrated; planned evaluation | TypeScript source can be browsed and outlined when a grammar is available. Accepted TypeScript source up to 512 KiB receives Babel syntax validation using its TypeScript and JSX plugins. | webcrack does not currently accept TypeScript syntax as an input guarantee, and no JavaScript runtime-bytecode provider is integrated. Syntax validation does not prove behavior or target-version compatibility. |
This is a work-in-progress capability matrix, not a compatibility guarantee. The
planned rows identify areas to evaluate; they do not promise a release date. Detailed
per-language scope is in the language matrix, and
cross-workflow status is in the feature matrix.
Current engines include JADX,
Vineflower and CFR
for isolated JVM .class/.jar alternatives,
Androguard’s Rust DEX decompiler,
ILSpy,
Oxidizer through an optional analyzer pinned to angr 10.0.4,
Ghidra, and
WABT. Python bytecode uses the MIT-licensed
pycdc 0.6.0 CLI in an isolated analyzer;
its broad version support and reconstruction quality still need REAmon fixture
validation. PyLingual remains an
alternative for comparison, with a GPL-3.0 license and a larger local ML runtime.
JavaScript bundles use the MIT-licensed webcrack
2.16.0 package in an isolated Node.js analyzer. Its AST-based transforms and
bundle extraction are a starting point for project-level source recovery, not a
claim that original names or behavior have been restored.
Standard Lua 5.0–5.4 bytecode uses the MIT-licensed unluac fork
in an isolated JVM analyzer. The MIT-licensed unluac-rs
1.4.4 JavaScript/WASM API runs in an isolated worker and adds strict alternate output
for Lua 5.1–5.5, LuaJIT, and raw Luau. It returns .lua or .luau source with
dialect-specific metadata and bounded prototype/CFG evidence. Luau vector constants use vector.create
with three components by default; set REAMON_LUAU_VECTOR_SIZE=4 for four-wide
targets, or set REAMON_LUAU_VECTOR_LIBRARY and
REAMON_LUAU_VECTOR_CONSTRUCTOR for a host-specific constructor. The target host
must expose that constructor. The official
Luau compiler 0.742, distributed under MIT,
checks saved Luau source in parse-only mode on amd64 agent images; Tree-sitter is the
fallback elsewhere. This confirms syntax, not target-host API compatibility or
behavior. Versioned decompilation fixture validation remains open.
LuaJIT bytecode also uses the MIT-licensed
LuaJIT Decompiler v2,
built for Linux from its pinned Linux port.
REAmon stores each engine’s output separately so it can be reviewed against the same
input. Alternate output needs review and has no source-equivalence guarantee. Luau integration is
early and only covers raw chunks identified by the profiler; Roblox-wrapped
containers and fixture-backed fidelity validation remain future work.
Android APK/DEX analysis also has an alternate Java reconstruction and bounded
method-level evidence from the
Apache-2.0 Androguard dex-decompiler,
pinned at commit d458efd.
It runs in a separate bounded container; source artifacts retain the engine commit
and input hash. Structured Dalvik method observations retain instruction-mnemonic
samples, bounded CFG summaries for the function visualizer, and linked per-method
instruction artifacts that the AI can use as project evidence. This is an early
comparison path, not a replacement for JADX; field reads/writes and direct string
literal references are persisted as typed project evidence with capped previews.
The visualizer also compares stored Dalvik instruction sequences across completed
analyses and opens a matching method in its containing Java source class; similarity
is a navigation lead, not proof of equivalent behavior. Fixture-backed accuracy
comparisons remain open.
Current bootstrap
The REAmon workspace foundation is implemented and running:
- Create a reverse-engineering workspace without inventing a domain or network scope.
- Import a complete browser-selected folder in bounded batches, preserving its relative directory tree as workspace context. Single-file import remains available.
- Compare a selected folder with the latest completed snapshot before upload, then store an authoritative SHA-256 refresh delta after finalization.
- Cancel an in-flight import safely, keep its partial state visible, and resume the remaining paths or select a replacement snapshot later.
- Persist a directory root target, logical artifact paths, and candidate analysis targets in PostgreSQL.
- Compute SHA-256 identity and a basic magic/extension/header profile.
- Keep unknown inputs valid instead of rejecting them.
- Resolve compatible built-in capabilities from typed plugin manifests.
- Queue a reviewed capability proposal as an idempotent analysis task without executing providers in the request path.
- Show targets, artifacts, detected metadata, capabilities, progress, findings, hypotheses, evidence, and activity in a real data-backed dashboard.
- Run JADX 1.5.6 in an isolated backend service for APK decompilation; store bounded Java source outputs separately and publish class-sized code-unit observations.
- Detect managed PE assemblies from their CLR data directory and run pinned ILSpyCmd in an isolated backend service; store bounded C# type outputs and publish browsable code-unit observations without routing native PE files through the managed provider.
- Run Ghidra 12.1.4 headless in an isolated backend service for ELF, PE, and Mach-O decompilation; store bounded C-like function outputs separately and publish address-aware code-unit observations.
- Run pycdc for Python bytecode and webcrack for JavaScript bundles in isolated analyzers; store reconstructed source as derived artifacts and index module units.
- Draw a searchable size/coverage treemap from provider code-unit observations and open source only through an authenticated, active-workspace artifact route.
- Run bounded
stringsandreadelfprocess providers against stored source and ELF artifacts, capture stable observations, and terminate the process on cancellation or timeout. - Inspect generic file metadata and bounded JSON configuration documents through the same typed provider boundary, with stable observations and fail-closed size limits.
- Converge observations with explicit provider-independent identity hints before graph projection, including explicit relationship endpoint hints while retaining source-specific keys for provenance.
- Reconcile completed graph replays against the relational observation source, fencing overlapping project replays so stale nodes and relationships are removed without allowing concurrent workers to delete each other’s writes.
- Persist worker dispatch health, show stale-worker status, and surface an operator alert when a worker is stale or reports a failed dispatch.
- Preserve the PostgreSQL, Neo4j, agent, authentication, and event infrastructure needed by the REAmon workspace.
The current provider set covers profiling, source strings, ELF headers, generic file identification, bounded JSON inspection, APK-to-Java decompilation through JADX, managed .NET PE decompilation through ILSpy, and native ELF, PE, and Mach-O decompilation through Ghidra. Runtime instrumentation, additional executable formats, resource extraction, and broader language-specific workflows remain future work.
Long-term product progress
40% 40%
Weighted estimate: 39.7% (rounded for the bar). Refreshed from the workstream weights at pushed commit 568199b.
| Workstream | Weight | Completion estimate | Weighted points | Current evidence and remaining gap |
|---|---|---|---|---|
| Core analysis and visualizer workflow | 20% | 67% | 13.4% | Imports, provider execution, stored code units, source navigation, and review workflows exist. Native Mach-O analysis stores exact-address Swift/Objective-C metadata and exposes capped, hash-checked ReIPA pseudocode alternatives; the visualizer can compare native provider outputs by canonical function identity across differing saved paths and output-language labels. Isolated pinned Glaurung and Kuna providers persist bounded native C-like pseudocode; Kuna also stores assembly, selected call/jump/reference edges, and bounded opcode sequences. A pinned isolated Recurse MCP adapter now stores bounded per-function VTIL-style lift evidence and optimizer counters, displayed with its semantic limits; its container builds successfully, but runtime and fixture comparison remain open. The visualizer and rewrite context compare Ghidra/Kuna instruction sequences across providers only when normalized architecture groups agree, exclude same-function cross-provider self-matches, and keep provider, analysis-run, artifact-hash, identity, and similarity provenance with reused names. Kuna’s v1.878 analyzer image and end-to-end worker have been exercised against a system ELF binary. A read-only Ghidra p-code emulator also persists bounded, confidence-labeled control-flow-flattening transitions as visualizer navigation evidence; representative fixture coverage and provider comparison remain open. |
| Database-grounded project memory and provenance | 20% | 58% | 11.6% | Project-scoped observations, symbols, relationships, drafts, and review records ground AI context. Common native virtual-address spellings now canonicalize across Ghidra, Glaurung, and Oxidizer for same-artifact function identity; bounded same-binary, completed-run lookups bring accepted cross-provider names into rewrite, explanation, and MCP dossier contexts for selected units with canonical-key or normalized native-identity matches, exact input-hash checks, and review-receipt verification. Ghidra/Kuna lookalike context now retains the producing provider, analysis task, artifact identity and hash, normalized architecture, native function identity, and similarity score; opening an older match resolves its exact completed run only within the active project artifact selection. Recurse VTIL-style lift artifacts persist exact input/output hashes, provider revision, native function identity, and optimizer counters; rewrite context reads a same-function lift only from a completed run with exact input, identity, run-path, and output-hash checks, while labeling the lift as provisional structural evidence. Legacy native address aliases remain a fallback and are labeled separately because they can denote thunks. MCP provider outputs also require exact input and saved-output hashes; accepted project-memory lookup is bounded to 100 candidate provider observations and reports possible truncation. Exact-address ReIPA pseudocode alternatives for matched Swift/Objective-C methods enter rewrite context and MCP dossiers only after same-run provenance checks. Ghidra functions persist bounded basic-block/edge/entry/exit metrics and a bounded basic-block graph for the visualizer. Control-flow-flattening recovery now persists in function observation attributes and is available to the visualizer, rewrite/explanation, and MCP dossier as confidence-labeled structural evidence; it does not establish identity or behavior. Broader identity coverage and fixture validation remain open. |
| Major-language and format decompilation fluency | 30% | 24% | 7.2% | Several useful Java, .NET, Android, Python, WebAssembly, and native paths exist, and matched arm64 Mach-O methods can now show early ReIPA C-like pseudocode beside Ghidra output; optional Glaurung and Kuna providers add bounded native C-like pseudocode, with Kuna also saving assembly and selected graph edges. Kuna’s analyzer has built and completed an end-to-end system-ELF smoke run, but both native alternates still need representative fixture comparison and fidelity validation. Many languages remain navigation-only, early, or represented by generic pseudocode. The ILSpy provider now applies a pinned NoFuserEx static ConfuserEx cleanup subset before decompilation, stores transformed assemblies separately with exact input/output hashes and pass provenance, and labels the output as intermediate; the image builds, while fixture-backed fidelity remains open. |
| Maintainable editing, review, and export | 15% | 35% | 5.3% | Hash-bound drafts, review receipts, syntax-aware edits for selected languages, and reproducible export exist; language breadth and project-level edits remain limited. |
| Fixture-backed validation and fidelity evidence | 15% | 15% | 2.3% | Provider smoke checks and structural validators exist, but broad versioned clean, optimized, stripped, and obfuscated fixture comparisons are still missing. |
The weights describe REAmon’s full reverse-engineering goal, not the narrower bootstrap release. Each push to main regenerates this block from the progress ledger. Update a workstream estimate only when committed implementation or fixture evidence changes its basis; the score is a roadmap estimate, not a line-count or test-count metric.
Bootstrap release readiness
100% 100%
This is a release-gate snapshot, reviewed 2026-10-03 against repository, hosted workflow, production-image, and staging evidence. The score measures readiness for a dependable self-hosted production release, not the number of UI screens or lines of code.
This rating covers the bootstrap release scope only. It does not measure readiness for REAmon’s broader product goal of reverse-engineering arbitrary programs from import through decompilation, navigation, AI-assisted analysis, and runtime work. That broader goal remains in progress. The WIP support matrix above describes capability additions that are outside this historical bootstrap release score.
The 100% score is justified for the current production release scope. The product boundary is release-gated independently: no native workspace depends on a retired scanner, pentest, or upstream-update surface.
| Workstream | Weight | Complete | Release evidence |
|---|---|---|---|
| Workspace foundation and access control | 20% | 100% | Full web suite, live auth boundary, operator login, project creation, browser login, and workspace navigation are hosted gates. |
| Import, profiling, storage, and inventory | 15% | 100% | Representative JSON/source import, profiling, inventory, writable artifact storage, PostgreSQL restore, and artifact extraction pass in CI. |
| Provider registry, scheduling, and provider execution | 15% | 100% | Approval-gated scheduling, concurrent claims, bounded providers, Python unit checks, and a killed-replica Compose worker recovery drill are covered. |
| Provider results and knowledge graph ingestion | 20% | 100% | Provider observations project into Neo4j; the hosted gate dumps, restores, queries, and rechecks the graph database. |
| Approvals, live activity, and operator controls | 10% | 100% | Browser import, approval, analysis, stale-recovery control, authenticated workspace state, and live activity are verified. |
| REAmon product boundary and retired-surface isolation | 10% | 100% | Pentest navigation, scanner services, inherited update checks, and upstream-facing UI are removed from the shipped runtime; retired flags fail closed. |
| Production hardening and release QA | 10% | 100% | Hosted full tests, npm audit, Trivy image scan, live acceptance, browser operator E2E, two-replica crash recovery, three-way restore drills, and exact-commit semver release automation are recorded. |
Weighted result: 100%.
The production release gate is complete. The remaining roadmap items are capability expansion and migration cleanup, not unverified deployment prerequisites. String extraction is now available through the shared provider for every imported file format. ELF artifacts also expose dynamic dependencies and imported/exported symbols as graph observations.
Evidence recorded for this review:
.github/workflows/reamon-quality.ymlruns the full web suite, type-check, lint, npm production-dependency audit, Python unit gate, Trivy image scan, and a live Compose release gate against the production image.- The live gate runs authenticated acceptance, browser import/approval/analysis/ recovery controls, PostgreSQL restore, artifact extraction, and Neo4j dump/load/query recovery. It also scales the worker service to two replicas, kills one container, crosses the configured stale threshold, and requires one recovered completion.
.github/workflows/reamon-release.ymlvalidatesVERSIONagainst semver tags, requires a green quality workflow for the exact tagged commit, and publishes a checksum-backed source archive as a GitHub release. The reviewed release is v6.23.0.tooling/scripts/reamon-release-preflight.sh --live --acceptance --backupreproduces the same operational checks for self-hosted release operators.- The authenticated acceptance flow imports representative JSON and C artifacts, exercises approvals and both built-in providers, proves distinct concurrent task claims, projects and reconciles the graph, and verifies the workspace snapshot.
- Two Compose worker replicas recover a controlled stale lease and complete the task exactly once; the isolated backup drill restores PostgreSQL into a disposable database and extracts the artifact archive successfully. A bounded four-task, two-replica load/soak run then verifies stable containers without restart churn.
For production alerting, set REAMON_WORKER_ALERT_WEBHOOK_URL and optionally
REAMON_WORKER_ALERT_WEBHOOK_TOKEN. Failed provider dispatches send a bounded
worker.degraded JSON event with a five-second timeout; missing or failing alert
delivery never fails the dispatch request. The dashboard remains the source of
truth for stale workers, including workers that stop reporting entirely.
Architecture
The target-to-workflow boundary is:
Target import
↓
Target Profiler → TargetProfile / ArtifactProfile
↓
Capability Resolver
↓
Native analysis providers · generic process adapters
↓
Tasks and analysis plans
↓
Evidence, findings, hypotheses, activity, and knowledge graph
The initial typed contracts live in webapp/src/lib/reamon:
TargetProfiledescribes observable target facts.ToolPluginManifestdescribes accepted inputs, capabilities, requirements, and produced entities.ToolPluginprovides the execution boundary without naming a specific platform.resolveCapabilities()chooses compatible providers from installed manifests.buildProgressModel()derives progress from persisted lifecycle state.
Read the full design in docs/REAMON_ARCHITECTURE.md
and the migration inventory in docs/REAMON_MIGRATION.md.
Quick start
Prerequisites
- Docker Engine or Docker Desktop
- Docker Compose v2
- At least 4 GB RAM for the REAmon stack
- A local checkout of this repository
Node.js, Python, and reverse-engineering tools run inside containers for the normal
workflow. Do not commit .env or real target data.
Local install
git clone https://github.com/xdCloudy/REAmon.git
cd REAmon
./reamon.sh install
The installer creates the local .env, generates deployment secrets, builds the
configured services, starts PostgreSQL/Neo4j/the webapp and supporting workers, and
offers to create the first administrator. Open after the
webapp is healthy.
For an existing installation:
./reamon.sh up
./reamon.sh status
./reamon.sh logs webapp
./reamon.sh down
Existing PostgreSQL/Neo4j data and stable Compose volume identifiers can be retained when upgrading an installation; retired scanner services are not started.
First REAmon workflow
- Sign in and choose New Project.
- Enter a workspace name or choose a project folder; the folder name is used as the default workspace name.
- Review the preflight inventory, then choose Create and import workspace.
- REAmon creates one
DIRECTORYroot target, uploads files through bounded requests, hashes and profiles each artifact, and retains paths such asbin/x64/app.dll. - Review the workspace inventory, file tree, detected logical targets, capabilities, deterministic progress, and activity timeline.
Browser folder selection is a snapshot: the server never receives the absolute local filesystem path and cannot watch the directory after the browser selection ends. The import includes everything selected by default; refresh comparisons use manifest facts before upload and authoritative hashes after upload.
Artifacts are stored in the named reamon_artifacts volume. The default per-file
limit is 512 MiB and the default import limit is 50,000 files / 8 GiB. Process
providers are bounded to a 60-second execution window and 2 MiB of captured output
by default. Set
REAMON_MAX_ARTIFACT_BYTES, REAMON_MAX_IMPORT_FILES, or REAMON_MAX_IMPORT_BYTES
in .env before starting the webapp to change import limits; use
REAMON_PROCESS_TIMEOUT_MS and REAMON_MAX_PROCESS_OUTPUT_BYTES to tune provider
limits. Keep the artifact volume backed up
with the PostgreSQL and Neo4j data volumes.
Production deployment
The default Compose file is suitable for a trusted local network and development
environments. For an internet-facing deployment, use the hardened single-host
deployment under tooling/deploy/single-host, which
adds TLS termination, firewall/SSH hardening, and keeps internal services private.
Before exposing a deployment:
- Set unique, high-entropy values for
POSTGRES_PASSWORD,NEO4J_PASSWORD,AUTH_SECRET, andINTERNAL_API_KEY. - Set
TRUST_PROXY=trueonly when every request reaches the app through a trusted proxy that overwrites forwarding headers. - Set
AGENT_WS_PUBLIC_URLto the deployment origin when using a reverse proxy. - Back up
postgres_data,neo4j_data, andreamon_artifactsbefore upgrades. - Review
THIRD-PARTY-LICENSES.mdbefore redistribution. - Do not upload real target data to a development or shared environment.
The webapp entrypoint synchronises the Prisma schema on startup. Take a database
backup and inspect schema changes
before upgrading a production instance. Startup refuses destructive Prisma schema
drift by default; set REAMON_DB_PUSH_ACCEPT_DATA_LOSS=true only for a planned,
backed-up upgrade after reviewing the schema change. /api/health is a lightweight
liveness check; /api/health/ready verifies both the PostgreSQL connection and
writable REAmon artifact storage, and is the endpoint used by the Compose healthcheck.
Follow docs/REAMON_RELEASE_RUNBOOK.md for
backup, upgrade, smoke-test, rollback, and restore procedures.
Development
The repository is a Docker-orchestrated monorepo. The webapp is Next.js 16, React 19, TypeScript, Prisma, and Vitest; the analysis agent, worker, and supporting services are containerized.
# Validate the Compose model without starting services.
docker compose config --quiet
# Build the webapp image.
docker compose build webapp
# Start the lightweight development stack.
docker compose up -d postgres neo4j webapp
# Validate the REAmon foundation inside the webapp environment.
docker compose exec webapp npm run test -- src/lib/reamon
docker compose exec webapp npm run type-check
The repository test policy is documented in docs/readmes/README.TESTING.md
and skills/redamon-testing/SKILL.md. The normal
gate is containerized; do not run host Python tests against the service code.
Useful top-level commands:
./reamon.sh install Build and start the stack
./reamon.sh update Disabled; install reviewed REAmon releases explicitly
./reamon.sh up Start already-built services
./reamon.sh status Show service status
./reamon.sh test unit Run the unit gate
./reamon.sh create-admin Create or reset an administrator
./reamon.sh down Stop services without deleting data
Repository map
webapp/src/lib/reamon/ REAmon domain, profiler, capabilities, and progress
webapp/src/app/projects/ Workspace dashboard, import, and project flows
webapp/prisma/ PostgreSQL schema and REAmon foundation migration
agentic/ Analysis agent and bounded provider runtime
graph_db/ Neo4j access and knowledge graph infrastructure
services/reamon_worker/ Durable queued-task worker
docs/REAMON_*.md Current architecture and product-boundary decisions
Roadmap
- Expand specialist binary/process providers beyond shared string extraction and run the staging multi-worker drill around the existing ownership, retry, and process-cancellation path. The generic provider and contention scripts are already available for extension and validation.
- Ingest universal code/data/runtime entities and relationships into Neo4j.
- Extend approval policy reporting and richer recovery UX for target-agnostic analysis workflows.
- Add specialist binary, runtime, and data providers behind the capability boundary.
- Add capability-specific dashboards and reports while retaining one workspace framework for every target type.
Provenance and licence
REAmon was derived from an MIT-licensed upstream codebase. Required attribution, copyright notices, and third-party licences are retained. The maintained product is the REAmon workspace at ; retired upstream features are not part of its runtime contract. The bundled component inventory is documented in THIRD-PARTY-LICENSES.md.
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add xdcloudy/reamon