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.
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.
- 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.
β+KorCtrl+Lto clear,Escto dismiss the @ popup,Enterto send,Shift+Enterfor newline. - Stop button. Aborts all in-flight calls mid-turn.
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.1and 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.
git clone https://github.com/mbasilyan/squabbleAI.git
cd squabbleAI
python3 server.pyOpen 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.
"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.
- 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
messagesformats). - 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
PASSinstruction 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.
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.
Public domain β see LICENSE. Take it, fork it, ship it, sell it, whatever. No attribution required, no warranty implied.

