Harness Harness Harness

There are too many coding harnesses and no right way to use them. When building comes down to direction and effort, you can stop choosing: how vorkspace started, and how it works.

In this note

Everything is a harness now. Claude Code is one. Codex is one. Pi and OMP are too, and Antigravity comes with one. DeepSeek started hiring a harness team in May, and the community didn't wait, building DeepSeek-TUI, now Codewhale, in the meantime.

Then come the things wrapped around the harnesses. cmux and herdr treat the terminal as the place where your agents live. Every week someone has a new way to do this, and every one of them is convinced for good reasons.

There just isn't a right way

Part of the noise comes from comparing things that aren't the same kind of thing. These tools answer different questions:

Layer Examples What it decides
Harness Claude Code, Codex, Pi, OMP How the model reads, edits, and asks permission
Terminal workspace cmux, herdr Where sessions live, and how you get back to them

Even inside one layer, there's no winner, because the answer depends on the person and the task. One careful change in a single pane and six agents working side by side are both reasonable ways to spend an afternoon. There just isn't a right way to use AI. There's the way that fits what you're doing today, and it might not be the one that fits tomorrow.

Spoiled for choice

Having this many options usually means picking one and living with its gaps. This one has the layout you like, that one has the agent you trust, and the third handles running out of usage halfway through a task. But being spoiled for choice changes what you want. Once you've seen each idea working somewhere, you want the best of all of them in one place. And when building is this straightforward, the thing standing between you and that place is mostly direction and effort.

That's where vorkspace was born: a native Mac workspace for coding agents, built on the idea that you shouldn't have to choose.

It started as someone else's app

vorkspace didn't start from an empty folder. It started from MonoCode, “a GUI for your coding agents” created by Nick (hardbeat920) and released under the MIT license. The first commit imported that source and says so plainly: it records a source import, not original authorship. His license stays in the repository, and vorkspace wouldn't exist without his foundation. From there, the history moves quickly:

  1. The import. Bring in the 0.13.4 source and start hardening local recovery and simplifying the workspace.
  2. The cut. Mac-only releases, unused UI files gone, stale docs trimmed, and less work to save a transcript.
  3. The first additions. Add Vox voice control and persistent memory, and rename Monos to Bots, with a migration so existing data came along.
  4. Native desktop 1.0. Tauri and the web frontend go, replaced by Rust and GPUI, across 2,346 changed files, with existing installs and drafts preserved.
  5. The redesign. Rework the sidebar, move Vox into the Mac's notch, draw diagrams natively, and let Bots spawn minions.
  6. Version 1.1.0. The release all of this adds up to.

That's 171 commits across 13 days of work in about two weeks. It's a decent picture of what direction and effort means in practice: one person deciding what the thing should be, then keeping at it.

The harness stays the harness

The main thing to understand about vorkspace is what it doesn't do. It has no model and sells no tokens. It runs the CLIs you've already installed as supervised child processes, reusing their logins, so whatever makes each harness good stays intact. At startup it looks for each one and disables what it can't find. The catch is that every CLI talks differently:

Providers / what vorkspace actually launches

Five CLIs, four ways of talking, one composer.

Harness How vorkspace drives it
Claude Code --input-format stream-json over stdio
Codex codex app-server
Pi and omp --mode rpc, newline-delimited JSON
Antigravity The Agent Client Protocol (ACP)
From vorkspace's provider code. Each transport has its own rules. For Pi and omp, for example, an acknowledgement doesn't mean a turn has finished.

So the work is translation. When you send a message, a conversation admits the turn, records that it was submitted, and starts the chosen CLI. Its streamed events become one transcript, whichever harness produced them, and approvals and Stop go back through the same owner. That's why every harness can share one composer. Everything lives in one Rust process, split into two crates: vorkspace-gpui owns windows and rendering, and vorkspace-core owns providers, storage, Git, and Bots. History goes into SQLite as it streams, one changed block at a time, and each transport has a size limit, so a runaway agent gets a clear error instead of eating memory.

What it pulls together

With one layer speaking to every harness, the good ideas can sit side by side:

  • The terminal workspace. Project tabs, split panes, Git worktrees, and real terminals, so sessions have a place to come back to.
  • Running out of usage. Add more than one Claude Code or Codex account. When one hits its limit, vorkspace offers to switch, copying the conversation's native files across, or carrying the transcript when it can't.
  • Agents that outlive a session. Bots, which get their own section below.
  • Work that isn't on your laptop. Over SSH, a small host runs on another machine and owns the agents, so closing the lid doesn't stop them.
  • Your voice. Vox sits around the Mac's notch, and it's the voice control idea built into the workspace. It's off by default, and the microphone is only used during a call.
  • Pictures. Mermaid and SVG diagrams render right in the conversation, and agents can add small interactive visuals.

It has real limits. macOS is the only platform it's validated on, so the Linux and Windows code still needs testing. Channels and minions are experimental and off by default. Vox relies on a Codex sign-in. And vorkspace isn't affiliated with any of the harnesses it drives, so when one of them changes how it talks, vorkspace has to catch up.

Bots are the part that stays

A normal agent session is disposable. It works, it finishes, and whatever it learned goes with it. A Bot is the opposite: a named teammate that lives in the app instead of in any one session. It has a face, personality instructions, its own memory and to-do board, and a list of projects it's allowed to touch. Its face even shows whether it's idle, working, or needs you.

The clever bit is where that identity lives. The harness underneath is still just a CLI session that can end, so vorkspace owns the Bot and rebuilds its context for each run: who it is, what it remembers, and what it's assigned. When a Bot has to start a fresh provider session, it gets a short brief, while the saved chat stays whole. Its memory has a budget of 200 lines, and anything that looks like a secret is redacted, so a Bot can remember things without quietly growing forever or collecting your keys.

A Bot can How it works
Do real work Start sessions and worktrees in its assigned projects through an app CLI
Keep a schedule Run up to 20 habits on a schedule, without you asking
Talk to other Bots Message them directly, or discuss a subject in a Channel, using @ to address one
Build a team Hire minions with a role, who share its memory and keep their own conversations

Agents that run on their own need guardrails, and that's where a lot of the work went. Reply chains between Bots stop after four steps, so two of them can't talk forever. After a crash, interrupted work is shown for you to inspect rather than quietly repeated. A failed message stays visible for you to retry or discard, and a Bot won't silently resend one whose result is uncertain. You stay in the loop too: send a busy Bot a message and it joins the work already underway.

A unified app for all things AI

So where is vorkspace going? It's becoming a unified app for all things AI. Not a better harness. One place for whatever AI is doing for you today, whether that's a coding session, a Bot working through its habits, a voice call, or a diagram you asked for.

You can already see it in what's there. Next to the agents sit a file editor, Git, terminals, GitHub, GitLab, and Jira connectors, notes, automations, to-do boards, and a clipboard history in the menu bar. None of those are AI features on their own. They're there so that the work around an agent doesn't send you off to another window, which is the same complaint that started all of this.

The harness staying the harness matters here. Because vorkspace sits on top of the CLIs instead of competing with them, a great new harness is a new provider to add, not a reason to switch apps. The risk is obvious: “all things” is how an app turns into a junk drawer. So the design guide asks for one quiet, native tool where the chrome recedes, experiments start switched off, and connectors you don't use can be hidden. That balance is still being worked out. It's a direction, not a finished thing, which is rather the point.

Direction and effort

So the answer to too many harnesses isn't finding the best one. There isn't a best one. The harnesses are good at being harnesses, the terminals are good at being terminals, and when building is mostly direction and effort, what's left to decide is what you want them to add up to. If a tool keeps making you leave what you're doing, notice that gap, because it's a better starting point than any comparison chart. Find a foundation you can build on, credit it properly, and start with the smallest change that closes the gap. That's how vorkspace started, and it's why it still doesn't have a model of its own.

Keep this article in your starred list.

↑ ↓ to explore · Enter to open