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.
Line-delimited JSON-RPC on 127.0.0.1:19876, auth-token gated. Spawn shells, read pane state, capture screenshots, control sessions.
Same surface from any shell, cron job, or script. Thin JSON-RPC client over the local MCP — no duplicated business logic.
Modern config UI in the browser, not the cell grid. Tailwind + Alpine SPA at 127.0.0.1:19877. Themes, proxy, recordings, language.
en / 简体 / 繁體 / 日本語 / 한국어 / Deutsch / Français / Italiano / हिन्दी out of the box. System locale auto-detect.
OSC 133 block-segmented markdown with built-in redaction. Recordings live in <cwd>/.unterm/sessions/.
One-click region capture from the status bar. PNG to disk, image to clipboard, path to text clipboard.
Reads macOS scutil / Windows registry / GNOME gsettings / env. One-toggle on/off. No URL config.
Built on a customized WezTerm engine — Metal on macOS, OpenGL on Linux, DirectX via ANGLE on Windows.
Five principles, no exceptions
Every server, every API endpoint, every recording lives on 127.0.0.1. No login, no telemetry, no subscription. Your shell history is yours.
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.
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.
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.
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 GitHubFrequently 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.
Sister projects
Same author, same MCP-first design philosophy, different domains.