One Face, Many Agents: Meet AgentWebUI

A Hackers Hostel story: submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady It's 1 a.m. and I have three coding agents running on the little Linux box in the corner of my room. Codex is refactoring something in one tmux pane. Claude is still "thinking" in another, on "medium effort" mind you. Gemini CLI has been waiting for me to approve a file write for twenty minutes, in a terminal I forgot I opened. I'm in bed, laptop closed. To see what any of them are doing, I have to SSH back in and go pane-hunting. That's the part nobody tells you about CLI agents: they're brilliant, and they live in a terminal. Each one has its own slash commands, its own approval prompts, and its own idea of what a diff looks like (usually a wall of text scrolling past faster than you can read it). My sessions are scattered across panes, tabs, and, because I'm that kind of person, two machines and two accounts. My muscle memory has filed for divorce and is asking for the good k

One Face, Many Agents: Meet AgentWebUI

A Hackers Hostel story: submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

It's 1 a.m. and I have three coding agents running on the little Linux box in the corner of my room. Codex is refactoring something in one tmux pane. Claude is still "thinking" in another, on "medium effort" mind you. Gemini CLI has been waiting for me to approve a file write for twenty minutes, in a terminal I forgot I opened.

I'm in bed, laptop closed. To see what any of them are doing, I have to SSH back in and go pane-hunting.

That's the part nobody tells you about CLI agents: they're brilliant, and they live in a terminal. Each one has its own slash commands, its own approval prompts, and its own idea of what a diff looks like (usually a wall of text scrolling past faster than you can read it). My sessions are scattered across panes, tabs, and, because I'm that kind of person, two machines and two accounts. My muscle memory has filed for divorce and is asking for the good keyboard.

How we got here

A few of us at Hackers Hostel share a group chat that is roughly 40% memes and redacted content, and 60% complaining about tooling. One week the complaint was always the same: every agent speaks its own dialect. New commands, new prompts, new way of showing you what it just did to your code, and no way to check on any of it without being glued to the terminal it started in.

From the builder side it's worse. Every agent team ends up writing the same dashboard: a chat pane, a message list, a model dropdown, a little loading animation, a button to stop the thing before it rewrites your entire git history. Between us, we've built that exact dashboard more times than we'd like to admit. One of us built it in three different JavaScript frameworks. You know the drill: "Oh, this one's a tad bit faster than the other..." Bro, pick a lane.

Then someone (name withheld, they know what they did) typed: "why does every agent get a new face? just give them all the same one."

The chat went quiet for about four seconds. Then everyone started typing at once.

What made that more than a group-chat topic was timing. Agents had finally started speaking a shared protocol (ACP, more on that below), which meant one interface could actually talk to all of them instead of needing a custom integration per agent.

The big one, and the small one

That message turned into the first AgentWebUI: one web interface for driving CLI coding agents like Claude Code, Codex, Gemini CLI and OpenCode, plus anything else that speaks ACP. You pick the agent, the interface stays the same. Your brain gets to keep its shortcuts.

Then it grew. It picked up features. It picked up more features. It got heavy in the way your backpack gets heavy when you keep tossing chargers in it and never take any out. No offense, but those people are psychopaths.

So we gave the big one a new name, AgentWebUI Pro, and let it keep the control-room job it had grown into. Then, for Hacktoberfest week 3, we set ourselves a constraint: rebuild AgentWebUI from scratch, this week, as the smallest thing that still does the job. One dependency. No build step. A codebase you can read in one sitting. It takes the idea and the lessons from Pro, and it's what carries the AgentWebUI name now.

The whole design goal fits on a sticky note:

Install it. Open the browser. Talk to your agent. If that takes more steps than making toast, we messed up.

Setup, for people who also hate reading setup instructions:

git clone https://github.com/HackersHostel/AgentWebUI.git
cd AgentWebUI
cp .env.example .env   # fill in your models and agents
docker compose up -d

That's the whole onboarding. No accounts, no setup wizard, no twelve-page wiki, no "first, install our other CLI to install this CLI." Everything lives in .env. Running it on a homelab box or a VPS like I do? There's also an install script that sets it up as a systemd service with Caddy for HTTPS. Want to poke it before you clone anything? There's a live demo: agentwebui.hackershostel.com

What you get (and what you don't)

Basically you get what you bargained for:

  • One chat interface, no matter which agent is doing the work behind it.
  • Every agent on your machine or server, reachable from a browser. No more SSHing in to find out which pane is waiting on you.
  • Readable diffs and approval prompts in one consistent place, instead of a different style per agent. Like getting intel from five squads who all refuse to use the same map.
  • Switch agents without relearning where anything is.
  • A small codebase you can actually read in one sitting, which matters a lot if you plan to send us a PR (you do, keep reading).

You don't get:

  • The full control-room experience. That's what our big sibling, AgentWebUI Pro, is for.
  • A dashboard with 14 tabs you'll open once. AgentWebUI is for when you just want to talk to your agents, not manage a fleet of them. Well, not yet at least. Fingers crossed.

Under the hood (the part where I brag a little)

Remember the three JavaScript frameworks? The web client uses none of them. It's Preact through htm with no build step. No bundler config, no node_modules folder with its own weather system. You change a file, you refresh, it's there.

The server is about 3,000 lines of Python with exactly one dependency (aiohttp), and it runs in around 40 MB of memory. A single browser tab usually eats more than that just to show you a loading skeleton.

The thing that makes "one face for every agent" actually work is the Agent Client Protocol. Think of it as LSP, but for coding agents. Zed and Google started it because every new agent-plus-editor combo needed its own custom integration, which is the exact same headache we were complaining about, just with better funding. Anything that speaks ACP over stdio plugs straight in: Claude Code and Codex (through their ACP adapters), Gemini CLI, OpenCode, Hermes, Pi. You pick the agent, then its model and effort, then the folder it works in. It streams the thinking, the plan, the tool calls and the diffs, and it asks before it touches anything.

If your eyes glazed over somewhere around "stdio," here's the squad-briefing version: the agents are your squad, ACP is the radio, and AgentWebUI is the one headset that talks to all of them. Nobody has to learn a new radio every mission, and nobody gets left on an open channel waiting for orders while you're in bed.

On the model side, anything with an OpenAI-compatible API works: OpenAI, OpenRouter, Groq, or a local model through Ollama, LM Studio or vLLM. So your quick questions can go to a small model on your own laptop and never leave the building.

Why open, though?

Every agent vendor wants you living in their tab. Totally fair from their side. From your side, it means your workflow breaks every time someone ships a better model somewhere else.

Open protocol, open models, open code: switching becomes an edit to .env and a restart, not a migration weekend. And since it's self-hosted, your code and your chats stay on your machine instead of taking a field trip to someone else's cloud. No telemetry phoning home, no mystery servers. As Captain Price would put it: "Bravo Six, going dark."

RIP, Captain. (Yes, that's an MW4 spoiler. If you haven't finished the campaign, you've had two days. We're not sorry.)

Code

GitHub logo HackersHostel / AgentWebUI

The lightest web UI for OpenAI-compatible model APIs and ACP agents.

AgentWebUI

Tests

One small web page to chat with AI models and with command-line agents, on your own server. Open it and chat there is no setup screen and no accounts. Everything is configured in .env. The package and command are still named agentwebui-lite.

  • Models: any OpenAI-compatible API (OpenAI, OpenRouter, NVIDIA, Groq, Ollama, LM Studio, vLLM, …).
  • Agents: anything that speaks the Agent Client Protocol over stdio: Claude Code, Codex, Hermes, Pi, Gemini CLI, OpenCode, … Pick the agent, then its model and effort, then the folder it works in. It streams its thinking, plan, tool calls and diffs, and asks before it acts.

The server is about 3,000 lines of Python with one dependency (aiohttp) and uses about 40 MB of memory. The web client is Preact through htm with no build step. Nothing loads from the internet unless you pick a font other than Geist.

…

Our very "punctual" release process

Version 0.1.0 went up on PyPI at 00:23 GMT on October 20. Version 0.2.0 went up at 10:48 GMT. The same day.

That's ten and a half hours between releases. That's not a release cadence, that's a sleep schedule asking for help. (We're on 0.3.0 now. Please don't ask what time it is.) It also means, with total honesty, that there are bugs in here. Some we know about. Some are hiding. Some are probably features we haven't explained yet.

Which brings me to the real reason I'm writing this.

Hacktoberfest: come break our code

As Captain Price used to say : "We get dirty, and the world stays clean." That's open source in one sentence. Somebody digs through stack traces at 3 a.m. so everybody else gets software that just works. We're recruiting for the digging.

Hacktoberfest is different this year: it's all about building with open-source AI, which is basically our whole personality right now. There's no PR count to chase anymore, but contributions still get you our eternal gratitude and your face in the contributors list. Here's the mission briefing:

  1. Star and fork the repo: github.com/HackersHostel/AgentWebUI
  2. Install it and try to break it. Point it at whatever agent you've got. Click things you shouldn't. Paste a 9,000-line stack trace into the chat. Resize the window to the width of a breadstick.
  3. When it breaks, open an issue. Repro steps are beautiful. "it doesnt work lol" is less beautiful, but we'll still read it.
  4. Then fix it and send the PR. We review fast, partly because we're excited and partly because we're awake anyway.

Things we would love help with:

  • Bridges for more agents. Anything that speaks ACP already works. If your favorite agent doesn't, help it learn. That's the whole point of the project.
  • UI polish. Our CSS was written at 3 a.m. by people who think !important is a personality trait. Not to mention thousands of edge cases that we ignored like a div that’s never gonna be centered. Besides who uses Safari anyway right guys?!
  • Tests. We have some. "Some" is doing a lot of heavy lifting in that sentence.
  • Docs. If you got confused anywhere during setup, that's a docs bug. Please fix the sentence that confused you.
  • Accessibility. Keyboard nav, screen readers, contrast. We want this to work for everyone, not just people with our exact monitor.

While you're in the Hacktoberfest mood, have a look at hacktoberfest.com: this year it's local Fests and building with open models instead of counting PRs.

One small request: no drive-by PRs that change one typo into a different typo. We see you. We love you. Please write a test instead.

Stop learning a new interface for every agent. Teach one interface to speak every agent!

Come help us build it. Bring coffee. Queue up a match of MW4 while the Docker image pulls; we won't tell.

???? github.com/HackersHostel/AgentWebUI

— The Hackers Hostel crew: @mahmudurrahmanlabib, @tahrimwalid and @mahedi

P.S. Mahmudur wrote about the same project from a very different angle (sloths, chainsaws, too many tabs). Go read that one too.
This is my very first Dev.to post. Kindly ignore my oversights.

Share