About the project
Why Synthesis exists
The web is full of AI that answers fast and proves nothing. Ask a hard question and you get a confident paragraph with no way to tell which parts are real. That gap — between sounds right and is right — is the whole reason this exists.
Synthesis treats research the way a careful person would: break the question apart, chase down sources in parallel, read them, cross-check the claims, and only then write — with a citation behind every line and a confidence label on every claim. And it does it in the open, so you’re never asked to take the answer on faith.
How it came together
Aug 2025
The itch
Every agent demo I tried answered with total confidence and cited nothing. I didn't want a better answer — I wanted to watch the work, and decide for myself whether to believe it.
Sep 2025
Design & scoping
Settled the core bet: the product is the visualization of the agent graph. Not a chatbot with sources stapled on — a control room where you see the plan fan out, tool calls land, and a report assemble itself.
Oct 2025
MVP — one agent, real tools
A single agent streaming a cited answer over SSE, backed by real search → fetch → chunk → embed → retrieve. The first time it cited a URL I could actually open, the whole idea clicked.
Nov–Dec 2025
The part that broke everything
Planner plus parallel researchers, all draining through one concurrent event bus. Frames arrived out of order, lanes stepped on each other, and a single slow fetch could stall the stream. I rewrote the bus three times before the ordering held under load. This is the part I'm proudest of — and the part that nearly made me cut parallelism entirely.
Jan 2026
The critic loop
Added the agent that re-reads every claim against the passages it cites, labels confidence (supported / single-source / disputed), and triggers a bounded revise loop. Dangling citations now get flagged instead of shipped.
Mar 2026
Report, graph, share, MCP
The editorial report with inline citations, an interactive evidence graph, persisted shareable run URLs, a cost meter, Markdown/PDF export — and an MCP server so other agents can call the same tools.
Jun 2026
Polish & launch
Accessibility pass, the boring-but-essential empty/loading/error states, docs, an About surface, and a clean deploy to Vercel.
Key features
Live control room
A lane per agent — planner, each parallel researcher, critic — streaming tool calls and thoughts as they happen, with a plan strip and a report that types itself in.
Cited & verified
Every claim carries an inline [n] citation; the critic ledger labels each claim's confidence; dangling citations are detected automatically.
Evidence graph
An interactive SVG linking claims to the sources that support them, coloured by confidence — hover a node to trace its evidence.
Shareable, cost-aware runs
Every completed run persists to a read-only /run/<id> URL, with a per-run token and USD meter and tiered models (fast researchers, strong synth/critic).
Interesting decisions & challenges
A concurrent event bus, not a request/response chain
Agents are many independent producers; the SSE route is a single consumer. A many-producer / single-consumer bus with typed, lane-oriented RunEvents let parallel researchers stream simultaneously without clobbering each other — and made the live UI a direct projection of what the graph is doing.
Verification as a first-class agent
Instead of trusting the model to cite well, a separate critic extracts claims and checks each against its cited passages. Confidence labels and the bounded revise loop come straight from that check — citation integrity is enforced, not assumed.
An offline fallback for every dependency
LLM, search, embeddings, vector store, run history — each has a real implementation and a zero-infra mock. The pipeline runs with no keys and no containers, which forced clean seams between the agents and the world they talk to.
Tech stack — and why
- Next.js (App Router)one TypeScript codebase for UI and orchestration, with native server streaming.
- TypeScript (strict) + zodagent I/O is a contract; types and runtime validation catch the dumb failures early.
- Server-Sent Eventsthe simplest thing that streams one-way — no websocket server to babysit.
- Google Gemini (adapter)tiered models behind a provider-agnostic interface — cheap/fast for research, strong for synthesis.
- SearXNGreal web search, self-hosted, no metered API in the loop.
- Postgres + pgvectorretrieval that survives a restart — with an in-memory cosine store as the offline fallback.
- Model Context Protocolexposes the research tools so any MCP client can reuse them.
- Tailwind v4 + Vitestdesign tokens live in CSS; the parts that must not regress (chunking, citations, parsing) have tests.
Project links
Want to build something or collaborate?
I’m always up for a sharp problem — especially the ones that look like magic in a notebook and need someone to make them survive production.
Get in touch