Unterm
v0.5.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

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.

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.5.0

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

View v0.5.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 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.

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.