AIエージェントが
操縦できるターミナル。
Claude Code、Codex、Gemini、OpenCode、Aider を走らせ、さらに MCP コントロールサーフェス経由でターミナル自体を操縦させる。セッションはウィンドウより長生きする core プロセスに住み、サイドバーは誰が作業中で、誰が完了し、誰があなたを待っているかを教えてくれる。
Agent-controllable terminal · Local-first · No cloud · No login
What Unterm is, in 60 seconds
specs you can verify in source · refreshed each release- Latest version
- v0.71.7 · 2026-09-12 · MIT
- Bundled AI agents
- 7 signed manifests — Claude Code · Codex CLI · Gemini CLI · OpenCode · Aider · Kimi Code CLI · Trae Agent. Ed25519-verified envelope from unterm.app/api/agents/manifests; per-agent auth mode picker.
- Price
- $0 forever · no paid tier · no subscription · no in-app purchase
- Platforms
- macOS (universal) · Linux x86_64 (.deb + AppImage) · Windows 10/11 (.msi + portable .zip)
- Installer size
- DMG 50 MB · .deb 27 MB · AppImage 43 MB · MSI 43 MB
- Memory at idle
- ~110 MB resident · scales linearly with open panes
- UI languages
- 9 — en · 简体 · 繁體 · 日本語 · 한국어 · Deutsch · Français · Italiano · हिन्दी
- Control surfaces
- MCP (JSON-RPC over TCP) · HTTP Web Settings ·
unterm-cli· GUI — same JSON state for all four - Agent integrations tested
- Claude Code · Cursor · Codex CLI · custom Python / Node MCP clients — all via 1 socket, ~30 lines of code
- Data collection
- Zero telemetry · no account · no analytics · every server bound to 127.0.0.1
- Tech stack
- Rust · native next-core engine · wgpu · MCP (line-delimited JSON-RPC) · Tailwind + Alpine for Web Settings
Install every coding agent. One click each. No setup tax.
If you've ever tried to run more than one AI coding CLI side-by-side, you know the tax: npm install, OAuth flow, API key, ~/.config/<vendor>/<different format each>, env vars, profile separation. Unterm v0.18 collapses that into one settings tab + a CLI. No other terminal does this.
Install in the GUI or via CLI
Click Install on any agent card, or run unterm-cli agent install <id>. Unterm runs the right command for your platform (npm / pipx / etc.), verifies the binary lands on PATH, and re-detects automatically.
Official subscription first. BYO key stays opt-in.
Most agents ship with an official account or subscription login path (Claude Pro, ChatGPT Plus, Google AI Pro). Unterm defaults to that mode — no API key is ever silently injected. Switch to bring your own key or custom endpoint explicitly in the Configure form when you actually want per-token billing or a corporate gateway.
Ed25519-signed manifest catalog
The list of agents + their install commands isn't hard-coded into Unterm — it's a signed envelope served from unterm.app/api/agents/manifests. A compromise of the CDN can't push curl | sh to your machine; the public key is baked into every Unterm binary.
AI controls the terminal. MCP makes it real.
Most terminals embed AI inside the binary. Unterm does the opposite: keep AI outside, expose the terminal as a surface that any external agent can grip via MCP. The terminal is the thing being controlled; the agent is the thing doing the work.
One AI controls another AI through the terminal.
The outer agent owns the terminal session. It switches cwd, launches an inner coding agent in a pane, reads the logs, and keeps iterating until the repository is green.
The outer agent points the active pane at the project root so every command, log, and screenshot stays anchored to the same working directory.
It spawns a coding agent in a split pane, gives it the task, and lets that agent do the edit loop inside the terminal.
The outer agent reads test output and pane state, retries when needed, and only moves to commit or release when the terminal says the work is done.
The terminal AI agents drive — including their own.
Below is a real session from this Unterm window. Claude Code, running in pane #0, called session.split over MCP to put pane #5 on the right half, session.focus to make it active, then typed commands into it character-by-character with session.input. Same TCP socket reads what the shell echoed back via screen.text. No special agent integration — vanilla JSON-RPC, ~30 lines of Python.
# Claude Code, running in pane 0 of this very Unterm window.
# Tells its own MCP server to spawn a new tab, then types into it.
import socket, json, time
s = socket.create_connection(("127.0.0.1", 19876))
# 1. auth — token is in ~/.unterm/instances/<name>.json
s.sendall(b'{"jsonrpc":"2.0","id":1,"method":"auth.login",'
b'"params":{"token":"…"}}\n')
# 2. split CURRENT pane right-half (since v0.17) · also `agent.launch` (v0.18) — true side-by-side, not a new tab
s.sendall(b'{"jsonrpc":"2.0","id":2,"method":"session.split",'
b'"params":{"id":0,"direction":"right","cwd":"/path/to/repo"}}\n')
new_pane_id = … # parse response → e.g. 5
# 3. focus it so the user sees the new pane immediately
s.sendall(b'{"jsonrpc":"2.0","id":3,"method":"session.focus",'
b'"params":{"id":new_pane_id}}\n')
# 4. type, character by character, with human rhythm
for ch in "git log --oneline -5\n":
payload = json.dumps({
"jsonrpc": "2.0", "id": 4,
"method": "session.input",
"params": {"id": new_pane_id, "input": ch}
})
s.sendall((payload + "\n").encode())
time.sleep(0.03)
# 5. read what the shell echoed back — same socket, opposite direction
# s.sendall(... method "screen.text", params {"id": new_pane_id}) alexlee@192 unterm % # 👋 Claude 通过 MCP 实时打字进来 ↓
alexlee@192 unterm % pwd
/Volumes/Dev/code/unterm
alexlee@192 unterm % git log --oneline -5
5f44d15 (HEAD -> master, tag: v0.18) release: prep v0.18 — AI agent integration
8ae3786 agents tab: fix detail view (route + detect plumbing)
7c18235 agents tab: wrap detail view in x-if so child bindings only run when open
6ff27a9 AI agents: Web Settings tab + 'Shell → AI Agents' submenu
6d22e2f AI agent integration: signed manifests + install/auth/configure/launch runtime
alexlee@192 unterm % echo '↑ 5 个 commit 都是 Claude 用 unterm-cli + MCP 推的'
↑ 5 个 commit 都是 Claude 用 unterm-cli + MCP 推的
alexlee@192 unterm % ls -la web/src/pages/docs/ | head -10
total 368
drwxr-xr-x 9 alexlee staff 288 agent-integration.md
drwxr-xr-x 6 alexlee staff 192 architecture.md
-rw-r--r-- 1 alexlee staff 14433 cli-reference.md
-rw-r--r-- 1 alexlee staff 22051 configuration.md
-rw-r--r-- 1 alexlee staff 25587 mcp-reference.md
-rw-r--r-- 1 alexlee staff 39507 multi-instance.md
-rw-r--r-- 1 alexlee staff 23827 profiles.md
alexlee@192 unterm % The agent that wrote this section ran exactly that snippet, then used screen.text to copy the right-hand output back into this HTML. The v0.18 tag visible above? Same agent pushed it 30 minutes ago. Read AND write on the same socket — that's the whole story.
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.
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
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
MIT-licensed, on its own next-core kernel since v0.61 (~12k lines, 10 direct dependencies), 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
Download by platform
Pick the signed bundle for your OS. The direct links below go straight to GitHub Releases.
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.
Auto-detects system settings and supports manual HTTP/SOCKS URLs, nodes, rotation, and Clash/mihomo controllers.
Built on Unterm's native next-core terminal engine with cross-platform wgpu rendering.
The complete control surface
Not a screenshot tour — the real surface every agent and script can call. 151 MCP methods across 30 namespaces, plus 37 CLI commands, all returning the same JSON.
すべての CLI エージェントのライブ状態(作業中 / 待機中 / アイドル)を一目で把握し、受信トレイからあなたを待つエージェントへ直行。隔離された git worktree で1つのタスクに N 個のエージェントのフリートを起動し、その成果を GUI・MCP・CLI のどこからでもレビュー、マージ、ロールバックできます。
Spawn, split, focus, resize, and destroy panes from outside the terminal. Type into any pane character-by-character, read its cwd, poll until idle — no keystroke simulation.
Pull live viewport text, the full scrollback as one string, cursor position, or a regex search. detect_errors flags failed commands for an agent to react to.
Run a command and stream output, run-and-wait for an exit code, send raw bytes, query status, cancel, or deliver a POSIX signal — structured results, not screen-scraping.
Install, authenticate, configure, and launch Claude Code / Codex / Gemini / OpenCode / Aider. The mcp-stdio bridge auto-wires each one back to this terminal's MCP server.
Bind a window to a developer identity — GitHub PAT, AWS keys, npm token, SSH key, git author. Credentials live in the OS vault; 7 sniffers discover existing ones read-only.
Each window is a NATO-named instance (alpha, bravo, charlie…). Enumerate every live Unterm on the machine, focus one, or retitle it — an agent routes work across windows by cwd or title.
Record any session as an asciicast, replay it, or export to OSC-133 block-segmented markdown with token redaction — each block carries its command, output, exit code, and duration.
Screenshot the screen, a window, or a drag-selected region; read the clipboard; or push a file to your own Aliyun OSS / Tencent COS / Qiniu bucket and get back a public URL — all over MCP.
Read the OS proxy state, switch between configured nodes, latency-test endpoints, or apply / clear system proxy overrides (macOS scutil · Windows registry · Linux env) — zero URL pasting.
Every agent write is logged with its identity; a write-confirmation policy gates first contact. Test policy decisions, run the built-in self-test suite, and read liveness/readiness flags.
Save the current window's full pane / tab layout, list saved layouts, and restore one — an agent can snapshot a working set and bring it back later.
meta.surface returns every MCP method (with param schemas), every CLI subcommand, and every live keybinding in one call — so an agent that just connected learns the whole API without docs.
Every method is reachable from MCP (JSON-RPC over TCP), the unterm-cli binary, the Web Settings HTTP API, and the GUI — one round-trip to meta.surface (or unterm-cli reference) returns this entire list live.
Where Unterm stands out
Three claims you can grep, build, or run yourself. No marketing fog.
v0.18 makes Unterm a one-click launcher for Claude Code, Codex CLI, Gemini CLI, OpenCode, and Aider. Each agent's install command, OAuth flow, API key, and native config file are described by a signed manifest fetched from unterm.app; the runtime drops the key into your OS keychain, writes the agent's own JSON/TOML/YAML config (preserving unknown fields), exposes Unterm itself to the agent as an MCP server, and records the session into audit — all reachable from the CLI and the new AI Agents Web Settings tab.
session.split + session.focus over MCP let an external agent (Claude Code, Cursor, your script) carve the active window left / right / up / down and hand focus to the new pane — without simulating any keystroke. Built into the Python snippet on the hero. No other terminal exposes pane geometry to outside processes this way.
Each session.input / exec.send is logged with the calling agent's identity. First write from a new agent triggers an Allow / Block / Always-allow banner. Trust persists to ~/.unterm/trusted_agents.json and is one click revocable from the Web Settings MCP tab. The status bar shows live MCP write count.
Small touches that add up
Daily-driver polish — none are headline features, but together they remove friction.
Fish-style grey prediction continues your input from any pane's shell history; → or End accepts.
Agents propose commands without touching the PTY — sit above the status bar; Tab accepts, Alt+Enter accept-and-run.
Drag-select any rectangle from the status bar; PNG to disk, image to clipboard, file path as text — all at once.
9 bundled themes; unterm-cli theme set midnight changes them all live. Status bar shows active pane's $HOME-relative cwd.
Finder right-click → Open in Unterm. Uses the AppleScript Services extension — no in-app context menu chrome.
Active identity profile (GitHub PAT / AWS keys / npm token bound to this window) shows in the status bar; click to spawn the next profile.
Reads macOS scutil / Windows registry / GNOME gsettings / env. One toggle on/off. No URL pasting.
Recordings split on shell prompt boundaries automatically. Each block has its command, output, exit code, duration — searchable.
The right press pastes. Selecting is what copies.
The whole copy-paste loop lives on the mouse, but the two halves sit on two different motions. Let go of a selection and it is already on the clipboard; press the right button and it pastes at the cursor — every time, selection or not. No context menu ever opens, nothing to dismiss.
Drag across output, or just double-click a word. The moment the button comes up the text is on the clipboard. There is no second gesture to remember and nothing to press to confirm it.
One button, one job. It pastes at the prompt whether or not something is selected. Copy from one pane, click into another, press right — command moved, zero keystrokes. An empty clipboard is a quiet no-op, never an error.
macOS treats Ctrl+click as a secondary click, and so does Unterm — trackpad, Magic Mouse, or any third-party driver. Only a bare Ctrl qualifies, so your own Ctrl-combo mouse bindings and the Ctrl+Shift window drag stay untouched. macOS delivers that one motion as two events; Unterm acts on it once. Mouse-aware TUIs like vim or Claude Code behave the same way.
Changed in v0.71.6. The press used to copy whenever something was selected — repeating work the selection had already done, at the cost of the paste it was aimed at.
ターミナルの中で動くエージェントが、見えるようになった
Claude Code、Codex、Gemini、Aider——どのペインでも、誰が作業中で、誰があなたの対応待ちで、何を変更したかがわかります。設定ゼロですぐ使え、コマンド1つで hook レベルの正確なレポートに。
公式 hooks、タイトル/OSC 解析、プロセス検出、画面ヒューリスティクスの4層のシグナルを、ペインごとに1つの状態へ集約:作業中(呼吸する青)、要対応(アンバー)、完了、アイドル。トップバーは全ウィンドウを集計し、あなた待ちのエージェントが現れた瞬間にアンバーに変わります。
Ctrl+Shift+A:全ウィンドウのすべてのエージェントを待機中優先で一覧表示。どれくらいの時間、何で止まっているかも表示します。Enter でそのペインへ直行。「あっちで y を押してくる」が、キー2回で済むように。
claude × 2 + codex に同じタスクを競わせましょう——各メンバーはリポジトリの隣にある専用の git worktree とブランチで動き、専用のタブと状態バッジを持ちます。あなたの作業コピーには一切触れません。
エージェントが作業を始めた瞬間、Unterm はリポジトリのチェックポイントを取ります(dangling コミット——HEAD、インデックス、ファイルには触れません)。エージェントが新規作成したファイルも含む行単位の diff、ステージ済みとしての squash マージ(コミットはあなたのまま)、任意のチェックポイントへのロールバック、メンバー同士の並列比較。
コックピット自体も MCP + CLI:agent.status、cockpit.inbox、fleet.launch、review.merge…オーケストレーター役のエージェントが、人間なしでフリートを起動し diff をレビューできます。ローカルファースト——どれもクラウドを経由しません。
v0.61 の新機能
Proxy auto-rotation that survives flaky nodes, full ghost-text completion for every AI CLI's flags and arguments, and zero-config Clash detection on Windows — the most recent releases, in four cards.
unterm-core がセッションを所有します。ユーザーごとのプロセスが shell・スクロールバック・分割レイアウトを保持し、MCP サーフェス全体を提供し、ウィンドウを閉じても生き続けます(v0.62)。v0.63 はインストールが当然受け取るべきだったリリース:core デーモンが 6 種すべてのパッケージに実際に同梱され、設定ページが Core モードで動き、絵文字が初めて描画され(同梱フォントは FreeType が描けない COLRv1 でした)、ポーズ後のタイピング遅延が 96ms から 8ms に、macOS は新しいマークをまとい、エクスプローラーの右クリックに「Open in Unterm tab」が加わりました。
Unterm はもう WezTerm フォークでは動いていません。next-core はこの製品のために書かれたターミナルカーネル — パーサー、スクリーンモデル、PTY ランタイム、フォントスタック、wgpu レンダラー — で、約 12k ソース行と 10 個の直接依存という予算に収めています。起動からライブな MCP サーフェスまで 22ms(旧カーネルは 7.1s)、アイドル時は 1 コアの 6.6%(旧 80%)、20 万行スループットは同等。旧カーネルとの機能パリティは 159 項目の要件台帳に対して一つずつ閉じ、タイポグラフィはプラットフォームネイティブに:macOS の本物のトラフィックライト、pt 正確なサイズ、そして CJK がついに正しく描画されます。詳しくはブログへ。
The fleet closes its own loop. Automatic verification per member — Review infers the right validation command (Cargo / Go / npm / pnpm / yarn / Python / Maven / Gradle / .NET) or runs yours, persists status + log, and gates squash-merge on a passing run (an audited force overrides). Members are ranked by verification and change size; failed ones retry in the same worktree without losing work. Plus review.verify / fleet.retry over MCP + CLI, grouped project navigation with fuzzy search in the sidebar — and the new command-loop brand mark on every surface.
ターミナルが中のエージェントを見えるように:ペインごとのライブ状態(タブバッジ+全ウィンドウ集計)、待機中優先のエージェント受信トレイ(Ctrl+Shift+A)、1つのタスクをN個の隔離 worktree で並走させるフリート、チェックポイント・diff・ロールバック・squash マージを備えたレビューページ。新しい MCP メソッド12個、CLI ファミリー3系統を追加。
A performance release. Cold start ~780ms → ~280ms. Five startup-path wins: config keys validate against a precomputed set instead of rebuilding the whole config per key (Lua eval 297ms → 8ms), the redundant second config load is skipped, WSL distros are read from the registry instead of spawning wsl.exe, the 1119 built-in color schemes parse in parallel, and the GL context is prewarmed on a helper thread right after argument parsing. No more CPU core burned on output floods. On Windows, a throttled WM_PAINT handler used to leave the update region unvalidated, so the message loop spun at ~91% of a core during sustained output; it now drops to ~4%. MCP stays responsive mid-flood (was timing out at 30s, now answers in tens of milliseconds). Also fixed: the first terminal row no longer hides under the top bar, the settings-menu prewarm no longer fails on small glyph atlases, and unterm-cli without --id now targets the pane you're looking at.
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 belongs to the OS, use the OS. Keep AI generation outside the terminal, core operation local, and use native Finder integration.
When you install an AI agent through Unterm, the default authentication mode is the vendor's official subscription (OAuth) — your Pro / Plus / Team plan. We never silently inject an API key into a session; per-token billing happens only if you explicitly switch the auth mode to 'bring your own API key' or 'custom endpoint' in the Configure form. This is an opt-in, not a footgun.
A terminal doesn’t need AI built in.
It needs to be drivable by AI.
This is the fork between Unterm and Warp — not a feature gap, a direction.
A terminal is a thirty-year tool; an AI model is a six-month component. Weld the AI into the terminal and the longest-lived tool you own is now defined by its shortest-lived part — when the model ages, the whole terminal ages with it.
Claude Code, Codex, Gemini CLI, Aider — you already run the strongest coding agents there are, and they get better every month. A chat box inside the terminal is just one more copilot to sign into, and it will never be the one you actually prefer.
Agents don’t lack intelligence — they lack hands on the terminal. Unterm makes the terminal an MCP-drivable surface: spawn panes, run commands, read the screen, take scrolling screenshots, change settings, record sessions. An agent uses the terminal the way you do, instead of watching through glass.
- AI embedded in the terminal UI, tied to their cloud — login, subscription, quotas
- Their chosen models, upgraded on their schedule
- The AI core is closed; your command context flows through their servers
- The terminal is an MCP surface — any agent plugs in and drives, today’s or next year’s
- You pick the agent and the model; Unterm never locks you in
- MIT, fully open source; everything stays on 127.0.0.1 — no login, no subscription, no telemetry
You’ll still be using a terminal in thirty years. Nobody knows which AI will be driving it then — which is why the only future-proof terminal is the one built to be driven.
How Unterm differs
Three terminals reset the bar in 2026. They each picked a different lane.
| Feature | Unterm | Terminal.app | Warp | iTerm2 | Ghostty |
|---|---|---|---|---|---|
| agent-first | native | paid | free | free | |
| MCP-controllable from outside | ✓ | ✗ | ✗ | ✗ | ✗ |
| Scriptable CLI for every action | ✓ | ✗ | ✗ | Python API | ✗ |
| Built-in AI coding-agent launcher | ✓ ×7 | ✗ | ✗ | ✗ | ✗ |
| Agents auto-wire to the terminal's MCP | ✓ | ✗ | ✗ | ✗ | ✗ |
| Agent Cockpit (Inbox · fleets · review) | ✓ | ✗ | ~ cloud | ✗ | ✗ |
| Identity profiles (creds per window) | ✓ | ✗ | ✗ | ✗ | ✗ |
| Multi-instance orchestration | ✓ | ✗ | ✗ | ✗ | ✗ |
| Session recording → markdown | ✓ md | ✗ | ~ | ✓ | ✗ |
| Screenshot + file upload from MCP | ✓ | ✗ | ✗ | ~ | ✗ |
| Right-click = copy / paste gesture | ✓ gesture | menu | menu | menu | menu |
| Built-in proxy management | ✓ | ✗ | ✗ | ✗ | ✗ |
| Local-first, no cloud | ✓ | ✓ | ✗ | ✓ | ✓ |
| AI inside the terminal | ✗ (by design) | ✗ | ✓ (cloud) | plugin | ✗ |
| GPU rendering | ✓ | ✗ | ✓ | ✓ | ✓ |
| macOS + Linux + Windows | ✓ | ✗ | ✓ | macOS | mac+Linux |
| Open-source client | ✓ MIT | ✗ | ✗ | ✓ GPL | ✓ MIT |
| 9-language native UI | ✓ ×9 | OS | en | en | en |
| Price | $0 | $0 | freemium $ | $0 | $0 |
✓ yes · ✗ no · ~ partial · ×N count. The ✗ by design on "AI inside" is the whole thesis: Unterm keeps the AI outside and exposes the terminal as the surface it grips.
Comparison reflects publicly documented features as of 2026-05-01. Other terminals may have closed-source or roadmap items not listed.
Get Unterm 0.17 v0.71.7
macOS bundle is signed with a Developer ID and Apple-notarized. Linux .deb / AppImage and Windows .msi / .zip are also published.
Open the latest releaseよくある質問
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.
Claude Code が承認待ちになったことを知るには?
Unterm は各ペインのエージェント状態を追跡します。Claude Code(または Codex、Gemini、Aider)が確認待ちで止まると、そのタブのドットがアンバーに変わり、トップバーのチップが件数付きでアンバーになり、エージェントは受信トレイ(Ctrl+Shift+A)の最上位へ——Enter でそのペインへ直行できます。Claude Code と Gemini は設定ゼロで検出。「unterm-cli agent enable-hooks」で hook レベルの正確なレポートが追加されます。
複数の Claude Code インスタンスを衝突させずに並列実行できますか?
はい——それこそがフリートの役割です。「unterm-cli fleet launch --agents claude,claude,codex -- タスク」で、各メンバーにリポジトリの隣の専用 git worktree とブランチが与えられるため、互いにも、あなたの作業コピーにも干渉できません。各メンバーはライブ状態バッジ付きの専用タブを持ち、レビューページで結果を並べて比較できます。
AIコーディングエージェントの変更をレビュー・取り消しするには?
エージェントがリポジトリで作業を始めた瞬間、Unterm はチェックポイントを取ります——HEAD にもインデックスにもファイルにも触れない dangling git コミットです。レビューページ(Web 設定内)では、エージェントが新規作成したファイルも含む行単位の diff を確認でき、気に入った成果をステージ済みの変更として squash マージ(コミットはあなたが実行)したり、破棄したり、worktree を任意のチェックポイントへロールバックできます。
Unterm はどのAIコーディングエージェントに対応していますか?
ランチャーから Claude Code、Codex CLI、Gemini CLI、OpenCode、Aider をそれぞれワンクリックでインストール・接続できます。コックピットの状態検出は kimi、trae、cursor-agent も標準で認識し、標準的なターミナルシグナル(タイトル、OSC 9/777、BEL)を発するエージェントなら何でも基本的な追跡が自動で効きます。どんなツールも「unterm-cli agent signal」で統合できます。
How do I copy and paste with just the mouse?
Right-click does both: with a selection it copies (and clears the highlight); without one it pastes at the cursor. On macOS, Ctrl+click is the same gesture. Inside terminal apps that take over the mouse (vim, htop, Claude Code), select with Shift+drag and a plain right-click still copies; without a selection the app keeps its own right-click — hold Shift to force Unterm's paste. There is no context menu to dismiss, and an empty clipboard is a quiet no-op.
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.
Does Unterm phone home, even once?
No. Zero telemetry by default — not even an opt-in dialog. The only outbound HTTP requests Unterm makes are: (1) at user request, when you click a download link in Web Settings; (2) by your shell, like normal — anything your terminal would do, it still does. We don't ship analytics, error reporting, install pings, or update checks.
Is there a paid tier or premium feature?
No. Unterm is MIT-licensed; the same single binary ships every feature. No subscription, no Pro tier, no plugin marketplace, no "buy now to unlock split panes." If you'd like to support the project, the Sponsor section above is the only ask.
How big is the install and runtime?
macOS DMG ~50 MB · Linux .deb 27 MB · AppImage 43 MB · Windows MSI 43 MB. At idle with one window open, resident memory is ~110 MB; scales linearly per pane. The native next-core engine renders through wgpu; runtime cost is normally dominated by the shell and applications in each pane.
Does Unterm detect my system language?
Yes. On first launch, Unterm reads the OS locale (defaults on macOS, $LANG on Linux, registry on Windows) and picks the closest of 9 bundled UI languages. You can override per window in Web Settings → Language. Translations live in unterm-services/src/i18n/locales/*.json — patches welcome.
What stops a rogue agent from running rm -rf on my repo?
Three gates: (1) MCP server only listens on 127.0.0.1 — no network access. (2) Auth-token gated; the token is in ~/.unterm/instances/<name>.json, an agent without read access to that file can't even connect. (3) First write from a new agent triggers a blocking Allow / Block / Always-allow banner; the audit log records every write attempt with calling agent's identity. You can revoke trust at any time from the Web Settings MCP tab.
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. The current GUI and terminal runtime use Unterm's native next-core engine. Source at github.com/zhitongblog/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.
Support Unterm
One developer builds and maintains Unterm in their spare time. If it speeds up your daily work, a small sponsorship keeps the project alive.
International monthly or one-time tier. Processed by Stripe via GitHub. Cancelable any time.
Worldwide one-time tip. Choose any amount in your local currency.
Sponsors get listed in the README and the in-app About dialog (with permission). No paywall, no premium tier — everything ships in the same MIT-licensed binary.
Community & contact
Open queue, no gatekeeping. The right place for your question depends on what kind of question it is.
Bug reports, feature requests, regressions. The triage queue is single — every report gets read.
Questions about MCP integration patterns, agent setup, workflow design. Other users may have hit the same thing.
Direct line for security issues, partnerships, or anything that doesn't fit a public forum.