Chat Rooms on Chat-O: Built with OpenCode and Omen Alpha

Published:


Chat-O has always focused on picking the right model for the job. Now we are applying that to the conversation itself. Chat Rooms let you put several AI characters into one chat so they work as a panel, rather than forcing you to bounce between separate tabs.

Part feature announcement, part post-mortem on building it with OpenCode, the open source coding agent, running the Omen Alpha model. Spoiler: building it went smoothly. The review pass is what actually made it production-ready.

A Chat Room on Chat-O discussing whether to build a side-project SaaS or take a trip to Japan

What Chat Rooms Do

Open any chat, click Room, and choose the characters you want. Chat-O includes five defaults: The Skeptic, The Proofreader, The Builder, The Optimist, and The Researcher. You can also build your own with custom instructions, a color, and a dedicated model.

Then you just talk. It feels much closer to a real working group than a standard chatbot round robin:

  • One character answers first, and it’s not luck. A quick, cheap routing call reads your message and decides who should answer. Ask for a code review and The Skeptic jumps in. Ask what could go right and The Optimist takes the mic.
  • The rest react without piling on. Once the first answer completes, another fast call asks the remaining personas if they agree or see it differently, capped at eight words. You get a clean note right below the message: “The Builder agrees, clear 6-week fix-first plan” or “The Skeptic has a different perspective, ignores root-cause risk”. If you want one of them to elaborate, click Ask.
  • Concise by default. Follow-up replies are limited to a few sentences so the feed stays readable. If you want more detail, hit Expand on that message.
  • Easy cancellation. If a character is taking too long, hit Dismiss to kill the job instantly.
  • Different characters run on different models. GPT-5 mini powers The Skeptic, Gemini 3 Flash runs The Proofreader, GLM-5.3 Flash handles The Builder, Mistral Medium 3 drives The Optimist, and Perplexity Sonar powers The Researcher. You get distinct instincts instead of one model wearing five hats. In a small early test, people kept telling us the same thing: it is genuinely fun—and unexpectedly helpful—to hear different characters chime in.

We have argued before that single-model chatbots are holding you back. Chat Rooms turn that argument into a shipping feature.

How It Works Under the Hood

Rooms run on the same stack as the rest of Chat-O: Elixir, Phoenix LiveView, Postgres, and Oban for background work.

The core mechanics:

  1. Personas are just data. We added a kind, an accent color, and a model identifier to the prompts table. Creating a new persona takes a form, not a deploy.
  2. A room is a membership list. A chat_session_members table maps personas to a session in order, with a unique index so a persona cannot be added to a room twice.
  3. Turns group messages together. Every assistant reply in a turn shares a turn_id. That caps follow-ups at one and ties reactions to the answer they belong to.
  4. Reactions are structured rows. Once the first response finishes, one batched call asks the other characters for their stance. Each stance is stored as its own row and rendered as a chip. Cheap, cacheable, and honest about how little (or how much) the rest of the room has to add.

Building It with OpenCode and Omen Alpha

On September 4, OpenCode announced Omen Alpha: a new stealth model, exclusive to its Go subscription, pitched as “$100 usage for $10”. No model card, no benchmark table, no named lab standing behind it. The maker still has not claimed it.

We built the entire feature with Omen Alpha inside OpenCode the day it dropped. The honest takeaway: it was fast, and it handled the job well. A model available for barely 24 hours is already driving production code. The model itself was solid, but the tight feedback loop mattered just as much.

The workflow was straightforward. We outlined the feature in a planning doc, and the agent generated the migration, context module, two Oban workers, and the LiveView UI. From there, we tested on a real dev server with real accounts and live model calls, feeding errors back into the chat. Blank message bubbles? Traced to a dead upstream model route and patched in the same session, with a fallback retry added so a broken route can never silently eat a turn again. Input field failing to clear? Fixed right away. Messages rendering without persona badges? Solved in minutes when the agent spotted a missing preload in the PubSub handlers.

That loop (spec, compile, test against live endpoints, patch) is where OpenCode earns its keep. No bouncing between windows, no pasting stack traces back and forth. The agent held the whole codebase in context, and Omen Alpha kept the thread across the database schema, background jobs, streaming, and UI. Clean compile, push to dev, click through, report bugs, repeat. We knocked out what usually takes us several days in a single focused session.

To be clear about what “handled the job well” means: the initial code compiled and ran. The agent moves fast and sounds confident. Unearned confidence is the last thing you want from a code reviewer, which is why we never ship on one model’s word.

The Review Pass: Hunyuan Hy4

Before this branch went anywhere near production, we pointed the agent at Hunyuan Hy4 preview, Tencent’s new open-weight flagship (770 billion parameters, mixture of experts, Apache 2.0), and told it to tear through the diff line by line. Not to be encouraging. To find what was wrong.

It found a handful of issues before we pushed the code: the kind that only shows up when a second set of eyes traces the unhappy paths, retries, and real interaction flow. That review made the feature stronger without turning the post into a catalog of implementation mistakes.

This two-stage setup is what we trust now: Omen Alpha writes the first pass, Hy4 stress-tests it. Two models, two jobs, like the rooms themselves. It is not our first time leaning on an unannounced model either. Last cycle we used Ox Alpha to migrate a full stack codebase from Rails to Go, and before that Optimus Alpha showed up the same way, unnamed and unannounced.

Where to Get Omen Alpha

Omen Alpha is not on any API and not on Chat-O. You can only reach it inside the OpenCode agent with a Go subscription. That appears deliberate: OpenCode’s “$100 usage for $10” pricing only works when the model stays inside the product instead of being resold per token. There is still no model card, no public benchmark, no lab claiming credit. If the usual pattern holds, the stealth period ends with a reveal, and models like this tend to surface more broadly later. For now, Go subscribers get it day one, which is exactly how we shipped this feature.

Try It

Chat Rooms are live on Chat-O now. Open a chat, hit Room, pick your team, and send a message. See who answers first, watch the rest weigh in, and pull any of them into the discussion with a click.

Join Chat-O and give your next question a room of its own.