Open-source chat interfaces now do most of what Claude Desktop and ChatGPT do, with any model you point them at. That makes them a good starting point for something they don't do yet: a threads workspace where Claude Code, Codex, Jev and the models that come after them work side by side, watch what's changing in the field, and propose their own next features.
All of these are open source and talk to any OpenAI-compatible endpoint. That one shared protocol means one interface can reach Venice, OpenRouter, Hugging Face and a local Ollama at the same time.
| Interface | Shape | Strengths | Trade-offs |
|---|---|---|---|
| Open WebUI | Self-hosted web app | Many providers at once; image input and generation; voice; document search; MCP tools; user accounts | Python and Svelte, so not our stack; large codebase |
| LibreChat | Self-hosted web app | Clean per-provider config; agents with MCP; code interpreter | Needs MongoDB and Meilisearch |
| Cherry Studio | Desktop app | Closest to Claude Desktop; MCP over stdio and HTTP; image, PDF and Office files | Lives on one machine; nothing to share |
| LobeChat | Self-hosted web app | The most polished interface; agent builder | Its license isn't a standard open-source one |
| OpenCode | Terminal coding agent | Codex-style work in a repository with any provider | Code only; no chat history to share |
Features are from each project's own pages and recent reviews, not from tests on our machine. Using a less filtered model through any of these doesn't change who is responsible for its output, and each provider's terms still apply.
These projects have done the dull, necessary work: streaming chat, model pickers, file uploads, image and voice handling, accounts, and MCP so a model can call tools. Most of all, they've proved that the OpenAI-compatible API works as an adapter boundary (see Own your stack). Swapping a provider is a change of URL and key, not of code.
They're built around a conversation with a model. The work we hand to agents looks different:
We don't need to fork an interface to get there. The plan is two layers:
A threads service in Rails owns projects, threads, status, memory and results. One adapter per
agent runs the work. Claude Code and Codex both have headless modes that stream JSON events
(claude -p --output-format stream-json and codex exec --json), so an adapter just starts the
process in the right folder and turns its events into status updates.
The open interface stays the chat surface. The threads service also speaks the OpenAI-compatible API. To Open WebUI, Cherry Studio or LibreChat it looks like one more model, so starting a thread, checking on it, or chatting about its result works from whichever interface you already like, on desktop or phone.
class Thread
def initialize(task, agent:) = (@task, @agent = task, agent)
def run
@agent.perform(@task) { |event| update_status(event) }
end
end
class ClaudeCodeAgent
def perform(task, &on_event)
stream("claude", "-p", task.prompt, "--output-format", "stream-json", chdir: task.repo, &on_event)
end
end
class CodexAgent
def perform(task, &on_event)
stream("codex", "exec", "--json", task.prompt, chdir: task.repo, &on_event)
end
end
class ChatModelAgent # Venice, OpenRouter, Hugging Face, Ollama: one class, different URLs
def perform(task, &on_event) = post_chat_completion(task, base_url: ENV["MODEL_BASE_URL"], &on_event)
end
Each agent is described by data, not code paths: what it can do (repositories, vision, tools, long context), what it costs, and how it has scored on our own tasks. That's where future models fit in. A model with better reasoning, longer memory or new senses is a new row and maybe a new adapter, and the rest of the workspace doesn't change.
TypeSafe's Jev doesn't write prose; it turns text and application state into typed judgments with probabilities. That's exactly the glue a workspace like this needs, and it's cheaper and easier to test than asking a large model to reply in JSON:
Every judgment is a number the code can act on, log and evaluate, so Jev's decisions show up in observability next to the agents it routes.
The field moves weekly: new models, new MCP servers, new features in the interfaces above. A scheduled job keeps up so people don't have to:
The workspace has two kinds of evidence about what it should do next: what the field is doing (the digest) and how it is actually used (its own telemetry: which agents fail, where threads stall, what each provider costs). Together they make a proposal worth reading:
The limits are the ones in AGENTS.md: the workspace never changes its own evaluation criteria or weakens a test to get green, never ships unreviewed, spends within a budget a person sets, and every claim in a proposal links to its source. A system that improves itself is only safe when the people around it can see and stop each step.
Provided as is, for information only, with no warranty and no liability. Not legal or professional advice. Security and radio material is for authorized, lawful use only. Full disclaimer.
Visits are logged on our own server: IP address, browser and device details, and pages viewed. We use them to understand traffic and spot attacks, and never share or sell them.