Let two local models hold a direct conversation with each other. Pick a model for each of the two conversationalists, give them a topic, optional names, and optional personas, choose how many turns they get, then press Talk amongst yourselves and watch the exchange stream in live. There is no judge and no winner; it is just two minds talking. Everything runs on your machine; the current implementation uses local Ollama models.
It comes in two flavors that share the same conversation engine, UI, and saved-file format:
- A standalone local app (
standalone/) — a dependency-free Node server you open in your browser. Justnode server.mjs. - A GitHub Copilot CLI extension (
.github/extensions/convo/) — a native desktop window driven by the GitHub Copilot CLI.
- Two conversationalists, each a local model you choose from those you have installed.
- Optional personas: give each speaker a character and voice, or leave them to be themselves.
- Live streaming of every turn, token by token, in a warm duotone UI (Speaker A in ember, Speaker B in tide).
- You set the length: pick how many turns they trade back and forth.
- Save the full conversation to Markdown with a YAML front-matter metadata block, or Copy it to the clipboard.
- Load a saved conversation back from disk to view it and rerun it with different models or other tweaks.
- Stop an in-progress conversation at any time.
- Runs locally by default (currently via Ollama), so conversations stay on
your machine unless you point
OLLAMA_HOSTat a remote server.
- Ollama running locally with at least one model pulled
(for example
ollama pull llama3.2; any installed model works). - For the standalone app: Node.js 18 or newer (no
npm installneeded). - For the extension: the GitHub Copilot CLI.
First clone the repository and make sure Ollama is running with at least one
model pulled (ollama list):
git clone https://github.com/mmacy/convo.git
cd convocd standalone
node server.mjsThe server prints its URL (default http://127.0.0.1:4757) and opens your
browser. Enter a topic, choose a model for each conversationalist, optionally set
their names and personas, pick the number of turns, then click Talk amongst
yourselves. See standalone/README.md for configuration
options.
Start the Copilot CLI from inside the repository:
copilotCopilot CLI discovers the project extension under
.github/extensions/convo/ automatically and
installs its dependencies on first load. Run the slash command /convo to
open the window, then set things up the same way.
Either flavor writes saved conversations to a convos/ directory in the current
working directory (git-ignored by default).
Both flavors share the same engine — the orchestration that lists local models,
drives the two participants through a back-and-forth, and streams each model turn
(currently from Ollama's /api/chat) — and the same page UI served from a
content/ directory. They differ only in the transport between the two:
- The extension is built on the
copilot-webviewlibrary: a native window talks to the extension over a WebSocket bridge. - The standalone app swaps that bridge for two browser-native primitives — a
POST /api/rpcrequest/reply channel and aGET /api/eventsServer-Sent Events stream — served by a plain, dependency-free Node server.
See standalone/README.md for how the standalone app is
wired, and .github/extensions/convo/README.md
for extension internals, the saved-file format, and development notes.
The first-party code and assets in this repository are dedicated to the public domain under Creative Commons CC0 1.0 Universal. You can copy, modify, and distribute them, including for commercial purposes, without asking permission. CC0 does not waive or license any trademark or patent rights, and third-party components keep their own licenses.
The standalone app has no third-party runtime dependencies. The extension uses two npm packages, which are not covered by the CC0 dedication:
ws: MIT. Installed from npm, not vendored in this repository.@webviewjs/webviewand its platform binary packages: MIT. Installed from npm, not vendored in this repository.
Both flavors load fonts from Google Fonts (Fraunces, Hanken Grotesk, and JetBrains Mono) at runtime: SIL Open Font License 1.1. Fetched at runtime, not redistributed here.
The reusable files under
.github/extensions/convo/lib/ are first-party
code in this repository and covered by the CC0 dedication.

