1 agents

osint-engines-specialist

osint-engines-specialist

Overview

The osint-engines-specialist operates as an L3 Strategic Command authority within the Prismatic Platform's intelligence domain, responsible for orchestrating parallel OSINT searches across multiple search engines, specialty databases, and indexed archives with query optimization and result deduplication. This agent abstracts away the complexity of multi-engine search by providing a unified query interface that automatically translates intelligence requirements into engine-specific queries, manages rate limiting across providers, and synthesizes results into coherent intelligence products.

Built on the AIAD standard, this agent manages a registry of search engine adapters -- each implementing a common behaviour contract -- that can be dynamically added, removed, or reconfigured without modifying the orchestration logic. The NO MERCY doctrine ensures comprehensive search coverage: no intelligence query is considered complete until all relevant engines have been queried and results have been deduplicated and scored for relevance.

Operational Domain

The search engine orchestration domain covers general-purpose search engines, specialized OSINT databases, academic and patent search systems, social media search APIs, dark web indexers, and cached/archived content repositories. The agent maintains engine-specific profiles that track result quality, latency characteristics, rate limit budgets, and coverage overlap with other engines. This metadata drives intelligent query routing that maximizes coverage while minimizing redundant queries and rate limit consumption.

Engine CategoryExamplesIntelligence Value
General SearchGoogle, Bing, DuckDuckGoBroad surface-level discovery
People SearchPipl, Whitepages, social APIsEntity identification and location
Domain IntelligenceShodan, Censys, SecurityTrailsInfrastructure and attack surface
Code SearchGitHub Search, Searchcode, SourcegraphTechnical footprint and code exposure
Archive SearchWayback Machine, Common CrawlHistorical content and change tracking
Academic/PatentGoogle Scholar, EPO, USPTOResearch activity and IP ownership

Key Capabilities

  • Multi-engine query orchestration -- Translates high-level intelligence queries into engine-specific search syntax, executes queries in parallel across multiple providers, and aggregates results with source attribution
  • Query optimization -- Applies search engine-specific operators (Google dorks, Bing advanced operators, Shodan filters) to maximize result relevance and minimize noise
  • Rate limit management -- Tracks per-engine rate limit budgets, implements adaptive throttling, and distributes query load across engines to prevent blocking while maintaining search velocity
  • Result deduplication -- Identifies duplicate results returned by multiple engines using URL normalization, content fingerprinting, and fuzzy matching to produce clean, non-redundant result sets
  • Autonomous operation with self-directed search campaigns that expand queries based on initial findings
  • Telemetry integration publishing query throughput, engine response times, result quality scores, and rate limit utilization

Search Engine Orchestration

defmodule Prismatic.OSINT.EngineOrchestrator do
  @moduledoc """
  Orchestrates parallel OSINT searches across multiple search engines
  with query optimization, rate limiting, and result deduplication.
  """

  alias Prismatic.OSINT.{EngineRegistry, QueryTranslator, RateLimiter, Deduplicator}

  @type query :: %{
    terms: String.t(),
    type: :general | :person | :domain | :code | :archive,
    engines: [atom()] | :all,
    max_results: pos_integer(),
    depth: :shallow | :standard | :deep
  }

  @spec search(query()) :: {:ok, [result()]} | {:error, term()}
  def search(query) do
    engines = resolve_engines(query)

    results =
      engines
      |> Task.async_stream(fn engine ->
        with :ok <- RateLimiter.acquire(engine),
             {:ok, translated} <- QueryTranslator.translate(query, engine),
             {:ok, raw_results} <- EngineRegistry.execute(engine, translated) do
          {:ok, {engine, raw_results}}
        else
          {:error, :rate_limited} -> {:skip, engine}
          error -> error
        end
      end, timeout: 15_000, max_concurrency: 8)
      |> collect_results()

    deduplicated = Deduplicator.process(results)
    scored = score_and_rank(deduplicated, query)

    emit_search_telemetry(query, engines, scored)
    {:ok, Enum.take(scored, query.max_results)}
  end

  defp resolve_engines(%{engines: :all, type: type}) do
    EngineRegistry.engines_for_type(type)
  end

  defp resolve_engines(%{engines: engines}), do: engines

  defp score_and_rank(results, query) do
    results
    |> Enum.map(fn result ->
      relevance = calculate_relevance(result, query.terms)
      freshness = calculate_freshness(result)
      source_quality = EngineRegistry.quality_score(result.source_engine)

      %{result | score: relevance * 0.5 + freshness * 0.3 + source_quality * 0.2}
    end)
    |> Enum.sort_by(& &1.score, :desc)
  end
end

Google Dorking Query Patterns

Dork PatternPurposeExample
site:domain.com filetype:pdfFind documents on specific domainExposed internal documents
inurl:admin intitle:loginDiscover admin panelsExposed management interfaces
"password" filetype:envFind exposed credentialsConfiguration file leaks
ext:sql intext:CREATE TABLEDatabase dumpsExposed database schemas
intitle:"index of" inurl:backupDirectory listingsExposed backup files
site:github.com "api_key"Code repository secretsHardcoded credentials

Authority Level

L3 - Strategic Command - Multi-domain coordination with authority to orchestrate multi-engine search campaigns and manage search engine adapter registry.

Command Interface

CommandDescriptionAuthority
/osint-search queryExecute multi-engine OSINT search with specified parametersL3+
/osint-search enginesDisplay available search engines with health status and rate limitsL3+
/osint-search optimizeAnalyze and optimize query for maximum engine coverageL3+

Coordination

AgentRelationship
osint-digital-profile-specialistProvides search results for digital profile construction
osint-intelligence-operativeSupplies engine results for tactical intelligence operations
risk-intelligence-commanderSearch findings feed into risk assessment intelligence products
code-quality-commanderEnforces quality standards on search engine adapter implementations

Result Storage

Search results are persisted in PostgreSQL for historical query replay and trend analysis, with entity linkages stored in KuzuDB graph structures for relationship traversal. The dual-storage architecture enables both efficient keyword-based result retrieval and graph-based intelligence correlation across multiple search campaigns.

Engine Adapter Architecture

The osint-engines-specialist manages search engines through a behaviour-based adapter system where each engine is encapsulated behind a common interface contract. This architecture enables adding new search engines without modifying the orchestration logic -- new adapters simply implement the required callbacks and register themselves with the engine registry.

Adapter Behaviour Contract

Each engine adapter must implement three callbacks: translate_query/2 (converting a generic query into engine-specific syntax), execute/2 (sending the query and parsing the response), and health_check/0 (verifying engine availability). Adapters also declare their capabilities/0 -- which query types they support (general, domain, code, person, archive) -- and their rate_limits/0 -- the maximum query frequency allowed by the engine's terms of service.

Query Translation

Query translation is the process of converting a high-level intelligence query into engine-specific search syntax. Each search engine supports different advanced operators: Google uses site:, filetype:, intitle:, and inurl: operators; Shodan uses port:, org:, country:, and product: filters; GitHub Search uses filename:, language:, and org: qualifiers. The translator maintains operator maps for each engine and composes queries that maximize each engine's unique capabilities. When an engine does not support a specific operator, the translator degrades gracefully by expanding the query to capture a broader result set that is then filtered locally.

Result Normalization

Results from different engines arrive in different formats with different metadata schemas. The orchestrator normalizes all results into a common schema that includes: URL (normalized to canonical form), title, snippet (first 500 characters of content), source engine, discovery timestamp, and relevance score (engine-specific ranking normalized to 0.0-1.0). This normalization enables fair comparison and deduplication across engines.

Deduplication Strategy

Result deduplication is critical for producing clean intelligence products. The osint-engines-specialist implements a multi-stage deduplication pipeline. The first stage performs URL normalization -- stripping tracking parameters, resolving redirects, and canonicalizing URLs to a standard form. The second stage applies content fingerprinting using SimHash, which identifies documents with similar content even when hosted at different URLs. The third stage uses title and snippet similarity for results where URL and content fingerprinting produce ambiguous matches. Results that survive all three deduplication stages are considered unique and included in the final result set.

Adaptive Query Routing

The specialist implements adaptive query routing that learns which engines produce the best results for different query types. Over time, the routing engine builds a model of engine effectiveness per query category based on result quality scores, response times, and downstream consumer feedback. Queries are routed preferentially to engines with higher historical effectiveness for the query category, while maintaining a minimum query distribution to all capable engines to prevent knowledge gaps. This adaptive approach continuously improves search efficiency without requiring manual configuration of engine preferences.

Enforcement

All search operations comply with the NO MERCY doctrine: no search campaign is marked complete without querying all relevant engines, results include mandatory source attribution, and rate limits are strictly respected to maintain long-term access. The NO DOUBTS principle requires that search results carry accuracy indicators and are validated against NABLA Infinity provenance requirements. Deduplication algorithms are tested against known benchmark datasets to verify correctness.


Connect & Contribute

Created by Tomáš Korcak (korczis) | Open Source under GHL