Swarm engine online

Counterpoint
Engine

Four agents. One cyclic graph. Give it a claim and watch Orchestrator, Scraper, Graph Builder, and Critic argue it out live -- scraping evidence, building a knowledge graph node by node, and re-searching itself until confidence clears 80%.

The Swarm — 04 Agents

01

Orchestrator

Breaks your query into sub-tasks and terse search queries. On a re-search cycle it reads the Critic's gap list and narrows in instead of repeating itself.

02

Scraper

Runs a headless Playwright session against every query, pulls full page text from each result, and streams a live line per source fetched.

03

Graph Builder

Extracts entities and relationships from fresh evidence, writes them to Neo4j, and pushes incremental nodes into the WebGL graph in real time.

04

Critic

Scores confidence against the evidence. Below 80%, it names exactly what's missing and loops the swarm back to the Orchestrator to close the gap.

Research cycles
Up to 3
Auto re-search below 80% confidence
Evidence store
Qdrant
Local fastembed vectors, no API key
Graph persistence
Neo4j
Entity + relationship upserts per cycle

One Query, Traced End to End

Query submitted

You assert a claim or ask a question. No form fields, no config -- one input.

"Did Nvidia acquire an AI chip startup in the last 6 months?"

Orchestrator plans

Splits the claim into sub-tasks and terse search queries.

sub_tasks: ["Nvidia M&A 2025-26", "AI chip startup acquisitions"]

Scraper gathers

Headless Chromium fetches full page text from every unique result.

11 sources fetched · 4 unique domains

Graph Builder structures

Entities and relationships are extracted and upserted into Neo4j live.

+16 entities · +8 relationships

Critic grades

Scores confidence against the evidence and names exactly what's thin.

confidence: 0.71 -- missing: official acquisition filing

Verdict

Once confidence clears 80% (or cycles run out), the swarm commits.

verified · confidence 0.91 · cycle 2 of 3

Below 80% confidence, the Critic hands the Orchestrator a specific gap and the loop above runs again -- up to 3 cycles -- instead of repeating the same search.