Unterm
v0.11.0 — signed, notarized, on macOS / Linux / Windows

The terminal
AI agents can drive.

A cross-platform terminal with built-in MCP, HTTP, and CLI control planes. Claude Code, Cursor, Aider, your scripts — they all get the same JSON-RPC surface to drive every operation.

Open source · Local-first · No cloud · No login

Your terminal is a surface. AI agents are the hands.

Most terminals embed AI inside the binary — Warp's cloud orchestrator, ChatGPT desktop's panel. Unterm picks the opposite end: keep AI completely outside, expose the terminal as a surface that any external agent can grip via MCP. The terminal is the hand. Whatever's holding it is up to you.

Three ways to use Unterm

We didn't build for one workflow. The MCP surface means each persona gets the same control plane through different entry points.

🤖
AI engineers

Drive multiple terminal panes from Claude Code, Cursor, or your own agent. Each pane is one task; your agent picks where to type. Multi-instance NATO names (alpha, bravo, charlie…) make routing across windows trivial.

  • Director / worker pattern: outer agent supervises inner agent in a pane
  • Long-running watcher: kick off a build, poll until idle, decide next step
  • Multi-pane orchestration: fan work across projects, aggregate results
  • Recording with token redaction for review and fine-tune
⚙️
DevOps & SREs

Cron-friendly CLI for everything you can do in the GUI. unterm-cli ships in every release; pipe --json through anywhere downstream that wants raw JSON-RPC. Same surface for ops scripts, dashboards, runbooks.

  • Auto proxy detection: macOS scutil / Windows registry / GNOME gsettings
  • Headless screenshots and pane reads for incident docs
  • Recording → markdown for runbook generation, PII-redacted by default
  • No telemetry, no login, every server bound to 127.0.0.1
🔧
Power users & OSS hackers

MIT-licensed WezTerm fork with first-class agent integration. Patches accepted on GitHub. Build it yourself; the binary CLI ships in every release. Web Settings UI is a Tailwind + Alpine SPA — fork the page, change the colors.

  • Universal arm64 + x86_64 macOS binary, signed with Developer ID
  • Linux .deb (apt) and AppImage (any distro)
  • Windows MSI with WiX 6 + portable .zip
  • 9 locales out of the box, system locale auto-detect

One install, three platforms

Download the signed bundle for your OS. Cross-platform parity is a correctness property — if a feature works on Windows but bails on macOS, that's a bug.

curl -fsSL https://unterm.app/install.sh | sh

Detects OS + arch, downloads the right artifact for the latest release. macOS gets the signed + notarized DMG into /Applications. Linux uses apt when available, falls back to the AppImage in ~/.local/bin.

Or grab the artifact directly:

Four control surfaces, one engine

Every Unterm window starts a local MCP server and an HTTP settings server. Read and write the same JSON state from any of them.

🔌
MCP server

Line-delimited JSON-RPC on 127.0.0.1:19876, auth-token gated. Spawn shells, read pane state, capture screenshots, control sessions.

unterm-cli

Same surface from any shell, cron job, or script. Thin JSON-RPC client over the local MCP — no duplicated business logic.

🖥️
Web Settings

Modern config UI in the browser, not the cell grid. Tailwind + Alpine SPA at 127.0.0.1:19877. Themes, proxy, recordings, language.

🌍
9 languages

en / 简体 / 繁體 / 日本語 / 한국어 / Deutsch / Français / Italiano / हिन्दी out of the box. System locale auto-detect.

🎬
Session recording

OSC 133 block-segmented markdown with built-in redaction. Recordings live in <cwd>/.unterm/sessions/.

📸
Region screenshots

One-click region capture from the status bar. PNG to disk, image to clipboard, path to text clipboard.

🌐
Auto proxy detect

Reads macOS scutil / Windows registry / GNOME gsettings / env. One-toggle on/off. No URL config.

⚙️
GPU rendering

Built on a customized WezTerm engine — Metal on macOS, OpenGL on Linux, DirectX via ANGLE on Windows.

What's new in v0.10

Three weeks of Windows polish + the multi-instance foundation that AI agents need to drive a fleet of terminals.

v0.10 White-flash fix

Windows used to flash bright white between window create and the first GL frame. Root cause: WindowProc intercepted WM_ERASEBKGND but never painted, so the DWM redirection bitmap stayed in its uninitialized white state. Now we manually FillRect the client area with BLACK_BRUSH before returning.

v0.9 Multi-instance NATO names

Each Unterm process owns one instance with a NATO-phonetic name (alpha, bravo, charlie…). MCP instance.list enumerates all live instances; agents pick by cwd, title, or start order. Window title becomes Unterm — alpha — Project for visual mapping.

v0.7 Auto UTF-8 on Windows

PowerShell and cmd.exe spawned by Unterm get UTF-8 output by default — no more mojibake on zh-CN, ja-JP, ko-KR Windows installs. Agents don't have to fix the user's $PROFILE; we wrap at spawn time with chcp 65001 + Console.OutputEncoding setup.

v0.9 CWD in the status bar

Active pane's working directory shows up between the shell name and dimensions, with $HOME → ~ and middle truncation. Click to copy the full path. Works across local panes, mux clients, and SSH-forwarded sessions.

View all releases on GitHub →

Five principles, no exceptions

01
Local-first, no cloud

Every server, every API endpoint, every recording lives on 127.0.0.1. No login, no telemetry, no subscription. Your shell history is yours.

02
AI lives outside the terminal

No chat overlay, no ghost-text autocomplete, no inline AI panel. The terminal is the surface — Claude Code, Cursor, your scripts grip it through MCP.

03
MCP is a first-class surface

Every product feature ships with an MCP method and a CLI subcommand on day one. If it can't be driven from outside, it doesn't ship.

04
Cross-platform parity is correctness

A feature that works on Windows but bails on macOS or Linux is a bug, not a 'not yet supported.' Mac, Linux, Windows ship together.

05
Subtraction over decoration

When a feature is awkward, delete it instead of redesigning it. No right-click menu, no Cmd+Q confirmation, no manual proxy URL config — they used to exist, then we cut them and the product got better.

How Unterm differs

Three terminals reset the bar in 2026. They each picked a different lane.

Feature Unterm Warp iTerm2 Ghostty
MCP-controllable from outside
Local-first, no cloud
GPU rendering
macOS + Linux + Windows macOS macOS+Linux
Open-source client ✓ MIT AGPL ✓ GPL ✓ MIT
AI inside the terminal ✗ (by design) ✓ (cloud)
9-language native UI en en en

Comparison reflects publicly documented features as of 2026-05-01. Other terminals may have closed-source or roadmap items not listed.

Get Unterm 0.11.0

macOS bundle is signed with a Developer ID and Apple-notarized. Linux .deb / AppImage and Windows .msi / .zip are also published.

View v0.11.0 release on GitHub

Frequently asked

What is Unterm?

A cross-platform terminal emulator with built-in MCP, HTTP, and CLI control surfaces. The product thesis: terminal as MCP-controllable surface, so any external AI agent can drive it from outside instead of having an AI baked into the terminal itself.

How does it work with Claude Code, Cursor, or other agents?

Each Unterm window starts a local MCP server (TCP, JSON-RPC, auth-token gated). Point your MCP client at 127.0.0.1:<port> — the port + token are written to ~/.unterm/server.json on launch. The agent can spawn shells, run commands, read pane state, capture screenshots, toggle recording, and switch settings.

How do I drive multiple Unterm windows from one agent?

Each Unterm process is one instance with a NATO-phonetic name (alpha, bravo, …) recorded in ~/.unterm/instances/<name>.json. Call instance.list on any one of them to enumerate; pick by cwd / title / start order; connect to that instance's port with its auth token. ~/.unterm/active.json points at the most recent live instance for single-instance fallbacks.

How is this different from Warp?

Warp embeds AI inside a closed cloud orchestrator (Oz) — external tools like Claude Code can't drive Warp from outside. Unterm picks the third lane: keep AI out of the terminal, expose the terminal itself as an MCP-controllable surface, and let any agent grip it. No cloud, no login.

Where does my data go?

Nowhere external. MCP and Web Settings servers bind to 127.0.0.1 only. Session recordings land under <project>/.unterm/sessions/ with built-in redaction for tokens. There is no telemetry, no analytics, no login, no cloud round-trip. Your shell history is yours.

How do I script it?

Use unterm-cli: session list, proxy status, theme set midnight, session record start, screenshot. Pass --json to any subcommand for raw JSON-RPC output suitable for shell pipelines and cron jobs.

Which platforms ship signed and notarized?

macOS: universal arm64 + x86_64 DMG signed with a Developer ID and Apple-notarized + stapled (no Gatekeeper warnings). Linux: .deb for Debian/Ubuntu and AppImage for any distro. Windows: WiX-built MSI installer and portable .zip. All published to GitHub Releases on every minor tag.

Is it open-source?

Yes — MIT licensed. Built on top of the WezTerm engine for renderer / font / SSH / mux work, with a thin Unterm product layer (MCP, Web Settings, recording, i18n, signing pipeline) on top. Source at github.com/unzooai/unterm.

How do I contribute?

Open an issue or PR on GitHub. The project tracks bugs, feature requests, and discussion in one queue. We bundle accumulated fixes into minor releases — patch-level versions don't trigger CI builds. Documentation lives in-repo at /docs.