An AI newsroom apparatus for a single reporter — one sentence of beat prose in; a grounded, self-filtering, self-remembering, self-writing radar out.
Built at Agent Hack Day (Bright Data × Moss, SF, July 18 2026).
A reporter's job is three jobs: watching dozens of sources, remembering what they've already seen, and writing about what's new. Beat Radar does all three from one input:
- Describe your beat — one sentence, plus optional handles/sites to monitor and your own X handle.
- Grounded planning — Sonnet 5 plans the radar with live web searches (Bright Data SERP as its search tool), streaming its reasoning and every search into a visible chain-of-thought. The plan lands as editable panels, each aimed at a specific scraping capability.
- Live scan — four parallel Bright Data jobs: X profile scraping + Reddit keyword discovery (Web Scraper API, async trigger→poll), Google news search (SERP API), tracked-site fetches (Web Unlocker). Every item is relevance-filtered against the beat by Sonnet — with a written reason for every cut, auditable in the UI.
- Stories with two judgments — survivors cluster into cited stories carrying two independent tags: editorial urgency (
breaking/developing/context, judged from content) and memory novelty (new/update/seen before, judged against everything the radar has ever indexed in Moss). Slow sources fold in late and stories re-cluster live. - Voice drafting (RAG on yourself) — your own posts are scraped and indexed into Moss tagged
isOwn; each story retrieves your 3 most similar past posts as style exemplars and Sonnet drafts the post in your voice — facts from sources, cadence from you, reference posts shown for proof. - Ask your memory — a persistent search bar over everything ever scanned: in-process semantic recall with a live ms readout (~2–5ms) and a keyword↔semantic blend slider.
Bright Data — Web Scraper API (X posts by profile; Reddit discover-by-keyword) via async POST /datasets/v3/trigger → /progress → /snapshot polling; SERP API (news search and as Sonnet's grounding tool during planning); Web Unlocker (tracked-site page fetches as markdown).
Moss — one cloud-built semantic index (beat-radar) loaded in-process for millisecond hybrid queries; addDocs upserts on every scan; metadata filtering (isOwn) for voice retrieval; hybrid alpha blending exposed as the UI slider; novelty detection via timestamped recall of prior scans.
Vercel AI SDK + AI Gateway — Sonnet 5 (anthropic/claude-sonnet-5) for planning (streaming tool-loop + reasoning), relevance judging, clustering, novelty judgment, and voice drafting; ai-elements + shadcn for the streamed chain-of-thought UI.
pnpm install
pnpm dev # localhost:3000.env.local:
AI_GATEWAY_API_KEY=… # Vercel AI Gateway (Sonnet 5)
BRIGHTDATA_API_KEY=… # raw REST (Web Scraper API)
BRIGHTDATA_API_TOKEN=… # @brightdata/sdk (SERP + Unlocker)
MOSS_PROJECT_ID=… # portal.usemoss.dev
MOSS_PROJECT_KEY=…
# MOSS_DISABLED=1 # optional: zero-quota mode, memory features degrade gracefully
Reset demo memory: node --env-file=.env.local --experimental-strip-types scripts/reset-memory.ts
- Next.js 16 App Router; all state client-side + one JSON sidecar (
.radar-seen.json) preserving first-seen timestamps so re-scans can't erase the "seen before" signal. No auth, no database. - Moss client + loaded index + seen-set live on
globalThis— Next dev instantiates one module per route, and duplicate loaded-index sessions burn metered runtime. - Every AI judgment (plan reasoning, filter cuts, cluster rationale, draft reasoning) is surfaced in the UI — the demo is the audit trail.