Skip to content

Graph Examples

Complete examples of research graphs for common use cases.

Basic Research

Simple web research with synthesis.

name: basic_research
description: Basic web research with AI synthesis

inputs:
  - name: query
    type: string
    required: true
  - name: max_urls
    type: int
    default: 30

stages:
  - name: discover
    sequential:
      - op: search
        params:
          query: "{{ query }}"
          max_results: "{{ max_urls }}"
        output: urls

  - name: fetch
    parallel_foreach:
      input: urls
      concurrency: 10
      operations:
        - op: fetch
          output: page

  - name: process
    sequential:
      - op: to_text_batch
        input: pages
        output: texts
      - op: chunk
        input: texts
        params:
          size: 500
        output: chunks

  - name: filter
    sequential:
      - op: semantic_filter
        input: chunks
        params:
          query: "{{ query }}"
          threshold: 0.5
        output: relevant

  - name: synthesize
    sequential:
      - op: integrate
        input: relevant
        params:
          query: "{{ query }}"
        output: synthesis

outputs:
  - urls
  - synthesis

Deep Dive with Entities

Research with entity extraction and network analysis.

name: entity_research
description: Deep research with entity extraction

inputs:
  - name: query
    type: string
    required: true
  - name: entity_focus
    type: string
    default: "person"

stages:
  - name: discover
    sequential:
      - op: search
        params:
          query: "{{ query }}"
          max_results: 50
        output: urls

  - name: acquire
    parallel_foreach:
      input: urls
      concurrency: 15
      operations:
        - op: fetch
          params:
            geo: "us"
          output: page

  - name: transform
    sequential:
      - op: to_text_batch
        input: pages
        output: texts
      - op: merge
        input: texts
        output: combined_text

  - name: extract
    parallel:
      - op: entities
        input: combined_text
        params:
          types: [person, organization, location]
        output: entities

      - op: topics
        input: combined_text
        output: topics

  - name: filter_entities
    sequential:
      - op: filter_entities
        input: entities
        params:
          types: ["{{ entity_focus }}"]
          min_confidence: 0.7
        output: focused_entities

  - name: synthesize
    sequential:
      - op: integrate
        input: texts
        params:
          query: "{{ query }}"
        output: synthesis

      - op: to_report
        input:
          synthesis: synthesis
          entities: focused_entities
          topics: topics
        params:
          template: entity_report
        output: report

outputs:
  - entities
  - topics
  - synthesis
  - report

Historical Analysis

Track changes over time using archives.

name: temporal_analysis
description: Historical content analysis

inputs:
  - name: url
    type: string
    required: true
  - name: start_date
    type: string
    default: "2020-01-01"
  - name: end_date
    type: string
    default: "2024-01-01"

stages:
  - name: discover
    sequential:
      - op: archive_discover
        params:
          url: "{{ url }}"
          from_date: "{{ start_date }}"
          to_date: "{{ end_date }}"
        output: snapshots

  - name: fetch
    parallel_foreach:
      input: snapshots
      concurrency: 5
      operations:
        - op: fetch_archive
          params:
            date: "{{ item.timestamp }}"
          output: content

  - name: analyze
    parallel_foreach:
      input: contents
      operations:
        - op: to_text
          output: text
        - op: entities
          input: text
          output: entities

  - name: compare
    sequential:
      - op: diff
        input: [texts[0], texts[-1]]
        output: changes

      - op: integrate
        input: texts
        params:
          query: "How has this content evolved?"
        output: evolution_summary

outputs:
  - snapshots
  - changes
  - evolution_summary

Multi-Source Comparison

Compare coverage across sources.

name: source_comparison
description: Compare how sources cover a topic

inputs:
  - name: topic
    type: string
    required: true
  - name: sources
    type: url[]
    required: true

stages:
  - name: fetch
    parallel_foreach:
      input: sources
      operations:
        - op: fetch
          params:
            url: "{{ item }}"
          output: page
        - op: to_text
          input: page
          output: text

  - name: analyze
    parallel_foreach:
      input: texts
      operations:
        - op: entities
          output: entities
        - op: sentiment
          output: sentiment
        - op: summarize
          output: summary

  - name: compare
    sequential:
      - op: compare
        input: texts
        params:
          aspects: ["coverage", "tone", "facts", "perspective"]
        output: comparison

outputs:
  - summaries
  - sentiments
  - comparison

Dark Web Research

Research using Tor network.

name: onion_research
description: Dark web content research

inputs:
  - name: onion_urls
    type: url[]
    required: true

stages:
  - name: fetch
    parallel_foreach:
      input: onion_urls
      concurrency: 3
      operations:
        - op: tor_fetch
          params:
            url: "{{ item }}"
            mode: "sticky"
          output: page

  - name: screenshot
    parallel_foreach:
      input: onion_urls
      concurrency: 2
      operations:
        - op: tor_screenshot
          params:
            url: "{{ item }}"
            timeout: 90000
          output: image

  - name: process
    sequential:
      - op: to_text_batch
        input: pages
        output: texts
      - op: entities
        input: texts
        params:
          types: [person, organization, product]
        output: entities

  - name: analyze
    sequential:
      - op: integrate
        input: texts
        params:
          query: "What services or products are offered?"
        output: analysis

outputs:
  - texts
  - entities
  - images
  - analysis

Iterative Crawling

Crawl with link following.

name: iterative_crawl
description: Crawl with link discovery

inputs:
  - name: seed_url
    type: string
    required: true
  - name: max_depth
    type: int
    default: 3

stages:
  - name: crawl
    loop:
      condition: "state.depth < params.max_depth AND NOT is_empty(state.pending)"
      max_iterations: 100
      state_init:
        depth: 0
        pending: ["{{ seed_url }}"]
        visited: []
        all_content: []
      operations:
        - op: fetch_batch
          input: state.pending
          output: pages

        - op: to_text_batch
          input: pages
          output: texts

        - op: extract_links
          input: pages
          output: links

        - op: filter_urls
          input: links
          params:
            exclude: state.visited
            same_domain: true
          output: new_links

      state_update:
        depth: "state.depth + 1"
        visited: "state.visited + state.pending"
        pending: "new_links[:50]"
        all_content: "state.all_content + texts"

  - name: synthesize
    sequential:
      - op: chunk
        input: state.all_content
        output: chunks

      - op: integrate
        input: chunks
        params:
          query: "Summarize all content found"
        output: synthesis

outputs:
  - state.visited
  - synthesis

Video Research

Research from YouTube content.

name: video_research
description: Extract insights from video transcripts

inputs:
  - name: query
    type: string
    required: true
  - name: max_videos
    type: int
    default: 10

stages:
  - name: discover
    sequential:
      - op: youtube_search
        params:
          query: "{{ query }}"
          max_results: "{{ max_videos }}"
        output: video_urls

  - name: transcribe
    parallel_foreach:
      input: video_urls
      operations:
        - op: fetch_transcript
          output: transcript

  - name: process
    sequential:
      - op: merge
        input: transcripts
        output: combined

      - op: chunk
        input: combined
        output: chunks

  - name: analyze
    parallel:
      - op: entities
        input: combined
        params:
          types: [person, topic, quote]
        output: entities

      - op: topics
        input: combined
        output: topics

  - name: synthesize
    sequential:
      - op: integrate
        input: chunks
        params:
          query: "{{ query }}"
        output: synthesis

outputs:
  - video_urls
  - entities
  - topics
  - synthesis

Combined VPN + Tor

Geographic and anonymous research.

name: comprehensive_intel
description: Combined VPN and Tor research

inputs:
  - name: clearnet_url
    type: string
    required: true
  - name: onion_url
    type: string
    required: true
  - name: regions
    type: string[]
    default: ["us:ca", "uk", "de"]

stages:
  - name: clearnet_regional
    parallel_foreach:
      input: regions
      operations:
        - op: fetch
          params:
            url: "{{ clearnet_url }}"
            geo: "{{ item }}"
          output: page

  - name: darkweb
    parallel:
      - op: tor_fetch
        params:
          url: "{{ onion_url }}"
        output: onion_page

      - op: tor_screenshot
        params:
          url: "{{ onion_url }}"
        output: onion_screenshot

  - name: compare_regional
    sequential:
      - op: to_text_batch
        input: regional_pages
        output: regional_texts

      - op: compare
        input: regional_texts
        params:
          aspects: ["content", "pricing", "availability"]
        output: regional_comparison

  - name: synthesize
    sequential:
      - op: to_text
        input: onion_page
        output: onion_text

      - op: integrate
        input: [regional_texts, onion_text]
        params:
          query: "Compare clearnet and darkweb presence"
        output: synthesis

outputs:
  - regional_comparison
  - onion_screenshot
  - synthesis