AI Board

macOSPythonFastAPILLMsdesktop app

AI Board is a native macOS app I built to stop second-guessing which model to ask. Instead of pasting the same question into four different chat windows, I ask it once and let a “board” of models deliberate.

What it does

You type a question and it runs a three-round pipeline:

  1. Answers — the question goes to Claude, ChatGPT, Gemini, and Grok in parallel, so you see four independent takes at once.
  2. Cross-critique — each model reads the others’ answers and points out what they got wrong, missed, or oversold.
  3. Consolidation — a final pass synthesises everything into a single, sharper answer that reflects where the models agreed and where they didn’t.

Everything streams live, so you watch the board think rather than waiting for a final block of text.

How it’s built

  • BackendFastAPI + uvicorn orchestrating the streaming rounds.
  • Model clients — thin wrappers over the Anthropic, OpenAI, Google GenAI, and xAI (Grok) SDKs behind a shared interface, so swapping or adding a model is a one-line change.
  • Frontend — a single-page HTML/JS UI (Tailwind + marked.js) rendering the live, multi-column stream.
  • Desktop shell — a Python entry point launches the server in a background thread and opens it in a native macOS WKWebView window via pywebview. Packaged into a standalone .app with PyInstaller.

Get it & set up

The code is on GitHub — use the Source link above. It ships with my code, not my credentials — you bring your own API keys.

1. Build the app.

git clone https://github.com/stephenhefekta/ai-board.git
cd ai-board
bash build.sh        # produces dist/AI Board.app

Drag AI Board.app to your Applications folder. It isn’t notarised by Apple, so on first launch right-click it → OpenOpen.

2. Add your own keys. Create a file at ~/.ai-board/.env with a key for each provider:

ANTHROPIC_API_KEY=your-claude-key      # console.anthropic.com
OPENAI_API_KEY=your-openai-key         # platform.openai.com/api-keys
GOOGLE_API_KEY=your-gemini-key         # aistudio.google.com/app/apikey
XAI_API_KEY=your-grok-key              # console.x.ai

You only pay your own provider usage. The keys stay on your machine and are never sent anywhere except directly to each model’s API.

Why I made it

Different models have different blind spots. Seeing them disagree — and forcing them to defend their answers against each other — surfaces a more honest result than trusting any single one. It’s become my default for anything where being wrong is expensive.