Skip to content

mbasilyan/squabbleAI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Squabble β€” AI Together

A local panel of four frontier LLMs β€” Claude, GPT, Gemini, Grok β€” sitting in one chat room with you, seeing each other's responses, and calling each other out when one of them hallucinates.

Panel debating Roth IRA contribution limits, with one model correcting another's numbers

Why

One LLM hallucinates confidently. Two LLMs hallucinate independently. Four LLMs in the same chat room, with rules that let them disagree by name, can catch each other doing it.

Ask the panel a question with real stakes β€” tax thresholds, drug dosages, recently-changed regulations, attribution of a famous quote β€” and watch one panelist correct another's confidently-wrong numbers in real time. That's the value: convergence through disagreement.

Features

  • Pick any subset of providers. Use only the keys you have. Claude, GPT, Gemini, Grok β€” toggle individually.
  • Sequential or parallel mode. Sequential mode preserves cross-talk (each panelist sees what the previous ones said this turn). Parallel mode is faster.
  • Debate until convergence. After the first round, panelists default to silence (PASS) and only speak up to defend, correct, or add something new. Built-in cap of 3 follow-up rounds.
  • @-mention with autocomplete. Type @ and pick a panelist; addressed panelists get a longer response budget.
  • Per-agent editable system prompts. Make one panelist the skeptic and another the optimist, or leave them all on the default panel-rules prompt.
  • Markdown rendering. Bold, lists, code blocks, links, headers β€” all render.
  • Your name in the panel. Panelists address you by name when natural.
  • Keyboard shortcuts. ⌘+K or Ctrl+L to clear, Esc to dismiss the @ popup, Enter to send, Shift+Enter for newline.
  • Stop button. Aborts all in-flight calls mid-turn.

Settings screen with panel options and per-provider config

Privacy

Your API keys never leave your machine.

  • Keys are stored only in your browser's localStorage.
  • The bundled Python server runs on 127.0.0.1 and is a thin local CORS proxy β€” it does not log requests, persist anything to disk, or transmit data to anyone other than the specific provider endpoint your browser told it to forward to (api.anthropic.com, api.openai.com, generativelanguage.googleapis.com, or api.x.ai).
  • No analytics. No telemetry. No remote services. Nothing phones home.
  • If you don't trust the Python server, read it β€” it's ~70 lines of stdlib code in server.py.

The server exists only because most provider APIs reject direct browser calls due to CORS restrictions. Running a local proxy is the simplest way around that without bundling a heavy app framework.

Quick start

git clone https://github.com/mbasilyan/squabbleAI.git
cd squabbleAI
python3 server.py

Open http://localhost:8765.

No pip install needed β€” only Python 3 standard library. Tested on macOS; should work anywhere with Python 3.7+.

Paste in the API keys you have (any subset of Claude, GPT, Gemini, Grok), tweak the models if you want different defaults, hit Start panel, ask anything.

A good first question

"Fact-check this LinkedIn truism: 'Body language is 93% of communication.' Each of you: what study is that from, what did it actually measure, and is the 93% figure accurate? Call out anyone who repeats the myth."

Watch the panel.

How it works

  • The browser holds keys and conversation state.
  • For each user turn, every enabled panelist gets called sequentially (in randomized order). Each call sends the full transcript so far, formatted into that provider's expected schema (Anthropic, OpenAI, Gemini, and Grok all have slightly different messages formats).
  • The system prompt tells each panelist they're on a panel with named others, instructs them to voice concise agreement, disagree plainly, and lead with their view β€” no filler.
  • In debate mode, follow-up rounds prepend a strong PASS instruction with explicit anti-patterns. Panelists default to silence unless they were called out, had their view genuinely shifted, or have something substantively new.
  • Mention highlighting and markdown rendering happen client-side after responses come in.

Architecture is intentionally small:

  • index.html β€” single-file UI (all CSS + JS inline, ~1000 lines).
  • server.py β€” stdlib-only local proxy.
  • favicon.svg β€” four colored dots in a speech bubble.

No build step, no dependencies, no framework.

About the code

Every line in this repository was written by Claude in a single Claude Code session. The human (Mike Basilyan) drove product direction β€” naming, scope, design calls, the panel-rules system prompt, the PASS protocol, the debate-until-convergence mechanic β€” and tested everything in the browser. But no human wrote any line of HTML, CSS, JavaScript, Python, or this README.

It seemed appropriate for a product about AI checking AI.

License

Public domain β€” see LICENSE. Take it, fork it, ship it, sell it, whatever. No attribution required, no warranty implied.

About

I got tired of manually cross checking AIs against each other. So I built a webapp that puts multiple AIs in the same chatroom and let's them squabble... until they converge. πŸ’₯ Gemini: "My apologies, Mike. @claude is correct..."

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages