opencode-skills-collection 4.1.11 → 4.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,239 @@
1
+ ---
2
+ name: reverse-engineer-anything
3
+ description: Use REA to investigate shipped apps, binaries, packages, and runtimes; trace features with evidence, compare versions, or guide reconstruction. Skip ordinary source-code analysis.
4
+ risk: safe
5
+ source: "https://github.com/morluto/rea/tree/main/skill-src/reverse-engineer-anything"
6
+ source_repo: "morluto/rea"
7
+ source_type: community
8
+ date_added: "2026-10-10"
9
+ license: "MIT"
10
+ license_source: "https://github.com/morluto/rea/blob/main/LICENSE"
11
+ metadata:
12
+ version: "34"
13
+ ---
14
+
15
+ # REA
16
+
17
+ ## When to Use
18
+
19
+ - Use when a claim depends on a shipped application, binary, package, or requested runtime evidence.
20
+ - Use for decompilation, evidence-backed feature traces, version comparisons, or investigation-guided reconstruction.
21
+ - Skip REA for ordinary source-code analysis of a complete repository.
22
+
23
+ Use REA when a claim depends on a shipped binary or package, decompilation,
24
+ passive application runtime evidence, or comparison with
25
+ behavior not established by available source. For ordinary analysis of a
26
+ complete source repository, use normal repository tools and do not run REA
27
+ readiness or provider commands.
28
+
29
+ ## Limitations
30
+
31
+ - The skill supplies investigation guidance; it does not register the REA MCP server or install analysis engines.
32
+ - Native-analysis availability depends on the selected provider, host, and target format. Hopper is separate licensed software; Ghidra and IDA are bring-your-own.
33
+ - Static analysis does not establish runtime behavior or recover original source code. Report provider-specific coverage, partial results, and unknowns.
34
+ - REA runs analysis locally, but the connected model provider may have separate data-handling policies.
35
+
36
+ ## Connect only when needed
37
+
38
+ Installing this skill supplies instructions; it does not register the REA MCP
39
+ server, install analysis engines, or add tools to an already-running agent.
40
+
41
+ If REA tools are available and their registration is not known to be stale,
42
+ proceed directly to the target. Do not run diagnostics or setup before every
43
+ investigation. Use the connected server's actual tool list and input schemas;
44
+ a skill installed from repository main may describe capabilities absent from
45
+ an older npm release. Keep complete inline Evidence when that server does not
46
+ advertise retained references.
47
+
48
+ When tools are absent or registration is stale:
49
+
50
+ 1. Diagnose without changing files. For Codex, run
51
+ `npx -y rea-agents@latest doctor --client codex --json`. Substitute the current
52
+ supported client: `claude_code`, `claude_desktop`, `codex`, `cursor`,
53
+ `gemini_cli`, `windsurf`, `devin`, `opencode`, `antigravity`, `copilot_cli`,
54
+ `commandcode`, `vscode`, `grok_build`, `omp`, or `grok_bot`. `grok_bot` has no local
55
+ file registration: doctor reports the Grok Bot chat step, and setup does not
56
+ write `mcp.json`. If the client is unknown, use `doctor --json` and
57
+ inspect its registration results before choosing a setup scope.
58
+ 2. Distinguish the reason. Missing, malformed, or stale registration needs a
59
+ scoped configuration repair. An aligned registration with no tools in the
60
+ active session needs a restart/reconnection; doctor cannot prove that the
61
+ current agent has connected. A missing provider affects only tasks requiring
62
+ that provider: static JavaScript inspection needs neither Hopper nor Ghidra,
63
+ and Android inspection has separate bring-your-own JADX/Java prerequisites.
64
+ 3. For a configuration repair, prepare the read-only plan:
65
+ `npx -y rea-agents@latest setup --client codex --dry-run --json`.
66
+ Use the current client's ID, show its exact proposed paths, backups, and
67
+ changes, and obtain approval before setup writes configuration or installs
68
+ Hopper. Setup normally installs the matching bundled skill too; include that
69
+ replacement in the reviewed plan. After approval, apply the same scope with
70
+ `npx -y rea-agents@latest setup --client codex --yes`. Add `--install-hopper`
71
+ only if that separate installation was needed and explicitly approved.
72
+ 4. Restart/reconnect the affected agent. Verify that REA tools actually appear
73
+ in the session, then resume the original investigation. If they remain
74
+ absent, inspect the client's MCP launch error rather than repeating setup.
75
+
76
+ REA setup never installs or upgrades Node.js, npm, Homebrew, Java, Ghidra, IDA,
77
+ JADX, Binwalk, or Unblob. Use existing prerequisites; do not install unrelated
78
+ software to repair
79
+ MCP registration. For an unsupported client, use manual stdio registration
80
+ with a version-pinned `rea-agents` package or continue through the CLI.
81
+
82
+ A concrete CLI fallback for an operator-supplied JavaScript tree or ASAR is:
83
+
84
+ ```bash
85
+ npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
86
+ ```
87
+
88
+ No MCP registration or native engine is required. Read the returned Evidence,
89
+ graph, limitations, and unknowns with the same care as an MCP result; the CLI
90
+ returns the Evidence record directly. This fallback does not establish that
91
+ MCP is configured. Native CLI tasks still require their selected engine.
92
+
93
+ ## Route the target first
94
+
95
+ Choose the first tool from the target the user supplied. Use `open_binary` for
96
+ active-target native or archive workflows; target-free tools take their own
97
+ explicit path or endpoint and do not need it.
98
+
99
+ - ASAR or extracted JavaScript/Electron tree:
100
+ `analyze_javascript_application`.
101
+ - Archive/package member inventory (ZIP/APK/IPA/MSIX/AppX or DMG):
102
+ `open_binary` with the supplied local path; use `inspect_artifact` when its
103
+ graph and findings help answer the question.
104
+ - Android APK code, classes, methods, or incoming references:
105
+ `inspect_android_package`, then focused Android tools when advertised.
106
+ Archive member inventory still uses the archive route above.
107
+ - Managed PE/CLI assembly: `inspect_managed_artifact`.
108
+ - Firmware image: `inspect_firmware_regions` when advertised. Use
109
+ `extract_firmware` when extraction is requested, with a caller-selected new
110
+ absolute output directory. These tools use caller-supplied Binwalk/Unblob on
111
+ Linux; see the [firmware guide](https://github.com/morluto/rea/blob/main/docs/firmware-analysis.md).
112
+ - .NET NativeAOT PE/ELF: native Ghidra analysis. Native code can yield pseudocode;
113
+ consult the NativeAOT workflow in `references/native-and-artifacts.md` for
114
+ optional metadata recovery and its supported host/layout boundary.
115
+ - User-owned browser page already open: `list_browser_targets`.
116
+ - Retained HAR/native mitmproxy capture: `inspect_web_network_capture`. Select
117
+ original record ordinals when useful; inspect producer fields and byte/number
118
+ sidecars without fetching recorded URLs or claiming live attribution. See
119
+ [historical captures](https://github.com/morluto/rea/blob/main/docs/web-network-captures.md) for the exact upstream
120
+ profile and credential exclusions.
121
+ - User-owned Electron runtime already open: `list_electron_targets`.
122
+ - Explicit local EVM bytecode carrier: `inspect_evm_interface` with caller-selected
123
+ `raw` or `hex` encoding. Preserve carrier/decoded digests and treat selectors,
124
+ argument strings and mutability as inferred candidates; this performs no chain
125
+ lookup or target execution. See the
126
+ [EVM bytecode guide](https://github.com/morluto/rea/blob/main/docs/evm-bytecode.md).
127
+ - Explicit Linux ELF file for offline layout, symbols, relocations or static
128
+ mitigation evidence: `inspect_binary_layout`. This target-free operation uses
129
+ caller-supplied pwntools without opening a disassembler database. Preserve its
130
+ raw locations and inference/coverage limits; see the
131
+ [offline binary guide](https://github.com/morluto/rea/blob/main/docs/binary-diagnostics.md).
132
+ - Supplied Linux x86-64 ELF core: `inspect_recorded_crash`. Read every recorded
133
+ thread, raw note and source-bound register without opening a live target.
134
+ Historical PIDs do not select live processes. Request `include_debugger_context`
135
+ only when core-only mapping candidates help; see the
136
+ [recorded crash guide](https://github.com/morluto/rea/blob/main/docs/recorded-crashes.md).
137
+ - Native executable, library, or analysis database: `open_binary`, then
138
+ use focused analysis tools directly; call `binary_overview` when metadata or
139
+ inventory context is useful and available from the selected provider.
140
+
141
+ For an existing IDA MCP configuration, use `open_binary` with the original
142
+ input binary and `provider_id: "ida"`; do not pass an `.idb` or `.i64` database.
143
+ The legacy attached profile binds the already-open GUI input by SHA-256 and
144
+ leaves its database open. The modern headless profile creates and closes an
145
+ owned private database without saving. Installation and registration reuse
146
+ [mrexodia/ida-pro-mcp](https://github.com/mrexodia/ida-pro-mcp); see the
147
+ [IDA provider guide](https://github.com/morluto/rea/blob/main/docs/ida-provider.md).
148
+ Proceed directly to `analyze_function`, pseudocode, or function/string searches
149
+ after opening; IDA does not supply `binary_overview`. Consult session availability
150
+ when composing broader workflows. Modern direct callers and unsupported dossier
151
+ facets remain unknown; live IDA results are not replayed from snapshots.
152
+
153
+ If the app is missing, ask which app to inspect. Resolve a human-readable app
154
+ name to one clear installed artifact when possible; ask only when matches are
155
+ ambiguous. Never choose an example app on the user's behalf.
156
+
157
+ In a target-free session, use `open_binary` to bind any archive/package or
158
+ native target whose analysis tool operates on the active target. Do not call an
159
+ unadvertised tool; inspect `binary_session` with `{}` and its
160
+ `result.tool_availability` for availability reasons and remediation. The tool
161
+ list stays complete; availability depends on the operation, target, and host.
162
+
163
+ ## Work summary-first
164
+
165
+ Start with the default result and use its inline Evidence and graph context.
166
+ Do not repeat an identical tool call. Make a focused follow-up only when the
167
+ returned result leaves a specific question unanswered.
168
+
169
+ If MCP reports `resource_constraint` with `details.resource: "transport"`, call
170
+ `inspect_analysis_view` with its reported same-session Evidence reference for a
171
+ summary, one section/module, or a stable page. Use `trace_application_feature`
172
+ once a seed is known, or call `export_evidence_bundle` to write the complete
173
+ session to a selected path. The analysis remains complete in the ledger; avoid
174
+ repeating it merely to request the same oversized response. Complete CLI JSON
175
+ output also streams without a single MCP frame.
176
+
177
+ Every conclusion must distinguish observations, inferences, and unknowns. Cite
178
+ Evidence IDs, preserve limitations and incomplete coverage, and never imply
179
+ that static analysis observed execution. Runtime requests execute the declared
180
+ target and lifecycle; do not broaden the target or action beyond those fields.
181
+
182
+ Within the user's requested investigation, call available analysis tools
183
+ directly. REA does not require permission grants or per-call approval flags.
184
+ Follow the declared request scope and the host's actual access requirements.
185
+
186
+ ## Plan broader investigations
187
+
188
+ For requests that span multiple features or subsystems, use a staged workflow:
189
+
190
+ 1. Turn the request into a checklist of questions and the evidence each answer
191
+ needs. Resolve target identity and constraints from the conversation and
192
+ workspace before asking for information again.
193
+ 2. Inspect the current REA session, artifact identity, saved analysis database,
194
+ bookmarks, and prior evidence. Reuse matching state; do not open duplicate
195
+ sessions or repeat identical analysis.
196
+ 3. Start with the smallest useful overview or inventory. Follow each question
197
+ from its entry point through relevant data and state changes to its result.
198
+ Batch related operations around a specific hypothesis, then expand only when
199
+ the returned evidence leaves a concrete gap.
200
+ 4. Inspect relevant packaged resources and configuration alongside code when
201
+ they affect the question. Use format-aware inventory and parsers; do not
202
+ infer behavior from filenames, strings, or layout alone.
203
+ 5. Corroborate a conclusion with the evidence type it requires. Use runtime
204
+ observation only when static evidence cannot answer the question and the
205
+ required host runtime and OS access are available. For JavaScript behavior,
206
+ run probes against the actual app through the available browser, Electron,
207
+ or process capture workflow.
208
+ 6. Decompose work into independent questions. When parallel workers are
209
+ available and the questions do not depend on one another, assign distinct
210
+ scopes, point workers to existing evidence, and ask them to return sources,
211
+ conclusions, and unresolved gaps. Otherwise, work sequentially.
212
+ 7. Keep a concise finding ledger linking each conclusion to Evidence IDs,
213
+ confidence/evidence type, search boundary, and remaining unknowns. Update
214
+ the shared index or investigation report so later passes can reuse results.
215
+
216
+ Before finishing, revisit the original checklist. Mark each question as
217
+ answered, partially answered, or unresolved based on its evidence; keep
218
+ bounded negative searches bounded, and do not describe a broad investigation
219
+ as complete while required questions remain open.
220
+
221
+ ## Read only the relevant guide
222
+
223
+ - Native binaries, managed assemblies, archives, and extraction:
224
+ [references/native-and-artifacts.md](references/native-and-artifacts.md)
225
+ - ASARs, extracted JavaScript, feature tracing, and version comparison:
226
+ [references/javascript-applications.md](references/javascript-applications.md)
227
+ - Android APK declarations, classes, methods, and static references:
228
+ [references/android-applications.md](references/android-applications.md)
229
+ - Passive browser/Electron observation and static/runtime reconciliation:
230
+ [references/runtime-observation.md](references/runtime-observation.md)
231
+ - Evidence paging, comparisons, residual unknowns, and verification:
232
+ [references/evidence-workflows.md](references/evidence-workflows.md)
233
+
234
+ ## Finish the task
235
+
236
+ Explain findings in plain language and tie them to returned evidence. When the
237
+ user asks to build something, use normal coding tools and separate observed
238
+ behavior from design choices. Close an opened native session with
239
+ `close_binary` when the investigation is complete.
@@ -0,0 +1,34 @@
1
+ # Android application artifacts
2
+
3
+ Use the connected server's advertised Android tools. Repository main and npm
4
+ 4.1.0 include this family. A skill installation alone cannot add it to an
5
+ older server.
6
+
7
+ Start with `inspect_android_package` on the caller's APK path for package
8
+ identity, manifest declarations, coverage, and inline Evidence. Use
9
+ `search_android_classes` to find candidates, `inspect_android_class` for one
10
+ class's members, `inspect_android_method` for decompilation, and
11
+ `trace_android_references` for incoming static references. Each call takes its
12
+ own APK path and explicit selectors; do not open a native session first.
13
+ Choose an `overload_index` from the class inventory when methods are ambiguous
14
+ instead of guessing.
15
+
16
+ The provider requires a separately supplied headless JADX MCP JAR 0.7.1 and
17
+ Java 17 or newer. `REA_JADX_MCP_JAR` selects the absolute JAR path; `JAVA_HOME`
18
+ can select Java. REA setup does not install or configure that JAR, and doctor
19
+ provider scopes cover Hopper/Ghidra rather than JADX. Use existing tools and
20
+ report missing prerequisites for the Android task specifically.
21
+
22
+ Linux and macOS use the POSIX owned-process boundary. Windows x64 requires the
23
+ matching bundled native controls and uses an owned Job Object with bidirectional
24
+ stdio. A full JDK, including `jdk.compiler`, is required on every host; Windows
25
+ `JAVA_HOME` selects `bin\java.exe`. Consult the Android guide for actual host
26
+ verification coverage. Calls use one worker and provider deadlines; optional
27
+ `REA_JADX_HEAP_MIB` selects the JVM heap. The APK is never launched,
28
+ and no emulator is required.
29
+
30
+ Manifest entries and decompiled text are static observations, not execution or
31
+ policy enforcement. Incoming references are recovered static relationships;
32
+ reflection, dynamic loading, and unresolved calls remain unknown. Preserve
33
+ artifact digests, locations, diagnostics, and incomplete coverage. For archive
34
+ members rather than code analysis, use `open_binary` and `inspect_artifact`.
@@ -0,0 +1,40 @@
1
+ # Evidence, comparison, and verification workflows
2
+
3
+ Evidence-producing tools return the complete Evidence record directly in MCP
4
+ `structuredContent` and CLI JSON. Read `normalized_result` for operation data,
5
+ and cite `evidence_id` when another tool or your explanation needs a stable
6
+ reference. Preserve authority, limitations, coverage, and residual unknowns. If a result
7
+ is incomplete or paginated, continue only when the remaining data matters to
8
+ the task; do not fetch a bundle or resource merely to read a result already
9
+ returned inline. When complete `inspect_binary_layout` or
10
+ `analyze_javascript_application` Evidence is already retained, call
11
+ `inspect_analysis_view` for a summary, one section/symbol/module, or a stable
12
+ page instead of repeating the producer.
13
+
14
+ Use `record_unknown` to track unresolved questions in the user's investigation
15
+ and name the authority or environment still required. Supply supporting and
16
+ contradicting evidence IDs. It updates the session registry directly.
17
+ Use `update_unknown` with the current revision; reread after a stale revision
18
+ instead of retrying blindly. Only qualifying observed evidence can verify a
19
+ resolution.
20
+
21
+ Use comparisons with complete, compatible page sets when claiming equivalence
22
+ or absence:
23
+
24
+ - `compare_artifacts` compares inventory pages by occurrence path, content,
25
+ metadata, and graph relations.
26
+ - `compare_functions` compares explicit function Evidence, not fuzzy
27
+ whole-binary matches.
28
+ - `compare_bundles` compares canonical bundle membership and unknown history.
29
+ - `find_changed_behavior` combines existing comparisons; static differences
30
+ remain candidates, not causal proof.
31
+ - `build_call_path` needs explicit function dossiers from one artifact/provider;
32
+ an incomplete frontier makes absence unknown.
33
+ - `correlate_static_and_runtime` uses explicit mappings; matching patterns are
34
+ hypotheses, not causality.
35
+ - `verify_reconstruction` evaluates a finite typed specification. A pass covers
36
+ only declared comparable claims, not global equivalence.
37
+
38
+ Process captures are opt-in behavioral evidence, not a security sandbox. V3
39
+ captures cannot be upgraded to V4; rerun the original scenario. Distinguish root
40
+ exit from descendant settlement and require freshness when the task needs it.
@@ -0,0 +1,70 @@
1
+ # JavaScript and Electron application artifacts
2
+
3
+ Use `analyze_javascript_application` directly on the operator-supplied ASAR or
4
+ extracted tree. The complete result, graph, and Evidence context are returned
5
+ inline when they fit the MCP frame. Source-map contents are part of the static analysis. Start from its
6
+ findings, coverage, unknowns, and graph context, then make a focused follow-up
7
+ only when a specific question remains unanswered.
8
+
9
+ An oversized response reports `resource_constraint` and
10
+ `details.resource: "transport"`. Reuse
11
+ `details.reported_limits.evidence_reference` with `inspect_analysis_view` for a
12
+ summary, one module, or a stable page of module identities. Use
13
+ `trace_application_feature` once a module, route, or string seed is known.
14
+ `export_evidence_bundle` writes the complete canonical session to a
15
+ caller-selected file. These workflows keep the original Evidence and coverage;
16
+ a broad follow-up can also exceed framing.
17
+
18
+ BrowserWindow preferences, preload and contextBridge surfaces, IPC
19
+ registrations, utility processes, and native binding requests are static syntax
20
+ observations. Only a unique exact literal IPC channel match supports an inferred
21
+ pairing. Dynamic or ambiguous channels remain unresolved. A requested `.node`
22
+ member is not a verified native export. Never claim runtime reachability,
23
+ registration, defaults, or policy enforcement from static analysis.
24
+
25
+ Use `trace_application_feature` on existing application Evidence for one
26
+ literal node ID, route, string, API, IPC channel, module, or native export.
27
+ Choose a direction and reuse the returned application Evidence ID when the
28
+ connected server advertises retained references, or supply complete Evidence
29
+ inline. Include
30
+ Hopper or Ghidra Evidence only when its artifact digest matches exactly.
31
+
32
+ For version comparison, analyze each version once, then call
33
+ `compare_application_versions`. Accept only its digest, source-map, structural
34
+ fingerprint, or non-module semantic matches. Module ordinals and minified names
35
+ are not persistent identity. Report added or removed only with complete
36
+ opposite-side coverage; otherwise report unknown.
37
+
38
+ When the question asks how one exact exported callable's returned object shape
39
+ changed, analyze each version once and then call
40
+ `compare_javascript_export_shapes` with explicit module paths and export names.
41
+ Use the returned IDs on the same connection, or complete inline Evidence
42
+ records, from both analysis calls. Accept variant
43
+ pairing only through the tool's unique exact literal discriminant. Read
44
+ `property_inventories` and each change's `presence` before treating `unknown` as
45
+ "the name was not observed": inventories list observed property names even when
46
+ values stay unknown, with a `source_range` for each paired or unpaired variant.
47
+ Array holes and mutation-invalidated slots are not observed properties.
48
+ Complete parent coverage reports presence-only
49
+ `added`/`removed` independently of unresolved values. Cite the
50
+ comparison Evidence and report JSON Pointer changes; dynamic values, ambiguous
51
+ variants, and incomplete parent-property coverage stay unknown. This is static
52
+ inference, not runtime behavior. When runtime semantics are needed, run
53
+ behavioral probes against the relevant application versions and capture them
54
+ through the available browser, Electron, or process workflows.
55
+
56
+ ## Reusing application Evidence
57
+
58
+ When advertised by the connected server, application trace and compare tools
59
+ accept complete inline Evidence or
60
+ `{"kind":"retained-evidence","evidence_id":"ev_<64 lowercase hex characters>"}`
61
+ for their application input (`application`, or `left`/`right`). `inspect_analysis_view`
62
+ uses the same retained-reference form in `source`, or portable inline Evidence,
63
+ to project a summary, module page, or one module with its recorded observations. This notation is
64
+ a template: replace it with the actual returned ID. Versions before 4.1.0 accept only full
65
+ inline Evidence. Use the exact ID
66
+ returned by the producer on the same MCP connection. Resolution does not run
67
+ analysis or select a provider; findings remain inline. Native observation
68
+ arrays still take full Evidence. `close_binary` clears retained references;
69
+ export a bundle before closing, or supply portable inline Evidence in another
70
+ connection. A missing reference includes its ID and recovery guidance.
@@ -0,0 +1,146 @@
1
+ # Native, managed, and packaged artifacts
2
+
3
+ ## Recorded Linux crashes
4
+
5
+ Use `inspect_recorded_crash` with an explicit Linux x86-64 ELF core path to
6
+ inspect historical thread registers, signals, raw notes and original file
7
+ ranges. It is independent of the active disassembler target. Source-bound
8
+ register values and note bytes are observations; missing notes, signal-thread
9
+ association and current executable/library identity remain unknown. PIDs are
10
+ historical metadata and never authorize live attach or control.
11
+
12
+ The optional `include_debugger_context` facet adds mapping candidates through
13
+ caller-supplied GDB/pwndbg in an owned core-only session. Display names do not
14
+ establish current file identity; zero reported flags leave permissions unknown.
15
+ Requested unavailable context fails with setup guidance. See
16
+ [recorded crashes](https://github.com/morluto/rea/blob/main/docs/recorded-crashes.md)
17
+ for exact upstream profiles, bounds and verification coverage.
18
+
19
+ ## Offline ELF layout
20
+
21
+ Use `inspect_binary_layout` with an explicit local ELF path for file-backed
22
+ sections, symbols, relocations, linkage names, and static mitigation inferences
23
+ without opening a disassembler target. When that complete record is already
24
+ retained, call `inspect_analysis_view` for a summary, mitigations or linkage
25
+ facet, one section or symbol, or a stable page. Do not re-run the decoder to
26
+ read a single object.
27
+
28
+ ## Native targets
29
+
30
+ After `open_binary`, use focused search, procedure, or function tools directly.
31
+ Use `binary_overview` when target metadata or inventory context helps answer the
32
+ question. Prefer literal search, names, decompilation, callers, callees, and
33
+ cross-references. Addresses and recovered pseudocode are analysis observations,
34
+ not original source. Provider unavailability and unsupported metadata remain
35
+ unknown rather than false.
36
+
37
+ To see which functions or Objective-C methods a Mach-O actually calls in one
38
+ run, use `observe_native_calls` with explicit breakpoints and a bounded
39
+ `duration_ms`/`max_events`. It launches a new process under LLDB, so the target
40
+ runs and may change files or use the network. Hardened-runtime targets need the
41
+ `get-task-allow` entitlement.
42
+
43
+ Use `binary_session` with no arguments to check the open target, selected
44
+ provider, and alignment. Its default `result.tool_availability` includes the
45
+ complete tool inventory with availability reasons and remediation. When choosing
46
+ a tool, use its entry in that result; `tools/list` retains the complete catalog
47
+ when the target or provider state changes.
48
+
49
+ ## DOS MZ with Ghidra
50
+
51
+ For an admitted DOS MZ target, use `inspect_native_load_image` to check measured
52
+ loaded bytes, file mappings, relocations and the entry against the immutable
53
+ snapshot. Keep `mismatch` and `unsupported` explicit. Verified import covers the
54
+ reported static image, not runtime DOS or PC-98 hardware behavior.
55
+
56
+ Use `read_bytes` for initialized analysis memory and `address_to_file_offset` to
57
+ anchor one observed address to original file bytes. Loader fixups can change a
58
+ word; a source offset does not imply byte equality. Complete function body ranges
59
+ use inclusive ends and can contain gaps. Do not treat the enclosing span as code.
60
+ For packed targets, retain the original and separately derived artifact identities;
61
+ decompiling an unpacking stub does not recover the unpacked program.
62
+
63
+ When reading Objective-C dispatch metadata, distinguish class implementation
64
+ methods from protocol requirements: class methods report null requirement
65
+ flags, while decoded protocol declarations retain required and optional facts.
66
+ Property attributes remain raw name/value tokens; use the property's
67
+ `atomicity` field for the decoded `N` marker or the default atomic behavior.
68
+ Null class/meta flags, ivar counts, atomicity, or read-only values mean the
69
+ selected provider did not establish that fact. Symbol names alone do not prove
70
+ that a class is a root class or has no ivars.
71
+
72
+ ## Managed PE/CLI
73
+
74
+ Start with `inspect_managed_artifact`. REA's canonical managed inspection is
75
+ execution-free: do not claim it loaded, reflected, executed, or resolved the
76
+ assembly. Keep managed/native boundaries and unavailable reconstruction facts
77
+ explicit. A bring-your-own reconstruction oracle is separate from the canonical
78
+ parser and must not become an implicit setup dependency.
79
+
80
+ ### .NET NativeAOT
81
+
82
+ NativeAOT binaries contain native machine code, so ordinary CIL decompilers
83
+ cannot recover the original method bodies. When managed metadata/CIL is absent,
84
+ classify that as a native-analysis route rather than claiming source recovery.
85
+ Open the native image with the selected deep provider and inspect functions,
86
+ strings, calls, and references; describe decompiler output as pseudocode and
87
+ inference.
88
+
89
+ NativeAOT images can be PE/COFF, ELF, or Mach-O executables and shared
90
+ libraries. Use file bytes and loader metadata rather than suffixes to identify
91
+ them. For packaged apps, inventory/extract with REA's artifact tools and retain
92
+ the exact contained image identity. PDB, ELF debug, or dSYM sidecars are
93
+ additional evidence only when the provider accepts and matches them.
94
+
95
+ For deeper type recovery, the optional third-party
96
+ [Ghidra NativeAOT analyzer](https://github.com/Washi1337/ghidra-nativeaot)
97
+ rehydrates ReadyToRun metadata and can recover method tables, type relationships,
98
+ frozen objects, and strings. This is a Ghidra extension with its own install and
99
+ interactive workflow; it is not currently part of REA's managed parser or
100
+ headless Ghidra bridge. Treat its annotations as analysis evidence, retain the
101
+ binary identity, and do not present recovered types as original source. Header
102
+ discovery may require a symbol or analyst identification of the ReadyToRun
103
+ header, depending on the binary and analyzer version.
104
+
105
+ ## Packages and extraction
106
+
107
+ Use `inspect_artifact` for application bundles, archives, ZIP/APK/IPA/MSIX/AppX,
108
+ ASAR, or DMG inputs when the artifact graph and findings help answer the
109
+ question. It returns the complete artifact graph inline. Cite graph manifest
110
+ IDs when using them.
111
+
112
+ For an IPA or a macOS `.app`, ZIP, or DMG, pass the inventory Evidence to
113
+ `project_apple_application_graph`. It reports application roots and nested
114
+ bundles by path convention: app extensions, XPC services, frameworks, login
115
+ items, system and driver extensions, and plug-ins. It also lists privileged
116
+ helpers, launchd plists, symlinks, and each bundle's `info_plist_path` and
117
+ executable candidates. Roles are path conventions, not parsed plists; read the
118
+ listed plists with `inspect_plist`.
119
+
120
+ After `open_binary` on a `.app` or Mach-O, use `trace_dylib_resolution` to see
121
+ which file each `@rpath`, `@loader_path` and `@executable_path` load reaches for
122
+ every executable in the bundle. It also lists missing or weak loads and earlier
123
+ `@rpath` candidates that are absent. Narrow large bundles with `roots` or
124
+ `architecture`. System paths stay undetermined because the dyld shared cache
125
+ provides them.
126
+
127
+ Use `extract_artifact` when materialized files are needed. It takes no arguments
128
+ and materializes all regular files into a fresh temporary directory chosen by
129
+ REA. Symlinks and encrypted entries are inventory facts, not extractable files.
130
+ The result reports the materialized directory; callers do not choose the
131
+ destination. No separate permission grant is needed.
132
+
133
+ Native DMG traversal automatically uses a read-only mount on supported macOS
134
+ hosts, with an owned temporary mount directory and cleanup. It needs no approval
135
+ flag. Unsupported hosts or mount failures remain explicit limitations; do not
136
+ claim child inventory when only root identity is available. Extraction is a
137
+ separate filesystem-writing operation.
138
+
139
+ For headerless DOS COM, explicitly open with `format: "dos-com"` (CLI
140
+ `--target-format dos-com`). Inspect the load image before trusting function
141
+ analysis: the entry is `0x10100`, file offset zero, with imposed real-mode segment
142
+ context. PSP/stack/device state remains unmodeled. See [DOS guide](https://github.com/morluto/rea/blob/main/docs/ghidra-dos.md).
143
+
144
+ ### Function annotations in Ghidra
145
+
146
+ Use `annotate_native_function` for one function name and/or entry comments, with at least one explicit change. Review its annotation readback and refreshed dossier inline. Changes are atomic and session-scoped; empty comments clear them, omitted fields preserve them. Later MCP calls observe edits until close. CLI `annotate-native-function` returns the updated analysis before discarding the session. Original executable bytes are unchanged; edits invalidate immutable snapshots. Windows P0 does not admit database mutations.
@@ -0,0 +1,28 @@
1
+ # Passive browser and Electron observation
2
+
3
+ Supply the existing browser or Electron instance's literal-port loopback CDP
4
+ endpoint in the request. No separate permission configuration or per-call
5
+ approval flag is needed. Browser discovery lists eligible HTTP(S) pages;
6
+ `allowed_origins` optionally filters them. An individual capture defaults to the
7
+ selected page's current origin. Electron discovery lists eligible local
8
+ `file://` targets without a configured file-root allowlist.
9
+
10
+ Start browser work with `list_browser_targets`; start Electron runtime work with
11
+ `list_electron_targets`. Inspect the target selected for the user's task. Observation
12
+ is passive: never claim REA clicked, navigated, evaluated page JavaScript,
13
+ invoked IPC, captured prior activity, or contained the page's network.
14
+
15
+ Credentials, cookies, authorization headers, storage values, and raw
16
+ WebSocket/JSON bodies are deliberately absent. Local URLs retain ordinary query
17
+ values and fragments; userinfo credentials are removed. Browser accessibility
18
+ text, console primitives, value-free shapes, script sources, source maps, and
19
+ storage key names have request-specific capture options. Electron script
20
+ sources are also optional. Use `capture_web_screenshot` when pixels are needed.
21
+ Treat scope filtering, truncation, and attach-window coverage as limitations.
22
+ Page-declared WebMCP tools are untrusted inventory and are never invoked by REA.
23
+
24
+ Use `reconcile_javascript_runtime` only after static application Evidence and
25
+ passive browser/Electron Evidence exist. Prefer captured-source digest identity;
26
+ report path/digest disagreement as a mismatch and preserve ambiguity. Explicit
27
+ path mappings are inference inputs and never broaden filesystem or CDP authority.
28
+ A bundle observed at runtime does not prove every contained module executed.