rea-agents 3.2.0 → 4.0.0

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.
Files changed (434) hide show
  1. package/README.md +183 -332
  2. package/bridge/ghidra/ReaGhidraBridge.java +561 -74
  3. package/bridge/hopper_bridge.py +70 -27
  4. package/bridge/native/ReaNativeUI.swift +157 -0
  5. package/dist/application/AnalysisContextQueries.js +19 -5
  6. package/dist/application/AnalysisSnapshotCache.js +30 -11
  7. package/dist/application/AppleAssetCatalogAnalysis.js +171 -0
  8. package/dist/application/ArtifactExtractionDestination.js +0 -12
  9. package/dist/application/ArtifactGraphConstruction.js +44 -11
  10. package/dist/application/ArtifactInventory/classify.js +7 -15
  11. package/dist/application/ArtifactInventory/hash.js +4 -2
  12. package/dist/application/ArtifactInventory/policy.js +2 -17
  13. package/dist/application/ArtifactInventory/reader.js +3 -3
  14. package/dist/application/ArtifactInventory/scanCanonical.js +2 -2
  15. package/dist/application/ArtifactInventory/scanReader.js +12 -4
  16. package/dist/application/ArtifactInventory/types.js +0 -3
  17. package/dist/application/BinarySession.js +28 -43
  18. package/dist/application/BinarySessionExecution.js +37 -1
  19. package/dist/application/BinaryTargetResolver.js +50 -4
  20. package/dist/application/BrowserEvidence.js +36 -7
  21. package/dist/application/BrowserObservationService.js +17 -44
  22. package/dist/application/BrowserScenarioCaptureService.js +2 -35
  23. package/dist/application/BrowserScenarioEvidence.js +13 -9
  24. package/dist/application/CapabilityClientRequirements.js +2 -11
  25. package/dist/application/CapabilityInventory.js +21 -35
  26. package/dist/application/ClientConfigurationDocument.js +84 -7
  27. package/dist/application/ClientRegistrationIdentity.js +32 -0
  28. package/dist/application/ClientRegistrationStatus.js +59 -6
  29. package/dist/application/DirectAnalysis.js +37 -58
  30. package/dist/application/DirectAnalysisStatus.js +4 -4
  31. package/dist/application/Doctor.js +89 -80
  32. package/dist/application/DoctorDiagnostics.js +2 -26
  33. package/dist/application/DoctorScope.js +8 -14
  34. package/dist/application/ElectronActiveEvidence.js +10 -27
  35. package/dist/application/ElectronActiveObservationService.js +9 -36
  36. package/dist/application/ElectronBoundaryAnalysis.js +2 -0
  37. package/dist/application/ElectronBoundaryGraphNative.js +1 -1
  38. package/dist/application/ElectronEvidence.js +8 -3
  39. package/dist/application/ElectronObservationService.js +9 -25
  40. package/dist/application/EnhancedLiteralTracing.js +4 -8
  41. package/dist/application/EnhancedTools.js +15 -35
  42. package/dist/application/FilesystemSnapshot.js +7 -8
  43. package/dist/application/JavaScriptApplicationEvidenceGraph.js +2 -1
  44. package/dist/application/JavaScriptApplicationWorkflowService.js +31 -7
  45. package/dist/application/JavaScriptArtifactAnalysis.js +6 -4
  46. package/dist/application/JavaScriptArtifactFiles.js +5 -0
  47. package/dist/application/JavaScriptArtifactPathResolution.js +179 -47
  48. package/dist/application/JavaScriptRuntimeObservationEvidence.js +6 -3
  49. package/dist/application/JavaScriptRuntimeObservationService.js +9 -25
  50. package/dist/application/JavaScriptRuntimeReconciliationService.js +45 -4
  51. package/dist/application/JavaScriptSemanticGraphAsyncProjection.js +11 -0
  52. package/dist/application/JavaScriptSemanticGraphChildProcessProjection.js +11 -0
  53. package/dist/application/JavaScriptSemanticGraphDataProjection.js +11 -0
  54. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +14 -5
  55. package/dist/application/JsonFiles.js +1 -1
  56. package/dist/application/LazyAnalysisProvider.js +27 -6
  57. package/dist/application/ManagedMemberComparisonService.js +19 -6
  58. package/dist/application/NativeApiInspection.js +2 -0
  59. package/dist/application/NativeCallRoutes.js +72 -0
  60. package/dist/application/NativeDispatchMetadataInspection.js +33 -0
  61. package/dist/application/NativeUiActionTrace.js +73 -49
  62. package/dist/application/NativeValueTrace.js +320 -0
  63. package/dist/application/ProcessCaptureCapability.js +32 -5
  64. package/dist/application/ProcessCaptureEnvironment.js +9 -26
  65. package/dist/application/ProcessCaptureError.js +1 -5
  66. package/dist/application/ProcessCaptureJournal.js +3 -40
  67. package/dist/application/ProcessCaptureLifecycle.js +102 -111
  68. package/dist/application/ProcessCli.js +18 -25
  69. package/dist/application/ProcessEvidence.js +5 -7
  70. package/dist/application/ProcessFilesystemEffects.js +36 -0
  71. package/dist/application/ProcessHarness.js +41 -120
  72. package/dist/application/ProcessNormalization.js +2 -17
  73. package/dist/application/ProcessScenarioRuntimeValidation.js +76 -0
  74. package/dist/application/ReferenceSourceImport.js +3 -4
  75. package/dist/application/Setup.js +236 -84
  76. package/dist/application/SetupClientConfiguration.js +14 -9
  77. package/dist/application/SetupPlan.js +138 -86
  78. package/dist/application/SetupSkill.js +0 -1
  79. package/dist/application/SupportedClients.js +102 -21
  80. package/dist/application/Uninstall.js +31 -20
  81. package/dist/application/Update.js +93 -0
  82. package/dist/application/UpdateMaintenance.js +108 -0
  83. package/dist/application/UpdateRuntime.js +126 -0
  84. package/dist/application/runtime.js +13 -2
  85. package/dist/artifacts/ArtifactPaths.js +6 -8
  86. package/dist/artifacts/ArtifactProvider.js +94 -41
  87. package/dist/artifacts/AsarArtifactReader.js +19 -4
  88. package/dist/artifacts/KeyedArchiveReader.js +110 -0
  89. package/dist/artifacts/MachOSliceArtifactReader.js +53 -5
  90. package/dist/artifacts/ZipArtifactReader.js +18 -1
  91. package/dist/browser/BrowserScenarioSecrets.js +28 -1
  92. package/dist/browser/CdpBrowserProvider.js +36 -15
  93. package/dist/browser/CdpCaptureDocuments.js +22 -8
  94. package/dist/browser/CdpCaptureEventHandlers.js +14 -5
  95. package/dist/browser/CdpCaptureEventHelpers.js +13 -0
  96. package/dist/browser/CdpCaptureEvents.js +10 -1
  97. package/dist/browser/CdpElectronInspection.js +5 -10
  98. package/dist/browser/CdpElectronProvider.js +1 -5
  99. package/dist/browser/CdpElectronScripts.js +1 -1
  100. package/dist/browser/CdpEndpoint.js +3 -2
  101. package/dist/browser/CdpObservationSession.js +14 -10
  102. package/dist/browser/CdpPageCapture.js +1 -1
  103. package/dist/browser/CdpPageCaptureScripts.js +1 -1
  104. package/dist/browser/CdpSafeMetadata.js +5 -4
  105. package/dist/browser/CdpScreenshot.js +16 -5
  106. package/dist/browser/CdpTargetSession.js +25 -4
  107. package/dist/browser/CdpWebMcpDiscovery.js +93 -20
  108. package/dist/browser/JavaScriptRuntimeScope.js +28 -2
  109. package/dist/browser/PlaywrightBrowserScenarioProvider.js +9 -8
  110. package/dist/browser/PlaywrightElectronActiveActions.js +3 -10
  111. package/dist/browser/PlaywrightElectronActiveProvider.js +5 -5
  112. package/dist/browser/PlaywrightScenarioActions.js +1 -1
  113. package/dist/browser/PlaywrightScenarioArtifacts.js +13 -25
  114. package/dist/browser/PlaywrightScenarioBrowser.js +28 -25
  115. package/dist/browser/PlaywrightScenarioEvents.js +82 -93
  116. package/dist/browser/PlaywrightScenarioSession.js +27 -123
  117. package/dist/browser/PngVisualDiff.js +22 -3
  118. package/dist/browser/V8InspectorCaptureProjection.js +7 -1
  119. package/dist/browser/V8InspectorProvider.js +60 -7
  120. package/dist/browser/WebSourceMapFetcher.js +99 -53
  121. package/dist/cli/artifactCommands.js +56 -12
  122. package/dist/cli/coreAnalysisCommands.js +110 -0
  123. package/dist/cli/managedCommands.js +1 -31
  124. package/dist/cli/setupCommands.js +16 -14
  125. package/dist/cli/utilityCommands.js +61 -4
  126. package/dist/cli.js +5 -7
  127. package/dist/cliApplicationCommands.js +0 -83
  128. package/dist/cliBrowserAdvancedCommands.js +7 -11
  129. package/dist/cliBrowserCommands.js +15 -23
  130. package/dist/cliBrowserContext.js +3 -24
  131. package/dist/cliBrowserScenarioCommands.js +2 -10
  132. package/dist/cliCommandNames.js +82 -7
  133. package/dist/cliElectronCommands.js +10 -36
  134. package/dist/cliJavaScriptRuntimeCommands.js +6 -30
  135. package/dist/cliJsonInput.js +4 -2
  136. package/dist/cliLogging.js +16 -7
  137. package/dist/cliObservationOptions.js +1 -1
  138. package/dist/cliOutput.js +2 -4
  139. package/dist/cliProcessCommands.js +6 -33
  140. package/dist/cliSetup.js +90 -160
  141. package/dist/config/environment.js +2 -78
  142. package/dist/config/parseConfig.js +18 -109
  143. package/dist/config/parsers.js +0 -23
  144. package/dist/contracts/applicationToolContracts.js +1 -118
  145. package/dist/contracts/artifactToolContracts.js +11 -19
  146. package/dist/contracts/browserScenarioToolContracts.js +1 -5
  147. package/dist/contracts/browserToolContracts.js +9 -16
  148. package/dist/contracts/electronToolContracts.js +5 -6
  149. package/dist/contracts/enhancedInputs.js +3 -2
  150. package/dist/contracts/errorSchemas.js +16 -40
  151. package/dist/contracts/functionWorkflowToolContracts.js +2 -2
  152. package/dist/contracts/javascriptApplicationWorkflowExamples.js +2 -2
  153. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +4 -4
  154. package/dist/contracts/javascriptRuntimeReconciliationExample.js +1 -1
  155. package/dist/contracts/managedToolContracts.js +7 -4
  156. package/dist/contracts/managedWorkflowExamples.js +0 -22
  157. package/dist/contracts/managedWorkflowToolContracts.js +16 -31
  158. package/dist/contracts/nativeToolContracts.js +9 -0
  159. package/dist/contracts/promptContracts.js +6 -6
  160. package/dist/contracts/sessionToolSchemas.js +3 -3
  161. package/dist/contracts/toolContractExamples.js +4 -3
  162. package/dist/contracts/toolContracts.js +18 -7
  163. package/dist/contracts/toolEffects.js +34 -21
  164. package/dist/contracts/toolOutputSchemaGroups.js +18 -5
  165. package/dist/contracts/toolOutputSchemaPrimitives.js +9 -6
  166. package/dist/contracts/toolSchemaMetadata.js +5 -8
  167. package/dist/doctorRuntime.js +0 -41
  168. package/dist/domain/analysisErrorPresentation.js +4 -28
  169. package/dist/domain/analysisErrorProjection.js +33 -50
  170. package/dist/domain/analysisProfile.js +1 -1
  171. package/dist/domain/analysisSnapshot.js +77 -3
  172. package/dist/domain/androidApplication.js +5 -4
  173. package/dist/domain/appleApplication.js +5 -4
  174. package/dist/domain/appleAssetCatalog.js +127 -0
  175. package/dist/domain/artifactComparison.js +7 -11
  176. package/dist/domain/artifactGraph.js +8 -6
  177. package/dist/domain/artifactInspection.js +13 -12
  178. package/dist/domain/binaryTarget.js +23 -9
  179. package/dist/domain/browserObservation.js +43 -24
  180. package/dist/domain/browserObservationSchemas.js +2 -1
  181. package/dist/domain/browserScenario.js +7 -107
  182. package/dist/domain/browserScenarioCapture.js +0 -1
  183. package/dist/domain/browserScenarioCaptureValues.js +5 -4
  184. package/dist/domain/browserScenarioDiff.js +1 -3
  185. package/dist/domain/browserScenarioValues.js +16 -107
  186. package/dist/domain/bundleComparison.js +18 -17
  187. package/dist/domain/callPathSchemas.js +17 -7
  188. package/dist/domain/changedBehavior.js +2 -3
  189. package/dist/domain/comparisonSemantics.js +19 -0
  190. package/dist/domain/completionLedgerGeneration.js +3 -2
  191. package/dist/domain/conformancePackage.js +2 -1
  192. package/dist/domain/conformanceTrustGate.js +3 -5
  193. package/dist/domain/customProtocolCapture.js +2 -2
  194. package/dist/domain/digests.js +30 -0
  195. package/dist/domain/dosMz.js +83 -0
  196. package/dist/domain/electronActiveObservation.js +7 -5
  197. package/dist/domain/electronObservation.js +3 -2
  198. package/dist/domain/electronStaticAnalysisNative.js +15 -6
  199. package/dist/domain/emptyArraySchema.js +3 -0
  200. package/dist/domain/errors.js +10 -28
  201. package/dist/domain/evidence.js +5 -3
  202. package/dist/domain/evidenceCompletionLedger.js +3 -2
  203. package/dist/domain/functionComparisonNormalization.js +24 -18
  204. package/dist/domain/functionComparisonResults.js +3 -7
  205. package/dist/domain/functionComparisonSchemas.js +3 -2
  206. package/dist/domain/hopperValues.js +108 -8
  207. package/dist/domain/javascriptApplicationAnalysis.js +4 -7
  208. package/dist/domain/javascriptApplicationEvidenceSchemas.js +4 -3
  209. package/dist/domain/javascriptApplicationGraphSchemas.js +8 -7
  210. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +9 -7
  211. package/dist/domain/javascriptApplicationVersionItems.js +12 -18
  212. package/dist/domain/javascriptAstValues.js +4 -0
  213. package/dist/domain/javascriptExportShapeComparison.js +1 -6
  214. package/dist/domain/javascriptExportShapeComparisonSchemas.js +6 -10
  215. package/dist/domain/javascriptExportShapeVariants.js +15 -2
  216. package/dist/domain/javascriptFeatureTraceSchemas.js +8 -7
  217. package/dist/domain/javascriptRuntimeObservation.js +14 -2
  218. package/dist/domain/javascriptRuntimeReconciliationMatching.js +8 -0
  219. package/dist/domain/javascriptRuntimeReconciliationParsing.js +4 -2
  220. package/dist/domain/javascriptRuntimeReconciliationResult.js +6 -4
  221. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +15 -4
  222. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +19 -18
  223. package/dist/domain/javascriptRuntimeStaticCandidates.js +18 -6
  224. package/dist/domain/javascriptSemanticAnalysis.js +57 -19
  225. package/dist/domain/javascriptSemanticAsyncEffects.js +39 -40
  226. package/dist/domain/javascriptSemanticCalls.js +46 -27
  227. package/dist/domain/javascriptSemanticChildProcesses.js +43 -50
  228. package/dist/domain/javascriptSemanticDataEffectHelpers.js +91 -18
  229. package/dist/domain/javascriptSemanticDataEffects.js +22 -10
  230. package/dist/domain/javascriptSemanticGraphSchemas.js +8 -6
  231. package/dist/domain/javascriptSemanticObjects.js +13 -3
  232. package/dist/domain/javascriptSemanticProjection.js +144 -38
  233. package/dist/domain/javascriptSemanticPromises.js +14 -27
  234. package/dist/domain/javascriptSemanticQuerySchemas.js +6 -9
  235. package/dist/domain/javascriptSemanticResources.js +2 -5
  236. package/dist/domain/javascriptSemanticState.js +4 -0
  237. package/dist/domain/javascriptSemanticTraceSchemas.js +2 -1
  238. package/dist/domain/javascriptSemanticTraversal.js +13 -5
  239. package/dist/domain/javascriptSemanticValues.js +10 -9
  240. package/dist/domain/javascriptSourceParser.js +5 -1
  241. package/dist/domain/javascriptStaticAnalysisCalls.js +8 -5
  242. package/dist/domain/javascriptStaticAnalysisHelpers.js +16 -7
  243. package/dist/domain/keyedArchive.js +181 -0
  244. package/dist/domain/managedApplicationGraph.js +4 -3
  245. package/dist/domain/managedArtifact.js +2 -1
  246. package/dist/domain/managedMemberComparison.js +18 -13
  247. package/dist/domain/managedMemberComparisonCoverage.js +2 -1
  248. package/dist/domain/managedMemberComparisonItems.js +27 -7
  249. package/dist/domain/managedMemberComparisonMatch.js +22 -6
  250. package/dist/domain/managedNativeVerificationMatch.js +2 -2
  251. package/dist/domain/managedNativeVerificationSchemas.js +7 -5
  252. package/dist/domain/managedReconstruction.js +6 -5
  253. package/dist/domain/nativeApiBoundary.js +7 -0
  254. package/dist/domain/nativeDataType.js +51 -0
  255. package/dist/domain/nativeInspection.js +0 -1
  256. package/dist/domain/nativeInstruction.js +82 -0
  257. package/dist/domain/nativeInvestigationGraph.js +9 -5
  258. package/dist/domain/nativeUiObservation.js +123 -0
  259. package/dist/domain/nativeValueFlow.js +17 -0
  260. package/dist/domain/nativeValueTrace.js +64 -0
  261. package/dist/domain/objcSwiftMetadata.js +39 -0
  262. package/dist/domain/peInspection.js +1 -0
  263. package/dist/domain/processCapture.js +5 -55
  264. package/dist/domain/processCaptureExample.js +0 -9
  265. package/dist/domain/processCaptureValidation.js +13 -144
  266. package/dist/domain/processComparison.js +3 -25
  267. package/dist/domain/processObservation.js +0 -29
  268. package/dist/domain/processScenario.js +28 -228
  269. package/dist/domain/processTraceDimensionProjection.js +0 -15
  270. package/dist/domain/processTraceEvaluation.js +0 -6
  271. package/dist/domain/protocolCapture.js +8 -36
  272. package/dist/domain/reconstructionCoverage.js +3 -2
  273. package/dist/domain/reconstructionObligationLedgerSchemas.js +4 -12
  274. package/dist/domain/reconstructionReadinessSchemas.js +4 -3
  275. package/dist/domain/reconstructionVerification.js +2 -1
  276. package/dist/domain/reconstructionVerificationSchemas.js +6 -13
  277. package/dist/domain/referenceSourceClassification.js +0 -110
  278. package/dist/domain/referenceSourceGraph.js +15 -5
  279. package/dist/domain/residualUnknown.js +3 -2
  280. package/dist/domain/runtimeIdentification.js +6 -5
  281. package/dist/domain/sourceMapContents.js +5 -0
  282. package/dist/domain/sourceToBundleComparison.js +3 -10
  283. package/dist/domain/sourceToBundleComparisonSchemas.js +7 -6
  284. package/dist/domain/sourceToBundleSignals.js +9 -3
  285. package/dist/domain/staticRuntimeCorrelation.js +5 -11
  286. package/dist/domain/webBundleAnalysis.js +17 -9
  287. package/dist/domain/webBundleAnalyzer.js +1 -1
  288. package/dist/domain/webCaptureDiff.js +5 -11
  289. package/dist/domain/webCaptureDiffSchemas.js +2 -1
  290. package/dist/domain/webMcpDiscovery.js +2 -1
  291. package/dist/dotnet/ManagedMemberInspectorCore.js +15 -7
  292. package/dist/dotnet/ManagedMemberInstructionDecoder.js +57 -40
  293. package/dist/dotnet/ManagedMemberRows.js +2 -0
  294. package/dist/dotnet/ManagedMethodBodyReader.js +15 -8
  295. package/dist/dotnet/ManagedPeReader.js +2 -0
  296. package/dist/generatedMcpToolCatalog.js +1 -1
  297. package/dist/generatedPackageMetadata.js +2 -2
  298. package/dist/ghidra/GhidraAnalysisProfile.js +15 -5
  299. package/dist/ghidra/GhidraClient.js +38 -8
  300. package/dist/ghidra/GhidraFunctionValues.js +56 -20
  301. package/dist/ghidra/GhidraInstallation.js +7 -4
  302. package/dist/ghidra/GhidraInventoryValues.js +44 -9
  303. package/dist/ghidra/GhidraLauncher.js +18 -3
  304. package/dist/ghidra/GhidraProvider.js +23 -2
  305. package/dist/ghidra/GhidraRequestQueue.js +45 -4
  306. package/dist/ghidra/GhidraSessionValues.js +5 -0
  307. package/dist/hopper/HopperAnalysisProfile.js +2 -0
  308. package/dist/hopper/HopperProvider.js +29 -6
  309. package/dist/hopper/HopperTargetLease.js +18 -4
  310. package/dist/logger.js +0 -13
  311. package/dist/main/messages.js +0 -1
  312. package/dist/main/reload.js +3 -32
  313. package/dist/main/shutdown.js +1 -2
  314. package/dist/main/transport.js +0 -17
  315. package/dist/main.js +0 -10
  316. package/dist/native/AppleDispatchMetadata.js +582 -0
  317. package/dist/native/AppleObjcProtocols.js +88 -0
  318. package/dist/native/AppleSwiftVtables.js +86 -0
  319. package/dist/native/CommandRunner.js +1 -1
  320. package/dist/native/NativeHostCapabilities.js +23 -0
  321. package/dist/native/NativeMacOSProvider.js +61 -9
  322. package/dist/native/NativeMachoInspection.js +39 -6
  323. package/dist/native/NativeUiHelperRuntime.js +42 -0
  324. package/dist/native/NativeUiObservation.js +174 -0
  325. package/dist/native/parsers/codesign.js +4 -1
  326. package/dist/native/parsers/dyldInfo.js +51 -25
  327. package/dist/native/parsers/lipo.js +13 -4
  328. package/dist/native/parsers/otool.js +84 -39
  329. package/dist/native/parsers/plist.js +2 -1
  330. package/dist/process/ExecFileOutput.js +5 -1
  331. package/dist/process/ProcessOwnership.js +69 -33
  332. package/dist/process/ProcessOwnershipObservation.js +31 -12
  333. package/dist/process/ProviderProcess.js +4 -2
  334. package/dist/reference/ReferenceSourceReaderEntries.js +48 -31
  335. package/dist/reference/ReferenceSourceReaderErrors.js +24 -0
  336. package/dist/reference/ReferenceSourceReaderFile.js +11 -5
  337. package/dist/reference/ReferenceSourceReaderValidate.js +22 -8
  338. package/dist/server/createServer.js +7 -62
  339. package/dist/server/registerApplicationTools/helpers.js +2 -9
  340. package/dist/server/registerApplicationTools.js +0 -4
  341. package/dist/server/registerArtifactComparisonTool.js +1 -1
  342. package/dist/server/registerBrowserScenarioTool.js +4 -2
  343. package/dist/server/registerBrowserTools.js +7 -7
  344. package/dist/server/registerBundleComparisonTool.js +1 -1
  345. package/dist/server/registerCloseLifecycleTool.js +1 -1
  346. package/dist/server/registerElectronTools.js +10 -4
  347. package/dist/server/registerEnhancedTools.js +20 -12
  348. package/dist/server/registerEvidenceTools.js +4 -28
  349. package/dist/server/registerFunctionComparisonTool.js +1 -1
  350. package/dist/server/registerInvestigationTools.js +6 -6
  351. package/dist/server/registerJavaScriptRuntimeObservationTools.js +2 -2
  352. package/dist/server/registerManagedTools.js +28 -14
  353. package/dist/server/registerManagedWorkflowTools.js +0 -2
  354. package/dist/server/registerProcessComparisonTool.js +1 -3
  355. package/dist/server/registerSessionRecordTools.js +9 -9
  356. package/dist/server/registerSessionStatusTool.js +1 -1
  357. package/dist/server/registerSessionTools.js +28 -57
  358. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  359. package/dist/server/sessionToolPolicies.js +0 -4
  360. package/dist/server/toolResult.js +8 -10
  361. package/package.json +32 -22
  362. package/skills/reverse-engineer-anything/SKILL.md +15 -11
  363. package/skills/reverse-engineer-anything/references/evidence-workflows.md +3 -2
  364. package/skills/reverse-engineer-anything/references/javascript-applications.md +3 -2
  365. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +8 -6
  366. package/skills/reverse-engineer-anything/references/runtime-observation.md +15 -11
  367. package/dist/application/CommandShimReplay.js +0 -152
  368. package/dist/application/ConfiguredRoots.js +0 -19
  369. package/dist/application/InstrumentedJavaScriptReplayHost.js +0 -36
  370. package/dist/application/JavaScriptReplayPermission.js +0 -16
  371. package/dist/application/JavaScriptReplayPlanning.js +0 -207
  372. package/dist/application/JavaScriptReplayService.js +0 -274
  373. package/dist/application/LoopbackReplay.js +0 -389
  374. package/dist/application/LoopbackReplayRecorder.js +0 -129
  375. package/dist/application/ManagedRuntimeCorrelationService.js +0 -104
  376. package/dist/application/NodeRuntimeCharacterizationService.js +0 -191
  377. package/dist/application/PermissionAuthority.js +0 -268
  378. package/dist/application/PermissionConfiguration.js +0 -26
  379. package/dist/application/PermissionFailure.js +0 -5
  380. package/dist/application/ProcessCaptureAuthority.js +0 -24
  381. package/dist/application/ProcessCapturePermission.js +0 -13
  382. package/dist/application/ProcessCheckpoints.js +0 -178
  383. package/dist/application/ProcessReactiveCoordinator.js +0 -223
  384. package/dist/application/ProcessReactiveEffects.js +0 -153
  385. package/dist/application/ProcessReactiveHarness.js +0 -106
  386. package/dist/application/ProcessReactiveObservations.js +0 -105
  387. package/dist/application/ProjectPermissionStore.js +0 -199
  388. package/dist/application/RuntimeExecutableDiagnostics.js +0 -198
  389. package/dist/application/Upgrade.js +0 -134
  390. package/dist/browser/SensitiveTextCapture.js +0 -8
  391. package/dist/cliPolicyCommands.js +0 -185
  392. package/dist/config/browserScenario.js +0 -77
  393. package/dist/config/electronAutomation.js +0 -35
  394. package/dist/config/javascriptReplay.js +0 -41
  395. package/dist/config/managedRuntime.js +0 -25
  396. package/dist/config/passiveObservation.js +0 -87
  397. package/dist/config/permissions.js +0 -23
  398. package/dist/config/processCapture.js +0 -47
  399. package/dist/contracts/replayMachineExample.js +0 -37
  400. package/dist/domain/javascriptExportInstrumentation.js +0 -95
  401. package/dist/domain/javascriptReplay.js +0 -360
  402. package/dist/domain/managedRuntimeCorrelation.js +0 -181
  403. package/dist/domain/nodeRuntimeCharacterization.js +0 -63
  404. package/dist/domain/permissionPolicy.js +0 -176
  405. package/dist/domain/processCaptureReactiveSchema.js +0 -68
  406. package/dist/domain/processCaptureReactiveValidation.js +0 -180
  407. package/dist/domain/processReactiveCheckpointDataflow.js +0 -32
  408. package/dist/domain/processReactiveMatching.js +0 -196
  409. package/dist/domain/processReactiveRuntime.js +0 -116
  410. package/dist/domain/processReactiveScenario.js +0 -296
  411. package/dist/domain/processReactiveScenarioPreflight.js +0 -95
  412. package/dist/domain/processReactiveTransition.js +0 -187
  413. package/dist/domain/replayMachine.js +0 -320
  414. package/dist/domain/replayMachineRun.js +0 -168
  415. package/dist/domain/replayMachineRuntime.js +0 -296
  416. package/dist/domain/replayMachineValues.js +0 -84
  417. package/dist/domain/runtimeCharacterization.js +0 -84
  418. package/dist/replay/JavaScriptReplayWorker.js +0 -382
  419. package/dist/replay/JavaScriptReplayWorkerTypes.js +0 -1
  420. package/dist/replay/LinuxJavaScriptReplayRunner.js +0 -216
  421. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -121
  422. package/dist/replay/LinuxRuntimeClosure.js +0 -44
  423. package/dist/replay/LinuxSeccompPolicy.js +0 -40
  424. package/dist/replay/ReplayOutcome.js +0 -104
  425. package/dist/replay/ReplayProcessLifecycle.js +0 -96
  426. package/dist/replay/ReplaySeccompFile.js +0 -29
  427. package/dist/replay/ReplayWorkerProtocol.js +0 -58
  428. package/dist/replay/SystemJavaScriptReplayHost.js +0 -153
  429. package/dist/server/ProcessCaptureElicitation.js +0 -153
  430. package/dist/server/registerApplicationTools/characterization.js +0 -46
  431. package/dist/server/registerApplicationTools/controlledReplay.js +0 -31
  432. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +0 -29
  433. package/dist/server/registerReplayMachineTool.js +0 -14
  434. package/skills/reverse-engineer-anything/references/controlled-replay.md +0 -12
package/README.md CHANGED
@@ -13,44 +13,52 @@
13
13
  [![MCP tool catalog](https://img.shields.io/badge/MCP-tool_catalog-5c4ee5?style=flat-square)](#tool-catalog-for-investigation)
14
14
  [![Node.js 22+](https://img.shields.io/badge/Node.js-22.19%2B-339933?style=flat-square&logo=nodedotjs&logoColor=white)](https://nodejs.org/)
15
15
  [![MIT license](https://img.shields.io/badge/license-MIT-f4c430?style=flat-square)](LICENSE)
16
+ [![Discord](https://img.shields.io/discord/1556595354999332884?logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/GkcryMnJDM)
16
17
 
17
18
  [Quick start](#quick-start) · [Current status](#current-status) · [Investigation model](#the-investigation-model) · [Tool catalog](#tool-catalog-for-investigation) · [Roadmap](#roadmap) · [How it works](#how-it-works)
18
19
 
20
+ <code>npx rea-agents setup</code>
21
+
19
22
  <br />
20
23
 
21
- <code>npm install --global rea-agents && rea setup</code>
24
+ <img src="docs/assets/rea-hopper-analysis.png" alt="REA launching its analysis bridge inside Hopper while inspecting a native binary" width="1200" />
22
25
 
23
26
  <br />
24
27
 
25
- <img src="docs/assets/rea-hopper-analysis.png" alt="REA launching its analysis bridge inside Hopper while inspecting a native binary" width="1200" />
28
+ <table aria-label="REA community">
29
+ <tr>
30
+ <td align="center" width="360">
31
+ <a href="https://discord.gg/GkcryMnJDM">
32
+ <img src="docs/assets/discord.svg" height="42" alt="Discord" /><br />
33
+ <strong>Join the Reverse Engineering Community</strong>
34
+ </a><br />
35
+ <sub>Discord · Q&amp;A · Show and Tell</sub>
36
+ </td>
37
+ </tr>
38
+ </table>
39
+
40
+ <br />
26
41
 
27
42
  </div>
28
43
 
29
44
  ---
30
45
 
31
- See a feature in an app that you want in your own product? Give the app to your agent—even without its source code. With REA, the agent can investigate the feature, explain how it works, show its evidence, and build a version adapted to your stack and requirements.
46
+ See a feature in an app that you want in your own product? Ask your agent to investigate it with REA. It can inspect the app without its source code, explain how the feature works, show the evidence, and build a version for your project.
32
47
 
33
- REA gives agents one consistent way to investigate software. Today that includes deep native analysis and function dossiers through Hopper or bring-your-own Ghidra on Linux, plus an experimental Windows x64 Ghidra P0 for approved native PE applications; execution-free managed PE/CLI triage; reproducible Evidence records; controlled process capture; passive website, Electron page, and Node/Electron V8 Inspector observation; JavaScript/source-map reconstruction; and provider-neutral graphs for connecting application layers without confusing static inference with runtime observation. The longer-term toolkit extends the same agent workflow to APIs, protocols, mobile artifacts, firmware, richer runtime behavior, and differences between versions.
48
+ REA connects your agent to tools for inspecting native binaries, JavaScript and Electron apps, .NET assemblies, and websites. You can also use the same tools from your terminal. Analysis runs locally, and results include the evidence and limitations behind each conclusion.
34
49
 
35
- Reverse engineering normally makes the operator choose a tool, learn its API, move evidence between programs, and decide what to inspect next. REA gives that work to the agent through commands, skills, structured results, and repeatable investigation workflows.
50
+ Setup configures your agent and connects it to Hopper or Ghidra. If you need an analysis tool, setup can install Hopper for you.
36
51
 
37
52
  ## Just ask your agent
38
53
 
39
- Run setup once. Agent integration installs an aligned MCP registration and the
40
- bundled routing skill together:
41
-
42
- ```bash
43
- npx rea-agents setup
44
- ```
45
-
46
- Then ask:
54
+ After [setup](#quick-start), restart your agent and ask:
47
55
 
48
56
  ```text
49
57
  Understand how search works in the Notes app, show me the evidence, and build a
50
58
  similar feature for my project.
51
59
  ```
52
60
 
53
- Notes is only an example. Name any app you want to understand, or ask the agent to start with an overview.
61
+ Replace Notes with the app you want to understand, or ask for an overview first.
54
62
 
55
63
  ## The investigation model
56
64
 
@@ -79,119 +87,69 @@ REA shows how it reached its conclusions. It does not claim to recover original
79
87
  | ------------------------ | ----------------------------------------------------------------------------------------------------- |
80
88
  | **Built for agents** | Ask what an app does and let your agent inspect it instead of guessing. |
81
89
  | **CLI and MCP** | Run the same reverse-engineering capabilities from your terminal or agent. |
82
- | **Complexity handled** | REA installs and manages the reverse-engineering tools behind the scenes. |
90
+ | **Guided setup** | Configure your agent, connect an existing analysis tool, or install Hopper with your approval. |
83
91
  | **From insight to code** | Understand a feature, then build your own version in the same coding session. |
84
92
  | **Local by design** | Analysis runs on your supported local host. REA does not upload the app to a hosted analysis service. |
85
93
  | **Keeps context** | Investigate several apps without starting over for every question. |
86
94
 
87
95
  ## Quick start
88
96
 
89
- ### Run setup — recommended
90
-
91
- ```bash
92
- npx --yes rea-agents@latest setup
93
- ```
97
+ ### Run setup (recommended)
94
98
 
95
- The npm package-runner prompt, when shown, approves downloading REA for this
96
- invocation; it does not approve any setup changes. The REA wizard separately
97
- shows its complete plan and asks before applying it. Setup does not update
98
- Homebrew, Node.js, or npm. The setup command opens with the work it
99
- enables: investigate local apps from an agent, recover evidence through a
100
- deep-analysis provider, and reuse REA's guided workflow. It summarizes the
101
- detected agents, then asks which capabilities to set up: agent integration
102
- (MCP plus the matching guided workflow) and—when needed—the Hopper provider.
103
- Nothing is preselected. Choosing agent integration opens a second empty
104
- checklist for the specific detected agents that should receive a registration.
105
-
106
- `@latest` makes the requested release explicit and asks npm for the release
107
- currently published under that tag. REA does not silently replace the package
108
- version npm selected. Intentional rollbacks therefore remain available through
109
- an exact package request.
110
-
111
- REA keeps the journey inline so its history remains in the terminal. Selecting
112
- a capability does not select every detected target or authorize a change.
113
- Before anything changes, REA validates existing configuration, prints exact
114
- paths and external effects, and asks for final approval with **No** as the
115
- default. The screen keeps the available keys visible while you choose; Ctrl-C
116
- and declining leave the system unchanged.
117
-
118
- REA detects Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, and Devin. It configures the first six when detected; Devin is reported but left unchanged because it has no documented local MCP configuration boundary. Registrations are additive, backup-first, and read back after writing. You can safely rerun setup.
119
-
120
- Use `rea setup --dry-run` to inspect the plan, repeat `--client` to select exact
121
- agents, and `--accessible` for sequential vertical prompts. Machine output
122
- remains available through `--json`; prompt UI and progress go to stderr.
123
-
124
- After a successful setup, REA reports the capabilities now ready to use and a
125
- concrete next step, such as restarting a configured agent before asking it to
126
- investigate an application. It does not claim an integration or provider is
127
- ready unless setup and its final diagnostic check verified it.
128
-
129
- An optional curl wrapper installs the same CLI package and starts setup only when a terminal is available:
99
+ Set up REA with your agent:
130
100
 
131
101
  ```bash
132
- curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash
102
+ npx rea-agents setup
133
103
  ```
134
104
 
135
- Pass installer options after `bash -s --`, for example `--dry-run`, `--no-setup`, or `--version 1.0.0`. The curl wrapper never installs prerequisites or configures integrations itself. See [Installation and setup](docs/installation.md) for its exact mutation boundary.
105
+ Choose which supported agents should use REA, then review the exact paths and changes before approving. Existing REA registrations are selected by default; newly detected agents are available to select, but detection alone does not select them. Setup adds MCP access and REA's guided workflow for selected agents. Hopper is a separate optional choice with its own consent. Setup can also record an existing Ghidra installation.
136
106
 
137
- ### With an agent — recommended
107
+ Setup shows its changes before applying them and backs up existing configuration. See [Installation and setup](docs/installation.md) for requirements and setup options.
138
108
 
139
- ```bash
140
- npx --yes rea-agents@latest setup
141
- ```
109
+ ### With an agent (recommended)
110
+
111
+ After setup, restart your agent and [describe the app or feature](#just-ask-your-agent) you want to understand. Hopper can run in demo mode; if it shows a first-run prompt, choose the demo or enter an existing license.
142
112
 
143
- Choose Agent Integration in the reviewed setup plan. REA installs the pinned MCP
144
- registration and its matching routing skill as one transaction. After setup,
145
- restart the configured agent so it loads the aligned integration.
113
+ REA supports Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot CLI, and VS Code. Existing REA registrations are selected by default during setup; other detected agents remain unselected until chosen. Other agents can use the [manual MCP configuration](#manual-mcp-configuration).
146
114
 
147
- Review the setup plan, approve it if appropriate, then describe the app or feature you want to understand. Hopper can run in its free demo mode; if it shows a first-run prompt, choose the demo or enter an existing license.
115
+ ### From the terminal with npx
148
116
 
149
- ### From Terminal — no installation
117
+ After setup, run:
150
118
 
151
119
  ```bash
152
- npx --yes rea-agents@latest setup
153
120
  npx -y rea-agents@latest doctor
154
121
  npx -y rea-agents@latest analyze /Applications/Notes.app
155
122
  ```
156
123
 
157
- Review the setup plan before confirming it. Restart a configured agent so it loads REA.
124
+ ### Install the rea command
158
125
 
159
- ### From Terminal — install the `rea` command
126
+ Install the command-line interface:
160
127
 
161
128
  ```bash
162
- npm install --global rea-agents
163
- rea setup
164
- rea doctor
165
- rea analyze /Applications/Notes.app
129
+ curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash
166
130
  ```
167
131
 
168
- Update that global installation in place:
132
+ The installer adds `rea` to your system and starts setup when run in a terminal. It requires Node.js and npm to be installed already.
133
+
134
+ Alternatively, install with npm, then run setup:
169
135
 
170
136
  ```bash
171
- rea upgrade
137
+ npm install --global rea-agents
138
+ rea setup
172
139
  ```
173
140
 
174
- REA checks npm for the latest release and verifies that the running package is
175
- the global installation it will replace. Source, local, and `npx` copies report
176
- the manual `npm install --global rea-agents@latest` command instead of updating
177
- an unrelated global package.
178
-
179
- Choose either the no-install commands or the global installation. You do not need both.
180
-
181
- `npm install rea-agents` without `--global` installs `rea` only into the
182
- current project's `node_modules/.bin`; it does not add `rea` to your shell
183
- `PATH`. Use the `npx` commands above for one-off runs or `--global` when you
184
- want a shell-visible `rea` command.
141
+ Update either installation with `rea update`.
185
142
 
186
143
  ### Requirements
187
144
 
188
145
  - macOS 12 or newer
189
146
  - Ubuntu 24.04+, Fedora 41+, or 64-bit Arch Linux
190
- - Windows x64 for the experimental, Ghidra-only native PE P0 boundary
191
147
  - Node.js 22.19+ or 24.11+ (including newer releases)
192
148
  - npm; REA does not require or install a particular npm version
193
149
 
194
- Deep binary operations use [Hopper](https://www.hopperapp.com/), a separate desktop application with its own license, or a caller-selected Ghidra provider. Ghidra supplies read-only inventory, function metadata, decompilation, assembly, resolved calls, typed references, xrefs, CFG, and function dossiers; GUI state and mutations remain unavailable through that provider. Setup reuses an existing Hopper installation or an operator-supplied Ghidra installation. It never downloads Ghidra or installs Java. If neither provider is ready, interactive setup proposes Hopper; unattended Hopper installation requires `rea setup --yes --install-hopper`.
150
+ Native binary analysis requires [Hopper](https://www.hopperapp.com/) or [Ghidra](#ghidra-read-only-analysis-provider). Hopper is separate software with its own license; its demo supports analysis with vendor-defined limits. REA can use Ghidra that you have already installed.
151
+
152
+ Windows Ghidra support is experimental and currently unavailable. The required Windows process ownership, private-directory permissions, and safe-path checks are not implemented. See [Windows Ghidra P0](docs/windows-ghidra-p0.md) for the remaining requirements.
195
153
 
196
154
  If something is not working, run:
197
155
 
@@ -199,13 +157,13 @@ If something is not working, run:
199
157
  npx -y rea-agents@latest doctor
200
158
  ```
201
159
 
202
- `rea doctor --json` is read-only and distinguishes unsupported hosts, missing dependencies, a missing local analysis engine, configuration drift, and healthy checks. Paid-license activation is optional: on Linux, REA runs the supported Hopper demo build on a private Xvfb display and selects Hopper's offered demo mode for each analysis session.
160
+ `doctor` checks your host, dependencies, analysis tools, and agent configuration without changing them. Use `--json` for structured diagnostics.
203
161
 
204
162
  ### Linux installation and troubleshooting
205
163
 
206
- On macOS, approved setup downloads Hopper's official DMG, verifies it, and installs the app into `~/Applications` without Homebrew or administrator privileges. Hopper may show its demo or license prompt when first opened; no manual drag-and-drop is required.
164
+ On macOS, setup can install Hopper in `~/Applications` after approval. It verifies the official download and does not need Homebrew or administrator privileges.
207
165
 
208
- On Ubuntu 24.04+, Fedora 41+, and 64-bit Arch Linux, approved setup downloads the pinned official Hopper 6.4.2 package, restricts downloads to Hopper's public origin, verifies the published size and checksum, and invokes `apt-get`, `dnf`, or `pacman` to install Hopper and the Xvfb, Python, X11, and XTEST packages used by demo sessions. When REA is not already running as root, `pkexec` presents the system authorization prompt. REA never invokes `sudo`. Demo sessions run on an isolated 1280×1024 Xvfb display. REA verifies the exact supported Hopper binary, its owned process ancestry, the expected dialog geometry, and bridge state before selecting `Try the Demo`; any mismatch fails closed.
166
+ On supported Linux distributions, setup can install Hopper and its demo-session dependencies through your system package manager. You may see a system authorization prompt. Demo sessions use a private virtual display, leaving your desktop alone. See [Hopper installation](docs/installation.md#hopper) for download verification and platform details.
209
167
 
210
168
  The normal Linux launcher is `/opt/hopper/bin/Hopper`. If Hopper was installed elsewhere:
211
169
 
@@ -220,13 +178,15 @@ If doctor reports a missing analysis engine even though the file exists, inspect
220
178
  ldd /opt/hopper/bin/Hopper | grep 'not found'
221
179
  ```
222
180
 
223
- Install the missing distribution packages and rerun `rea setup`. Linux demo automation requires `Xvfb`, Python 3, `libX11.so.6`, and `libXtst.so.6`; approved setup installs those direct runtime dependencies and does not interact with the user's desktop display. Hopper's free demo supports analysis with vendor-defined limits, and a paid license is optional. The curl installer places the `rea` command in `~/.local/bin` on Linux; add that directory to future shell `PATH` values if it is not already present.
181
+ Install the missing packages and rerun `rea setup`. The Linux demo needs Xvfb, Python 3, X11, and XTEST; approved setup installs these dependencies. If you use the curl installer, add `~/.local/bin` to your shell `PATH` when needed.
224
182
 
225
183
  REA defaults `HOPPER_LAUNCHER_PATH` to `/Applications/Hopper Disassembler.app/Contents/MacOS/hopper` on macOS and `/opt/hopper/bin/Hopper` on Linux. Explicit configuration always takes precedence.
226
184
 
227
185
  ### Ghidra read-only analysis provider
228
186
 
229
- The Ghidra adapter supports the exact official Ghidra 12.1.4 release with a 64-bit full JDK 21 on Linux x64. macOS is not an admitted Ghidra host. The adapter also provides an experimental Windows x64 P0 limited to approved native x86-64 PE applications. Download and extract those projects yourself, then configure absolute paths:
187
+ Already use Ghidra? REA can connect it to your agent on Linux x64 or macOS x64/arm64. It requires **Ghidra 12.1.4** and a **64-bit JDK 21**. On macOS, your Ghidra installation must also include the native decompiler for your architecture.
188
+
189
+ Set the installation paths, then run setup:
230
190
 
231
191
  ```bash
232
192
  export GHIDRA_INSTALL_DIR=/absolute/path/to/ghidra_12.1.4_PUBLIC
@@ -236,21 +196,15 @@ rea setup
236
196
  rea providers --json
237
197
  ```
238
198
 
239
- Doctor distinguishes missing configuration, a bad installation root, the wrong Ghidra or Java version, a JRE without `javac`, a missing `support/analyzeHeadless`, and an unsupported platform or architecture. Approved setup only copies the verified non-secret paths into detected MCP registrations; it does not modify the Ghidra installation or install/download Ghidra or Java.
240
-
241
- On Windows, set the same variables in PowerShell and run `rea doctor --json`; automated `rea setup` and Hopper installation remain unavailable. The P0 target boundary rejects DLLs, managed PE files, non-x86-64 images, mutable/hostile inputs, and non-PE formats. See the [Windows Ghidra P0 operations guide](docs/windows-ghidra-p0.md) for registration, exact limitations, CI evidence, and acceptance gates.
199
+ Setup checks the installations and saves their paths in your selected agents' configuration after approval. Ghidra and Java must already be installed; REA does not download or change them.
242
200
 
243
- REA loads its packaged Java `HeadlessScript` with `-scriptPath`, copies and digest-verifies the target in an ephemeral runtime, enables `-readOnly` and `-deleteProject`, and authenticates every request. Auto-analysis completes before operations are served; startup has a deadline, while tool requests run until a result, caller cancellation, or provider shutdown. Linux uses a mode-0600 Unix socket. Windows P0 uses token-authenticated IPv4 loopback and a token-free endpoint record because Node path-based IPC does not connect to Java AF_UNIX sockets on Windows. The bridge verifies Ghidra's imported-byte SHA-256 before serving any operation.
201
+ The adapter exposes **22 read-only operations** for functions, strings, symbols, assembly, decompilation, calls, references, instructions, and data types. These also support REA's overview, search, call-graph, and function-analysis workflows. Ghidra does not provide GUI controls or annotation changes through REA.
244
202
 
245
- The Ghidra adapter declares 19 direct and enhanced operations. Its ten inventory operations are `list_documents`, `list_procedures`, `list_strings`, `list_names`, `list_segments`, `address_name`, `procedure_address`, `resolve_containing_procedure`, `search_procedures`, and `search_strings`. It also admits `procedure_info`, `procedure_pseudo_code`, `procedure_assembly`, `read_function_instructions`, `procedure_callers`, `procedure_callees`, `procedure_references`, `xrefs`, and `analyze_function`. `read_function_instructions` is the offset-paginated fast path for raw instruction windows: it does not invoke the decompiler or whole-program name/string inventories, and is also exposed as `rea instructions`. These capabilities enable the shared Swift/Objective-C inventory workflows, `binary_overview`, `batch_decompile`, `get_call_graph`, `find_xrefs_to_name`, `trace_feature`, and complete function dossiers. Default-space addresses are lowercase `0x` hexadecimal. Other spaces, including `EXTERNAL`, use `<percent-encoded-space>:0x<hex>`. Symbol results identify primary, dynamic, external, type, and source facts; procedures distinguish external functions and thunks; strings identify charset, missing-terminator state, byte length, and value truncation; memory-block ends are exclusive and permissions come directly from Ghidra.
203
+ REA analyzes a temporary copy of the target and removes the temporary project when the session closes. Results identify what Ghidra observed and what it could not resolve. Decompilation produces pseudocode rather than the original source.
246
204
 
247
- The bridge serves operations only after auto-analysis completes. Each Program owns one persistent `DecompInterface`, and a serial FIFO keeps Ghidra API access on the owning program's thread; it has no fixed queue length or per-operation deadline. Reference results preserve Ghidra's call/jump/data/read/write/indirect/computed/external facts, while unresolved targetless flows remain explicitly unknown. Synthetic entry-point references without actionable memory sources are omitted. Pseudocode and assembly are provider-specific observations, not original source or Hopper-equivalent text. Caller cancellation and provider shutdown remain available; provider results are returned without a fixed response-size ceiling.
205
+ Ghidra also imports DOS MZ executables with an explicit 16-bit x86 real-mode profile. Function results include complete observed body ranges, distinguishing owned bytes from the enclosing span. See the [DOS analysis guide](docs/ghidra-dos.md) for addresses, packing, and verification boundaries.
248
206
 
249
- `npm run verify:ghidra` builds debug and stripped fixtures for the supported Linux x64 ELF host. Against real Ghidra 12.1.4 it validates every admitted operation, direct and indirect calls, imports/exports/thunks, typed references, strings/xrefs, multi-block CFG, cancellation, deadlines, concurrency, malformed inputs, and complete process/project cleanup. It needs a host C compiler and the Ghidra/JDK prerequisites above.
250
-
251
- `npm run verify:ghidra:cross-format` adds AArch64 ELF, x86-64 PE, and x86-64 Mach-O fixtures. This separate lane requires `clang`, LLD, and `lld-link`; use `REA_CLANG`, `REA_LLD`, or `REA_LLD_LINK` to select alternate command paths. It preflights the required toolchain before compiling fixtures.
252
-
253
- `npm run verify:ghidra:windows` uses a deterministic source-owned native x86-64 PE application and requires all 19 operations, target/snapshot/import digest linkage, authenticated loopback transport, and cleanup on a controlled Windows x64 Ghidra 12.1.4 runner. This proof does not establish Job Object ownership, private DACLs, or reparse-point-safe authority.
207
+ Windows operations remain unavailable pending the controls described in the [Windows Ghidra P0 guide](docs/windows-ghidra-p0.md). See [Ghidra installation](docs/installation.md#ghidra), [provider evaluation](docs/provider-evaluation.md), and [testing](docs/testing.md) for configuration details, coverage, and real-provider verification.
254
208
 
255
209
  To remove only REA-owned MCP registrations and the managed skill:
256
210
 
@@ -263,15 +217,15 @@ Uninstall preserves Hopper, Node.js, Evidence files, captures, unrelated skills,
263
217
 
264
218
  ### CLI or agent?
265
219
 
266
- | If you want to… | Use |
267
- | ---------------------------------------------------------------- | ------------------------------------------------------------------------- |
268
- | Ask an agent to investigate an app and build a feature | Install the skill, then talk to your agent |
269
- | Inspect or decompile one part of an app from the Terminal | `rea analyze` or `rea decompile` |
270
- | Validate, canonicalize, or compare Evidence bundles | `rea evidence-import`, `rea evidence-export`, or `rea compare` |
271
- | Map a local JavaScript/Electron application without executing it | `rea analyze PATH` or `rea analyze-javascript-application` |
272
- | Reuse immutable analysis results without relaunching a provider | Pass `--snapshot /approved/path/analysis.json` to a deep-analysis command |
273
- | Import source as historical reference | `rea import-reference-source` |
274
- | Capture or compare controlled process behavior | `rea capture-process` or `rea compare-process-captures` |
220
+ | If you want to… | Use |
221
+ | ---------------------------------------------------------------- | ------------------------------------------------------------------- |
222
+ | Ask an agent to investigate an app and build a feature | Run setup, restart your agent, then describe the task |
223
+ | Inspect or decompile one part of an app from the Terminal | `rea analyze` or `rea decompile` |
224
+ | Validate, canonicalize, or compare Evidence bundles | `rea evidence-import`, `rea evidence-export`, or `rea compare` |
225
+ | Map a local JavaScript/Electron application without executing it | `rea analyze PATH` or `rea analyze-javascript-application` |
226
+ | Reuse immutable analysis results without relaunching a provider | Pass `--snapshot /path/to/analysis.json` to a deep-analysis command |
227
+ | Import source as historical reference | `rea import-reference-source` |
228
+ | Capture or compare controlled process behavior | `rea capture-process` or `rea compare-process-captures` |
275
229
 
276
230
  ```bash
277
231
  rea evidence-import /absolute/path/to/evidence/bundle.json
@@ -279,8 +233,7 @@ rea evidence-export /absolute/path/to/evidence/bundle.json /absolute/path/to/evi
279
233
  rea compare /absolute/path/to/evidence/left.json /absolute/path/to/evidence/right.json
280
234
  ```
281
235
 
282
- JavaScript application analysis reads the selected directory or ASAR directly;
283
- the command uses the supplied path directly:
236
+ Analyze a JavaScript application directory or ASAR without executing it:
284
237
 
285
238
  ```bash
286
239
  rea analyze /absolute/path/to/releases/app.asar --json
@@ -292,25 +245,15 @@ static JavaScript application provider when neither `--provider` nor
292
245
  `--snapshot` is supplied. Both routes return the analysis and its Evidence
293
246
  context inline.
294
247
 
295
- Historical source import takes the directory directly and never treats source
296
- as current behavioral authority:
248
+ Import an older source tree as a reference. REA keeps it separate from observations of the current app:
297
249
 
298
250
  ```bash
299
251
  rea import-reference-source /absolute/path/to/source
300
252
  ```
301
253
 
302
- Imports read the path supplied to the command and validate every Evidence ID and manifest. Exports never replace an existing file unless `--overwrite` is explicit.
254
+ Imports read the path supplied to the command. File names do not cause automatic omissions; files are represented by hashes and metadata. To exclude selected paths, set `REA_REFERENCE_SECRET_PATTERNS_JSON` to a JSON string array of ignore patterns. Exports never replace an existing file unless `--overwrite` is explicit.
303
255
 
304
- Provider-neutral analysis snapshots persist successful, immutable REA calls and
305
- their Evidence records. They are exact caches rather than Hopper databases:
306
- REA reuses a v2 entry only when the binary digest, kind, format, architecture,
307
- operation parameters, concrete provider build, and canonical analysis-profile
308
- digest match. Hopper loader defaults and configured overrides are normalized by
309
- the Hopper adapter and committed to that profile, so overrides occupy a distinct
310
- safe cache partition instead of disabling snapshots. Cursor-dependent and
311
- mutating calls are never cached. Snapshot files can contain proprietary analysis
312
- results and local paths, so REA keeps them local and writes them with owner-only
313
- permissions. The caller supplies the snapshot path directly:
256
+ Use a snapshot to save successful analysis results and reuse them on later runs. REA reuses a result only when the target bytes, operation, parameters, analysis tool, and settings match. It does not cache changes or cursor-dependent calls. Snapshot files stay local and use owner-only permissions.
314
257
 
315
258
  ```bash
316
259
  rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json
@@ -318,10 +261,10 @@ rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json
318
261
  rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json
319
262
  ```
320
263
 
321
- Exact CLI evidence replays happen before any provider process starts. In MCP sessions,
264
+ Exact CLI cached-evidence reads happen before any provider process starts. In MCP sessions,
322
265
  pass `snapshot_path` to `open_binary` to import a snapshot atomically while
323
266
  opening its matching target; MCP providers may still start before a cached call
324
- is replayed. Pass `snapshot_path` and, when required, `overwrite: true` to
267
+ result is returned. Pass `snapshot_path` and, when required, `overwrite: true` to
325
268
  `close_binary` to save atomically before Hopper resources are released. If the
326
269
  save fails, REA deliberately leaves the session open.
327
270
 
@@ -343,7 +286,7 @@ REA gives the agent a clear path from that request to working code:
343
286
  | 5 | Decompiles the relevant routines | `procedure_pseudo_code`, `procedure_assembly`, `batch_decompile` |
344
287
  | 6 | Builds the feature in your project | code adapted to your stack, product, and requirements |
345
288
 
346
- REA handles the app analysis in steps 1–5. The agent performs step 6 with its normal file-editing and test tools, using what it learned about the app.
289
+ REA handles the app analysis in steps 1 through 5. The agent performs step 6 with its normal file-editing and test tools, using what it learned about the app.
347
290
 
348
291
  ## What agents can do
349
292
 
@@ -356,155 +299,119 @@ REA handles the app analysis in steps 1–5. The agent performs step 6 with its
356
299
  - Analyze Swift and Objective-C metadata without manually untangling every mangled symbol.
357
300
  - Leave names, comments, and bookmarks in Hopper so human and agent analysis reinforce each other.
358
301
 
302
+ See [native investigation](docs/native-investigation.md) for keyed archives, instruction/call/type primitives, typed dispatch metadata, value traces and native desktop observation.
303
+
359
304
  ## Tool catalog for investigation
360
305
 
361
- | Tool family | Count | Examples |
362
- | ------------------------- | ----: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
363
- | Native inspection | 36 | procedures, pseudocode, assembly, strings, names, segments, callers, callees, xrefs, annotations, bounded byte reads, file-offset translation |
364
- | Investigation workflows | 14 | `binary_overview`, `analyze_function`, `inspect_native_api`, `inspect_native_dispatch_metadata`, `batch_decompile`, `trace_feature`, `trace_native_investigation`, exact string-to-code lookup, bounded call paths, call graphs, Swift and Objective-C discovery |
365
- | Native macOS utilities | 5 | Mach-O metadata, code signatures, plists, architectures, Swift demangling; Hopper-free and provenance-bearing |
366
- | Artifact graph | 3 | complete inline inspection of directories and supported packages, compiled Interface Builder UI graph decoding, plus explicitly selected extraction into an absent owned tree |
367
- | Managed PE/CLI | 8 | PE/CLI identity, metadata members, CIL hashes, P/Invoke/native-boundary declarations and verification, application-graph projection, decompiler reconstruction import, token remapping, runtime-correlation plans, and version comparison |
368
- | Browser observation | 9 | exact-origin passive CDP capture, bundle and source-map analysis, WebMCP discovery, session timelines, capture diff, visual evidence, and bounded Playwright scenarios |
369
- | Electron analysis | 5 | passive root-confined observation, static application mapping, evidence-backed static/runtime reconciliation, and provider-owned click/wait scenarios |
370
- | JavaScript runtime | 2 | approved attach-only Node/Electron Inspector target discovery plus bounded script and execution-context observation without evaluation or instrumentation |
371
- | Application workflows | 10 | complete cross-layer traces, unique-only version matching, historical-source to bundle mapping, static export return-shape comparison, approved Linux-isolated extracted-module replay, managed-runtime characterization, reconstruction coverage closure, and deterministic obligation ledgers |
372
- | Workspace and observation | 22 | target lifecycle, inline Evidence bundle retrieval, aggregate navigation/address context, direct finite replay-machine evaluation, process/artifact/function comparison, evidence-linked residual-unknown lifecycle |
373
-
374
- The public interface describes what the agent is trying to learn. Providers decide how to answer. macOS utilities handle common semantic inspection without launching Hopper; Hopper handles deeper native analysis; the process harness implements controlled behavioral capture.
306
+ | Tool family | Count | Examples |
307
+ | ------------------------- | ----: | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
308
+ | Native inspection | 39 | functions, pseudocode, assembly, strings, symbols, calls, references, annotations, byte reads, and file offsets |
309
+ | Investigation workflows | 14 | app overviews, function dossiers, native APIs and dispatch, batch decompilation, feature traces, call paths, call graphs, Swift and Objective-C discovery |
310
+ | Native macOS utilities | 7 | Mach-O metadata, code signatures, plists, architectures, and Swift demangling without launching Hopper |
311
+ | Artifact graph | 5 | directory and package inventories, compiled Interface Builder files, Apple asset catalogs, and extraction |
312
+ | Managed PE/CLI | 7 | .NET identity, metadata, CIL instructions, native dependencies, reconstruction imports, and build comparisons |
313
+ | Browser observation | 9 | page structure, network metadata, scripts, source maps, WebMCP discovery, screenshots, and capture comparisons |
314
+ | Electron analysis | 5 | renderer observation, static app mapping, and static/runtime reconciliation |
315
+ | JavaScript runtime | 2 | Node/Electron Inspector target discovery, script locations, and execution-context events |
316
+ | Application workflows | 7 | cross-layer feature traces, build comparisons, historical source mapping, static return-shape comparison, and reconstruction checks |
317
+ | Workspace and observation | 21 | sessions, evidence bundles, navigation context, process/artifact/function comparisons, and open-question tracking |
318
+
319
+ The public interface describes what the agent is trying to learn. Providers decide how to answer. macOS utilities handle common semantic inspection without launching Hopper; Hopper handles deeper native analysis; the process harness records direct behavioral captures.
375
320
 
376
321
  ## Current status
377
322
 
378
- REA is already useful for native application, browser, and Electron investigation on supported macOS and Linux hosts, plus the bounded Windows Ghidra P0 described above:
379
-
380
- - Open Mach-O, ELF, PE, `.app`, ZIP, APK, IPA, ASAR, plist, JavaScript, source-map, and generic analysis-database targets; Hopper remains the only adapter that accepts legacy `.hop` databases.
381
- - Discover deep-analysis candidates without starting them, choose deterministically, and retain one immutable provider/profile binding until an explicit switch or close; provider failures never trigger transparent fallback.
382
- - Attach to a user-owned Chrome-family browser over a configured loopback CDP endpoint; capture exact-origin web structure, safe metadata, approved value-free payload shapes, bundle/source-map evidence, WebMCP declarations, user-action timelines, capture diffs, and explicitly approved screenshots without navigation or JavaScript evaluation.
383
- - Inspect Electron `file://` renderer pages through a separate canonical-root permission boundary without invoking Electron APIs; script contents remain separately approved and byte bounded.
384
- - Attach to one exact approved Node or Electron V8 Inspector target and retain bounded `scriptParsed` plus execution-context lifecycle metadata without evaluation, breakpoints, resume, source reads, or instrumentation. require/import edges, EventEmitter activity, Electron IPC, PID identity, and role identity remain unknown. See [passive Node and Electron runtime observation](docs/javascript-runtime-observation.md).
385
- - Validate and canonically serialize a provider-neutral [JavaScript Application Graph](docs/javascript-application-graph.md) spanning packages, ASAR entries, Electron roles, JavaScript/source-map entities, browser/runtime instances, IPC, endpoints, storage, and native add-ons. This shipped domain contract performs no extraction or I/O by itself.
386
- - Reconstruct static package, entrypoint, Webpack/Rspack module, import, worker, endpoint, storage, source-map, BrowserWindow, preload, contextBridge, IPC, utility-process, and native-add-on structure from a selected local directory or ASAR through `analyze_javascript_application` or `rea analyze-javascript-application`. Results and Evidence context are returned inline. The AST-only [application service](docs/javascript-artifact-reconstruction.md) never executes bootstrap code, pairs only unique exact literal IPC channels, and reports dynamic or ambiguous channels as unresolved.
387
- - Reconcile that static graph with existing passive web or Electron Evidence through `reconcile_javascript_runtime` or `rea reconcile-javascript-runtime`. Exact captured bytes outrank caller-declared file/URL mappings; target, frame, script, worker, cache, and asset ambiguity stays explicit, source-map authority stays separate, and a module resident in an observed bundle is never reported as executed. See [JavaScript static/runtime reconciliation](docs/javascript-runtime-reconciliation.md).
388
- - Trace a literal route, string, API, IPC channel, module, or native export through the complete reachable graph in authenticated application Evidence, then hand exact native artifact digests and requested exports to retained Ghidra or Hopper Evidence without automatic provider switching. Compare application versions using unique-only digest, source-map, structural, and semantic tiers; map a committed historical source inventory to bundle nodes with explicit digest and path scores; compare one exact JavaScript export's static return shapes through unique literal discriminants and JSON Pointer changes. Duplicate, dynamic, incomplete, ambiguous, and truncated facts stay unknown. See [cross-layer JavaScript application workflows](docs/javascript-application-workflows.md).
389
- - Classify PE/CLI managed artifacts with `inspect_managed_artifact` / `rea inspect-managed-artifact`, inspect file-backed metadata members, signatures, raw CIL hashes, decoded-instruction-tuple fingerprints, separately reported exception regions, call edges, and field-access anchors with `inspect_managed_members` / `rea inspect-managed-members`, inventory declared ModuleRef/ImplMap/PInvoke and non-IL method boundary indicators with `inspect_managed_native_boundaries` / `rea inspect-managed-native-boundaries`, then compare two authenticated member observations with `compare_managed_members` / `rea compare-managed-members`. `verify_managed_native_boundaries` / `rea verify-managed-native-boundaries` checks managed P/Invoke declarations against authenticated native export or function Evidence while keeping verified, inferred, contradicted, and unresolved states distinct. The comparison treats build-local tokens as build-local and uses unique decoded-CIL/signature and structural method-shape tiers, never names alone; tuple fingerprints do not themselves resolve tokens or fully commit control flow. `project_managed_application_graph` / `rea project-managed-application-graph` projects authenticated managed artifact/member/native-boundary Evidence into the existing application graph for cross-layer feature tracing. `import_managed_reconstruction` / `rea import-managed-reconstruction` admits user-supplied decompiler C#/IL/pseudocode as analyst inference only after exact artifact SHA-256, MVID, signature, and decoded-IL commitments match. Separately, `plan_managed_runtime_correlation` / `rea plan-managed-runtime-correlation` can admit a default-disabled, permission-gated runtime-correlation plan locked to the same build evidence. These paths never load the assembly, resolve CLR dependencies, execute target code, run a decompiler, or translate managed tokens into native addresses; complete normalized-CIL semantics, native-body bridge mapping, and an actual runtime executor remain future managed-code contracts.
390
- - Configure `REA_ILSPY_CMD_PATH=/absolute/path/to/ilspycmd` only when you want
391
- doctor and `verify:managed` to inspect a bring-your-own ILSpy command as a
392
- real reconstruction oracle. REA does not install ILSpy and does not treat
393
- decompiler text as canonical metadata or CIL observation.
394
- - Traverse content-addressed artifact graphs without extraction; on macOS, read-only DMG traversal additionally requires `native_mount_approved: true` and `REA_ARTIFACT_NATIVE_MOUNT_ENABLED=true`. Materialize only approved occurrences into absent output roots.
395
- - Build function dossiers with pseudocode, assembly, CFG edges, comments, calls, references, strings, and names.
396
- - Search and trace features across symbols, strings, metadata, references, and call paths.
397
- - Record every successful result as deterministic Evidence with artifact and provider identity, confidence, authority, limitations, and locations.
398
- - Export and import evidence bundles across sessions.
399
- - Capture approved PTY scenarios as Process Capture Evidence, including committed run manifests, raw and rendered terminal frames, scripted interactions, descendant settlement, named filesystem checkpoints, deterministic command shims, and loopback HTTP/WebSocket exchanges.
400
- - Validate finite replay machines without launching a target through `run_replay_machine` or `rea run-replay-machine`; ordered events return typed decisions, actions, captured aliases, transition journals, final state, and exact limit use without echoing request or captured values.
401
- - Compare complete artifact inventories by stable path, content, metadata, and relations; incomplete evidence never implies equivalence.
402
- - Compare explicit function dossiers across text, calls, references, strings, and address-normalized CFG topology with per-facet unknowns.
403
- - Compare canonical Evidence bundles by exact membership, explicit observation pairs, and residual-unknown histories without turning omissions into behavioral absence.
404
- - Aggregate runtime comparisons into observed behavior changes while keeping static artifact/function differences labeled as candidates.
405
- - Build Evidence-cited direct call paths by exact address without treating missing dossiers as graph leaves.
406
- - Correlate exact static/runtime findings through explicit hypotheses without claiming causality from cochange.
407
- - Verify finite behavioral and structural reconstruction specifications with pass, fail, and unknown kept distinct.
408
- - Track residual unknowns through immutable CAS revisions, evidence-qualified resolution, contradictions, probes, and validated dependency relationships.
409
- - Evidence-producing workflows record returned residual uncertainty as residual unknowns linked to their result Evidence. Errors without supporting Evidence do not create registry records.
410
- - Start six [guided MCP workflows](docs/mcp-prompts.md) with live, session-aware completion for documents, procedures, providers, evidence, captures, artifact IDs, and active unknowns.
411
-
412
- Hopper is the first provider, not the boundary of the project. Some current workflows still require Hopper and macOS; every evidence record identifies the provider and limitations behind its result.
323
+ REA supports native application, JavaScript, Electron, .NET, and browser investigation on macOS and Linux. Individual tools have platform and runtime prerequisites; use `rea capabilities` to check what is available on your host.
324
+
325
+ - **Native binaries:** Open Mach-O, ELF, PE, and Mac `.app` targets through Hopper or Ghidra. Inspect functions, strings, assembly, decompilation, calls, and references. Hopper also accepts `.hop` databases and supports annotations.
326
+ - **Packages and resources:** Inspect directories, ZIP, APK, IPA, ASAR, plists, compiled Interface Builder files, and Apple asset catalogs. Artifact requests name the input and requested extraction or traversal directly; macOS DMG traversal also requires the host's native mounting support.
327
+ - **JavaScript and Electron:** Map modules, imports, source maps, routes, IPC channels, storage, and native add-ons without running the app. Compare builds and trace a feature across the recovered graph. Dynamic and ambiguous relationships remain unresolved. See [JavaScript application workflows](docs/javascript-application-workflows.md).
328
+ - **Websites:** Inspect a selected page in an existing Chrome-family browser. Capture page structure, network metadata, script evidence, and screenshots requested by the call. Passive observation does not navigate or execute page JavaScript. See [browser observation](docs/browser-observation.md).
329
+ - **Electron and Node runtime observation:** Inspect selected Electron pages or attach to a Node/Electron V8 Inspector target. Inspector observation records script locations and execution-context events; it does not infer imports, IPC activity, or which modules executed. See [runtime observation](docs/javascript-runtime-observation.md).
330
+ - **.NET assemblies:** Inspect metadata and CIL instructions, compare builds, and check declared native dependencies without loading or running the assembly. Imported decompiler output is labeled as analyst inference. See [managed-code analysis](docs/managed-code-analysis.md).
331
+ - **Controlled behavior capture:** Run process, browser, or Electron scenarios with the target, actions, and lifecycle declared in each request, then compare the resulting evidence. Missing observations cannot establish that two runs behaved the same way.
332
+ - **Evidence and comparison:** Save results with artifact identity, provider, locations, confidence, and limitations. Export or import bundles, compare artifacts and functions, and connect static findings to runtime observations without claiming causality from correlation.
333
+ - **Open questions:** Track unresolved findings, contradictions, and follow-up probes. Reconstruction checks report pass, fail, or unknown rather than treating missing evidence as a pass.
334
+ - **Guided workflows:** Start six [MCP investigation workflows](docs/mcp-prompts.md) with suggestions based on your current session.
335
+
336
+ Windows Ghidra operations are currently unavailable. Hopper-only features, such as GUI controls and annotations, are not available through Ghidra.
413
337
 
414
338
  ### Website observation with CDP
415
339
 
416
- REA can inspect an already-running Chrome-family browser that you own. Browser observation is disabled by default and requires a literal loopback CDP endpoint plus exact approved page origins:
340
+ REA can inspect an already-running Chrome-family browser through a literal loopback CDP endpoint. Each request names the endpoint and target; an optional origin filter can narrow discovery:
417
341
 
418
342
  ```bash
419
- export REA_BROWSER_OBSERVE_ENABLED=true
420
- export REA_BROWSER_CDP_ENDPOINTS_JSON='["http://127.0.0.1:9222"]'
421
- export REA_BROWSER_ALLOWED_ORIGINS_JSON='["http://127.0.0.1:3000"]'
422
-
423
- rea list-browser-targets http://127.0.0.1:9222 --approved --json
424
- rea inspect-web-page http://127.0.0.1:9222 TARGET_ID --approved --json
343
+ rea list-browser-targets http://127.0.0.1:9222 --json
344
+ rea inspect-web-page http://127.0.0.1:9222 TARGET_ID --json
425
345
  ```
426
346
 
427
- All eight browser tools expose the same Evidence contracts over CLI and MCP. Inspection is passive: REA does not evaluate page JavaScript, navigate, click, close the page, or close the browser. Query values, credentials, cookies, authorization headers, storage values, and raw JSON or WebSocket values are never retained. Separately approved captures can retain bounded redacted console primitives, value-free JSON/WebSocket shapes, script sources, accessibility text, or screenshot pixels. Existing activity before attach is explicitly unavailable. See [Website observation with CDP](docs/browser-observation.md) for browser startup, schemas, limits, and the threat model.
347
+ The eight passive browser tools work through both CLI and MCP. They inspect the selected page without navigating, clicking, or evaluating its JavaScript. Credentials, cookies, authorization headers, and raw payload values are not retained. A request selects whether to include script sources, accessibility text, screenshots, or console and payload summaries. REA cannot observe activity that happened before it attached. See [browser observation](docs/browser-observation.md) for browser startup, capture options, and limits.
428
348
 
429
349
  ### Controlled browser scenarios
430
350
 
431
- `capture_browser_scenario` is a separate, explicitly mutating browser boundary.
432
- It runs only the fixed, versioned scenario vocabulary through Playwright and
433
- returns step-indexed Evidence for screenshots, DOM, accessibility, URL/history,
434
- storage, console/errors, network, WebSockets, frames, workers, popups, and
435
- cancelled downloads. Missing or truncated sections can never support equality
436
- claims.
351
+ `capture_browser_scenario` runs a caller-declared sequence of browser actions through
352
+ Playwright. Unlike passive observation, it can interact with the page. Each
353
+ step records evidence such as screenshots, page structure, navigation, and
354
+ network activity. Missing or truncated observations cannot establish that two
355
+ runs behaved the same way.
437
356
 
438
357
  ```bash
439
- export REA_BROWSER_SCENARIO_ENABLED=true
440
- export REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON='["/usr/bin"]'
441
- export REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON='["http://127.0.0.1:9222"]'
442
- export REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON='["http://127.0.0.1:3000"]'
443
- export REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON='["REA_TEST_PASSWORD"]'
444
-
445
358
  rea capture-browser-scenario ./scenario.json --json
446
359
  ```
447
360
 
448
361
  Launch mode owns a temporary browser profile and removes it after terminating
449
362
  the launched browser. Connect mode accepts one exact loopback CDP target and
450
- disconnects without closing the external browser. Automation has no default
451
- grant: use the shared project/session policy, or set
452
- `REA_BROWSER_SCENARIO_AUTO_GRANT=true` only for a trusted unattended
453
- environment. Scenario JSON contains secret references and environment-variable
454
- names, never secret values. See the
363
+ disconnects without closing the external browser. The request supplies the
364
+ selected executable or endpoint, actions, and any origin or environment
365
+ selections needed by the scenario. Scenario JSON contains secret references and
366
+ environment-variable names, never secret values. See the
455
367
  [browser scenario contract](docs/browser-scenario-contract.md).
456
368
 
457
369
  ### Node and Electron V8 Inspector observation
458
370
 
459
- Attach-only JavaScript runtime observation is separately disabled by default:
371
+ Node and Electron runtime observation attaches to an existing Inspector target named in the request:
460
372
 
461
373
  ```bash
462
- export REA_V8_INSPECTOR_OBSERVE_ENABLED=true
463
-
464
374
  rea list-javascript-runtime-targets http://127.0.0.1:9229 --json
465
375
  rea observe-javascript-runtime http://127.0.0.1:9229 TARGET_ID \
466
376
  --runtime-kind node --json
467
377
  ```
468
378
 
469
- REA sends only `Runtime.enable` and `Debugger.enable`. It retains validated
470
- script locations and execution-context lifecycle events;
471
- require/import edges, EventEmitter activity, Electron IPC, PID identity, and
472
- Electron role identity stay explicit unknowns. See
473
- [passive Node and Electron runtime observation](docs/javascript-runtime-observation.md).
379
+ REA records script locations and execution-context events without evaluating
380
+ code or setting breakpoints. These observations do not establish import
381
+ relationships, event activity, IPC, process identity, or Electron roles. See
382
+ [Node and Electron runtime observation](docs/javascript-runtime-observation.md)
383
+ for the exact coverage.
474
384
 
475
385
  Exact package, tool-family, provider, setup-client, schema, and CLI facts are generated from source in [`docs/product-catalog.json`](docs/product-catalog.json). PR CI verifies this catalog, narrative documentation, generated schemas, and a clean TypeDoc render.
476
386
 
477
387
  ## Roadmap
478
388
 
479
- REA is growing into a toolkit for understanding software across static artifacts and observed behavior. The [current status](#current-status) above is the shipped baseline; the items below are planned work.
389
+ The [current status](#current-status) section describes shipped capabilities. These are the next areas of work.
480
390
 
481
391
  ### Now
482
392
 
483
- 1. **Maintain truthful product metadata** — extend the shipped canonical catalog and drift checks whenever versions, tools, providers, schemas, setup clients, or CLI capabilities change.
484
- 2. **Cross-provider conformance growth** — add source-owned architectures and difficult indirect/thunk cases while preserving semantic comparison and provider-specific text boundaries.
393
+ 1. **Keep documentation accurate:** update the generated catalog and documentation checks when tools, providers, setup options, or versions change.
394
+ 2. **Test more native binaries:** expand architecture and indirect-call coverage across Hopper and Ghidra.
485
395
 
486
396
  ### Next
487
397
 
488
- 1. **Controlled replay conformance growth** — extend the shipped Linux extracted-module sandbox with more source-owned hostile fixtures and cross-kernel conformance; browser and Electron scenarios remain separately permissioned authorities.
489
- 2. **Broader application graph evidence** — extend authenticated cross-layer traces with additional static extractors and additional runtime authorities.
490
- 3. **Professional managed-code analysis** — extend shipped PE/CLI triage, CIL evidence, managed/native declaration inventory, source-owned conformance, and obfuscation-resistant comparisons toward verified native-provider composition under the accepted [managed-code boundary](docs/managed-code-analysis.md).
491
- 4. **Deterministic behavior harnesses** — extend process ownership, protocol fixtures, filesystem observation, reconnects, and cross-version behavioral comparison.
398
+ 1. **Connect more application layers:** add static extractors and runtime observations to feature traces.
399
+ 2. **Extend .NET analysis:** improve comparisons of obfuscated assemblies and connect managed findings to verified native analysis. See the [managed-code guide](docs/managed-code-analysis.md).
400
+ 3. **Compare more runtime behavior:** expand process, protocol, filesystem, reconnect, and version-comparison coverage.
492
401
 
493
402
  ### Later
494
403
 
495
- 1. **Broader controlled application interaction** — extend the separately authorized browser and Electron scenario surfaces beyond the current bounded click/wait actions without widening passive observation or extracted-module replay authority.
496
- 2. **Native runtime observation** — approval-gated LLDB, Frida, system logs, process/filesystem observers, and native API tracing.
497
- 3. **Additional providers and targets** — evaluate IDA/Hex-Rays, Binary Ninja, Rizin, LIEF, Windows-native providers, mobile artifacts, firmware, document formats, and other software-defined systems.
498
-
499
- New providers must produce the same evidence and safety metadata as existing capabilities before they become part of the public workflow. Once REA has multiple optional toolchains, setup can become capability-selective; the consent rules for that future work are recorded in the [installation roadmap](docs/roadmap.md).
404
+ 1. **Expand browser and Electron interaction:** add scenario actions beyond the current click and wait operations.
405
+ 2. **Observe native apps at runtime:** explore LLDB, Frida, system logs, and native API tracing.
406
+ 3. **Evaluate more tools and targets:** assess IDA/Hex-Rays, Binary Ninja, Rizin, LIEF, Windows-native tools, mobile apps, and firmware.
500
407
 
501
- See the [static-analysis provider evaluation](docs/provider-evaluation.md) for the shipped Ghidra function-analysis boundary, remaining admission gates, and provider comparison matrix; [ADR-0001](docs/adr/0001-provider-selection-and-analysis-profiles.md) for binding, selection, profile, snapshot, and compatibility decisions; the [controlled replay guide](docs/controlled-javascript-replay.md) plus [ADR-0002](docs/adr/0002-controlled-replay-authority-and-sandbox.md) for the shipped JavaScript replay boundary; and [ADR-0003](docs/adr/0003-managed-code-evidence-and-provider-boundary.md) for the managed-code evidence and provider design.
408
+ Setup already lets you choose agent integration and Hopper installation. Support for installing additional analysis tools is future work, described in the [installation roadmap](docs/roadmap.md).
502
409
 
503
- See the [native UI and dispatch investigation guide](docs/native-investigation.md) for compiled Interface Builder decoding, symbol-derived metadata limits, and the current p-code value-flow boundary.
410
+ See [provider evaluation](docs/provider-evaluation.md) for coverage and remaining requirements, and the [native investigation guide](docs/native-investigation.md) for UI, dispatch, and value-flow analysis.
504
411
 
505
412
  ## Using REA with other agents
506
413
 
507
- Setup detects Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, and Devin. It automatically configures the first six when present; detected Devin installations are reported but left unchanged. Any agent that supports local MCP servers can use REA with the configuration below.
414
+ Setup offers supported agent integrations for selection. Existing REA registrations are selected by default; newly detected agents remain unselected until chosen. Any agent that supports local MCP servers can use the configuration below.
508
415
 
509
416
  ### Manual MCP configuration
510
417
 
@@ -515,7 +422,7 @@ Setup detects Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf,
515
422
  "mcpServers": {
516
423
  "rea": {
517
424
  "command": "npx",
518
- "args": ["-y", "rea-agents@3.2.0", "mcp"]
425
+ "args": ["-y", "rea-agents@4.0.0", "mcp"]
519
426
  }
520
427
  }
521
428
  }
@@ -524,11 +431,11 @@ Setup detects Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf,
524
431
  <!-- x-release-please-end -->
525
432
 
526
433
  Persistent registrations should use one exact package version. `rea setup`
527
- maintains that pin, upgrades the bundled skill at the same time, and gives Codex
528
- a 30-second startup allowance for a cold package-runner start. An interactive
529
- `rea upgrade` opens the updated setup plan after installing the new executable;
530
- structured or non-interactive upgrades tell you to run that sync explicitly.
531
- Restart clients whose approved registration changed.
434
+ maintains that pin, updates the bundled skill at the same time, and gives Codex
435
+ a 30-second startup allowance for a cold package-runner start. `rea update`
436
+ installs an exact release and verifies the new executable. It returns an
437
+ unapplied maintenance plan for existing REA integrations, with a scoped setup
438
+ command to review and approve their changes. Restart affected agents afterward.
532
439
 
533
440
  MCP clients that support prompts can also discover six ordered investigation
534
441
  workflows through `prompts/list`. Their optional identifier arguments use the
@@ -584,7 +491,7 @@ Or install the `rea` command globally:
584
491
  ```bash
585
492
  npm install --global rea-agents
586
493
  rea --help
587
- rea upgrade
494
+ rea update
588
495
  rea mcp
589
496
  ```
590
497
 
@@ -592,8 +499,7 @@ REA accepts a Mac `.app` folder directly. If an agent cannot find an app by name
592
499
 
593
500
  ### Choosing a deep-analysis provider
594
501
 
595
- Every deep-analysis open resolves a provider before creating its client. The
596
- same selector and precedence apply to the CLI, MCP, and startup configuration:
502
+ Choose which analysis tool to use from the CLI:
597
503
 
598
504
  ```bash
599
505
  rea providers --json
@@ -610,47 +516,27 @@ For MCP, pass the optional selector on `open_binary`:
610
516
  }
611
517
  ```
612
518
 
613
- The request-level `provider_id` or `--provider` wins over
614
- `REA_ANALYSIS_PROVIDER`; all accept a provider ID or `auto`. Automatic selection
615
- binds the sole usable deep candidate, reports `ambiguous` when several are
616
- usable, and can leave an artifact-only target unbound so its disjoint artifact
617
- operations still work. An explicit unknown, unavailable, or unsupported
618
- provider fails with candidate IDs, stable rejection codes, and actionable local
619
- diagnostics. `binary_session`, `rea providers`, and `rea capabilities` expose
620
- the authoritative `analysis_provider_candidates` and
621
- `analysis_provider_binding` fields. Each open target also has an
622
- `analysis_run.run_id` allocated before provider startup. When dynamic providers
623
- start, `analysis_run.process_lineage` changes from `not_observed` to `snapshots`
624
- and retains one provider-attributed, token-verified observation per started
625
- provider. Each observation carries `observed_at` and remains `unavailable` or
626
- `verified`; a verified empty descendant list is distinct from both. Snapshots
627
- describe bounded observations, not current live state or historical absence.
628
- For providers with serial work, `analysis_activity` distinguishes `idle`,
629
- `busy`, and `timed_out_busy`, and reports the active operation, elapsed time,
630
- caller state, timeout, and queued-request count. A caller timeout therefore
631
- does not falsely imply that Hopper's Python thread is available. `close_binary`
632
- clears the REA session but returns `cleanup_incomplete` when authenticated
633
- document shutdown, owned process cleanup, or private runtime removal cannot be
634
- verified.
635
- Reopening same target without a selector keeps its binding; runtime failure
636
- never selects another provider silently.
637
- Ghidra can appear as an available, target-compatible candidate after doctor
638
- validates its exact installation. Its capability list contains the 19 admitted
639
- read-only inventory and function-analysis operations; selecting it still does
640
- not make Hopper-only GUI or mutation operations available and never triggers a
641
- silent fallback.
519
+ Use `--provider`, or `provider_id` in MCP, to choose Hopper or Ghidra for a target. This choice overrides `REA_ANALYSIS_PROVIDER`.
520
+
521
+ With `auto`, REA selects the only available tool that supports the target. If both are available, specify one before opening the target. The session keeps that choice until you explicitly switch or close it; a failure never silently switches tools. Artifact-only analysis can work without a native analysis tool.
522
+
523
+ Run `rea providers` and `rea capabilities` to check availability and supported operations. Ghidra exposes 22 read-only operations on supported Linux and macOS hosts. GUI controls and annotation changes require Hopper. Windows Ghidra operations remain unavailable.
524
+
525
+ The session also reports active work and cleanup status. If a caller times out, the analysis tool may still be busy; `analysis_activity` reports that state. A `cleanup_incomplete` result identifies resources whose shutdown or removal could not be verified. See [provider selection and analysis profiles](docs/adr/0001-provider-selection-and-analysis-profiles.md) for session, cache, and process-tracking details.
642
526
 
643
527
  ### CLI exit status
644
528
 
645
- | Status | Meaning |
646
- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
647
- | `0` | The requested operation completed. Truthful unknowns, warnings, and partial or truncated evidence remain successful results. |
648
- | `1` | Arguments, policy, permission, provider analysis, integrity checking, cancellation, timeout, setup, diagnostics, update, uninstall, output encoding, or output writing prevented completion. Structured output identifies the failure category when REA could encode it. |
649
- | `128 + N` | The process ended from signal `N`, where the shell or runtime preserves the conventional signal-derived status. |
529
+ | Status | Meaning |
530
+ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
531
+ | `0` | The operation completed. Results may still include warnings, partial evidence, or unresolved questions. |
532
+ | `1` | The operation could not complete, for example because of invalid input, host permission denial, cancellation, or timeout. Structured output reports the reason when available. |
533
+ | `128 + N` | The process ended from signal `N`, where the shell or runtime preserves the conventional signal-derived status. |
650
534
 
651
535
  `setup` returns `1` for `planned`, `needs_confirmation`, or `needs_human`
652
536
  because configuration is not ready; rerun it after approval or remediation.
653
- `doctor` returns `1` when any check is unhealthy. Output format, full envelopes,
537
+ `doctor` returns `1` when required checks for its readiness scope are unhealthy.
538
+ Unavailable optional provider prerequisites remain visible as informational
539
+ diagnostics and do not block setup or unrelated providers. Output format, full envelopes,
654
540
  filters, and token controls never change the operation status.
655
541
 
656
542
  When REA feeds a shell pipeline, enable `pipefail` so a downstream formatter
@@ -663,28 +549,20 @@ rea inventory-artifact ./app.asar --json | jq . > inventory.json
663
549
 
664
550
  ## Current Hopper provider
665
551
 
666
- REA starts Hopper when needed; Hopper does not need to be running first. Hopper's launcher internally activates the application, so opening a target may bring Hopper to the foreground. REA asks macOS to start Hopper hidden and in the background when possible, but cannot guarantee that it will remain behind the current application.
552
+ REA starts Hopper when an operation needs it. On macOS, Hopper may bring its window or a dialog to the foreground even though REA requests background startup. Demo or license prompts may need your attention.
667
553
 
668
- REA derives explicit format and architecture arguments to prevent common FAT and ARM selection dialogs. Other Hopper or macOS dialogs may still require a person. REA reports startup failures and remediation through CLI or MCP results instead of attempting to answer UI prompts.
554
+ Hopper handles one analysis request at a time. Cancelling your wait does not stop work already running inside Hopper; the session reports whether it is still busy. Successful decompilation results are cached until a relevant rename or comment change.
669
555
 
670
- Hopper bridge calls pass through a serial FIFO because Hopper's Python API runs on one dedicated thread. Calls wait for a response or caller cancellation. Cancelling an active call settles that caller but keeps its wire slot until Hopper replies, preserving request/response correlation; `binary_session.analysis_activity` exposes active work and MCP progress reports elapsed time. Successful decompilation text is cached per document and procedure, shared by pseudocode and dossier requests, and invalidated after rename or comment mutation.
556
+ Use `rea instructions` when you only need assembly instructions for a function. It avoids decompilation and a whole-program inventory.
671
557
 
672
- Hopper's synchronous public Python calls return when the operation completes; callers may cancel their wait. Use `read_function_instructions` or `rea instructions` when raw instruction orientation answers the question, without requesting a decompilation or whole-program name/string inventory.
558
+ Closing a session shuts down REA's bridge and removes its temporary socket directory while preserving a Hopper application you may be using. If cleanup cannot be verified, `close_binary` reports `cleanup_incomplete` and the affected resources.
673
559
 
674
- Closing a REA session shuts down its bridge and removes its private socket directory. It does not quit a Hopper application the user may be using. If shutdown or cleanup cannot be verified, `close_binary` returns `cleanup_incomplete` with the affected local resources.
560
+ ## Process capture
675
561
 
676
- ## Advanced process-capture setup
677
-
678
- Process capture is disabled by default. Enabling it requires
679
- `REA_PROCESS_CAPTURE_ENABLED=true`, approved executable and working roots in
680
- `REA_PROCESS_EXECUTABLE_ROOTS_JSON` and `REA_PROCESS_WORKING_ROOTS_JSON`, and an
681
- environment allowlist in `REA_PROCESS_ALLOWED_ENV_JSON`. Because the current PTY
682
- adapter uses host networking, it also requires
683
- `REA_PROCESS_ALLOW_EXTERNAL_NETWORK=true`.
684
-
685
- Set `REA_PROCESS_CAPTURE_AUTO_GRANT=false` to configure those process-capture
686
- limits as a ceiling without implicitly granting them. This mode remains
687
- fail-closed until a narrower grant is established.
562
+ Process capture runs the exact executable and scenario declared in the request,
563
+ with the requested working directory and environment. Filesystem observation
564
+ paths select what to snapshot. The process runs with your user permissions;
565
+ Process Capture records behavior and is not a security sandbox.
688
566
 
689
567
  Capture a scenario or compare two saved Process Capture Evidence records:
690
568
 
@@ -695,9 +573,9 @@ rea compare-process-captures authority.json reconstruction.json
695
573
  ```
696
574
 
697
575
  The comparison reports each observed dimension separately and identifies the
698
- first terminal, interaction, exit, filesystem, protocol, process, or shim
699
- divergence. See [Process Capture](docs/process-capture.md) for scenario
700
- fields, command-shim replay, checkpoint triggers, limits, and safety behavior.
576
+ first terminal, interaction, exit, filesystem, or process divergence.
577
+ See [Process Capture](docs/process-capture.md) for scenario fields, limits, and
578
+ evidence boundaries.
701
579
 
702
580
  REA installs a prebuilt PTY backend for supported macOS, Linux, and Windows
703
581
  architectures. If the capability check reports that the backend is unavailable,
@@ -714,7 +592,11 @@ verified or absent.
714
592
 
715
593
  ## Security model
716
594
 
717
- REA does not provide a hosted analysis service. Hopper and Linux Ghidra bridge communication uses authenticated private local sockets. Windows Ghidra P0 uses authenticated IPv4 loopback but does not claim named-pipe DACL or hostile-local-user isolation. Dynamic capabilities are disabled by default and require both operator policy and explicit per-call approval. Shipped providers, passive observers, and Process Capture are not security sandboxes: providers and launched targets run with the current user's permissions. Extracted JavaScript replay is a distinct Linux-only capability that fails closed unless Bubblewrap namespaces, architecture-checked seccomp, private runtime mounts, and delegated cgroup limits are available; it never inherits browser, Electron, or Process Capture authority. See [ADR-0002](docs/adr/0002-controlled-replay-authority-and-sandbox.md). Report vulnerabilities through the private process in [SECURITY.md](SECURITY.md).
595
+ Analysis runs locally. REA communicates with Hopper and Ghidra through authenticated private local sockets. Your agent or model provider has its own data policy.
596
+
597
+ Runtime requests act on the declared target and lifecycle. Analysis tools and launched targets run with your user permissions, and native UI capture still depends on macOS Accessibility and Screen Recording access. Static JavaScript analysis does not execute extracted modules; use direct browser, Electron, or process capture when runtime behavior is needed.
598
+
599
+ Windows Ghidra operations are blocked until REA implements the required process ownership, private-directory permissions, and safe-path checks. Report vulnerabilities through the private process in [SECURITY.md](SECURITY.md).
718
600
 
719
601
  ## FAQ
720
602
 
@@ -728,7 +610,7 @@ No. REA starts Hopper when an operation needs it. An already-running Hopper appl
728
610
  <details>
729
611
  <summary><strong>Why did Hopper appear in front of my other windows?</strong></summary>
730
612
 
731
- Hopper's launcher internally activates the application. REA requests background startup, but macOS and Hopper may still bring a window or dialog forward. See [Hopper application behavior](#hopper-application-behavior).
613
+ Hopper's launcher internally activates the application. REA requests background startup, but macOS and Hopper may still bring a window or dialog forward. See [Current Hopper provider](#current-hopper-provider).
732
614
 
733
615
  </details>
734
616
 
@@ -742,7 +624,7 @@ No. Setup can install Hopper for you, but Hopper remains separate software with
742
624
  <details>
743
625
  <summary><strong>Does REA install or include Ghidra or Java?</strong></summary>
744
626
 
745
- No. Ghidra support is bring-your-own. REA packages only its Java bridge source, validates the exact supported Ghidra 12.1.4 and 64-bit JDK 21 installation, and loads that bridge through Ghidra's external script path after setup approval records the paths.
627
+ No. REA connects to an existing Ghidra installation. Run setup after providing the Ghidra and Java paths shown in the [Ghidra section](#ghidra-read-only-analysis-provider).
746
628
 
747
629
  </details>
748
630
 
@@ -763,48 +645,17 @@ No decompiler can guarantee the original source. REA gives an agent pseudocode,
763
645
  <details>
764
646
  <summary><strong>Which agents can use REA?</strong></summary>
765
647
 
766
- Any agent that can run a local MCP server can use the manual configuration. Setup detects Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, and Devin; it automatically configures the first six when present and reports Devin without modifying it.
648
+ Any agent that can run a local MCP server can use the manual configuration. Setup offers the supported integrations listed in [Installation and setup](docs/installation.md#supported-agents); existing REA registrations are selected by default, and other detected agents require selection.
767
649
 
768
650
  </details>
769
651
 
770
652
  ## Development
771
653
 
772
- See [CONTRIBUTING.md](CONTRIBUTING.md) for setup, architecture, and release
773
- instructions, and [docs/testing.md](docs/testing.md) for the behavioral test
774
- depths, focused developer commands, coverage floors, and CI evidence. PR CI
775
- publishes generated API documentation as the `api-docs` workflow artifact.
776
-
777
- `npm run verify:agent` runs brandless native, JavaScript-application, managed,
778
- and browser prompts through a real local Codex CLI. Its JSON report measures
779
- natural MCP use, first-tool routing, repeated calls, actual Codex token usage,
780
- completion quality, and explicit treatment of authority and unknowns.
781
-
782
- `npm run evidence:generate` regenerates the managed conformance manifest and
783
- Evidence completion ledger from live verifier output. `npm run
784
- evidence:check` reruns the verifier and fails when artifacts, scenarios,
785
- providers, schemas, claim counts, Evidence IDs, or the bundled skill have
786
- drifted. Unsupported claims remain explicit and never count as passes.
787
- Verifier JSON reports include an ephemeral `verifier_run` UUID allocated before
788
- the verifier performs work and inherited by its child processes through
789
- `REA_PROCESS_RUN_ID`. The final report includes the verifier and parent PIDs
790
- plus `process_lineage` and its ISO `observed_at` timestamp: POSIX verifiers
791
- report a token-verified, point-in-time launcher process group and live
792
- descendants, while platforms without an owned
793
- lineage primitive report `status: "unavailable"` and a reason. An empty verified
794
- descendant list means no child was live during the final observation; it does
795
- not claim the verifier launched no children earlier. Nested verifier entrypoints
796
- in the same process reuse its UUID; each new verifier process replaces any
797
- inherited parent token with a fresh run identity.
798
- Generated completion commitments deliberately exclude this per-execution
799
- identity, so check mode remains deterministic while live reports remain
800
- attributable.
801
-
802
- Owned Hopper shutdown logs retain the launcher PID, process-group ID, cleanup
803
- status, and whether a verified group signal was required. They omit the run
804
- token and unexpected exception text. The real-Hopper verifier also starts an
805
- unrelated `Hopper`-named sentinel in a distinct process group and fails unless
806
- that process survives every session close; the sentinel is removed only by the
807
- verifier after the survival check.
654
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and contribution checks, and [docs/testing.md](docs/testing.md) for test scopes and real-tool verification. PR CI publishes generated API documentation as the `api-docs` artifact.
655
+
656
+ `npm run verify:agent` evaluates native, JavaScript, managed, and browser investigation tasks through a real local Codex CLI. Its report covers tool selection, repeated calls, token use, completion quality, and handling of permissions and unknowns.
657
+
658
+ `npm run evidence:generate` regenerates the managed conformance manifest and Evidence completion ledger from live verification results. `npm run evidence:check` reruns verification and checks for drift. Unsupported claims remain explicit and do not count as passes. See [testing](docs/testing.md) for verification commands and process-cleanup checks.
808
659
 
809
660
  ## Project links
810
661