unharness

● open source terminal UI · Linux & macOS · AGPL-3.0

One terminal UI for every coding agent you already have an account for.

unharness runs Claude Code, Codex, pi, Antigravity and any Agent Client Protocol agent behind one interface. Same transcript, keys, permission prompts and resume, whichever agent is running, and you can switch agents mid-conversation without losing context.

$ curl -fsSL https://github.com/Liquescent-Development/unharness/releases/latest/download/unharness-installer.sh | sh

Building from source needs Rust 1.89+. Then run unharness doctor to see which agents it found.

unharness — claude → codex
Claude Code fixes a bug in fib.py behind a permission prompt, then /harness codex hands the conversation to Codex, which explains the fix from the shared transcript.

↳ Claude Code fixes a bug behind a permission prompt, then /harness codex and Codex picks up the same conversation.

what you get

Change the agent, keep the conversation.

One interface

Every agent gets the same transcript, keybindings, model and effort pickers, and session resume.

Switch mid-conversation

/harness codex hands the conversation to another agent. Switching back resumes the first agent's own session.

One sandbox for every agent

Landlock on Linux and sandbox-exec on macOS confine the whole agent process: it writes only to your project and cannot read your cloud and signing credentials.

ask means ask

Nothing writes, runs or reaches out without your answer, on every harness that offers the policy. "Always allow" rules belong to unharness and apply to every agent.

Rewind with your files

Go back to any earlier prompt and restore the working tree to how it was then, on any harness. Checkpoints never touch your .git.

Configure once

MCP servers, skills and AGENTS.md are set up once and handed to each agent in the form it understands.

harnesses

Bring the agents you already use.

unharness drives the vendor CLIs you have installed and signed in to. Each harness declares what it can do, and anything it lacks shows up as a caveat instead of failing silently. We say what we have run.

-H claudeClaude Coderecorded
-H codexCodexrecorded
-H pipirecorded
-H agyAntigravityrecorded
-H <name>Any ACP agent from your configclaude-agent-acp, codex-acp recorded
-H geminiGemini CLI, OpenCode, Goose, Copilot, Cursor, Qwen, KiroACP presets, not yet run

What each harness supports →

quick start

Five commands to know.

$ unharness doctor                          # what unharness found
$ unharness                                 # TUI with the default harness
$ unharness -H codex "Refactor the parser"  # pick a harness, start with a prompt
$ unharness --resume                        # resume the latest conversation
$ unharness -p "Summarise src/"             # headless print mode

Policies: ask · accept-edits · auto · bypass. The sandbox needs Linux 6.2 or newer; the macOS backend has not been run on a Mac yet.

documentation