Dark web intelligence gathering is notoriously inefficient. Security analysts routinely burn dozens of hours wrestling with fragile Boolean operators, navigating unindexed .onion nodes, and parsing megabytes of unstructured, irrelevant text returned by low-fidelity search engines. The problem is rarely finding data; it is extracting signal from an overwhelming torrent of operational noise.
Robin is an open-source, modular AI agent built specifically to attack this bottleneck. Instead of acting as a naive search scraper, Robin injects a multi-model LLM pipeline directly into the dark web OSINT loop to automate query transformation, content filtering, and artifact synthesis.
The Tri-Stage LLM Pipeline
Robin splits the investigation workload into three decoupled, programmatic stages:
- Intent-to-Query Refinement: Instead of relying on manual boolean syntax that frequently breaks across different dark web engines, Robin processes natural language investigator prompts through an LLM to generate high-precision, optimized search strings.
- Noise Discrimination: Dark web search engines return massive, low-relevance payloads. Robin's extraction layer filters the raw stream against the original investigative scope, discarding garbage data before it hits the analyst's desk.
- Structured Synthesis: Once target content is harvested, the model synthesizes the raw findings into an actionable executive summary, cutting manual review time to minutes.
Architecture & Feature Matrix
Robin is engineered for modularity, clean separation of concerns, and local execution.
| Feature | Architectural Implementation |
|---|---|
| Modular Architecture | Decoupled pipeline separating search routing, scraping tasks, and LLM processing layers. |
| Multi-Model Support | Native support for OpenAI, Claude, Gemini, Ollama, and any OpenAI-compatible API (LM Studio, llama.cpp, Groq). |
| Interactive Interface | Web UI powered by Streamlit, eliminating the need for custom CLI scripts during live analysis. |
| Container-First Design | Docker-based isolation ensuring clean runtime environments without dependency conflicts. |
| Stateful Artifact Logging | Local persistence layer for evidence collection, downstream triage, and client deliverables. |
| Plugin Extensibility | Open interfaces to mount custom search engines, specialized inference endpoints, or novel output formats. |
Operational Security & Legal Boundaries
Operating in dark web spaces requires strict adherence to legal frameworks and operational security (OpSec). Robin is built exclusively for authorized investigations and educational research. Interacting with certain dark web services can violate regional laws; users maintain full liability for what they query and collect.
From an OpSec standpoint, sending indicators of compromise, raw dumps, or target identifiers to commercial cloud APIs introduces significant data leakage risks. When using hosted models like OpenAI, Anthropic, or Google, verify their specific data retention terms. For sensitive investigations, route tasks through local inference engines using Ollama, LM Studio, or llama.cpp.
Prerequisites: Network & Model Routing
Robin relies on two baseline requirements: Python 3.10+ and an active Tor daemon for routing onion traffic.
1. Tor Daemon Setup
Ensure the local Tor proxy is operational:
- Linux / WSL:
bashapt install tor systemctl start tor
- macOS:
bashbrew install tor brew services start tor
2. LLM Provider Configuration
Credentials can be passed via a .env file (modeled after .env.example) or exported as system environment variables.
If you are running Ollama on your bare-metal host while executing Robin inside a container, bind the host bridge:
- Set
OLLAMA_BASE_URLtohttp://host.docker.internal:11434 - Ensure Ollama listens across interfaces:
bashOLLAMA_HOST=0.0.0.0 ollama serve &
For endpoints like LM Studio, llama.cpp, or Groq, navigate to the 🔌 Custom API Provider panel inside the Streamlit sidebar. Enter the base URL, API key, and model name directly. Manual model specification is mandatory if the target provider does not support the /v1/models discovery endpoint.
Deployment Workflows
Option 1: Containerized Execution (Recommended)
Docker isolates the Python runtime, network configurations, and UI services.
Pull the upstream image:
bashdocker pull apurvsg/robin:latest
Launch an ephemeral session:
bashdocker run --rm \ -v "$(pwd)/.env:/app/.env" \ --add-host=host.docker.internal:host-gateway \ -p 8501:8501 \ apurvsg/robin:latest
To maintain investigation logs across runs, mount the local data directory:
bashdocker run --rm \ -v "$(pwd)/.env:/app/.env" \ -v "$(pwd)/investigations:/app/investigations" \ --add-host=host.docker.internal:host-gateway \ -p 8501:8501 \ apurvsg/robin:latest
Access the dashboard at http://localhost:8501.
Option 2: Bare-Metal Setup
For direct development or debugging:
bashpip install -r requirements.txt streamlit run ui.py
Open http://localhost:8501 to access the interface.
Contributions & Upstream Lineage
Robin builds directly on proven security concepts and open tooling:
- Concept architecture adapted from Thomas Roccia’s Perplexity of the Dark Web demo.
- Core engine mechanics informed by the OSINT Tools for the Dark Web project.
- Investigative prompt routines derived from OSINT-Assistant.
- Project branding designed by Tanishq Rupaal.
To contribute features, fixes, or custom engine modules, fork the repository, cut a topic branch, and submit a pull request via standard GitHub workflows.
Reference
- Project Repository: https://github.com/apurvsinghgautam/robin
