Skip to content

Back to the catalog

autonomous-ai/openharness
github.comrepo

autonomous-ai/openharness

OpenHarness (Autonomous) is an open-source command center for running coding agents such as Claude Code, Codex, Cursor, OpenCode, Devin, Amp and Copilot. A native app and per-machine daemon run each agent in its own tmux pane, with a git worktree per harness. Machines are linked by password, with end-to-end encrypted traffic over direct WebRTC, Cloudflare TURN or a keyless relay. It also supports local models (Ollama, MLX-LM, vLLM, Grid) and a Store of domain-specific harnesses (Blender, CircuitJS, MuJoCo, Godogen, Strudel, RDKit, Typst) defined by a harness.json. An optional open-hardware always-on display device shows agent status.

TL;DR Open-source native app, CLI, daemon and relay that manage many coding agents across machines over encrypted P2P, with pluggable craft-specific harnesses (CAD, circuits, robotics, music) and an optional hardware display.
Document

What it claims

OpenHarness is an MIT-licensed native desktop app (macOS and Linux, built in Flutter rather than Electron), CLI, daemon, relay and device firmware. Upstream tools keep their own licences. The page claims it supports Claude Code, Codex, Cursor, OpenCode, Devin, Amp, Copilot "and seven more". It does not wrap agents: it reads their transcripts and uses each vendor's own hooks, so your existing CLIs run unmodified. Closing the app does not stop the agents.

How it works

  • One daemon per machine runs agents in tmux. It dials out, so no machine opens an inbound port, and there are no SSH keys, Tailscale or port forwarding.
  • Remote terminals stream text, not pixels, peer to peer.
  • Encryption uses ChaCha20-Poly1305 with X25519 session keys and pinned Ed25519 identities, end to end on every path.
  • Path selection is automatic. The relay is used while WebRTC negotiates. If a firewall blocks the direct path, traffic goes over Cloudflare TURN while the app keeps retrying direct.
flowchart LR
  d1["daemon A"] -->|preferred| direct["direct WebRTC"]
  d1 -->|firewall blocks direct| turn["Cloudflare TURN"]
  d1 -->|while WebRTC negotiates| relay["Harness relay, no keys"]
  direct --> d2["daemon B"]
  turn --> d2
  relay --> d2
  • Agent Messages let harnesses in the same tab message each other with harness send. This is experimental and off by default (Settings ▸ Experimental).
  • Store harnesses are folders containing a harness.json, which specifies the engine, workspace template, instructions file and a viewer. Ten shared viewers exist. Adding a harness never touches the app.

Evidence

The page reports idle measurements on an M2 Max, using a Release build fixture with 16 terminals and 1,000 scrollback lines each:

MeasureMedianp95
UI response for ⌘N / ⌘O / ⌘T11–13 ms15–18 ms
Local terminal echo (excludes rendering)1.1 ms7.2 ms

Desktop resource use was about 0.1% of one CPU core and 304 MiB. That figure excludes the agent CLIs and the daemon. The page links to remote P2P, TURN and relay benchmarks, but gives no numbers for them here.

How to use it

Add a machine by running this on it, then use Machines → Link Machine in the app:

curl -fsSL https://harness.autonomous.ai/cli/install.sh | bash
harness login
harness remote-password set
harness start

For a terminal-only client (hn), which uses tmux keys and your ~/.tmux.conf:

curl -fsSL https://harness.autonomous.ai/cli/install.sh | bash
hn

To let Claude Code start, wait for and read other harnesses:

claude plugin marketplace add autonomous-ai/openharness --sparse .claude-plugin plugins
claude plugin install harness@openharness

Minimal custom harness:

{
  "spec": 1,
  "id": "examples/hello-world",
  "name": "Hello World",
  "engine": "codex",
  "workspace": { "template": "template", "marker": "index.html" },
  "agent": { "instructions": "AGENTS.md" },
  "viewer": { "use": "autonomous/web-viewer" }
}
harness dsh install "$PWD/store/viewers/web-viewer" --link
cp -R store/examples/hello-world ../my-harness
harness dsh check ../my-harness
harness dsh install ../my-harness --link

Building from source requires Node.js 20+, tmux, Xcode and Flutter 3.47+ / Dart 3.13+. make install-cli installs the CLI and restarts the local daemon. Key bindings are set in a single JSONC file that reloads on save and supports chords of up to four strokes.

Limits

  • Desktop builds are macOS and Linux only. The source build path shown targets macOS through Xcode.
  • Setup pipes a remote script into bash.
  • Account sign-in (harness login) is required.
  • The fallback relay is run by the vendor. Per the page it holds no keys, but traffic metadata still passes through it.
  • All benchmarks are idle measurements on a single machine and exclude the agent and daemon processes.
  • Agent Messages is experimental.
  • Unlisted Store experiments are hidden.

Organisations named here

  • Autonomous
  • Cloudflare
  • Claude Code
  • Cursor
  • Devin
  • Hermes
  • Ollama
  • OpenCode
  • vLLM

Technologies named here

  • Harness
  • Claude Code
  • Codex
  • Cursor
  • OpenCode
  • Devin
  • Amp
  • Copilot
  • HERMES
  • tmux
  • hn
  • harness skill
  • harness send
  • Grid
  • Ollama
  • mlx-lm
  • vLLM
  • WebRTC
  • Cloudflare TURN
  • Blender
  • CircuitJS
  • MuJoCo
  • Godogen
  • Strudel
  • RDKit
  • Typst
  • Flutter
  • GitHub Copilot
  • Cloudflare
  • MLX
  • Node.js
  • Git

Techniques named here

  • Domain-specific harness
  • End-to-end encrypted multi-path connectivity
  • Worktree per harness
  • Transcript and vendor-hook integration