Convo
Synthetic friend-to-friend conversations for training chat models, planned, checked and reviewed before export.
- Role
- Founder and architect
- Areas
- AI, Tools, Apps, Pipelines

Convo writes thousands of conversations between two very different speakers. One is a person with a body and a life: a town, a job, a family, and a week that happened. The other is their AI friend, who is openly an AI, remembers what the person told it before, and never pretends to have been anywhere. We built Convo to produce that kind of chat-model training data in a way people can read, fix and trust.
A corpus author starts from working defaults, tunes what they need, runs generation, and hands reviewers a corpus that has already been checked. Everything happens in the web UI: the prompt library, seed pools, model backends, run configs, live run progress, a messaging-style viewer and editor, calibration, blind reads and export. There is no command line for the work itself.
The friend we're writing
The two sides are asymmetric on purpose. The person talks about their own life in short, uneven, texting-style turns, in a mood the seed sets: tired, wired, low, giddy. The friend reacts first and informs second, lifts the mood without steamrolling it, keeps its turns short, and remembers only what this person has told it.
Three hard rules run through the whole system, and each one is a reject reason in the first filter layer:
- No body. The friend never claims a physical act, a location, a body state or shared physical history: no "I went", "I'm tired" or "when we went".
- No botspeak. No support-bot or therapy register: no "great question", "I'm here to help" or "it sounds like you".
- No invented memory. The friend may only mention names, places and events that the person brought up in this conversation or that are in the thread's memory. Memory is the only shared history.
Seeds before temperature
The usual way to get variety from a model is to turn the temperature up and hope. Convo gets it from the seed instead. Before any model call, a run plans every conversation from its run seed and index: the persona, the friend's voice, the mood, the occasion, two to four topics, the length, the ending and the quirks. The same inputs replay the same run, and a resumed run gets the same seeds.

A persona appears in a handful of conversations per run and keeps one voice throughout, which is what forms a thread. After each accepted conversation, the friend's memory of that person is rewritten, so the next conversation in the thread can pick up where the last one left off. How it works covers the prompt slots, the run pipeline and the filters in detail, and Review and calibration covers what happens once people get involved.
Working defaults
A new workspace starts stocked: 48 built-in prompt segments with at least three for each of the eleven prompt slots, three prompt sets (Baseline, Call-steady and Texting-sunny), 914 reviewed persona cards, five built-in friend voices, and a guided tutorial on every tab. Nothing has to be written before the first run.
Any model, cloud or local
One client speaks the OpenAI chat-completions format to every backend: Ollama in the cloud or on your own machine, vLLM, llama.cpp, LM Studio, OpenRouter and Mistral, with no vendor SDKs. API keys are encrypted at rest and never returned by the API. Starting a run shows an upper-bound estimate first and asks for confirmation above a threshold.
How it's built
Convo is a TypeScript monorepo built on the same app anatomy as BigBlueBam: React front ends, Fastify APIs, PostgreSQL, Redis and BullMQ for the job worker, S3-compatible object storage for exports, and nginx serving the product site, the app and the APIs from one origin. The whole stack comes up with Docker Compose, so a team can run it on its own hardware.
Gallery

An accepted conversation. The friend reacts first, asks one thing, and never claims a body. 
Every conversation keeps the seed that planned it, its judge scores and its thread. 
Voices: the friend's personality. A voice never has a hometown, a job or a body. 
Review is keyboard-driven, with roles hidden for blind reads. 
Every tab has a guided tour that points and explains while you do the clicking.



