Inspiration

News feels loud; facts feel faint. We wanted a tool that shows where bias hides in wording and framing—and lets readers view a neutral alternative without handing their article to anyone else. The idea: weigh evidence with a multi-agent “tribunal,” then keep rewriting and summaries device-side so the reading experience stays personal, quiet, and under the user’s control.

What it does

  • Choose your scan path: a cloud tribunal for breadth or an on-device model when you want everything to stay on your machine.
  • Real-time fact-checking: optional Google Search grounding verifies claims with external sources—6-8 strategic queries per article, cited in tribunal analysis (Cloud Mode only).
  • Explainable verdicts: specialized agents (Context, Language, Bias Hunter, Skeptic, Prosecutor, Defense) argue the case; a Judge issues rating + confidence with linked evidence.
  • In-page highlights: biased phrases vs. neutral phrasing, shown directly on the article.
  • Results dashboard: verdict, confidence, transcripts, grounding citations, and reasoning you can audit.
  • Local clarity: rewrites and summaries run on-device (Gemini Nano)—no forwarding, no waiting for servers.
  • History & flow: quick/deep modes, side-panel controls, and a timeline of past analyses.

How we built it

  • Chrome MV3 extension: service-worker orchestrator (background/), content extraction (content/), Side Panel UI (sidepanel/), and a rich Results page (results/).
  • Hybrid analysis
    • Cloud Tribunal (Gemini API): parallel agents with optional Google Search grounding that generates 6-8 strategic verification queries, executes real-time searches, and provides external citations; Judge synthesizes a defensible verdict with fact-checked context.
    • On-device path: scanning option backed by device-resident model when users prefer local execution (grounding requires Cloud Mode).
  • Real-time grounding system: dedicated coordinator generates strategic search queries with AI, executes Google Search via Gemini's grounding tool, extracts citations from authoritative sources, and formats context for tribunal analysis—mutually exclusive with Private Mode.
  • Local authoring layer: Chromium Built-in AI (Gemini Nano) handles rewriting + summarizing on-device to keep sensitive passages device-resident.
  • Resilient parsing: markdown-first extraction for rating/confidence, with regex/JSON fallbacks.
  • Safety by design: no backend servers; keys stored locally; DOM sanitized; least-privilege permissions.
  • Stack: Chrome Extension APIs (Side Panel, Storage, Tabs, Runtime), Gemini API (2.5 Pro/Flash/Flash-Lite with Google Search tool), Gemini Nano, JS (ESM), HTML, CSS.

Challenges we ran into

  • User flow, v1 → v2 (UX): the MVP mixed status, settings, and action on one screen. We split into two states—Ready to ScanResults—and moved toggles to Settings (⚙️).
  • Async orchestration: coordinating service worker ↔ side panel ↔ results ↔ content; fixed with reconnection guards and lifecycle-safe messaging.
  • Normalizing LLM outputs: markdown vs JSON drift; built a multi-strategy extractor with strict schema checks.
  • Chrome-specific quirks: storage.local hiccups, injection timing, CSP; added retries/backoff, explicit timing, and CSP-safe rendering.
  • Speed vs token budget: introduced Quick vs Deep modes and smart fallbacks; keep payloads lean with local extraction.
  • Capability gating: gracefully prefer on-device features when available; surface clear fallbacks when not.

Accomplishments that we’re proud of

  • A multi-agent tribunal that yields defensible, readable bias verdicts.
  • Real-time fact-checking with Google Search grounding that cross-references claims with authoritative external sources—strategic query generation, citation extraction, and seamless tribunal integration.
  • On-device rewriting/summaries that keep text close to the reader.
  • Inline highlights that turn abstract bias into visible, fixable text.
  • A coherent loop: Side Panel → Scan (cloud or device) → Results → Highlights → Local Neutralize.
  • A robust parser that survives format changes and still returns clean numbers.
  • History so findings are reviewable, comparable, and sharable.

What we learned

  • Agent design matters: clear roles (Prosecutor/Defense/Skeptic/Judge) reduce “vibes,” increase traceable reasoning.
  • Chrome MV3 realities: service-worker lifecycles, cross-context state, and CSP shape architecture choices.
  • Local-first UX earns trust: a simple scan-mode choice plus device-side authoring lowers the “do I dare click this?” barrier.
  • Small UX edges—load cues, tooltips, copy tone—change confidence more than big features.

What’s next for BiasNeutralizer

  • Enhanced grounding: source quality scoring, claim-level citation mapping, offline caching of verified facts, and visual citation cards in results.
  • On-device styles: neutralization presets (journalistic, academic, simplified).
  • Audit Mode: clearer evidence cards, verdict trace, exportable report with grounding sources.
  • UX polish: finer highlights, better empty states, guided onboarding.
  • Reliability & metrics: smarter fallbacks, rating calibration, offline resilience.

Built With

  • chrome-built-in-ai-?-gemini-nano-(rewriter
  • chrome-extension-apis-(background-service-worker
  • chrome-extension-mv3
  • chrome.storage.local
  • css
  • dompurify
  • gemini-flash-latest
  • gemini-flash-lite-latest
  • google-generative-language-api-?-gemini-2.5-pro/flash
  • grounding-with-search
  • html
  • intersectionobserver
  • javascript-(es-modules)
  • katex
  • languagemodel)
  • messaging)
  • no-external-databse
  • prompt-api
  • rewriter-api
  • runtime
  • side-panel
  • storage
  • summarization-api
  • summarizer
  • tabs
Share this project:

Updates