← All posts

Swappable coding engines: we run the best, and hold them to one bar

The Software Factory builds with the coding engine you choose, Claude Code or the open-source OpenHands, behind one brief, one set of guardrails and one scoreboard. Switch in one line; clients can run open engines only.

Vocion Teamvocion-v7.9.0

Status: shipped. Built by Jamie Schiesel:

ReleasePRWhat it added
v6.2.0#1381The engine registry and OpenHands
v6.3.0#1383A workspace picks its engine
v6.4.0#1384The scoreboard
v7.9.0#1429The Engines page

The design is in ADR 0005. Jamie's walkthrough: OpenHands and swappable factory engines (3 minutes).

Building a software factory is hard. A plain request has to become a plan, a working change, passing checks and a pull request a person can trust. Every step has to be safe: no secrets read, nothing pushed on its own, no files changed that a person owns.

The part that writes the code, the coding agent, is a product in its own right. Claude Code has Anthropic behind it, and OpenHands is open source. Both get better every month. Building our own would mean maintaining one forever, so we plug in theirs and keep what's ours: the factory around the engine.

What you can do now

The Engines page: Claude Code and OpenHands side by side on the same 48 eval tasks, both at 98% accepted, $0.43 and $0.80 per landed change, zero guard violations

One brief in, one stream out

Every engine works the same way inside the factory:

  1. The runner claims the run, clones the repository and starts its services.
  2. The engine reads one brief and reports its progress in the same format either way.
  3. The runner runs the checks, takes the change and opens the pull request.
  4. Vocion scores it.

Only the second step depends on the engine. Budget, clock, checks, landing and retries are the factory's, and the same for every engine.

OpenHands runs inside the runner's container, which is already the sandbox. Every tool it calls goes through the same guard scripts as Claude Code. An unknown tool is blocked, and the model key is removed before any tool starts.

Measured, not claimed

Every engine is measured the same way: 48 real factory requests, graded by hidden tests the engine never sees. We ran both engines through it today on the same model. Both passed 47 of 48. The results →

Get it

Update to v7.9.0 or later for the Engines page; the engines themselves have shipped since v6.2.0. Docs: Coding engines.