Simon-Pierre Boucher
All apps & projects
Web Platform
TypeScript

Search-Box

Don't search the web. Search the answer space.

Search-box.ai is a multi-step agentic web research engine: given a hard question it forms hypotheses, extracts verbatim evidence, surfaces contradictions, updates beliefs — and streams a fully sourced answer while you watch every step live at www.search-box.ai.

6

links in the provenance chain (sentence → claim)

8

workspace packages in the monorepo

3

evidence stances: supports / contradicts / context

40–90%

differentiated per-claim confidence (benchmark run)

8× vs 4×

real vendor contradiction caught autonomously

0

fake progress animations — every event is real

Overview

Search-box.ai answers hard questions the way a researcher would, not the way a search engine does. Given a question it autonomously forms hypotheses, decomposes its own uncertainty, runs purposeful searches, opens sources, extracts verbatim evidence, surfaces contradictions, and updates beliefs — repeating until the evidence supports a synthesis. There is no fixed pipeline: Claude decides the research strategy through tool use, while the app enforces safety with hard budgets, Zod-validated tool contracts, an SSRF guard, and prompt-injection defense on all scraped content.

Claims and evidence are first-class objects: verbatim quotes tied to falsifiable claims with stances (supports / contradicts / context) and probabilistic confidence. Contradictions are treated as a research success, not an error state, and provenance is never lost — every answer sentence traces mechanically through sentence → [n] marker → citation index → source → evidence → claim.

The UI is event-sourced end to end: PostgreSQL holds the durable research state, the client replays the persisted event stream over SSE with Last-Event-ID recovery, and nothing on screen is a fake progress animation. Built on the Anthropic Claude API for reasoning and orchestration and Firecrawl for web infrastructure, organized as a pnpm monorepo of eight focused packages, and validated end-to-end on a real research problem about transformer KV-cache compression.

Key Features

No fixed pipeline

Claude decides the research strategy through tool use — understand the objective, form hypotheses, decompose uncertainty, pick the next action — instead of a canned query → scrape → summarize flow.

Claims & evidence as first-class objects

Verbatim quotes tied to falsifiable claims with stances (supports / contradicts / context) and probabilistic confidence — beliefs update as evidence arrives.

Contradictions are a success

Conflicting sources are surfaced, not smoothed over — the benchmark run caught a vendor blog claiming 8× "comparable" compression where the peer-reviewed paper only claims lossless behavior up to 4×.

Provenance never lost

Every answer sentence traces mechanically: sentence → [n] marker → citation index → source → evidence → claim. No orphaned citations, no invented references.

Event-sourced UI

The client replays the persisted event stream over SSE with Last-Event-ID recovery — every node on screen corresponds to a real backend event stored in PostgreSQL.

Safety enforced by the app

Hard budgets, Zod-validated tool contracts, an SSRF guard on fetches, and prompt-injection defense on all scraped content — the model proposes, the backend disposes.

How It Works

  1. Understand & hypothesize

    The engine restates the objective, forms explicit hypotheses, and decomposes what it does not yet know into addressable uncertainty.

  2. Act on the web

    Claude picks the next action — purposeful searches and source opens through the Firecrawl adapter, every tool call validated against a Zod contract and counted against hard budgets.

  3. Extract & update beliefs

    Sources yield verbatim evidence tied to falsifiable claims with stances and confidence; beliefs update, and gaps or contradictions drive the next iteration.

  4. Persist every event

    The ResearchState service writes claims, evidence, sources, and contradictions to PostgreSQL; a typed event protocol streams each step to the client over SSE.

  5. Synthesize with provenance

    The final answer streams live, every sentence carrying a citation that resolves mechanically through the index to a source, its evidence, and the claim it supports.

Tech Stack

Agent

Anthropic Claude API (reasoning & orchestration)
Firecrawl v2 (search & scrape) + SSRF guard
Zod-validated tool contracts
Hard research budgets

Platform

Next.js (App Router) + SSE with Last-Event-ID recovery
pnpm monorepo — 8 packages (agent, research, firecrawl, anthropic, events, db, shared, web)
PostgreSQL durable research state
CLI session runner (pnpm research)

Deployment

Node m3u96a behind ngrok
www.search-box.ai
Mobile-first, one-handed UI

Highlights

  • Validated on a real research problem — transformer KV-cache compression — in one autonomous session with no human steering
  • Assigned differentiated confidence per claim (40% / 85% / 90%) instead of a single global score
  • Caught a genuine contradiction: a vendor blog presenting 8× compression as "comparable" quality where the paper only claims lossless behavior up to 4×
  • Every UI update corresponds to a real backend event — the research graph is a replay, not an animation
  • Prompt-injection defense treats all scraped content as untrusted data, never as instructions
  • Runs from the terminal too: pnpm research "your hard question here"

Explore Search-Box

Don't search the web — search the answer space — the full source is on GitHub.