github morluto/rea rea-agents-6.9.0
rea-agents: v6.9.0

14 hours ago

6.9.0 (2026-11-11)

Highlights

  • Build and test desktop tasks from recorded application state, including downloaded Linux apps, reusable build computers and multiple tasks per capture.
  • Inspect more shipped artifacts offline: standalone application bundles, embedded firmware, NTFS acquisitions, API contracts and V8 code-cache containers.
  • Keep native and runtime investigations grounded in retained Evidence, with paged results, explicit coverage and recoverable resource limits.

Changes

Fixes

⚠ BREAKING CHANGES

  • Settings clients must replace effect, rea_restart_required, restart_required and restartRequired with update_mode (runtime, restart, parameter) and pending_restart. Parameter-supplied limits cannot be changed by the runtime setter; restart-mode values retain their startup value until restart. #9885, be20bdfb26f7, aee1178839dd. Thanks @gensokyo-dev, @N0zoM1z0.
  • Process and desktop callers must inspect details.secondary_failures/secondaryFailures: mixed batches keep physical/provider failures primary and retain typed cancellation with its original cause. Retained descriptors can produce cleanup_incomplete; follow the returned recovery instead of treating it as ordinary cancellation. Custom adapters must consume owner-issued inspection/sampling facts and retain their cleanup scopes until release succeeds. #10141, #10113, #10109.
  • rea mcp add --command now accepts a local stdio launcher only: HTTP(S) executable URLs are rejected before settings writes, and package acquisition is removed. Configure remote transports in each client’s native settings and install/select the local launcher before registration. #10102.
  • Runtime-instance graph identities now require identity.capture_evidence_id in addition to the capture digest and runtime key. Node IDs digest that identity, so regenerate reconciliation Evidence and rebuild node-keyed lookups even when the digest and runtime key are unchanged. #10063.
  • Retained process symlinks require their stored target bytes; recapture legacy observations that only described a link without retaining its target. #10082.
  • Function dossiers must record Swift literal inventory and its omissions together. Regenerate one-sided observations through a canonical provider; both-absent unsupported observations remain valid. #10068.
  • Conformance manifest schema v2 separates exact string markers from fragments and rejects the old ambiguous strings field. Regenerate unversioned fixtures with npm run build:fixtures. #9977.
  • Unavailable native/BEAM/Go/Rust view collections return items.rows: null, coverage.status: "unavailable", coverage.total: null and coverage.exhausted: false; recorded empty collections still return rows: []. Refresh schemas, stop paging unavailable data and inspect unknowns; older saved views retain their recorded facts. #9893, #8291, issue morluto/rea#8276. Thanks @Xinglan233.
  • Desktop witnessing requires the current generated verifier: re-export old bundles using their original Evidence/task inputs. Pre-6.9 captures missing required state.baseline_non_files are rejected before state inspection, drafting or export; capture the application again to obtain contemporaneous SQLite member facts. #9898, #9470.
  • New browser captures record save: [] for request actions that save nothing, changing scenario/Evidence digests. Keep historical digests with historical captures and use freshly recorded digests for new ones. #9896.
  • Selected SQLite rows require row_offset and next_row_offset; rows.order is rowid, primary_key or unspecified. A null next offset means either no continuation or no stated order: an unordered sample can still have truncated: true. Inspect both order and truncated before concluding the sample is complete. #9331, issue morluto/rea#8234. Thanks @2SinceJuly, @555aaditya.
  • Windows entropy Evidence now uses the admitted filesystem path spelling, so fresh analysis of a differently cased caller path can change evidence_id. Invalidate or re-key cached associations against the fresh Evidence, retaining old IDs only for their original observations. #9393. Thanks @HusnainMaroof.
  • caller_input_paths values may be ordered arrays of strings as well as strings. Update strict consumers to preserve repeated selections. #9626, #9624.
  • observe_javascript_runtime adds required execution_context_id fields to scripts and contexts. context_key is an opaque capture-local lifetime identity, not a reusable protocol ID, and Evidence identities change. Refresh schemas and recapture when new lifetime associations are needed. #9471, issue morluto/rea#3382. Thanks @coygeek.
  • Refresh cached inspect_address_context schemas: unavailable facets may carry typed input or resource-constraint errors while successful sibling facets remain available. #8444, #8424, #8419.
  • analyze_function/trace_native_values require native_value_flow.limitations on available and unavailable variants. Ghidra memory effects cover explicit high-p-code LOAD/STORE operations only; empty effects do not prove no memory access. The value_flow_effect_scope profile commitment invalidates older snapshots: retain embedded historical Evidence, reopen without the snapshot and save a fresh one. #8651.
  • Ghidra byte searches require skipped_overlays; loaded overlays no longer count as not loaded, and adjacent initialized blocks are searched with explicit coverage. Reopen targets and save fresh analysis snapshots after the profile/search-policy changes; historical Evidence stays importable. #8608, #8376, #8840, issue morluto/rea#8374, issue morluto/rea#8563, issue morluto/rea#8607.
  • compare_functions adds function_match.method: "same-evidence" when both inputs authenticate to one Evidence ID and entry comparison is unavailable. Accept the new matched variant, retain unknown dimensions and do not infer complete equivalence; one observation cannot have contradictory changed dimensions or hashes. #8442, issue morluto/rea#8367.
  • Kuna analyze_function can return native_value_flow: {available: false, reason, limitations} instead of null. Check available and preserve the provider reason; null means procedure-scoped unrecorded unknown, not confirmed absence. The workflow-profile digest changes: older trace Evidence remains history but must be rerun to satisfy current replay. #8785, issue morluto/rea#8783.
  • The opt-in hot/cold MCP catalog no longer preloads inspect_analysis_view. Discover it before use or batch it with its producer; the default full catalog remains available. #9151. Thanks @gensokyo-dev.
  • batch_decompile and retained batch views now use items[].status: "unavailable" with reason: "no_pseudocode" for null pseudocode, replacing the former error/capability_unavailable item. Empty or non-text values remain status: "error" with unreadable_output. Both count toward failed; preserve item limitations and accept historical error items. #8737, issue morluto/rea#8736.
  • import_evidence_bundle/CLI evidence-import now reject snapshot-shaped JSON with invalid_request instead of evidence_integrity_mismatch. Restore it with open_binary.snapshot_path or a compatible CLI --snapshot; bundle imports require a canonical bundle from export_evidence_bundle. #8867.
  • REA-launched Chromium keeps its sandbox. If launch fails on root/container hosts, first enable host sandbox support, such as a suitable non-root user or namespace/setuid facilities. The explicit REA_BROWSER_NO_SANDBOX=true fallback disables Chromium’s sandbox and does not establish an REA isolation boundary. #8738, issue morluto/rea#8722. Thanks @chordpli, @hkeysai.
  • Fresh objdump Evidence changes provider identity from gnu.objdump/GNU objdump to {id: "objdump.command", name: "objdump command", version: null}; launch errors use the same ID and architecture-list subjects may be null. Update provider-keyed caches/readers and retain the selected executable parameters without assuming GNU semantics; historical Evidence stays readable. #8824, issue morluto/rea#8823.
  • Kuna verification policy is separate from analysis identity. Earlier snapshots and resumable directory exports are incompatible even with the same executable. Preserve old files, reopen without the snapshot and save a fresh one or choose a new export directory; the Kuna guide explains extracting/importing embedded Evidence as history. #8699.
  • inspect_analysis_view rejects mismatched native parent predicates with invalid_request at source.predicate_type: function/inventory/observation views require rea.analysis, and matching views require rea.native-function-matching. Select the original correctly typed Evidence or rerun its producer; patching an existing predicate invalidates its identity. #8451.
  • trace_feature can succeed when xrefs exist but owner lookup is unavailable. Accept references[].containing_procedure.status: "unavailable" with provider/reason fields instead of requiring a found member, and inspect residual_unknowns; truncated: false does not establish resolved ownership. #8368.
  • close_binary retains investigation records; use reset_investigation to clear them. Cross-process recovery requires an explicitly acknowledged Evidence-bundle checkpoint. #8361, issue morluto/rea#8347. Thanks @gensokyo-dev.
  • compare_functions adds the matched function_match.method: "same-entry" variant with required entry_address when authenticated artifact, architecture, mapping, slice and entry commitments agree despite a rename. Refresh schemas and keep name/identity changes separate from entry correspondence. #8263, issue morluto/rea#8213. Thanks @gensokyo-dev.
  • inspect_native_load_image NativeAOT metadata_recovery uses a status-discriminated union: complete reports require reason: null; partial/not-applicable reports carry {code, ...} instead of prose reasons. Branch on codes and their fields while preserving historical/optional-extension strings. Invalid budgets now produce typed input/resource errors. #8053.
  • trace_javascript_semantics adds influences edges and moves direct literal-argument seeds from call-site to expression nodes. Relevant unknown dependencies can change found to partial: handle that status and inspect unknowns. Reanalyze retained application graphs to obtain the new edges; old graphs stay readable. #7939, issue morluto/rea#7500. Thanks @Rinkia.
  • inspect_managed_members changes signature_resolution from type-names-v1 to type-names-v2 and appends readable names to signature operands, such as class:4 (Fixture.Program). Branch on the resolution version, accept annotated v2 strings and preserve historical v1/null displays. Signature digests are unchanged; InternalCall methods remain runtime-provided boundaries. #5309, #9547, issue morluto/rea#5149. Thanks @elricfd, @gensokyo-dev, @ln-bodicherla, @Plastic-time.
  • MCP calls default to 1,024 combined array elements/object members; excess input is rejected before dispatch with nonretryable resource_constraint, resource: "transport" and reported_limits.max_input_elements. For larger inline calls, set REA_MCP_MAX_INPUT_ELEMENTS to a digit-only positive decimal safe integer (1–9007199254740991) and restart, or select retained/file inputs. Fractional/exponent spellings are invalid; inputs are never truncated. #7905, issue morluto/rea#7882. Thanks @gensokyo-dev.
  • inspect_macho text names/paths can be null for non-UTF-8 bytes, with name_bytes_hex, segment_bytes_hex and path_bytes_hex alternatives; unsafe numeric sizes/offsets/alignments can be null with exact companion fields, and delayed-init options are numeric. Refresh schemas and preserve these facts; absent byte fields in older Evidence remain unrecorded. #7952, issue morluto/rea#7391. Thanks @coygeek.
  • Environment file-source errors move from the generic evidence issue path to capture for environment-build and source.path for environment bundle build/export. Missing/non-file/invalid UTF-8/JSON sources return invalid_request with invalid_value/invalid_format issues and inspect_input_contract recovery; repair the selected file. #7900, issue morluto/rea#7523. Thanks @coygeek.
  • Selected unpaired UTF-16 surrogates now make TOON, Markdown, CSV and TSV output fail with invalid_request and a nonzero exit even after a successful operation; Markdown also refuses NUL. Use --format json or --format yaml to preserve these values rather than accepting substituted text. #7852, issue morluto/rea#7592, issue morluto/rea#7593. Thanks @coygeek.
  • Reconstruction evidence_bundle inputs reject authenticated standalone records as invalid_request with field-level issues instead of accepting/misclassifying them as damaged bundles. Bundle-file import/export/comparison reports invalid_request/invalid_input with details.reason: "wrong-kind". Supply a canonical bundle from export_evidence_bundle; tampered data remains an integrity failure. #7895, issue morluto/rea#7562. Thanks @coygeek.
  • Environment coverage can use method-replay for non-GET safe reads. Clock-generating write plans without a global clock anchor now return served: false, reason: "unknown-clock" instead of being served. Extend reason handling and recapture usable start times/completed durations before replaying those writes. #7834, 63220edcc3b4, issue morluto/rea#7387. Thanks @coygeek.
  • Ghidra returns not-in-listing for in-memory addresses lacking listed instructions or defined data, replacing the former undecodable interpretation. Accept the new status and recreate snapshots after the raw-profile change; retain old embedded Evidence as history. #7823, issue morluto/rea#7490. Thanks @Entrpi.
  • capture_process_scenario/CLI process capture rejects columns: 1 before target launch; update both initial terminal widths and every resize to at least 2. Sensitive interaction data is empty with sensitive/input_bytes, and raw echoes are redacted. Recapture both sides before comparing older private-input Evidence. #7848, #7804, issue morluto/rea#7582, issue morluto/rea#7782. Thanks @coygeek, @gensokyo-dev.
  • Managed setup registrations bind the selected absolute runtime and REA entry script, including package-runner cache paths. Keep that installation available; unknown registrations need confirmed manual repair. Setup no longer returns prewarm or emits its progress events. c77735fa83a6. Thanks @gensokyo-dev.
  • macOS Hopper launch paths/arguments reject double quotes, backslashes and line breaks before handoff. Select literal-safe prepared paths/loader arguments or a compatible provider. #7732, issue morluto/rea#7727. Thanks @gensokyo-dev.
  • New JavaScript application graphs omit the derived package renderer property. Use renderer_declarations for source fields and package-load edges for the selected candidate; historical Evidence remains readable. 5cf7133f823b.
  • Replace Cutter --json=true/false with --json-output=true/false; bare --json still selects CLI result formatting. Replace rea compare-bundles with rea compare; MCP compare_bundles is unchanged. 567ea4b1e8bb, 3515b262218f.
  • JEB engine refusals report execution_failure rather than unsupported_target; inspect retained upstream diagnostics for recovery. c4cdb7658b0e.
  • ASAR file occurrences may contain unpacked: false. Accept an optional boolean; absent historical fields remain unknown. 60834e391c3f.
  • Non-loopback MCP HTTP binds require MCP_ALLOWED_HOSTS or rea mcp --http --allowed-hosts. Bundle names must be unchanged HTTP hostnames within the 63-octet DNS-label limit. #7172. Thanks @DeryFerd, @gensokyo-dev.
  • binary_session {} is compact by default and omits provider availability diagnostics/remediation, target-support diagnostics/capabilities and tool-group surface/effects/annotations. Request {"detail":"complete"} for these facts and recovery guidance. #7127, issue morluto/rea#7109. Thanks @kaoru0822-kitauji.
  • Native input errors now include details.operation and field-level details.issues. Supply a nonempty trace_native_values.procedure; CLI trace-native-values rejects an empty procedure before opening the target as VALIDATION_ERROR with fieldErrors, while MCP reports invalid_request at procedure. #7889, issue morluto/rea#7572. Thanks @coygeek.
  • Readable JavaScript members that normalize to one logical path now stop analyze_javascript_application with artifact_operation_failed, details.reason: "path" and a partial inventory instead of selecting one occurrence. Inspect the inventory and analyze a copy without collisions; all-unavailable colliding sources remain unknown. #7864, issue morluto/rea#7626. Thanks @coygeek.
  • trace_web_module_imports with an empty/relative REA_BROWSER_EXECUTABLE now reports capability_unavailable with invalid_browser_executable instead of missing_browser_executable, retaining details.diagnostics.executable. Set an absolute Chromium path; an unset selection still means missing. #7903, issue morluto/rea#7639. Thanks @coygeek.
  • Unresolvable import-reference-source roots, capture scenario files and web-network capture/Protobuf descriptor paths (ELOOP/ENAMETOOLONG) now report invalid_request/invalid_input with responsible field/host-code issues rather than generic execution/unreadable-output failures. Repair the symlink chain or choose a shorter path. #7847, #7814, issue morluto/rea#7607, issue morluto/rea#7636. Thanks @Abelo9996, @coygeek.
  • close_binary with snapshot_path on a profileless/archive target now returns nonretryable capability_unavailable instead of evidence_integrity_mismatch, writes no snapshot and leaves the session open. Export needed Evidence, then close again without snapshot_path. #7837, issue morluto/rea#7311. Thanks @coygeek.
  • adb local-file refusals occur before device commands: missing/non-file/uninspectable local_path/apk_path and file-blocked output_directory return invalid_request with field issues/host codes; output-producing calls formerly used unreadable_output. Supply regular source files and a directory path whose parents are directories. #7885, issue morluto/rea#7549, issue morluto/rea#7550. Thanks @coygeek.
  • Evidence writes failing with EFBIG, ENOSPC or EDQUOT now report nonretryable resource_constraint, details.reason: "storage-limit", path and optional system_code instead of execution_failure/io. Raise file-size allowance or free space/quota before retrying; a failed staged-file cleanup remains cleanup_incomplete. #7887, issue morluto/rea#7573. Thanks @coygeek.
  • PE signers add optional nullable unsigned_attribute_oids: fresh null means absent, an OID array means present, and omission in old Evidence is unrecorded. Unsigned attributes produce coverage.status: "partial" because nested signatures/timestamp contents remain undecoded; accept the new field and limitations. #7920, issue morluto/rea#7767. Thanks @Rinkia.
  • Valid ASN.1 exceeding certificate nesting/OID allowances now returns nonretryable resource_constraint rather than invalid_request/invalid_input, with max_asn1_depth/max_oid_bytes. These format/resource bounds have no runtime override; retain the diagnostics and use an independently suitable parser when necessary. #9932.
  • trace_call_path/build_call_path require discovery and observed-result fields in search_scope. An exhausted observed graph can still yield goal_status: "unknown" when provider discovery is incomplete. Refresh result schemas and workflow-profile expectations instead of equating graph exhaustion with complete discovery. #8443.
  • inspect_native_instruction adds containing_instruction for not-instruction-boundary and containing_data for data, with address/extent/identity/provenance. Accept these facts; omission in old Evidence is unrecorded. The Ghidra profile changes: reopen and save a fresh snapshot. #8777.
  • trace_native_values adds required page_truncated and tagged traversal coverage. truncated combines page omission with traversal truncation; exactly filling a budget alone no longer proves truncation. Inspect page coverage before fetching another page and traversal reason before raising budgets. #8309, issue morluto/rea#8283. Thanks @kaoru0822-kitauji.
  • batch_decompile.addresses has a separate hard ceiling of 20,000 entries. Split larger batches into calls of at most that size; increasing the configurable MCP transport allowance cannot remove this operation limit. #5937, issue morluto/rea#5930. Thanks @dakjdakd.
  • close_binary can retire the target while retaining cleanup owners: cleanup_incomplete may have recovery.kind: "retry_cleanup" despite retryable: false. Keep the same connection open and call close_binary again without snapshot_path to retry owned cleanup. #8329, issue morluto/rea#8211. Thanks @kaoru0822-kitauji.
  • Unconfirmed cleanup in inspect_address_context, get_call_graph or trace_call_path now produces tool-level cleanup_incomplete rather than a successful partial result or cancellation. Keep admitted partial Evidence and follow the returned same-session cleanup recovery. #8417, #8516, issue morluto/rea#8369, issue morluto/rea#8416. Thanks @kaoru0822-kitauji.
  • inspect_ntfs_journal omits detailed mftMetadata.record_headers by default and leaves continuation at the first omitted record. Select mft_record_limit from 1 to 32 when those details are needed; inventory counts and explicit coverage remain inline. 1a8a9b749a. Thanks @gensokyo-dev, @N0zoM1z0.
  • Desktop state directories now use application.state_directories[].exists_at_start: null plus existence_error when inspection fails (for example, access denial). Accept the tri-state field and preserve unknown instead of treating it as absence. #9899.

Full contribution record: 1848 commits and 1073 merged PRs.

Don't miss a new rea release

NewReleases is sending notifications on new releases.