Overview

Crow Eye is an open-source Windows forensic investigation engine designed to collect, analyze, and visualize various Windows artifacts. It features a modular architecture with specialized components for artifact collection, data processing, and visualization through a cyberpunk-themed GUI.

Key Features

  • Comprehensive Artifact Collection: Supports Prefetch, Registry, Event Logs, Amcache, Jump Lists, SRUM, MFT, USN Journal, Recycle Bin.
  • Timeline Visualization: Advanced timeline view with OpenGL-accelerated rendering.
  • Case Management: Organize investigations into cases with persistent configuration.
  • Modular Architecture: Easy to extend with new artifact parsers.

Project Structure

The project is organized into several key directories:

  • Artifacts_Collectors/: Specialized parsers for Windows artifacts (Prefetch, MFT, Registry, etc.).
  • eye/: The Eye AI Forensic Agent subsystem (Bridge, Services, UI).
  • correlation_engine/: Advanced forensic correlation and identity engine.
  • dynamic_mapping/: Intelligence layer for dynamic linking and enrichment.
  • data/: Data management components and unified search engines.
  • ui/: Main PyQt5 user interface components.
  • timeline/: OpenGL and React-based timeline visualization.
  • utils/: Core utilities, concurrency management, and dependency installers.
  • configs/: System configurations and the Forensic Knowledge Base (RAG).
  • CONTRIBUTING.md: Contribution guidelines.
  • Crow Eye.py: Main application entry point.
  • GUI_resources.py: UI assets and resources.
  • LICENSE: Project license.
  • README.md: Project overview.
  • styles.py: Custom UI styling engine.
Crow-Eye/
Artifacts_Collectors/
Forensics_Image_parsing/
strategies/
__init__.py
e01_access_strategy.py
iso_access_strategy.py
raw_access_strategy.py
vhdx_access_strategy.py
vmdk_access_strategy.py
README.md
__init__.py
config.json
data_models.py
error_handler.py
file_system_accessor.py
image_collection_wrapper.py
image_extractor.py
image_parser.py
image_parsing_dialog.py
partition_detector.py
requirements.txt
MFT and USN journal/
MFT_Claw.py
USN_Claw.py
__init__.py
mft_usn_correlator.py
Offline_Importer/
resources/
.gitkeep
icons.py
styling.py
__init__.py
artifact_collector.py
artifact_scan_index.py
artifact_type_detector.py
artifact_validator.py
collection_coordinator.py
launch_gui.py
offline_importer_gui.py
parse_artifacts_dialog.py
parser_invoker.py
report_generator.py
crow_claw/
core/
__init__.py
access_result.py
access_strategy.py
artifacts.py
collector.py
error_classifier.py
file_accessor.py
lock_detection.py
manifest.py
raw_disk_access_strategy.py
shadow_copy.py
shadow_copy_manager.py
standard_copy_strategy.py
status_reporter.py
validator.py
vss_access_strategy.py
vss_diagnostics.py
vss_error_reporter.py
vss_health_checker.py
windows_version_detector.py
gui/
__init__.py
main_window.py
Crow_claw.py
__init__.py
setup.py
offline_parsers/
README_OFFLINE_CORRELATION.md
README_OFFLINE_REGCLAW.md
__init__.py
offline_ACJLClaw.py
offline_AmCacheClaw.py
offline_MFTClaw.py
offline_MFT_USN_Correlator.py
offline_PrefetchClaw.py
offline_RecycleBinClaw.py
offline_RegClaw.py
offline_SRUM_Claw.py
offline_ShimCacheClaw.py
offline_USNClaw.py
offline_WinLog_Claw.py
A_CJL_LNK_Claw.py
Known_AppIDs.csv
Known_GUIDs.csv
Prefetch_claw.py
Regclaw.py
SRUM_Claw.py
WinLog_Claw.py
__init__.py
amcacheparser.py
partition_analyzer.py
recyclebin_claw.py
registry_binary_parser.py
shimcash_claw.py
windows_partition_detector.py
GUI Resources/
icons/
check.svg
correlation-icon.svg
correlation_icon_v4.html
correlation_icon_v4.svg
dynamic_linking.svg
export.svg
filter-icon.png
menu-icon.svg
new-case-icon.svg
open-case-icon.svg
search-icon.svg
settings-icon.svg
visualization.svg
CrowEye.ico
CrowEye.jpg
Resources_rc.qrc
gray color image.jpg
hamburger menu.png
loading.gif
main-menu.png
the Eye AI agent transparent.png
config/
standard_fields/
event_identifiers.json
file_paths.json
network_identifiers.json
process_identifiers.json
system_identifiers.json
timestamps.json
user_identifiers.json
__init__.py
case_1.5.2026 2.json
case_1.5.2026.json
case_3.json
case_4.json
case_5.json
case_6.5.2026.json
case_6.json
case_7.5.2026.json
case_7.json
case_8.json
case_history_manager.py
configuration_manager.py
data_models.py
last_case.json
configs/
knowledge_base/
Global_schema_databse_Refrence.md
amcache_knowledge.md
eventlog_knowledge.md
evidence_intelligence.md
forensic_methodology.md
global_schema_reference.md
jumplist_knowledge.md
mft_knowledge.md
parser_mappings.json
prefetch_knowledge.md
recyclebin_knowledge.md
registry_knowledge.md
remote_access_knowledge.md
shimcache_knowledge.md
srum_knowledge.md
usn_knowledge.md
README.md
context_window_presets.json
eye_config.json
eye_config_example_full.json
eye_config_schema.json
llm_config.json
semantic_mapping_config.json
semantic_mapping_rules_default.json
semantic_rules_default.json
semantic_rules_example.json
semantic_rules_schema.json
correlation_engine/
config/
default_mappings/
browser_history.yaml
event_logs.yaml
file_system.yaml
prefetch.yaml
registry.yaml
__init__.py
artifact_type_registry.py
artifact_types.json
case_configuration_file_manager.py
case_configuration_manager.py
case_specific_configuration_manager.py
centralized_score_config.py
config_manager.py
configuration_change_handler.py
configuration_conflict_resolver.py
configuration_migration.py
feather_config.py
identifier_extraction_config.py
integrated_configuration_manager.py
pipeline_config.py
pipeline_config_manager.py
score_config_migration_tool.py
score_configuration_manager.py
semantic_config.py
semantic_mapping.py
semantic_mapping_discovery.py
semantic_rule_validator.py
session_state.py
wing_config.py
database/
__init__.py
connection_manager.py
docs/
config/
ARTIFACT_TYPE_REGISTRY.md
CONFIGURATION_RELOAD.md
CONFIG_DOCUMENTATION.md
WEIGHT_PRECEDENCE.md
docs/
config/
CONFIG_DOCUMENTATION.md
engine/
ENGINE_DOCUMENTATION.md
feather/
FEATHER_DOCUMENTATION.md
gui/
GUI_DOCUMENTATION.md
integration/
INTEGRATION_DOCUMENTATION.md
pipeline/
PIPELINE_DOCUMENTATION.md
wings/
WINGS_DOCUMENTATION.md
CORRELATION_ENGINE_OVERVIEW.md
FEATHER_METADATA_OPTIONAL.md
PIPELINE_CONFIG_MANAGER_README.md
engine/
ENGINE_DOCUMENTATION.md
TIME_WINDOW_SCANNING_ENGINE.md
feather/
FEATHER_DOCUMENTATION.md
gui/
GUI_DOCUMENTATION.md
integration/
INTEGRATION_DOCUMENTATION.md
INTEGRATION_INTERFACES.md
pipeline/
PIPELINE_DOCUMENTATION.md
semantic_mapping/
SEMANTIC_MAPPING_GUIDE.md
wings/
WINGS_DOCUMENTATION.md
ARCHITECTURE.md
CONTRIBUTING.md
CORRELATION_ENGINE_OVERVIEW.md
FEATHER_METADATA_OPTIONAL.md
PIPELINE_CONFIG_MANAGER_README.md
README.md
STRUCTURAL_FIXES_SUMMARY.md
WING_FEATHER_GUIDE.md
engine/
ui/
__init__.py
IDENTIFIER_EXTRACTION_README.md
__init__.py
base_engine.py
cancellation_support.py
correlation_engine.py
correlation_result.py
correlation_statistics.py
data_structures.py
database_error_handler.py
database_persistence.py
engine_selector.py
enhanced_feather_loader.py
error_handling_coordinator.py
feather_loader.py
identifier_correlation_engine.py
identifier_extraction_pipeline.py
identity_based_engine_adapter.py
identity_correlation_engine.py
identity_extractor.py
identity_validator.py
memory_manager.py
parallel_window_processor.py
performance_analysis.py
performance_benchmark.py
performance_monitor.py
progress_tracking.py
query_builder.py
query_interface.py
results_formatter.py
semantic_matches_evaluator.py
semantic_matches_evaluator_enhanced.py
semantic_rule_evaluator.py
streaming_manager.py
time_based_engine.py
time_estimation.py
time_window_config.py
timestamp_parser.py
two_phase_correlation.py
weighted_scoring.py
wing_config_adapter.py
feather/
ui/
__init__.py
csv_tab.py
data_viewer.py
database_tab.py
json_tab.py
main_window.py
progress_widget.py
styles.qss
__init__.py
database.py
feather_builder.py
transformer.py
gui/
CORRELATION_VIEWERS_DOCUMENTATION.md
README.md
__init__.py
__main__.py
anchor_detail_dialog.py
case_specific_configuration_dialog.py
comparative_analysis_widget.py
component_detail.py
config_library.py
correlation_results_view.py
crow_eye_styles.qss
database_results_loader.py
execution_control.py
hierarchical_results_view.py
identifier_extraction_config_panel.py
identity_detail_dialog.py
identity_results_view.py
main_window.py
match_detail_dialog.py
performance_utils.py
pipeline_builder.py
pipeline_management_tab.py
pipeline_selection_dialog.py
pipeline_selector_widget.py
progress_display_widget.py
results_exporter.py
results_tab_widget.py
results_viewer.py
scoring_breakdown_widget.py
semantic_filter_panel.py
semantic_info_display_widget.py
semantic_mapping_editor_dialog.py
semantic_mapping_viewer.py
settings_dialog.py
time_based_results_view.py
time_search_widget.py
timebased_results_viewer.py
timeline_widget.py
tooltips_help.py
ui_styling.py
wing_selection_dialog.py
identity_semantic_phase/
CONFIGURATION.md
__init__.py
identity_aggregator.py
identity_level_semantic_processor.py
identity_registry.py
identity_semantic_controller.py
semantic_data_propagator.py
semantic_mapping_controller.py
sql_semantic_mapper.py
integration/
default_wings/
Execution_Proof_Correlation.json
README.md
User_Activity_Correlation.json
__init__.py
auto_feather_generator.py
case_initializer.py
case_specific_configuration_integration.py
correlation_integration.py
crow_eye_integration.py
default_pipeline_creator.py
default_wings_loader.py
error_handling.py
feather_config_generator.py
feather_mappings.py
integration_diagnostics.py
integration_error_handler.py
integration_logging.py
integration_monitor.py
interfaces.py
progress_tracking_integration.py
semantic_mapping_integration.py
terminal_progress_logger.py
weighted_scoring_integration.py
memory/
__init__.py
memory_manager.py
optimization/
__init__.py
optimization_components.py
performance_config.py
progress_tracking_optimizer.py
semantic_mapping_optimizer.py
weighted_scoring_optimizer.py
pipeline/
__init__.py
database_connection_manager.py
discovery_service.py
error_handler.py
feather_auto_registration.py
path_resolver.py
pipeline_executor.py
pipeline_loader.py
services/
case_switching_service.py
wings/
core/
__init__.py
artifact_detector.py
wing_model.py
wing_validator.py
ui/
__init__.py
anchor_priority_widget.py
feather_widget.py
json_viewer.py
main_window.py
semantic_mapping_dialog.py
wings_styles.qss
__init__.py
ARCHITECTURE.md
CONTRIBUTING.md
__init__.py
data/
__init__.py
base_loader.py
correlated_loader.py
database_discovery_manager.py
database_initializer.py
database_manager.py
index_manager.py
mft_loader.py
registry_loader.py
search_engine.py
search_history_manager.py
timestamp_detector.py
timestamp_parser.py
unified_search_engine.py
usn_loader.py
dynamic_mapping/
core/
__init__.py
base.py
database.py
intelligence_engine.py
enrichment/
__init__.py
enrichment_mixin.py
gui/
__init__.py
dynamic_linking_window.py
io/
__init__.py
ioc_parser.py
rules/
__init__.py
base.py
custom_rules.py
default_rules.py
__init__.py
eye/
backends/
cloud_api/
__init__.py
anthropic_backend.py
gemini_backend.py
openai_backend.py
local_cli/
__init__.py
cli_profiles.py
generic_cli_backend.py
local_server/
__init__.py
lmstudio_backend.py
ollama_backend.py
__init__.py
base.py
brain/
b0eef3d2-ee70-4658-87e6-cd36645c1e33/
bridge/
__init__.py
eye_bridge.py
cli_agents/
cli_profiles.py
generic_cli_backend.py
docs/
ARCHITECTURE_VERIFICATION.md
DIAGRAM_QUICK_REFERENCE.md
DOCUMENTATION_STRUCTURE.md
MIGRATION_GUIDE.md
colorblind_simulation_guide.md
eye_architecture.md
eye_enhancements.md
eye_enhancements_roadmap.md
eye_testing_architecture.md
eye_tools_reference.md
gradient_rendering_pdf.md
temp_part1.txt
models/
__init__.py
message_metadata.py
report_blocks.py
services/
PDF_EXPORT_IMPLEMENTATION.md
__init__.py
case_context_manager.py
case_directory_manager.py
chart_renderer.py
color_manager.py
config_manager.py
context_manager.py
context_window_config_manager.py
correlation_service.py
credential_manager.py
database_service.py
error_handler.py
evidence_detector.py
forensic_handlers.py
heatmap_renderer.py
history_manager.py
intent_engine.py
internet_search_service.py
model_router.py
pdf_exporter.py
query_processor.py
rag_service.py
report_engine.py
report_handlers.py
report_parser.py
search_service.py
svg_chart_exporter.py
template_manager.py
threat_intel_service.py
timeline_renderer.py
timestamp_service.py
token_counter.py
truncation_auditor.py
ui/
react/
public/
eye-logo.png
favicon.svg
icons.svg
src/
assets/
eye_icon.png
hero.png
react.svg
vite.svg
test/
setup.ts
ActionChips.css
ActionChips.tsx
App.css
App.tsx
BRIDGE_INTEGRATION.md
ChatInterface.css
ChatInterface.tsx
DataViewer.css
DataViewer.tsx
FullHistoryModal.css
FullHistoryModal.tsx
Icons.tsx
InputBar.css
InputBar.tsx
LoadingDialog.css
LoadingDialog.tsx
MessageList.css
MessageList.tsx
MessagePinButton.css
MessagePinButton.tsx
ModelBadge.css
ModelBadge.tsx
OptionMenu.css
OptionMenu.tsx
README.md
ReportBlockComponent.css
ReportBlockComponent.tsx
ReportBuilderPanel.css
ReportBuilderPanel.tsx
ThinkingTrace.css
ThinkingTrace.tsx
TokenBudgetSlider.css
TokenBudgetSlider.tsx
TruncationWarningBanner.css
TruncationWarningBanner.tsx
bridge.ts
index.css
main.tsx
report-main.tsx
types.ts
BUILD.md
PYTHON_INTEGRATION_EXAMPLE.md
README.md
eslint.config.js
index.html
package-lock.json
package.json
patch_eye_ui.py
report.html
tsconfig.app.json
tsconfig.json
tsconfig.node.json
vite.config.ts
EYE_TAB_INTEGRATION_PATTERN.md
README.md
__init__.py
case_setup_dialog.py
case_summary_dialog.py
eye_manager.py
eye_splash.html
eye_tab_stub.py
eye_window.py
eye_window_manager.py
hitl_dialogs.py
message_box_helper.py
onboarding_wizard.py
settings_dialog.py
README.md
__init__.py
requirements.txt
timeline/
correlation/
__init__.py
correlation_engine.py
data/
__init__.py
event_aggregator.py
power_event_extractor.py
progressive_loader.py
query_worker.py
srum_app_resolver.py
timeline_data_manager.py
timestamp_indexer.py
persistence/
__init__.py
react-timeline/
public/
favicon.svg
icons.svg
src/
assets/
hero.png
react.svg
vite.svg
components/
DetailPanel.jsx
ErrorBoundary.jsx
EventDetailModal.jsx
HeatmapView.jsx
LabelColumn.jsx
LaneDataModal.jsx
PillBar.jsx
TimelineView.jsx
TopBar.jsx
WeekView.jsx
hooks/
useBridge.js
useLinks.js
useTimelineState.js
styles/
bands.css
timeline.css
utils/
dataUtils.js
formatters.js
linkComputer.js
App.jsx
main.jsx
diag.py
eslint.config.js
index.html
package-lock.json
package.json
vite.config.js
rendering/
__init__.py
event_renderer.py
viewport_optimizer.py
zoom_manager.py
utils/
__init__.py
animation_manager.py
error_handler.py
event_clusterer.py
loading_indicator.py
progressive_loading_indicator.py
timestamp_parser.py
tooltip_manager.py
value_parser.py
README.md
__init__.py
timeline_bridge.py
timeline_dialog.py
ui/
GUI_WORKERS_README.md
Loading_dialog.py
__init__.py
case_dialog.py
component_factory.py
correlated_virtual_table_integration.py
data_settings_dialog.py
database_search_dialog.py
database_search_integration.py
gui_workers.py
mft_virtual_table_integration.py
pagination_config.py
pagination_helper.py
pagination_widget.py
partition_window.py
progress_indicator.py
row_detail_dialog.py
row_detail_dialog_handler.py
search_filter_dialog.py
search_integration.py
search_utils.py
search_widget.py
settings_dialog.py
startup_menu.py
usn_virtual_table_integration.py
virtual_table_widget.py
utils/
concurrency/
__init__.py
cancellation.py
models.py
process_manager.py
progress.py
standalone_parsers.py
NODEJS_INSTALLER_README.md
__init__.py
error_handler.py
file_signature_detector.py
file_utils.py
forensic_deps_installer.py
forensic_deps_status.json
memory_monitor.py
nodejs_installer.py
path_utils.py
raw_file_copy.py
search_utils.py
time_utils.py
CONTRIBUTING.md
Crow Eye.py
GUI_resources.py
LICENSE
README.md
styles.py

System Architecture & Orchestration

Crow Eye is built on a sophisticated multi-layered architecture that prioritizes forensic integrity and real-time responsiveness. The system orchestrates complex data pipelines while maintaining a seamless investigative workspace.

Main Application (Crow Eye.py)
The central nervous system of the project. It orchestrates the entire forensic lifecycle, manages the PyQt5/React bridge, and handles asynchronous task scheduling to ensure 0ms UI lag during heavy data processing.

UI & Experience Layer

Responsive React-based interface embedded via QWebEngine. Manages the high-fidelity dark-mode canvas and real-time data streaming.

Component Factory
Eye UI Bridge
Styles Engine

Forensic Collectors

Modular triage artifacts. Each collector is an independent module capable of parsing raw Windows artifacts into standardized forensic formats.

MFT/USN
Registry
Event Logs
Jump Lists

Persistence & Search

High-performance SQLite backend. Manages forensic "Feathers" and provides O(log n) search capabilities across millions of artifacts.

Feather Engine
Search Manager
SQLite DB

Image Parsing Engine

Modular engine powered by the dissect framework. Uses the Strategy Design Pattern to parse E01, VHDX, VMDK, and RAW images without host-OS mounting.

Strategy Manager
FS Accessor
Partition Detector

Timeline & Visualization

Hybrid React/Python architecture. Uses an SPA interface embedded via QWebEngine with the Timeline Bridge for asynchronous event streaming.

Timeline SPA
Timeline Bridge
Event Aggregator

Forensic Correlation Engine

Advanced Correlation Framework

The Correlation Engine is the analytical heart of Crow-Eye. It provides a modular framework for finding temporal and semantic relationships across diverse forensic artifacts, enabling investigators to reconstruct complex attack chains with O(N log N) efficiency.

Core Methodology

Crow-Eye utilizes a Dual-Engine Architecture to balance forensic precision with computational performance. Whether tracking a single executable across the timeline or analyzing massive event logs, the system dynamically adapts to the investigative context.

Feather

The data normalization layer. Feathers transform raw artifacts (LNK, Prefetch, EVTX) into standardized SQLite schemas, ensuring tool-agnostic analysis.

Wing

The logic layer. Wings define the correlation rules, temporal boundaries (default 180m), and semantic mappings that guide the investigation.

Engine Subsystems

⚙️
Correlation Subsystems

Engine Core

correlation_engine.py
weighted_scoring.py

Feather System

feather_builder.py
transformer.py

Wings System

wing_model.py
wing_validator.py

Dual-Engine Comparison

Identity-Based

O(N log N)
🔍
Extract Identities
Group by Identity
Temporal Anchoring

Optimized for tracking specific files/applications across artifacts. Constant memory usage via streaming.

VS

Time-Based

O(N log N)
⏱️
Time Window Scan
Indexed Queries
Pattern Matching

Systematic temporal analysis across large datasets. Ideal for reconstruction of event timelines.

Engine Selection Guide

Feature Identity-Based Time-Based
Primary Focus Entity Tracking Temporal Context
Scaling 10,000+ Records 1,000+ Records
Memory O(1) Streaming Low (Buffered)

Directory Structure

correlation_engine/
engine/ Core logic & algorithms
feather/ Data normalization
wings/ Rule definitions
config/ Mappings & settings
pipeline/ Orchestration
gui/ User interface
integration/ Crow-Eye bridge

Eye AI Forensic Agent

Active Development Notice: The Eye Assistant is currently in continuous active development. Users and developers should expect significant changes, architectural optimizations, and new feature integrations in the upcoming releases.

The Eye AI Forensic Assistant is an embedded, tool-augmented "Forensic AI Agent" that orchestrates forensic data querying, analysis, and report generation within the Crow-eye suite. It acts as an expert forensic peer, accelerating the analysis of Windows artifacts by detecting suspicious behaviors through deep correlation and helping investigators build comprehensive forensic reports.

Core Capabilities

Eye consists of a modern React-based GUI embedded inside the PyQt5 application, interacting asynchronously with a Python backend Context Manager.

  • Natural Language Investigation: Query forensic artifacts using conversational AI.
  • Multi-Source Data Integration: Unified access to Prefetch, MFT, Registry, Event Logs, and more.
  • Living Report Workspace: Real-time collaborative documentation with charts and evidence tracking.
  • RAG-Enhanced Analysis: Retrieval-Augmented Generation for artifact-specific forensic knowledge.
  • Multi-Backend Support: OpenAI, Anthropic, Gemini, Ollama, and LM Studio.
  • Human-in-the-Loop: Critical investigative decisions require investigator validation.

Core Architectural Components

2.1. The Frontend (React + QWebChannel)

  • Embedded Web UI: A modern interface providing a Chat view, Data Viewer, and a "Living Report" Generator. Embedded using QWebEngineView.
  • Asynchronous Communication: Uses QWebChannel to stream chunks of text and tool states in real-time, reducing perceived latency.

2.2. The Backend Context Manager (Python)

The ContextManager is the brain of Eye. It maintains conversational state, enforces forensic reporting rules, applies RAG, and dictates authorized tool usage.

2.3. Model-Agnostic Router

Allows seamless switching between backends:

  • Local Server API: LM Studio / Ollama for private, offline analysis.
  • Cloud APIs: Gemini, Anthropic, OpenAI for complex reasoning.

2.4. TOON (Table-Oriented Object Notation) Engine

Prevents context window exhaustion. If a query returns >1000 rows, the TOON Engine applies SQL pushdowns to aggregate data into an ultra-compact structure (metadata, sample rows, summary stats) before delivery to the AI.

System Architecture Map

🔍 Click to zoom
graph TB %% Class Definitions for Website Style classDef brain fill:#6366f1,stroke:#6366f1,color:#fff classDef service fill:#22d3ee,stroke:#22d3ee,color:#000 classDef backend fill:#f43f5e,stroke:#f43f5e,color:#fff classDef data fill:#1e293b,stroke:#475569,color:#fff classDef bridge fill:#ec4899,stroke:#ec4899,color:#fff classDef protocol fill:#84cc16,stroke:#84cc16,color:#000 classDef frontend fill:#312e81,stroke:#6366f1,color:#fff classDef intel fill:#a855f7,stroke:#a855f7,color:#fff subgraph FE [Frontend Layer - React] ChatUI[Chat Interface]:::frontend ReportUI[Living Report Workspace]:::frontend BridgeJS[QWebChannel Client]:::frontend end subgraph BC [Bridge & Config Layer] EyeBridge[EyeBridge.py]:::bridge ConfigMgr[ConfigManager.py]:::bridge Schema[(eye_config_schema.json)]:::data ActiveConfig[(eye_config.json)]:::data end subgraph BR [The Brain - Intelligence Layer] ContextMgr[ContextManager.py]:::brain QueryProc[QueryProcessor.py]:::brain IntentEng[IntentEngine.py]:::brain TokenMgr[ContextWindowConfigManager.py]:::brain HistoryMgr[HistoryManager.py
2-Stage Memory + Recall]:::brain AuditLog[TruncationAuditor.py]:::protocol EvidenceSeal[EvidenceSeal.py
Hash Chain]:::protocol EvidenceDet[EvidenceDetector.py]:::intel end subgraph SV [Service Layer] ModelRouter[ModelRouter.py]:::service RAGSvc[RAGService.py
+ Embeddings nomic]:::service DBSvc[DatabaseService.py]:::service SearchSvc[ForensicSearchService.py]:::service ReportEng[ReportEngine.py]:::service TOON[TOON Compression]:::service MapReduce[MapReduceService.py]:::service EvidenceIndex[EvidenceIndexService.py
Semantic Search]:::service ResultCache[ResultCache.py]:::service NarrativeMap[NarrativeMapService.py
Verdict→Claim→Behavior→Evidence]:::service CredentialMgr[CredentialManager.py]:::service end subgraph ID [Intelligence & Detection] ThreatIntel[ThreatIntelService.py]:::intel Correlation[CorrelationService.py]:::intel VT[VirusTotal API]:::intel OTX[AlienVault OTX]:::intel LOLBAS[LOLBAS/Drivers]:::intel end subgraph RX [Rendering & Export] PDFExp[PDFExporter.py]:::service SVGExp[SVGChartExporter.py]:::service Heatmap[HeatmapRenderer.py]:::service Timeline[TimelineRenderer.py]:::service ColorMgr[ColorManager.py]:::service end subgraph BS [Backend Strategy] LocalCLI[GenericCLIBackend]:::backend LocalAPI[LocalServerBackend]:::backend CloudAPI[CloudAPIBackend]:::backend end subgraph FI [Forensic Infrastructure] ForensicDB[(Artifact Databases
SQLite)]:::data Registry[(Registry Hives
SAM / SYSTEM)]:::data KnowledgeBase[(RAG Knowledge Base
Embeddings)]:::data CorrelationDB[(Correlation Results DB
Correlation/output)]:::data EyeLogs[(EYE_Logs
seals, memory, cache, coverage)]:::data NarrativeMapFile[(narrative_map.json
hash-chained audit)]:::data Keychain[(OS Keychain
Credential Storage)]:::data AuditFiles[(truncation_audit.log)]:::data CaseDir[(Case Directory Manager)]:::data end ChatUI <--> BridgeJS BridgeJS <--> EyeBridge EyeBridge <--> ContextMgr ConfigMgr -- validates --> ActiveConfig ActiveConfig -- against --> Schema ConfigMgr -- drives --> ModelRouter ContextMgr --> QueryProc QueryProc --> IntentEng QueryProc --> RAGSvc QueryProc --> TokenMgr QueryProc --> ModelRouter QueryProc --> HistoryMgr QueryProc --> AuditLog QueryProc --> EvidenceDet EvidenceDet --> ThreatIntel ThreatIntel --> VT & OTX & LOLBAS ModelRouter --> LocalCLI & LocalAPI & CloudAPI ModelRouter -.-> CredentialMgr CredentialMgr <--> Keychain QueryProc --> DBSvc QueryProc --> SearchSvc QueryProc --> ReportEng QueryProc --> EvidenceIndex QueryProc --> ResultCache QueryProc --> EvidenceSeal QueryProc --> NarrativeMap NarrativeMap --> NarrativeMapFile NarrativeMap -.->|injected each prompt| ContextMgr NarrativeMap -.-> EyeLogs DBSvc --> TOON DBSvc --> ResultCache TOON --> MapReduce EvidenceIndex --> ForensicDB EvidenceIndex -.-> EyeLogs ResultCache -.-> EyeLogs EvidenceSeal --> EyeLogs ReportEng --> PDFExp & SVGExp & Heatmap & Timeline Heatmap & Timeline --> ColorMgr QueryProc -.->|Investigator Approval| HumanValidation{Human in the Loop}:::protocol HumanValidation -.-> ContextMgr DBSvc --> ForensicDB & Registry QueryProc --> Correlation Correlation --> CorrelationDB RAGSvc --> KnowledgeBase AuditLog --> AuditFiles AuditLog --> EyeLogs CaseDir --> ForensicDB ReportEng -- exports --> FileSystem[(HTML/PDF Reports)]:::data %% Subgraph Styling style FE fill:#1e1b4b,stroke:#312e81,stroke-width:2px,color:#fff style BC fill:#1e1b4b,stroke:#312e81,stroke-width:2px,color:#fff style BR fill:#0f172a,stroke:#1e293b,stroke-width:2px,color:#fff style SV fill:#0f172a,stroke:#1e293b,stroke-width:2px,color:#fff style ID fill:#2e1065,stroke:#4c1d95,stroke-width:2px,color:#fff style RX fill:#064e3b,stroke:#065f46,stroke-width:2px,color:#fff style BS fill:#450a0a,stroke:#7f1d1d,stroke-width:2px,color:#fff style FI fill:#020617,stroke:#0f172a,stroke-width:2px,color:#fff

The Ghassan Elsman Protocol (GEP)

The GEP is a vendor-neutral, tool-agnostic standard of 10 principles defining how any AI should be used in digital forensics — not a Crow-Eye feature. Eye is its reference implementation.

GEP vs. the Eye's Operating Rules. The GEP is the standardwhat must be upheld. The Eye's Operating Rules are its system-prompt instructions — how it gets answers; each is tagged [Operating · GEP-k] (it upholds principle k) or [Operating] (pure UX/tooling). The rules implement the GEP; they are not the GEP. Read the standard and the full distinction on the GEP page (GEP vs. Operating Rules).

  • GEP-1 Evidence Primacy — conclusions only from examined artifacts.
  • GEP-2 Traceability — every fact links to a specific source record.
  • GEP-3 Specificity & Chronology — exact UTC timestamps, ordered.
  • GEP-4 Cross-Corroboration — multiple sources; agreement & conflict reported.
  • GEP-5 Premise Verification — human claims are tested, not deferred to.
  • GEP-6 Completeness — no silent truncation or omission of evidence; coverage is disclosed (consulted vs. available sources, sample vs. full) and graded per answer (see Result Cache & Coverage).
  • GEP-7 Integrity & Non-Repudiation — evidence unmodified; tamper-evident record.
  • GEP-8 Transparency & Explainability — reasoning, tools, and data are auditable.
  • GEP-9 Human Authority — the investigator decides; actions are attributable.
  • GEP-10 Defensibility — objective output structured for independent review.

Context Integrity & Chain of Custody — how the Eye operates

These are Eye's operating mechanisms — the in-product steps that uphold the GEP (especially GEP-6, GEP-7, and GEP-8) during every investigation step.

0. Case Awareness (The Triage): Initial blueprinting of the case context injected directly into the system prompt.
1. Pre-Flight Integrity (The Ping): Validates backend connectivity to prevent silent failures before processing.
2. Evidence Anchoring (The Snippets): Automatically tags and preserves raw forensic context (hashes, IPs, timestamps) in history.
3. Chain of Custody (Audit Trail): Meticulous recording of all preservation and truncation events into truncation_audit.log.
4. Non-Repudiation (Hash-Linked): Assignments of deterministic, content-based IDs to all messages to ensure record integrity.
5. Context Preservation (Pinning): Specific logic to exclude evidence-flagged messages from AI summarization.
6. Tool Traceability: Injection of tool names and execution iteration counts into system history for perfect tracing.
7. Machine-Readable Review (Synthesis): Export of a structured JSON audit trail for automated protocol compliance checking.

Protocol Compliance Panel & Live Dashboard

The Eye ships a live Protocol Compliance dashboard so an investigator or reviewer can confirm — per case and per answer — that the Eye actually followed the Ghassan Elsman Protocol. It is read directly from EYE_Logs/ and the live ContextManager state (no separate bookkeeping to drift).

What the panel surfaces

  • GEP Compliance dashboard: the forensic-integrity operating rules and live Eye-process rows (Conversation Memory, Recall, Coverage, Result Cache, Semantic Search, Evidence Seal Hash Chain) — each tagged with the GEP principle(s) it upholds.
  • GEP Protocol — 10 Principles: a live status for every GEP-1…GEP-10 with an honest basisverified (rolled up from genuinely-checked mechanisms), structural (always-on guarantee), config (reflects reasoning_config; N-A when a setting is disabled, never a bare PASS), or per-answer.
  • Per-Answer GEP Compliance: every answer is graded against all 10 GEP principles (marked N-A where a principle doesn't apply to that turn) and persisted to eye_gep_turns.jsonl.
  • Evidence Seals (with a hash-chain VERIFIED / BROKEN banner), Chain-of-Custody Events, Execution Steps, the EYE ↔ LLM Conversation, the Activity Window, and the reasoning trace (why each sub-question / conclusion).

Bridge API (for integrators)

The React panel reads everything through QWebChannel bridge getters you can call directly: get_gep_compliance_status, get_gep_turns, get_payload_seals, get_truncation_events, get_step_history, get_dialogue_history, get_activity_audit, and get_reasoning_turns — each returns a JSON envelope { success, data, error }.

Evidence Sealing, Hash Chains & Self-Healing Guardrail

Traceability to source records means the Eye must never silently truncate what the model sees and must be able to prove exactly what it saw. Three mechanisms enforce this (they uphold GEP-6 Completeness and GEP-7 Integrity & Non-Repudiation — see Compliance).

EvidenceSeal — proving what the model saw

Every payload sent to the model is sealed to eye_payload_seal.jsonl with the SHA-256 of the exact bytes, token count, model + context limit, a truncated flag, the evidence provenance (database:table:rowid, source path, and computed MFT offset = record × 1024), and a tamper-evident prev_seal_hash → seal_hash hash chain. The verify_chain() method re-walks the log and re-computes every link, so altering or removing any record is detectable — the dashboard reports VERIFIED or BROKEN.

TruncationAuditor — the chain-of-custody log

An append-only truncation_audit.log with its own hash chain (and verify_chain()) records every context decision: PRESERVED / SUMMARIZED / TRUNCATED / PINNED / UNPINNED / REFUSED_OVERFLOW / SEAL_FAILED.

Self-healing context guardrail (guarded_generate)

The single choke point for every model call. The usable window is max_ctx − reserve where reserve = min(max(512, 10%·ctx), ctx/2). If a payload would overflow, the Eye self-heals on a per-call copy (the persistent on-disk history is never altered): it summarizes, then slides the oldest non-evidence context — never touching pinned / preserve_evidence / tool-result messages. If the irreducible evidence core still won't fit, it fails hard and refuses rather than drop evidence, handing off to analyze_large_dataset (map-reduce over the whole artifact).

The EYE_Logs Forensic Record (per case)

Every case directory carries an EYE_Logs/ folder — the Eye's complete, machine-readable, independently-reviewable record. A developer can inspect any of:

  • eye_payload_seal.jsonl — per-payload SHA-256 seals (hash-chained).
  • truncation_audit.log — append-only chain-of-custody events (hash-chained).
  • audit_trail.json — machine-readable export of the audit events.
  • eye_gep_turns.jsonl — per-answer GEP evaluation (all 10 principles).
  • eye_coverage_log.jsonl — per-answer coverage (consulted vs. available, sample vs. full).
  • eye_step_log.jsonl — per-step execution timeline.
  • eye_dialogue_log.jsonl — full Eye ↔ LLM conversation transcript.
  • eye_reasoning_log.jsonl — why each sub-question / why each conclusion + evidence.
  • eye_conversation_history.json — persistent chat history (never trimmed by self-heal).
  • eye_conversation_archive.jsonl — turns evicted from the window, kept for long-term recall.
  • eye_result_cache.jsonl — cached query results for reproducible reuse.
  • eye_evidence_index/<model>.jsonl — the per-case semantic evidence index.

Investigation Pipeline

Every question flows through a verifiable, evidence-anchored pipeline. Multi-part questions are decomposed so each part is driven to completion, and the agentic loop keeps gathering evidence until it can answer.

  1. Intent Interception: Heuristic check for direct commands (e.g., model switching) and the automatic case-open triage.
  2. Forensic Keyword Analysis: Detecting target artifacts (Prefetch, MFT, Amcache, Registry, SRUM, ShimCache, Event Logs).
  3. RAG Lookup: Ranked retrieval from the forensic knowledge base (lexical BM25 or semantic embeddings) + relevant earlier conversation.
  4. Planning & Question Decomposition: The model splits a multi-part question into a sub-question checklist and turns asserted claims into verify: premises.
  5. Per-Sub-Question Context: Each sub-question gets its own targeted knowledge and related evidence — matching Living Report data, pinned evidence, prior findings, conversation recall, and semantic row candidates.
  6. Token Balancing (Self-Healing): guarded_generate fits the payload to the model's window — summarize, then slide — never dropping protected evidence; refuses rather than truncate the irreducible core.
  7. Agentic Tool Loop: Iterative SQL/search/intelligence tool calls with cycle detection, "keep-going" nudges, and a cross-iteration evidence ledger.
  8. Forensic Synthesis (Dual Output): Applying the Ghassan Elsman Protocol to produce both a chat answer and a structured Living Report block.
  9. Completion & Coverage: Final payload, action chips, and data viewers to the UI, plus a coverage note (which databases were consulted vs. skipped, and whether any result was a sample) for the human reviewer.

Eye Tool Arsenal

Eye is equipped with a suite of functional tools to manipulate data, generate reports, and hunt for intelligence.

Investigative & Data Tools

  • query_database: Executes raw SQL SELECT queries directly against forensic SQLite databases with automatic TOON compression. Identical queries are served from a per-case result cache (read-only DBs are static).
  • analyze_large_dataset: Map-reduce analysis over an entire oversized artifact — every row covered exactly once, each chunk sealed — instead of sampling.
  • search_artifacts: Performs text or regex searches across all available databases.
  • semantic_search_artifacts: Embedding-based discovery over forensic rows for fuzzy/conceptual questions; returns candidate rows with database:table:rowid provenance to confirm with exact SQL (SQL stays authoritative). Available when an embedding server is configured.
  • get_schema: Retrieves table schema information (columns, types) as a fallback mechanism.
  • query_correlation_results: Finds time-based or identity-based correlations from the Crow-eye Correlation Engine's results database.
  • list_case_files: Secure navigation of the active case directory to discover artifacts.

Reporting & Visualization (The Living Report)

  • report_append_section: Adds markdown narrative and synthesis to the report.
  • report_add_data_table: Generates interactive data tables for raw forensic evidence.
  • report_add_chart: Creates data visualizations (Bar, Line, Pie) for pattern analysis.
  • report_add_timeline: Constructs chronological timeline visualizations.
  • report_add_heatmap: Generates intensity heatmaps (e.g., login activity by hour/day).
  • report_add_chat_transcript: Documents AI reasoning or investigator dialogues.
  • report_add_chain_of_custody: Documents evidence handling procedures.
  • report_edit_section / report_delete_section: Modifies existing report blocks.
  • export_report: Triggers formal export to HTML, PDF, or Markdown.

Threat Intelligence Tools

  • query_threat_intel: Queries external intelligence (VirusTotal, AlienVault) for reputation data.
  • query_living_off_the_land_intel: Assesses if binaries/drivers are known dual-use tools (LOLBAS/LOLDrivers).
  • internet_search: Performs wide-spectrum research for emerging threats or techniques.

Correlation Authoring (GEP-gated)

  • correlation_create_wing / correlation_edit_wing: Author or edit Correlation Engine "Wings" (rule templates) — every write requires a stated reason and at least one evidence link, and is stamped with authorship.
  • correlation_create_semantic_mapping / correlation_edit_semantic_mapping: Define or edit identity/semantic field mappings. Eye may only edit items it authored.

Initial Triage Workflow

Upon starting a new case, Eye autonomously executes a "Master Forensic Triage Report", encompassing:

  1. System Identity & Network Discovery
  2. Authentication & Login Activity
  3. Evidence of Execution (Top 10 Apps)
  4. Persistence Mechanisms (Auto-Runs)
  5. Anti-Forensics & File Lifecycle
  6. User Intent (Search & Commands)
  7. Connected Hardware (USB Devices)
  8. Final Synthesis & Strategy

This ensures the investigator is immediately presented with a comprehensive, actionable overview of the endpoint's state.

Forensic Knowledge Base (RAG)

The Retrieval-Augmented Generation (RAG) service empowers the Eye Assistant with deep, artifact-specific forensic knowledge. Instead of relying on general LLM training data, Eye consults an internal library of markdown documents.

  • Artifact Schemas: Detailed breakdowns of database structures (e.g., global_schema_reference.md).
  • Forensic Methodology: Step-by-step investigative workflows and best practices.
  • Targeted Knowledge: Specific guides for each artifact (e.g., amcache_knowledge.md, prefetch_knowledge.md, usn_knowledge.md) outlining exactly what each field means and how it can be abused.

Ranked retrieval: knowledge is chunked header-aware and ranked by a dependency-free BM25 lexical ranker, or by vector embeddings when an embedding server is configured. After a question is decomposed, each sub-question pulls its own targeted knowledge (sub-question-aware retrieval).

Conversation Memory & Context

Eye keeps the investigation grounded across a long session while staying within the model's context window — and never loses committed evidence.

  • Two-stage memory policy: when the window fills, older non-evidence turns are first folded into a rolling summarization buffer, then the sliding window drops the oldest as a last resort. Pinned, evidence-flagged, and tool-result messages are always protected.
  • Conversation-recall RAG: turns that age out are archived per-case and retrieved on demand, so a specific earlier detail can still be recalled later — nothing is truly lost when the window fills.
  • Living Report evidence in context: the actual data committed to the report (table rows, references, chain-of-custody, timelines) is injected so the model reasons over what's already known. The generic case-open triage sweep is excluded to keep context relevant.
  • Per-sub-question knowledge + evidence: each sub-question receives its own targeted knowledge and related evidence (report/pinned data, prior findings, conversation recall, semantic candidates).

The Narrative Map — Persistent Working Memory

The model is stateless, so Eye keeps a per-case Narrative Map: a living claim hierarchy in its own window (mirroring the Compliance window) that is read into every prompt — so the map literally is the Eye's memory. Every card shows the claim being proven, never the raw question: the messy/typo-ridden prompt is distilled into a clean claim and kept only as meta.created_from provenance.

  • A four-level claim hierarchy (claims, not questions) that rolls up: Verdict (the user's goal as a claim) ← Main narrative (a sub-question the Eye sets out to prove) ← Sub-narrative (a specific behavior established, e.g. “wrote a Run registry key”) ← Evidence (the tool output that proves the behavior) — trace any verdict back to the artifact rows beneath it.
  • It is the memory (bidirectional): injected each turn as a case-overview block plus a per-sub-question slice (investigator notes verbatim). Your edits and notes feed Eye's next answer; Eye's findings push a narrative_map_updated signal so an open map window live-refreshes and pulses the card that changed.
  • Sealed & GEP-governed: every change is validated against the write-rules (Reason-Required, Evidence-Link, Eye-Stamped) and appended to a hash-chained audit (narrative_map_audit.jsonl, the EvidenceSeal pattern). A narrative is never “proven” without evidence, and a proven one that loses its last evidence auto-converts to negative — Eye never fabricates a finding.
  • An investigation surface: drag cards on a 2-D canvas with an auto-arranged tree; double-click for detail; right-click → Dive deeper to send Eye after more evidence; open any evidence node to load the real source artifact rows. Only the investigator may create 0-evidence needs / absolute narratives.

narrative_map_service.py · NarrativeMap.tsx · bridge getNarrativeMap / commitMapEdit.

The Narrative Map — Under the Hood

How the Narrative Map enforces traceability to source records and produces an auditable, tamper-evident chain: a strict data model, an honesty invariant enforced in code, a single audited mutation path, and a hash-chained chain of custody. (Source: narrative_map_service.py.)

1. The data model

A strict four-level claim hierarchy persisted to <case>/EYE_Logs/narrative_map.json and read fresh every turn by both the map UI and the Eye's prompt. Every node is a claim being proven, never the question that prompted it (the question survives only as meta.created_from):

  • Verdict — the user's goal expressed as a single goal-claim (one per case); carries its own lifecycle state (below).
  • Main narrative — a decomposed sub-question rendered as a claim the Eye sets out to prove (the reasoning-trace conclusion, or a deterministic _claimify(q) fallback); carries a state.
  • Sub-narrative — a specific behavior that establishes the main claim (e.g. “wrote a Run registry key for persistence”); carries a state.
  • Evidence — an artifact-backed fact that proves a behavior; lives inside a narrative, or floats free until attached.

Main claims roll up from their behaviors (a main is proven when any behavior is proven); the verdict rolls up from its main claims. If a sub-question yields no behavior breakdown, its main claim takes the evidence directly (a graceful three-level degrade) — still titled as a claim, never the raw question.

2. Narrative states

State Meaning Evidence rule
proven Established by evidence — or by proven sub-narratives. ≥ 1 evidence ref (or a proven child).
open A claim still being investigated. May have 0 evidence (in progress).
negative Checked — nothing established. Absence is the finding. Recorded with 0 supporting evidence.
needs An investigator hypothesis to test. Investigator-only; may hold 0 evidence.
absolute An investigator-stipulated fact. Investigator-only; may hold 0 evidence.

The Verdict carries a separate lifecycle state (VERDICT_STATES) that tracks the goal-claim as a whole, distinct from the per-narrative states above:

Verdict state Meaning
open The goal-claim is still under investigation (set the moment the question is decomposed).
proven At least one main claim was established, so the goal-claim holds.
unproven Every main claim was checked and none could be established.

3. Honest by construction

  • An Eye narrative may be open with no evidence (investigating), but it can never be proven with zero evidence.
  • A proven Eye narrative that loses its last evidence auto-converts to negative — unless it is upheld by at least one proven / absolute child (a main narrative may be proven by its sub-narratives, so it stays traceable to origin).
  • Creating an Eye narrative with no evidence is rejected; only the investigator may author 0-evidence needs / absolute narratives.

4. One audited mutation path — the GEP write-rules

Every change — by the Eye or the investigator — flows through a single commit() choke point: validate GEP → stamp authorship → apply → persist → seal. Three write-rules are enforced:

  • R9 — Reason-Required (hard): a reasonless mutation is refused and the graph is not touched.
  • R10 — Evidence-Link (soft): a narrative needs ≥ 1 evidence ref; the only sanctioned exemption is an investigator absolute / needs — otherwise it is logged partially_satisfied.
  • R11 — Eye-Stamped: every Eye write carries an authorship stamp.

Thirteen action types are audited: CREATE, EDIT, STATE_CHANGE, ATTACH, DETACH, MAKE_ABSOLUTE, MAKE_BASE, MARK_NEGATIVE, NOTE, LINK, UNLINK, DELETE, MOVE.

5. How it becomes the Eye's memory

Because the JSON is re-read each turn, any investigator edit or note is automatically in the Eye's next prompt, injected in two tiers:

  • Tier A — overview_block(): a compact ## Case Memory block (once per turn) — the verdict plus one line per narrative ([STATE] title — hint · N evidence · 📝note), sorted proven → open → absolute → needs → negative.
  • Tier B — relevant_slice(): for each sub-question, expands only the narratives whose keywords overlap — including evidence bullets and investigator notes verbatim, so human guidance actually steers the model.
  • Live & bidirectional: an Eye edit emits narrative_map_updated, so an open map window refreshes and pulses the card that changed.

6. Hash-chained audit (chain of custody)

Every commit appends one record to <case>/EYE_Logs/narrative_map_audit.jsonl with the same non-repudiation property as the Evidence Seal:

  • Record: seq, ts, action, actor, kind, target, reason, evidence[], gep{r9,r10,r11}, gep_rules_applied, payload_sha256, metadata_sha256, prevHash, hash.
  • Chain: hash = SHA-256(prevHash + payload_sha256 + metadata_sha256). The sequence and previous-hash advance only on a successful append — so any tampering breaks the chain on the very next record.

Semantic Retrieval & Embeddings

An optional embedding layer (e.g. nomic-embed-text via a local server) augments retrieval. It is strictly additive — when no embedding server is present, Eye falls back to the always-available BM25 ranker, so cloud and CLI deployments are unaffected.

  • Knowledge-base embeddings: vector search over the forensic knowledge base, with embeddings cached on disk so they are not recomputed each launch.
  • Evidence semantic index: a per-case index over a curated subset of forensic rows enables semantic_search_artifacts — meaning-based discovery of candidate rows for fuzzy questions ("remote access tools", "download cradle").
  • SQL stays authoritative: semantic hits are approximate and never complete. The model confirms every candidate with exact SQL, and uses SQL for any count, enumeration, or timeline — preserving completeness traceable to source records.

Result Cache & Coverage

  • Result cache: because case databases are read-only and static, an identical SQL query is reused from a per-case cache instead of being re-run — saving time and tokens, and surfacing "reused prior result".
  • Coverage signals: every answer records which databases were actually consulted versus which exist in the case, and whether any result was a sample rather than the full set. This is surfaced for the human reviewer — Eye makes gaps visible rather than silently claiming completeness, because sensitive evidence is always reviewed by a real investigator.

Directory Structure

eye/
backends/ Cloud & Local AI providers
bridge/ QWebChannel communication layer
services/ Context management, RAG, & PDF services
ui/ React frontend and PyQt wrapper
models/ Data models for reports and metadata
eye_bridge.py
requirements.txt

Configuration Reference (eye_config.json)

Eye's behavior is driven by eye_config.json, validated against eye_config_schema.json and editable from the in-app Settings dialog. The sections a developer tunes:

context_window

  • max_total_tokens — the model's usable window (auto-resolved for known cloud models; probed for local servers; this is the fallback).
  • token_budget — per-component budgets (conversation_history, system_prompt, tool_results, rag_context, conversation_recall); scaled to the window unless pinned.
  • evidence_preservation.confidence_threshold, store_full_payload, max_tool_output_chars.

reasoning

  • Decomposition + premise verification: enable_decomposition, max_sub_questions, enable_premise_verification, enable_reasoning_trace, enable_question_memory.
  • Generation tuning: answer_temperature, planning_temperature, max_output_tokens, model_retry_max_attempts.
  • Retrieval: rag_top_k, rag_min_score, rag_semantic_min_score, rag_subquestion_aware.
  • Conversation memory: history_window_turns, enable_summary_buffer, enable_conversation_recall, conversation_recall_top_k.
  • Large data: enable_auto_map_reduce, auto_map_reduce_row_threshold, search_max_rows.

embedding (optional)

  • enabled — turn on embedding-backed semantic retrieval (off ⇒ the always-available BM25 lexical ranker is used, so Cloud/CLI deployments are unaffected).
  • model (default nomic-embed-text), endpoint (Ollama API), timeout.
  • index_evidence — build the per-case semantic index that powers semantic_search_artifacts.

User Behavior Analytics (UBA)

Crow-Eye UBA turns a case's parsed artifacts into a plain-English activity story that a manager, HR reviewer, or investigator can read at a glance: what the person did, and what the computer did. It is built only from the forensic artifacts every Windows machine already keeps — no Sysmon, no extra auditing, no agent required — so it works on any default Windows configuration.

What it shows

A vertical timeline of activities, each written as a sentence and tagged so a non-technical reader understands it instantly:

  • Who — every activity is attributed to User, Application, or System, or left Unattributed when the evidence does not name an actor. UBA never guesses; the signed-in user is shown as a labelled association, not as proof of who acted.
  • What — program launches and runs, files created / edited / renamed / copied / deleted (with full rename name-history chains), folder and document access, USB devices, network activity, sign-ins and sign-outs, account administration, persistence (auto-start programs and services), and more.
  • How sure — a severity badge (routine → critical) and a confidence tier (corroborated by an event log, disk-artifact only, presence-only, or inferred), plus an honest caveat when an artifact can also be produced by software rather than the person.
  • Proof — every activity links to the exact source records (database, table, row) that justify it. Click for an inline proof summary; double-click to open the full evidence, down to the raw artifact rows.

How it works

A behavior rule engine reads the parsed artifact databases (UserAssist, BAM, Prefetch, ShimCache, AmCache, ShellBags, LNK / Jump Lists, USN Journal, $MFT, Recycle Bin, SRUM, Registry, and the Windows Event Logs) and applies a declarative rule set that correlates on-disk artifacts with event-log entries within strict time windows — for example, tying a UserAssist GUI launch to a Security 4688 process-creation event within a few seconds. Results are written to a derived, indexed store and served to the UBA window over the same QWebChannel bridge the Eye and Timeline windows use. All source databases are opened strictly read-only — the original evidence is never modified.

Honest by design — the Coverage panel

Because Crow-Eye targets any default Windows install, UBA is explicit about what it can and cannot see. A built-in “What we can see” panel lists, for every detection: how it is detected and which artifacts it uses, whether it is fully working, limited (the corroborating Windows log is not enabled, so it runs from disk artifacts at lower certainty), unavailable, or intentionally out of scope (needs optional telemetry such as Sysmon). Absence of a signal is reported as absence of the underlying data — never as a false “nothing happened.”

Using it

Open the case, then launch User Behavior from the toolbar (Ctrl+Shift+B). Filter by user, application, time range, behavior class, or severity; switch between the Activity Story timeline and an Activity Map (hour-of-day heatmap); and open the Coverage view to see exactly how each detection is derived. If a case has no parsed data yet, UBA tells you to parse the computer's artifacts first.

Narrative Map

The Narrative Map is Crow-Eye's visual story graph of a case: instead of a flat list of findings, it lays the investigation out as a claim hierarchy you can see and navigate — Verdict (the goal, as a claim) ← Main narrative (a question the Eye set out to prove) ← Sub-narrative (a specific behavior established) ← Evidence (the artifact rows that prove it). Trace any conclusion straight back down to the raw records beneath it.

See the case, don't just read it

  • An investigation surface — an interactive 2-D canvas with an auto-arranged tree: drag cards, double-click for detail, open any evidence node to load the real source artifact rows, or send the Eye after more proof with Dive deeper.
  • It is the Eye's living memory — the map is read into every prompt and updates live as findings land, so what you see always reflects the current state of the investigation.
  • Traceable and tamper-evident — every change is governed by write-rules (Reason-Required, Evidence-Link, Eye-Stamped) and appended to a hash-chained audit. A narrative is never marked proven without evidence, and a proven one that loses its last evidence auto-reverts — the Eye never fabricates a finding.

Deep dive: see Narrative Map — Persistent Working Memory and Narrative Map — Under the Hood in the Eye AI section.

Core Components

1. Main Application (Crow Eye.py)

The main application serves as the entry point and orchestrator for the entire system.

Responsibilities

  • Environment Setup: Creates and manages a virtual environment with required dependencies
  • UI Initialization: Sets up the PyQt5-based user interface with cyberpunk styling
  • Artifact Collection Coordination: Invokes appropriate artifact collectors
  • Data Visualization: Displays collected artifacts in tables and UI components
  • Case Management: Handles case creation, loading, and configuration

Key Functions

  • setup_virtual_environment(): Creates Python virtual environment
  • check_and_install_requirements(): Ensures all packages are installed
  • validate_dependencies(): Validates dependency functionality
  • is_admin(): Checks for administrator privileges
  • load_registry_data_from_db(): Master function for loading registry data

2. Styles System (styles.py)

Defines the cyberpunk-themed visual identity of Crow Eye with neon accents and dark backgrounds.

Features

  • Custom color palette with neon cyan (#00FFFF) accents
  • Dark theme optimized for long forensic sessions
  • Consistent styling across all UI components
  • Custom table styles with alternating row colors

3. Component Factory (component_factory.py)

Factory pattern for creating consistent UI elements throughout the application.

Created Components

  • Styled tables with custom headers
  • Search dialogs with filters
  • Progress indicators
  • Custom buttons and controls

Artifact Collectors

Each artifact collector is a specialized module for extracting and parsing a specific type of Windows forensic artifact.

Common Collector Pattern

All collectors follow this pattern:

  1. Locate: Find artifact source (files, registry keys, etc.)
  2. Parse: Extract binary data into structured information
  3. Store: Save results in SQLite databases
  4. Export: Generate JSON output for interoperability

1. Prefetch Parser (Prefetch_claw.py)

Parses Windows Prefetch files (.pf) to extract execution history.

Forensic Value

  • Program execution history
  • Last execution times (up to 8 timestamps)
  • Run count
  • Files and directories accessed by the program

Supported Versions

  • Windows XP/2003 (Version 17)
  • Windows Vista/7 (Version 23)
  • Windows 8/8.1/2012 (Version 26)
  • Windows 10/11 (Versions 30-31)

2. Registry Parser (Regclaw.py)

Extracts forensic artifacts from live Windows Registry hives.

Artifacts Collected

  • USB Devices & Storage
  • UserAssist (ROT-13 decoded)
  • Shellbags (folder access)
  • Recent Documents
  • Network Lists
  • Run/RunOnce keys
  • Installed Programs
  • Services
  • BAM/DAM (Background Activity Moderator)

3. Offline Registry Parser (offline_RegClaw.py)

Parses offline registry hives without requiring live system access.

Key Features

  • Hive Support: SYSTEM, SOFTWARE, SAM, SECURITY, NTUSER.DAT
  • Path Independence: No reliance on current system's registry API
  • Cross-Analysis: Analyze hives from different Windows versions

4. Amcache Parser (amcacheparser.py)

Parses Amcache.hve to identify application execution history.

Database Tables

  • InventoryApplication
  • InventoryApplicationFile
  • InventoryDriverBinary
  • DeviceCensus

5. Event Log Parser (WinLog_Claw.py)

Parses Windows Event Log files (.evtx).

Forensic Value

  • User logon/logoff events
  • Process creation (Event ID 4688)
  • Service installations
  • System events

6. Jump Lists & LNK Parser (A_CJL_LNK_Claw.py)

Parses Jump Lists and LNK (shortcut) files.

Forensic Value

  • Recently accessed files
  • Application usage patterns
  • File paths and network shares
  • Timestamps of file access

7. SRUM Parser (SRUM_Claw.py)

Parses System Resource Usage Monitor database.

Forensic Value

  • Application runtime and resource usage
  • Network connectivity data
  • Energy usage statistics

8. MFT Parser (MFT_Claw.py)

Parses the Master File Table from NTFS file systems.

Forensic Value

  • Complete file system timeline
  • File creation, modification, access times
  • Deleted file recovery
  • File attributes and permissions

9. USN Journal Parser (USN_Claw.py)

Parses the Update Sequence Number Journal.

Forensic Value

  • File system change tracking
  • File creation, deletion, renaming events
  • Detailed change reasons

10. Recycle Bin Parser (recyclebin_claw.py)

Parses Recycle Bin artifacts.

Forensic Value

  • Deleted file metadata
  • Original file paths
  • Deletion timestamps
  • File sizes

11. Shimcache Parser (shimcash_claw.py)

Parses the Windows Application Compatibility Cache (Shimcache) to track executable files that have been present on the system.

Forensic Value

  • Execution history (even if the file is deleted)
  • Full file paths
  • Last modification timestamps
  • Execution flags and status

Crow-claw: Advanced Collection Engine

Crow-claw is the high-fidelity collection core of Crow-Eye. It is designed to bypass operational system locks and provide deep access to hidden or protected forensic artifacts.

Raw Disk Access

Bypasses Windows API locks using raw_disk_access_strategy.py, allowing the engine to read files like MFT, Registry Hives, and Pagefiles while the system is live.

VSS Management

The integrated shadow_copy_manager.py automatically identifies, mounts, and parses Volume Shadow Copies, enabling historical analysis of system states.

Core Components

  • VSS Health Diagnostics: Automated volume consistency checks via vss_health_checker.py.
  • Error Classifier: Advanced error handling (error_classifier.py) to distinguish between access denials and corrupted data.
  • Multi-Strategy Collection: Dynamically switches between Standard, Shadow, and Raw access depending on the forensic context.

Forensic Image Parsing Engine

The Forensics Image Parsing module provides a robust, extensible architecture designed to analyze and extract artifacts from diverse forensic containers. By leveraging the Strategy Design Pattern and the dissect framework, it abstracts image complexity into a unified filesystem interface.

E01 / Ex01

Expert Witness Format support with intelligent loaders for segmented or missing image slices.

RAW / DD

Bit-for-bit raw copies with automated multi-part discovery (e.g., .001, .002).

VHDX / VMDK

Direct parsing of Hyper-V and VMware virtual disk formats for cloud and VM forensics.

Core Architectural Components

Image Parser (image_parser.py)

The central coordinator that detects formats through signature verification and manages the lifecycle of parsing strategies.

FS Accessor (file_system_accessor.py)

Abstraction layer handling complex NTFS features like Alternate Data Streams (ADS) and sparse file compaction ($J Journal).

Image Extractor (image_extractor.py)

The bridge between artifact definitions and parsed volumes, translating Windows environment variables for seamless extraction.

Partition Detector (partition_detector.py)

Scans for Volume Systems (MBR, GPT) and handles "Volume-Only" acquisitions without partition tables.

The Parsing Pipeline

  1. Detection: Cascading format checks via can_handle() electing the appropriate strategy.
  2. Mounting: Transparent mounting of containers and resolution of split segments.
  3. Discovery: Automated partition probing and creation of PartitionInfo metadata.
  4. Traversal: Mapping offset addresses to mount specific NTFS/FAT32 volumes.
  5. Extraction: Streaming artifact data while preserving forensic MAC timestamps.

Offline Artifact Importer

The Offline Importer subsystem allows investigators to process raw forensic artifacts that have been extracted from target machines or acquired via third-party tools. It provides a robust GUI for batch processing and validation.

Core Capabilities

  • Automated Discovery: Scans directories to automatically identify artifact types (Prefetch, EVTX, Registry Hives) using artifact_type_detector.py.
  • Batch Processing: Orchestrates multiple offline parsers concurrently using parser_invoker.py.
  • Validation & Indexing: Validates file integrity before parsing and builds a comprehensive scan index.
  • Standalone GUI: Provides a dedicated interface (offline_importer_gui.py) for managing imports outside of the live collection workflow.

Note — the scan feeds the parser for you. Scanning a source is read-only, but every artifact it finds is identified by type and written into the case's scan index as it goes. Parse Artifacts then opens with that discovered set already listed and grouped by category, so you never locate or add files by hand — you choose what to parse (or take everything with Select All) and Crow-Eye parses the found artifacts into the case database.

Timeline Module

The Crow-Eye Timeline is a sophisticated analytical engine that aggregates and correlates forensic artifacts into a unified, chronologically ordered interface. It utilizes a Hybrid Architecture to deliver high-performance visualization of massive datasets.

Hybrid Architecture (React + Python)

The timeline bridges a robust Python data-processing backend with a modern, responsive React frontend hosted within a PyQt5 QWebEngineView.

Timeline Bridge

Uses QWebChannel (timeline_bridge.py) for asynchronous, sub-millisecond communication between the React UI and the Python forensic logic.

OpenGL Visualization

The React frontend leverages the Canvas API and GPU acceleration to render 100k+ events across interactive swimlanes and heatmaps.

Core Data Orchestration

Data Manager (timeline_data_manager.py)

Manages a thread-safe connection pool to multiple artifact databases (MFT, Registry, SRUM, etc.) with optimized time-range indexing.

Timestamp Parser (UniversalTimestampParser)

Forensically normalizes Windows FILETIME, Unix Epoch, Mac Absolute, and OLE dates into standardized UTC ISO 8601 strings.

Optimization Strategies

  • Time-Sliced Querying: Prevents UI blocking by sampling and chunking data for different zoom levels.
  • Event Aggregation: Condenses raw events into high-level representations (e.g., system sessions) when viewed at macro scales.
  • Progressive Loading: Asynchronously fetches data as the investigator pans through the temporal viewport.

Investigation Workflow

  1. Initialization: TimelineDialog instantiates the bridge and loads the React build.
  2. Temporal Mapping: UI queries getTimeBounds() to map the absolute forensic scope of the case.
  3. Contextual Querying: As the analyst zooms, specific swimlanes (e.g., MFT, Network, Execution) request localized time-slices.
  4. Correlation: The correlation_engine.py identifies proximity-based relationships between isolated system events.

Dynamic Linking & Intelligence

The Dynamic Linking engine is the intelligence layer of Crow-Eye, responsible for enriching raw artifacts with system-level context and identifying hidden relationships between forensic data points.

Intelligence Engine (intelligence_engine.py)

The core logic that orchestrates link gathering and enrichment. It transforms anonymous IDs into human-readable investigative context.

Identity Enrichment

Automatically resolves Windows SIDs to Usernames and matches AppIDs to their friendly application names using local mapping databases.

Semantic Cross-Linking

Links diverse artifacts (e.g., Prefetch execution to LNK file creation) by identifying shared identifiers like file paths, hashes, or timestamps.

Knowledge Architecture

  • Rule Framework: Modular rules located in the rules/ directory define how different artifacts relate to each other.
  • Enrichment Database: High-speed IO (io/database.py) for managing the dynamic mapping state and persistent link history.
  • Intelligence IO: Handles the import/export of intelligence data for sharing across investigation teams.

Hash Reference — What Is Hashed, and Why

Crow-Eye stores several values that look like file hashes but serve entirely different purposes. This is the complete inventory, grouped by role, so a column is never mistaken for something it is not.

1. Windows-supplied hashes inside artifacts

Produced by Windows and only read by Crow-Eye. This is the only group that can be matched against threat-intelligence feeds, and only one entry is a hash of file contents.

Artifact & field Algorithm What it covers How it works IOC-matchable
AmCache file_id SHA-1 The file's contents Windows records the executable's SHA-1 padded to 44 characters as 0000 + 40 hex digits. Dynamic Linking matches the padded and the bare 40-character forms interchangeably, so a feed in either format works. Yes
Prefetch hash 32-bit SCCA path hash The path the program ran from Read from the SCCA header at offset 76 and repeated in the .pf filename (NOTEPAD.EXE-D8414F97.pf). The same binary launched from two directories yields two Prefetch files with different hashes, which is what makes it useful for spotting a program running from an unusual location. No — not a content hash
Jump List AppID Windows AppID hash The application's launch path The jump list filename is the AppID. A_CJL_LNK_Claw.py takes it from the filename and resolves it against the bundled Known_AppIDs.csv to populate AppType and AppDesc. No — identifies an app, not a file

2. Crow-Eye bookkeeping hashes

Computed by Crow-Eye to give a row a stable identity. Never evidence, and never a description of file contents — entry_hash in particular is a 32-character MD5 that is easily mistaken for an executable's MD5.

Where Algorithm What goes in Why it exists
ShimCache entry_hash
(shimcash_claw.py)
MD5 path + last_modified + data_size + cache entry position Backs a UNIQUE constraint so re-parsing the same hive cannot duplicate rows. Size and position are folded in so two genuine executions sharing a timestamp remain distinct.
artifact_id
(Offline Importer, image parsing)
MD5, first 16 characters The artifact's source path A short, stable record identifier for an artifact found during import, so the same file keeps the same id across runs.

3. Chain-of-custody integrity hashes

Computed over each evidence file Crow-Eye collects or imports, establishing that the copy analysed is the copy acquired. All are chunk-read so file size never bounds memory.

Where Algorithm What it covers How it works
Crow-claw collection
(crow_claw/core/validator.py)
MD5 and SHA-256 Every collected artifact file Hashed in 8 KB chunks during collection and written into the manifest as md5_hash and sha256_hash, alongside the access method and any validation warnings.
Offline Importer SHA-256 Each imported artifact file Hashed in 4 KB chunks during import, gated by the hash-calculation setting since hashing a large image costs time.
Eye · Imported Evidence SHA-256 Each imported database or document Recorded on import and re-verifiable on demand from the Imported Evidence panel.

4. The Eye's EvidenceSeal chain

A distinct role: proving what the model was shown. Detailed in Evidence Sealing & Hash Chains; summarised here for completeness.

Field Algorithm How it works
payload_sha256 SHA-256 Taken over the exact bytes the model received, with token count, model and context limit.
hash (chain link) SHA-256 SHA-256(prevHash + payload_sha256 + metadata_sha256). Sequence and previous hash advance only on a successful append, so tampering surfaces as a broken chain.

Matching hash IOCs

Only AmCache's file_id carries a hash of file contents, so SHA-1 is the one hash type Crow-Eye can match indicators against. An MD5 feed matches nothing: no parsed artifact table stores an executable's MD5.

Data Management Layer

The data layer handles all database operations, search functionality, and data loading.

Database Architecture

Crow Eye uses SQLite databases for storing parsed artifacts:

  • Case Databases: One database per case
  • Artifact Tables: Separate tables for each artifact type
  • Indexes: Optimized for timestamp and text searches

Key Components

  • database_manager.py: Connection and transaction management
  • base_loader.py: Base class for data loaders
  • registry_loader.py: Registry-specific data loading
  • mft_loader.py: MFT data loading with virtual tables
  • usn_loader.py: USN Journal data loading
  • search_engine.py: Full-text search across artifacts
  • index_manager.py: Database index optimization

Search Capabilities

  • Full-text search across all artifacts
  • Timestamp range filtering
  • Regular expression support
  • Multi-field queries
  • Search history tracking

UI Components

The UI layer provides a cyberpunk-themed interface for interacting with forensic data.

Component Factory Pattern

The component_factory.py module creates consistent UI elements:

  • Styled tables with custom headers
  • Search and filter dialogs
  • Progress indicators
  • Custom buttons and controls

Key Dialogs

  • case_dialog.py: Case creation and management
  • search_filter_dialog.py: Advanced search interface
  • row_detail_dialog.py: Detailed artifact view
  • Loading_dialog.py: Custom loading animations

Virtual Tables

For large datasets (MFT, USN), Crow Eye uses virtual tables:

  • On-demand data loading
  • Smooth scrolling for millions of records
  • Memory-efficient rendering
  • Pagination controls

Documentation Reference

For developers, contributors, and deep-dive technical research, Crow Eye maintains extensive markdown documentation within its repository. These guides cover architectural decisions, system orchestration, and contribution standards.

Crow-Eye Documentation — FAQ

Where to find the reference material behind each part of the engine.

Which Windows artifacts does Crow-Eye support?

Prefetch, the MFT and USN journal, the Registry, Windows Event Logs, AmCache, ShimCache, SRUM, LNK files, Jump Lists, the Recycle Bin and browser history, from a live system or an offline image.

Where is the binary format of each artifact documented?

In Eye-Describe, which breaks down the on-disk structure of each artifact field by field. The documentation here covers how Crow-Eye parses and correlates them; Eye-Describe covers what the bytes mean.

How does Crow-Eye record what the AI assistant did?

Every payload sent to a model is hashed into an Evidence Seal chain, and every tool call, reasoning step and context decision is recorded in the per-case Compliance panel — so the record enforces traceability to source records and produces an auditable, tamper-evident chain.

Can I extend Crow-Eye with my own parser?

Yes. Adding an artifact is documented as a defined process: write the parser, register its Feather schema, and it becomes available to the Correlation Engine and the Timeline like any built-in artifact.

Is Crow-Eye open source?

Yes, under GPL-3.0. The full source is on GitHub and contributions are welcome.