Alles, was Unterm kann
Die vollständige Liste: jede Schnittstelle, jede Fähigkeit und warum sie so gebaut ist.
Was Unterm ist, in 60 Sekunden
im Quellcode überprüfbare Fakten · mit jedem Release aktualisiert- Neueste Version
- v0.71.18 · 2026-10-04 · MIT
- Mitgelieferte KI-Agenten
- 7 signierte Manifeste — Claude Code · Codex CLI · Gemini CLI · OpenCode · Aider · Kimi Code CLI · Trae Agent. Ed25519-verifizierter Umschlag von unterm.app/api/agents/manifests; Auth-Modus pro Agent wählbar.
- Preis
- $0 für immer · keine Bezahlstufe · kein Abo · keine In-App-Käufe
- Plattformen
- macOS (universal) · Linux x86_64 + arm64 (.deb + AppImage) · Windows 10/11 x64 + arm64 (.msi + portables .zip) — 9 Pakete pro Release
- Installergröße
- DMG 50 MB · .deb 27 MB · AppImage 43 MB · MSI 43 MB (x86_64 / x64)
- Speicher im Leerlauf
- ~110 MB resident · wächst linear mit offenen Panes
- UI-Sprachen
- 9 — en · 简体 · 繁體 · 日本語 · 한국어 · Deutsch · Français · Italiano · हिन्दी
- Steuerflächen
- MCP (JSON-RPC über TCP) · HTTP-Web-Einstellungen ·
unterm-cli· GUI — derselbe JSON-Zustand für alle vier - Getestete Agent-Integrationen
- Claude Code · Cursor · Codex CLI · eigene Python- / Node-MCP-Clients — alle über 1 Socket, ~30 Zeilen Code
- Datenerhebung
- Null Telemetrie · kein Konto · keine Analytics · jeder Server an 127.0.0.1 gebunden
- Tech-Stack
- Rust · native next-core-Engine · wgpu · MCP (zeilenweises JSON-RPC) · Tailwind + Alpine für die Web-Einstellungen
Jeden Coding-Agenten installieren. Je ein Klick. Kein Einrichtungsaufwand.
Wer schon einmal mehr als eine KI-Coding-CLI nebeneinander betreiben wollte, kennt den Aufwand: npm install, OAuth-Flow, API-Schlüssel, ~/.config/<vendor>/<different format each>, Umgebungsvariablen, Profiltrennung. Unterm v0.18 fasst das in einem Einstellungs-Tab + einer CLI zusammen. Kein anderes Terminal macht das.
Installieren in der GUI oder per CLI
Klick auf Install auf einer Agenten-Karte oder führe unterm-cli agent install <id> aus. Unterm führt den richtigen Befehl für deine Plattform aus (npm / pipx / usw.), prüft, dass das Binary im PATH landet, und erkennt es automatisch neu.
Offizielles Abo zuerst. Eigener Schlüssel bleibt Opt-in.
Die meisten Agenten bieten einen offiziellen Konto- oder Abo-Login (Claude Pro, ChatGPT Plus, Google AI Pro). Unterm nutzt standardmäßig diesen Modus — es wird nie stillschweigend ein API-Schlüssel eingeschleust. Wechsle im Konfigurationsformular ausdrücklich zu eigenem Schlüssel oder eigenem Endpunkt, wenn du tatsächlich Abrechnung pro Token oder ein Firmen-Gateway willst.
Ed25519-signierter Manifest-Katalog
Die Agentenliste samt Installationsbefehlen ist nicht fest in Unterm einprogrammiert — sie ist ein signierter Umschlag, ausgeliefert von unterm.app/api/agents/manifests. Ein kompromittiertes CDN kann kein curl | sh auf deinen Rechner schieben; der öffentliche Schlüssel ist in jedes Unterm-Binary eingebacken.
KI steuert das Terminal. MCP macht es möglich.
Die meisten Terminals bauen KI in das Binary ein. Unterm macht es umgekehrt: Die KI bleibt draußen, und das Terminal wird als Oberfläche bereitgestellt, die jeder externe Agent über MCP greifen kann. Das Terminal ist das, was gesteuert wird; der Agent ist der, der die Arbeit macht.
Eine KI steuert eine andere KI über das Terminal.
Der äußere Agent besitzt die Terminal-Sitzung. Er wechselt das cwd, startet einen inneren Coding-Agenten in einem Pane, liest die Logs und iteriert weiter, bis das Repository grün ist.
Der äußere Agent richtet das aktive Pane auf das Projektverzeichnis aus, damit jeder Befehl, jedes Log und jeder Screenshot im selben Arbeitsverzeichnis verankert bleibt.
Er startet einen Coding-Agenten in einem geteilten Pane, gibt ihm die Aufgabe und lässt diesen Agenten die Bearbeitungsschleife im Terminal erledigen.
Der äußere Agent liest Testausgabe und Pane-Zustand, wiederholt bei Bedarf und geht erst zu Commit oder Release über, wenn das Terminal meldet, dass die Arbeit erledigt ist.
Drei Arten, Unterm zu nutzen
Wir haben nicht für einen einzigen Workflow gebaut. Dank der MCP-Oberfläche bekommt jede Rolle dieselbe Steuerungsebene über unterschiedliche Einstiege.
Steuere mehrere Terminal-Panels aus Claude Code, Cursor oder deinem eigenen Agenten. Jedes Panel ist eine Aufgabe; dein Agent entscheidet, wo er tippt. NATO-Namen für mehrere Instanzen (alpha, bravo, charlie…) machen das Routing über Fenster hinweg trivial.
- Director/Worker-Muster: Ein äußerer Agent überwacht einen inneren Agenten in einem Panel
- Langläufer überwachen: Build anstoßen, bis zum Leerlauf pollen, nächsten Schritt entscheiden
- Orchestrierung über mehrere Panels: Arbeit auf Projekte verteilen, Ergebnisse zusammenführen
- Aufzeichnung mit geschwärzten Tokens für Review und Fine-Tuning
Eine cron-taugliche CLI für alles, was du in der GUI tun kannst. unterm-cli ist in jedem Release enthalten; leite --json an alles weiter, was rohes JSON-RPC erwartet. Dieselbe Oberfläche für Ops-Skripte, Dashboards und Runbooks.
- Automatische Proxy-Erkennung: macOS scutil / Windows-Registry / GNOME gsettings
- Headless-Screenshots und Panel-Auslesen für Incident-Dokumentation
- Aufzeichnung → Markdown zum Erstellen von Runbooks, personenbezogene Daten standardmäßig geschwärzt
- Keine Telemetrie, kein Login, jeder Server an 127.0.0.1 gebunden
MIT-lizenziert, seit v0.61 auf dem eigenen next-core-Kernel (~12k Zeilen, 10 direkte Abhängigkeiten), mit erstklassiger Agenten-Integration. Patches sind auf GitHub willkommen. Bau es selbst; die CLI liegt jedem Release als Binary bei. Die Web-Einstellungen sind eine Tailwind + Alpine SPA — forke die Seite, ändere die Farben.
- Universelles arm64 + x86_64 macOS-Binary, mit Developer ID signiert
- Linux .deb (apt) und AppImage (jede Distribution)
- Windows-MSI mit WiX 6 + portables .zip
- 9 Sprachen ab Werk, Systemsprache wird automatisch erkannt
Vier Steuerflächen, eine Engine
Jedes Unterm-Fenster startet einen lokalen MCP-Server und einen HTTP-Einstellungsserver. Von jedem aus liest und schreibst du denselben JSON-Zustand.
Zeilenweises JSON-RPC auf 127.0.0.1:19876, abgesichert per Auth-Token. Shells starten, Panel-Zustand lesen, Screenshots aufnehmen, Sitzungen steuern.
Dieselbe Oberfläche aus jeder Shell, jedem Cron-Job oder Skript. Ein schlanker JSON-RPC-Client über dem lokalen MCP — keine doppelte Geschäftslogik.
Moderne Konfigurations-UI im Browser statt im Zellenraster. Tailwind + Alpine SPA unter 127.0.0.1:19877. Themes, Proxy, Aufzeichnungen, Sprache.
en / 简体 / 繁體 / 日本語 / 한국어 / Deutsch / Français / Italiano / हिन्दी ab Werk. Systemsprache wird automatisch erkannt.
Nach OSC-133-Blöcken gegliedertes Markdown mit eingebauter Schwärzung. Aufzeichnungen liegen in <cwd>/.unterm/sessions/.
Bereichsaufnahme mit einem Klick aus der Statusleiste. PNG auf die Festplatte, Bild in die Zwischenablage, Pfad in die Text-Zwischenablage.
Erkennt automatisch macOS- / Windows- / GNOME- / env-Einstellungen, mit manuellen HTTP/SOCKS-Overrides, benannten Knoten, Rotation und Unterstützung für Clash/mihomo-Controller.
Basiert auf Unterms nativer next-core-Terminal-Engine mit plattformübergreifendem wgpu-Rendering.
Die vollständige Steuerfläche
Keine Screenshot-Tour — die echte Oberfläche, die jeder Agent und jedes Skript aufrufen kann. 152 MCP-Methoden in 30 Namespaces plus 34 CLI-Befehle, alle mit demselben JSON als Antwort.
Sieh den Live-Status jedes CLI-Agenten (arbeitet / wartet / inaktiv), springe aus der Inbox direkt zu dem, der dich braucht, starte eine Fleet aus N Agenten für eine Aufgabe in isolierten git worktrees — und reviewe, merge oder rolle zurück, was sie produziert haben. Aus der GUI, per MCP oder CLI.
Panes von außerhalb des Terminals starten, teilen, fokussieren, in der Größe ändern und schließen. In jedes Pane Zeichen für Zeichen tippen, sein cwd lesen, bis zum Leerlauf pollen — ohne simulierte Tastendrücke.
Live-Viewport-Text, den gesamten Scrollback als einen String, die Cursorposition oder eine Regex-Suche abrufen. detect_errors markiert fehlgeschlagene Befehle, damit ein Agent reagieren kann.
Einen Befehl ausführen und die Ausgabe streamen, auf einen Exit-Code warten, rohe Bytes senden, Status abfragen, abbrechen oder ein POSIX-Signal zustellen — strukturierte Ergebnisse statt Screen-Scraping.
Claude Code / Codex / Gemini / OpenCode / Aider installieren, authentifizieren, konfigurieren und starten. Die mcp-stdio-Bridge verdrahtet jeden davon automatisch zurück mit dem MCP-Server dieses Terminals.
Ein Fenster an eine Entwickleridentität binden — GitHub PAT, AWS-Schlüssel, npm-Token, SSH-Schlüssel, git-Autor. Zugangsdaten liegen im Tresor des Betriebssystems; 7 Sniffer finden vorhandene, nur lesend.
Jedes Fenster ist eine Instanz mit NATO-Namen (alpha, bravo, charlie…). Alle laufenden Unterm-Instanzen auf dem Rechner auflisten, eine fokussieren oder umbenennen — ein Agent verteilt Arbeit über Fenster nach cwd oder Titel.
Jedes Pane als Markdown aufzeichnen, gegliedert in OSC-133-Befehlsblöcke — jeder Block enthält Befehl, Ausgabe, Exit-Code und Dauer — mit geschwärzten Tokens. Aufzeichnungen per MCP oder CLI auflisten, lesen oder exportieren. Eine Wiedergabe gibt es nicht: Die alten asciicast-Befehle record / replay wurden entfernt.
Screenshot des Bildschirms, eines Fensters oder eines Rechtecks (macOS und Windows; unter Linux liefern diese vorerst „not implemented“); den gesamten Scrollback eines Panes auf jeder Plattform als ein hohes PNG rendern; unter macOS ein Langbild vom Fenster einer anderen App aufnehmen; die Zwischenablage lesen; oder eine Datei in deinen eigenen Aliyun-OSS- / Tencent-COS- / Qiniu-Bucket hochladen und eine öffentliche URL zurückbekommen — alles über MCP.
Den Proxy-Zustand des Betriebssystems lesen, zwischen konfigurierten Knoten wechseln, Latenz von Endpunkten testen oder System-Proxy-Overrides setzen / entfernen (macOS scutil · Windows-Registry · Linux env) — ganz ohne URL-Einfügen.
Jeder Schreibzugriff eines Agenten wird mit seiner Identität protokolliert; eine Schreibbestätigungs-Richtlinie regelt den ersten Kontakt. Richtlinienentscheidungen testen, die eingebaute Selbsttest-Suite ausführen und Liveness-/Readiness-Flags lesen.
Das vollständige Pane- / Tab-Layout des aktuellen Fensters speichern, gespeicherte Layouts auflisten und eines wiederherstellen — ein Agent kann einen Arbeitsstand sichern und später zurückholen.
meta.surface liefert in einem Aufruf jede MCP-Methode (mit Parameter-Schemas), jeden CLI-Unterbefehl und jede aktive Tastenbelegung — so lernt ein frisch verbundener Agent die ganze API ohne Doku.
Agenten und Skripte erreichen diese Oberfläche über MCP (JSON-RPC über TCP) und das Binary unterm-cli; Menschen nutzen die GUI und die Seite Web-Einstellungen, deren HTTP-API auch Skripte aufrufen können. Die vier überschneiden sich, statt einander zu spiegeln — Theme, Sprache und unterm.conf etwa sind nicht per MCP erreichbar. Ein einziger Aufruf von meta.surface (oder unterm-cli reference) liefert live jede MCP-Methode, jeden CLI-Befehl und jede Tastenbelegung.
Wo Unterm heraussticht
Drei Behauptungen, die du selbst greppen, bauen oder ausführen kannst. Kein Marketing-Nebel.
v0.18 macht Unterm zum Ein-Klick-Launcher für Claude Code, Codex CLI, Gemini CLI, OpenCode und Aider. Installationsbefehl, OAuth-Flow, API-Schlüssel und native Konfigurationsdatei jedes Agenten werden durch ein signiertes Manifest von unterm.app beschrieben; die Laufzeit legt den Schlüssel in deinem OS-Schlüsselbund ab, schreibt die eigene JSON/TOML/YAML-Konfiguration des Agenten (unbekannte Felder bleiben erhalten), stellt Unterm selbst dem Agenten als MCP-Server bereit und protokolliert die Sitzung im Audit — alles erreichbar über die CLI und den neuen Tab KI-Agenten in den Web-Einstellungen.
session.split + session.focus über MCP lassen einen externen Agenten (Claude Code, Cursor, dein Skript) das aktive Fenster nach links / rechts / oben / unten teilen und den Fokus an das neue Pane übergeben — ohne einen einzigen simulierten Tastendruck. Steckt im Python-Snippet oben auf der Seite. Kein anderes Terminal legt die Pane-Geometrie auf diese Weise für externe Prozesse offen.
Jedes session.input / exec.send wird mit der Identität des aufrufenden Agenten protokolliert. Der erste Schreibzugriff eines neuen Agenten löst ein Banner mit Erlauben / Blockieren / Immer erlauben aus. Das Vertrauen wird in ~/.unterm/trusted_agents.json gespeichert und lässt sich im MCP-Tab der Web-Einstellungen mit einem Klick widerrufen. Die Statusleiste zeigt die Zahl der MCP-Schreibzugriffe live.
Kleine Details, die sich summieren
Feinschliff für den Alltag — keine Schlagzeilen-Features, aber zusammen nehmen sie Reibung raus.
Graue Vorhersage im Fish-Stil setzt deine Eingabe aus der Shell-Historie jedes Panes fort; → oder End übernimmt sie.
Agenten schlagen Befehle vor, ohne das PTY anzufassen — direkt über der Statusleiste; Tab übernimmt, Alt+Enter übernimmt und führt aus.
Ein beliebiges Rechteck aus der Statusleiste aufziehen; PNG auf die Festplatte, Bild in die Zwischenablage, Dateipfad als Text — alles auf einmal.
7 mitgelieferte Themes; unterm-cli theme set midnight wechselt sie alle live. Die Statusleiste zeigt das cwd des aktiven Panes relativ zu $HOME.
Finder-Rechtsklick → Open in Unterm. Nutzt die AppleScript-Services-Erweiterung — kein eigenes Kontextmenü in der App.
Das aktive Identitätsprofil (an dieses Fenster gebundener GitHub PAT / AWS-Schlüssel / npm-Token) erscheint in der Statusleiste; ein Klick startet das nächste Profil.
Liest macOS scutil / Windows-Registry / GNOME gsettings / env. Ein Schalter für an/aus. Kein URL-Einfügen.
Aufzeichnungen werden automatisch an den Grenzen des Shell-Prompts aufgeteilt. Jeder Block enthält Befehl, Ausgabe, Exit-Code und Dauer — durchsuchbar.
Rechtsklick fügt ein. Markieren kopiert.
Der ganze Kopieren-Einfügen-Kreislauf liegt auf der Maus, aber die beiden Hälften liegen auf zwei verschiedenen Bewegungen. Lass eine Auswahl los, und sie ist schon in der Zwischenablage; drück die rechte Taste, und es wird am Cursor eingefügt — jedes Mal, mit oder ohne Auswahl. Es öffnet sich nie ein Kontextmenü, nichts muss weggeklickt werden.
Über die Ausgabe ziehen oder einfach ein Wort doppelklicken. Sobald die Taste losgelassen wird, ist der Text in der Zwischenablage. Keine zweite Geste zum Merken, nichts zu drücken, um es zu bestätigen.
Eine Taste, eine Aufgabe. Sie fügt am Prompt ein, ob etwas markiert ist oder nicht. Aus einem Pane kopieren, in ein anderes klicken, rechts drücken — Befehl verschoben, null Tastendrücke. Eine leere Zwischenablage tut still nichts, nie ein Fehler.
macOS behandelt Ctrl+Klick als Sekundärklick, und Unterm ebenso — Trackpad, Magic Mouse oder jeder Treiber von Drittanbietern. Nur ein reines Ctrl zählt, deine eigenen Ctrl-Maus-Kombinationen und das Fensterziehen mit Ctrl+Shift bleiben also unberührt. macOS liefert diese eine Bewegung als zwei Events; Unterm reagiert einmal darauf. Maus-fähige TUIs wie vim oder Claude Code verhalten sich genauso.
Geändert in v0.71.6. Früher hat der Klick kopiert, wann immer etwas markiert war — und damit Arbeit wiederholt, die die Auswahl schon erledigt hatte, auf Kosten des Einfügens, um das es eigentlich ging.
Dein Terminal sieht jetzt die Agenten, die darin laufen
Claude Code, Codex, Gemini, Aider — jedes Panel meldet, wer gerade arbeitet, wer auf dich wartet und was geändert wurde. Null Konfiguration zum Start; ein Befehl für exaktes Reporting auf Hook-Ebene.
Vier Signalebenen — offizielle Hooks, Titel-/OSC-Parsing, Prozesserkennung, Bildschirm-Heuristiken — verdichten sich zu einem Status pro Panel: arbeitet (pulsierendes Blau), braucht dich (Bernstein), fertig, inaktiv. Die Top-Leiste zählt über alle Fenster hinweg und wird bernsteinfarben, sobald irgendetwas auf dich wartet.
Ctrl+Shift+A: alle Agenten über alle Fenster, Wartende zuerst, mit Angabe, wie lange und woran sie hängen. Enter springt direkt zum Panel. „Geh mal irgendwo y drücken“ sind jetzt zwei Tastendrücke.
Lass claude × 2 + codex um dieselbe Aufgabe wetteifern — jedes Mitglied in seinem eigenen git worktree samt Branch neben deinem Repository, mit eigenem Tab und eigenem Status-Badge. Deine Arbeitskopie bleibt unangetastet.
Sobald ein Agent zu arbeiten beginnt, setzt Unterm einen Checkpoint im Repository (ein dangling Commit — HEAD, Index und Dateien bleiben unberührt). Zeilengenaue Diffs inklusive vom Agenten neu erstellter Dateien, Squash-Merge als staged (der Commit bleibt deiner), Rollback zu jedem Checkpoint, Mitglieder im direkten Vergleich.
Das Cockpit selbst ist MCP + CLI: agent.status, cockpit.inbox, fleet.launch, review.merge … ein orchestrierender Agent kann Fleets starten und Diffs reviewen, ganz ohne Mensch am Steuer. Local-first — nichts davon berührt eine Cloud.
Neu in v0.71
Ein Terminal, das auf einem Rechner ohne Grafiktreiber startet, ein zweites Fenster in 31 ms statt 587, Shells, die das Fenster überleben, in dem sie geöffnet wurden, und CJK, das endlich als Text kopiert wird — die letzten acht Releases in sieben Karten.
Unterm zeichnet jetzt Inline-Bilder – das Kitty-Grafikprotokoll, die Inline-Bilder von iTerm2 und Sixel –, sodass chafa, img2sixel, viu, timg und unterm-cli imgcat das Bild selbst zeigen. Bilder scrollen mit dem Text daneben, bleiben im Verlauf, werden an Bereichsrändern sauber abgeschnitten und gehören zu dem Bildschirm (auch dem alternativen), auf dem sie gezeichnet wurden. Programme, die nach der Zellgröße in Pixeln fragen, bekommen die echte. Agenten listen sie mit screen.images auf. Außerdem: [platform.*]-Abschnitte in der Konfiguration wirken jetzt, close_confirmation funktioniert, und wirkungslose Einstellungen sagen das.
Updates mit einem Klick: unterm-cli update, „Update installieren“ in der Befehlspalette oder der Knopf in den Web-Einstellungen laden die neue Version, prüfen ihre SHA-256 (unter macOS auch die Signatur) und starten neu. Die Shell-Integration lädt sich selbst in zsh, bash, fish und PowerShell: Ein fehlgeschlagener Befehl markiert seinen Tab mit ▲ – eine Ausgabe, die nur „error“ enthält, nicht. Agenten bekommen, was sie von Terminals erwarten: Shift+Enter ist nicht Enter (kitty-Tastaturprotokoll), Farbabfragen beantwortet aus deinem Theme, Fortschrittsbalken unter dem Tab (OSC 9;4) und Vollbild-Neuzeichnen ohne Reißen (Mode 2026). Außerdem: Git Bash und jede WSL-Distribution im Windows-Shell-Menü, ein Absturzdialog mit vorausgefülltem GitHub-Issue und Installation über Homebrew und Scoop.
Der Start probierte die Hardware-Pfade und hörte dort auf. Auf einem Windows-Rechner ohne brauchbaren Anzeigetreiber — eine VM, ein frisches Image, eine Remote-Sitzung — fand DX12 zwar einen Adapter, konnte aber keine Surface konfigurieren, OpenGL hatte keinen Treiber zum Finden, und das Terminal verweigerte den Start mit „no working GPU path“, ohne je nach WARP gefragt zu haben, das mit D3D12 ausgeliefert wird und gar keinen Treiber braucht. Die Kette endet jetzt mit einem Software-Durchlauf. Im selben Release: `unterm-cli start` sagt Bescheid, wenn es auf einen zweiten Prozess ausweicht, statt das Fenster an den bereits laufenden zu übergeben, denn dieser Fallback kostet einen zweiten GPU-Adapter und einen geteilten Core; und das Provider-Manifest wird jetzt gegen den Vertrag validiert, der es liest.
Ein zweites Fenster war früher ein zweites Unterm: ein weiterer GPU-Adapter, eine weitere Core-Verbindung, 587 ms Wartezeit. Jetzt öffnet es sich im bereits laufenden Prozess, in 31 ms. Fenster haben IDs, also antwortet `instance.new_window` mit dem gerade erzeugten und `instance.focus` nimmt es an; eine Session gehört genau einem Fenster, und wer ein Fenster schließt, schließt die Ansicht, während die Shells im Core für das verbleibende Fenster weiterlaufen. Nur das letzte Fenster fragt, ob du wirklich beenden wolltest.
Fähigkeiten liegen jetzt hinter Leases: Ein Agent erwirbt eine, nutzt sie unter einem Schlüssel, den du sehen kannst, und verliert sie, wenn du sie widerrufst — statt dass jeder Aufrufer denselben unbegrenzten Socket hält. Freigaben sind jetzt beantwortbar, wobei die Frage benennt, was gleich passiert, statt der Methode, die es zufällig umsetzt. Fleets werden dauerhaft gespeichert statt in einer JSON-Datei, sodass ein Absturz mitten im Lauf nicht mehr verliert, welches Mitglied was gerade tat.
„Im Hintergrund weiterlaufen“ hinterlässt jetzt etwas auf dem Bildschirm — ein Tray-Symbol auf allen drei Plattformen, das anzeigt, wie viele Sessions noch laufen, und ein geparktes Fenster mit einem Klick zurückholt. Ein Agent kann dasselbe über MCP: `instance.focus` weckt ein geparktes Fenster, statt daran zu scheitern. Die beiden Schließen-Knöpfe sind sich über deine Shells nicht mehr uneinig — genau das hatte „schließen“ zwei verschiedene Dinge bedeuten lassen, je nachdem, welchen du gedrückt hast.
CJK-Eingaben zerfielen früher in `<009d>`-Bytemüll, wenn die GUI der Shell ein Locale übergab, das sie nie gesetzt hatte. Kopierter Text enthielt statt des Textes die Platzhalterzelle des Rasters, sodass ein Einfügen mit Lücken zurückkam. Ein Doppelklick markierte ein halbes Wort und verlor die andere Hälfte. Breite Zeichen sind jetzt ein Zeichen — in der Auswahl, in der Zwischenablage und bei der Eingabe. Dazu das Ende des Neuzeichnungs-Sturms: Der Frame wurde falsch verglichen, sodass neu gezeichnet wurde, ob sich etwas bewegt hatte oder nicht.
unterm-core besitzt jetzt deine Sessions: ein Prozess pro Benutzer hält Shells, Scrollback und Split-Layouts, bedient die gesamte MCP-Oberfläche und reicht sie von Fenster zu Fenster weiter (v0.62). Beendest du das letzte Fenster, endet er mit — außer das Fenster ruht im Tray oder der Core wurde mit --headless gestartet. v0.63 ist das Release, das die Installation verdient hatte: der Core-Daemon liegt wirklich in allen neun Paketen, die Einstellungsseite funktioniert im Core-Modus, Emoji werden zum ersten Mal gerendert — die mitgelieferte Schrift war ein COLRv1-Font, den FreeType nicht zeichnen kann — die Tipp-Verzögerung nach einer Pause fiel von 96ms auf 8ms, macOS trägt das neue Zeichen, und der Explorer bekommt „Open in Unterm tab“.
Unterm läuft nicht mehr auf einem WezTerm-Fork. next-core ist ein für dieses Produkt geschriebener Terminal-Kernel — Parser, Screen-Modell, PTY-Laufzeit, Font-Stack und ein wgpu-Renderer — mit einem Budget von ~12k Quellzeilen und 10 direkten Abhängigkeiten. 22 ms vom Start bis zur live MCP-Fläche (vorher 7,1 s), im Leerlauf 6,6 % eines Kerns (vorher 80 %), identischer 200k-Zeilen-Durchsatz. Die Feature-Parität mit dem alten Kernel wurde Punkt für Punkt gegen ein Ledger mit 159 Anforderungen geschlossen, mit plattformnativer Typografie: echte Traffic Lights auf macOS, pt-genaue Größen und endlich korrekt gerendertes CJK. Die ganze Geschichte im Blog.
Sechs Prinzipien, keine Ausnahmen
Jeder Server, jeder API-Endpunkt, jede Aufzeichnung liegt auf 127.0.0.1. Kein Login, keine Telemetrie, kein Abo. Deine Shell-Historie gehört dir.
Kein Chat-Overlay, kein eingebettetes KI-Panel, kein Modell im Terminal. Das Terminal ist die Oberfläche — Claude Code, Cursor und deine Skripte greifen über MCP darauf zu. Die einzige Vorhersage, die es macht, ist grauer Ghost-Text an der Shell-Eingabeaufforderung, gebildet aus deinem eigenen Verlauf — und in Panes, in denen ein Agent wie Claude Code läuft, bleibt er weg.
Funktionen für Agenten erscheinen mit einer MCP-Methode und einem CLI-Befehl. Die Ausnahmen sind gewollt: Theme, Sprache und die Konfigurationsdatei bleiben in deiner Hand — Web-Einstellungen, <code class="font-mono text-xs">unterm-cli</code> und <code class="font-mono text-xs">unterm.conf</code> —, damit kein Agent dein Terminal mitten in der Sitzung umgestaltet.
Eine Funktion, die unter Windows läuft, aber unter macOS oder Linux aussteigt, ist ein Bug, kein „noch nicht unterstützt“. Mac, Linux und Windows erscheinen gemeinsam.
Gehört eine Funktion zum Betriebssystem, nutze das Betriebssystem. KI-Generierung bleibt außerhalb des Terminals, der Kernbetrieb bleibt lokal, und auf macOS kommt die native Finder-Integration zum Einsatz.
Wenn du einen KI-Agenten über Unterm installierst, ist der Standard-Authentifizierungsmodus das offizielle Abo des Anbieters (OAuth) — dein Pro- / Plus- / Team-Plan. Wir schleusen nie stillschweigend einen API-Schlüssel in eine Sitzung ein; Abrechnung pro Token gibt es nur, wenn du den Auth-Modus im Konfigurationsformular ausdrücklich auf „eigener API-Schlüssel“ oder „eigener Endpunkt“ umstellst. Das ist ein Opt-in, keine Falle.
Ein Terminal braucht keine eingebaute KI.
Es muss von KI steuerbar sein.
Das ist die Weggabelung zwischen Unterm und Warp — keine Funktionslücke, sondern eine Richtung.
Ein Terminal ist ein Werkzeug für dreißig Jahre; ein KI-Modell ist eine Komponente für sechs Monate. Schweißt man die KI ins Terminal, wird das langlebigste Werkzeug, das du besitzt, von seinem kurzlebigsten Teil bestimmt — altert das Modell, altert das ganze Terminal mit.
Claude Code, Codex, Gemini CLI, Aider — du nutzt bereits die stärksten Coding-Agenten, die es gibt, und sie werden jeden Monat besser. Eine Chatbox im Terminal ist nur ein weiterer Copilot, bei dem man sich anmelden muss, und er wird nie der sein, den du wirklich bevorzugst.
Agenten fehlt es nicht an Intelligenz — ihnen fehlen Hände am Terminal. Unterm macht das Terminal zu einer per MCP steuerbaren Oberfläche: Panes starten, Befehle ausführen, den Bildschirm lesen, scrollende Screenshots aufnehmen, Einstellungen ändern, Sitzungen aufzeichnen. Ein Agent nutzt das Terminal so wie du, statt durch eine Glasscheibe zuzuschauen.
- KI in die Terminal-UI eingebettet, an ihre Cloud gebunden — Login, Abo, Kontingente
- Ihre ausgewählten Modelle, aktualisiert nach ihrem Zeitplan
- Der KI-Kern ist geschlossen; dein Befehlskontext läuft über ihre Server
- Das Terminal ist eine MCP-Oberfläche — jeder Agent dockt an und steuert, der von heute wie der vom nächsten Jahr
- Du wählst Agent und Modell; Unterm bindet dich nie
- MIT, vollständig Open Source; alles bleibt auf 127.0.0.1 — kein Login, kein Abo, keine Telemetrie
Auch in dreißig Jahren wirst du noch ein Terminal benutzen. Niemand weiß, welche KI es dann steuern wird — deshalb ist das einzige zukunftssichere Terminal das, das zum Gesteuertwerden gebaut ist.
Unterm vs. natives Terminal vs. bezahltes KI-Terminal
Das native Terminal (Terminal.app) ist die Basis, die du schon hast. Warp ist das bezahlte KI-Terminal. iTerm2 und Ghostty sind die kostenlosen Power-Terminals. Unterm fährt auf seiner eigenen Spur: alles, was ein externer Agent von außen greifen kann.
| Fähigkeit | Unterm | Terminal.app | Warp | iTerm2 | Ghostty |
|---|---|---|---|---|---|
| Agent-first | nativ | kostenpflichtig | kostenlos | kostenlos | |
| Von außen per MCP steuerbar | ✓ | ✗ | ✗ | ✗ | ✗ |
| Skriptbare CLI für jede Aktion | ✓ | ✗ | ✗ | Python API | ✗ |
| Eingebauter Starter für KI-Coding-Agenten | ✓ ×7 | ✗ | ✗ | ✗ | ✗ |
| Agenten verdrahten sich automatisch mit dem MCP des Terminals | ✓ | ✗ | ✗ | ✗ | ✗ |
| Agenten-Cockpit (Posteingang · Fleets · Review) | ✓ | ✗ | ~ cloud | ✗ | ✗ |
| Identitätsprofile (Zugangsdaten pro Fenster) | ✓ | ✗ | ✗ | ✗ | ✗ |
| Multi-Instanz-Orchestrierung | ✓ | ✗ | ✗ | ✗ | ✗ |
| Sitzungsaufzeichnung → Markdown | ✓ md | ✗ | ~ | ✓ | ✗ |
| Screenshot + Datei-Upload per MCP | ✓ (Linux ~) | ✗ | ✗ | ~ | ✗ |
| Markieren kopiert, Rechtsklick fügt ein — kein Menü | ✓ gesture | menu | menu | menu | menu |
| Eingebaute Proxy-Verwaltung | ✓ | ✗ | ✗ | ✗ | ✗ |
| Local-first, keine Cloud / kein Login | ✓ | ✓ | ✗ | ✓ | ✓ |
| KI fest im Terminal eingebaut | ✗ bewusst | ✗ | ✓ (cloud) | plugin | ✗ |
| GPU-Rendering | ✓ | ✗ | ✓ | ✓ | ✓ |
| macOS + Linux + Windows | ✓ | ✗ | ✓ | macOS | mac+Linux |
| Open-Source-Client | ✓ MIT | ✗ | ✗ | ✓ GPL | ✓ MIT |
| Native UI-Sprachen | ✓ ×9 | OS | en | en | en |
| Preis | $0 | $0 | Freemium $ | $0 | $0 |
✓ ja · ✗ nein · ~ teilweise · ×N Anzahl. Das ✗ bewusst bei „KI fest eingebaut“ ist die ganze These: Unterm hält die KI draußen und stellt das Terminal als die Oberfläche bereit, die sie greift.
Stand der öffentlich dokumentierten Funktionen: 2026-05. Warp ist Closed Source mit cloudgestützter Gratisstufe + bezahlten Team-/Pro-Plänen; iTerm2 bringt eine Python-Skripting-API und ein optionales KI-Befehls-Plugin mit; Ghostty hat noch keinen Windows-Build. Korrekturen auf GitHub willkommen.
Vollständige Direktvergleiche:
Häufige Fragen
Was ist Unterm?
Ein plattformübergreifender Terminal-Emulator mit eingebauten MCP-, HTTP- und CLI-Steuerflächen. Die Produktidee: das Terminal als per MCP steuerbare Oberfläche, damit jeder externe KI-Agent es von außen steuern kann, statt eine KI fest ins Terminal einzubauen.
Wie sehe ich, wann Claude Code auf meine Freigabe wartet?
Unterm verfolgt den Agent-Status jedes Panels. Wenn Claude Code (oder Codex, Gemini, Aider) auf eine Bestätigung wartet, wird der Punkt seines Tabs bernsteinfarben, der Chip in der Top-Leiste wird bernsteinfarben mit Zähler, und der Agent rückt an die Spitze der Agent-Inbox (Ctrl+Shift+A) — Enter springt direkt zum Panel. Die Erkennung funktioniert für Claude Code und Gemini ohne Konfiguration; „unterm-cli agent enable-hooks“ ergänzt exaktes Reporting auf Hook-Ebene.
Kann ich mehrere Claude-Code-Instanzen parallel laufen lassen, ohne dass sie sich in die Quere kommen?
Ja — genau dafür gibt es Fleets. „unterm-cli fleet launch --agents claude,claude,codex -- Aufgabe“ gibt jedem Mitglied einen eigenen git worktree samt Branch neben deinem Repository, sodass sie weder einander noch deine Arbeitskopie zertrampeln können. Jedes Mitglied bekommt einen eigenen Tab mit Live-Status-Badge, und die Review-Seite vergleicht die Ergebnisse nebeneinander.
Wie reviewe ich, was ein KI-Coding-Agent geändert hat, oder mache es rückgängig?
Unterm setzt einen Checkpoint, sobald ein Agent in einem Repository zu arbeiten beginnt — ein dangling git Commit, der HEAD, deinen Index und deine Dateien nie berührt. Die Review-Seite (in den Web-Einstellungen) zeigt zeilengenaue Diffs inklusive der vom Agenten neu erstellten Dateien und lässt dich ein Ergebnis per Squash-Merge als staged Änderungen in dein Repository übernehmen (den Commit machst du), es verwerfen oder den worktree zu jedem beliebigen Checkpoint zurückrollen.
Welche KI-Coding-Agenten unterstützt Unterm?
Der Launcher installiert und verdrahtet Claude Code, Codex CLI, Gemini CLI, OpenCode und Aider mit je einem Klick. Die Statuserkennung des Cockpits erkennt zusätzlich kimi, trae und cursor-agent von Haus aus, und jeder Agent, der Standard-Terminalsignale sendet (Titel, OSC 9/777, BEL), bekommt Basis-Tracking gratis. Alles Weitere lässt sich über „unterm-cli agent signal“ integrieren.
Wie kopiere und füge ich nur mit der Maus ein?
Markieren zum Kopieren, Rechtsklick zum Einfügen. Lass ein Ziehen oder einen Doppelklick los, und der Text ist schon in der Zwischenablage. Ein Rechtsklick fügt immer am Cursor ein — mit oder ohne Auswahl und in jedem Pane, auch in Programmen, die die Maus übernehmen (vim, htop, Claude Code): Unterm behält den Rechtsklick, statt ihn weiterzureichen. In diesen Programmen hältst du beim Ziehen Shift, um zu markieren. Auf macOS zählt ein einfacher Ctrl+Klick als Rechtsklick, und auch die mittlere Taste fügt ein. Es gibt kein Kontextmenü, das man wegklicken muss, und eine leere Zwischenablage tut still nichts.
Wie funktioniert es mit Claude Code, Cursor oder anderen Agenten?
Jedes Unterm-Fenster startet einen lokalen MCP-Server (TCP, JSON-RPC, mit Auth-Token). Richte deinen MCP-Client auf 127.0.0.1:<port> — Port und Token werden beim Start in ~/.unterm/server.json geschrieben. Der Agent kann Shells starten, Befehle ausführen, den Pane-Zustand lesen, Screenshots machen, die Aufzeichnung umschalten und das Agent Cockpit bedienen (Status, Inbox, Fleets, Review). Theme, Sprache und Konfiguration sind bewusst nicht per MCP erreichbar; ändere sie in den Web-Einstellungen, mit unterm-cli oder in unterm.conf.
Wie steuere ich mehrere Unterm-Fenster mit einem Agenten?
Jeder Unterm-Prozess ist eine Instanz mit einem Namen aus dem NATO-Alphabet (alpha, bravo, …), festgehalten in ~/.unterm/instances/<name>.json. Ruf instance.list auf einer beliebigen Instanz auf, um alle aufzulisten; wähle nach cwd / Titel / Startreihenfolge; verbinde dich mit dem Port dieser Instanz und ihrem Auth-Token. ~/.unterm/active.json zeigt auf die zuletzt aktive Instanz – als Fallback für Single-Instance-Setups.
Was ist der Unterschied zu Warp?
Warp bettet KI in einen geschlossenen Cloud-Orchestrator (Oz) ein — externe Tools wie Claude Code können Warp nicht von außen steuern. Unterm wählt die dritte Spur: KI bleibt außerhalb des Terminals, das Terminal selbst wird als per MCP steuerbare Oberfläche bereitgestellt, und jeder Agent kann es greifen. Keine Cloud, kein Login.
Wohin gehen meine Daten?
Nirgendwohin nach außen. MCP- und Web-Einstellungs-Server binden nur an 127.0.0.1. Sitzungsaufzeichnungen landen unter <project>/.unterm/sessions/, mit eingebauter Schwärzung von Tokens. Es gibt keine Telemetrie, keine Analytics, kein Login, keinen Umweg über die Cloud. Deine Shell-Historie gehört dir.
Telefoniert Unterm nach Hause, auch nur einmal?
Keine Telemetrie, keine Analytics, keine Absturz- oder Installations-Pings, kein Konto. Unterm stellt zwei eigene Anfragen, und keine davon enthält etwas über dich: (1) eine Update-Prüfung — ein einfaches GET an api.github.com/repos/zhitongblog/unterm/releases/latest etwa 20 Sekunden nach dem Start und danach alle 6 Stunden, mit festem User-Agent (unterm-update-check) und ohne Kennungen; die Antwort wird in ~/.unterm/update_check.json zwischengespeichert. (2) der KI-Agenten-Katalog — ein GET an unterm.app/api/agents/manifests, wenn du KI-Agenten in den Web-Einstellungen öffnest oder einen unterm-cli agent-Befehl ausführst; gesendet werden nur die Unterm-Version im User-Agent und ein Cache-ETag; schlägt das fehl, wird die in die App eingebaute signierte Kopie verwendet. Beides lässt sich in den Einstellungen noch nicht abschalten — blockiere diese zwei Hosts in deiner Firewall, wenn Unterm komplett offline sein soll. Alles andere ist Traffic, den du selbst auslöst: Downloads, Uploads in deinen eigenen Bucket, Health-Checks gegen deine eigenen Proxy-Knoten und was immer deine Shell tut.
Gibt es eine kostenpflichtige Version oder Premium-Funktionen?
Nein. Unterm steht unter MIT-Lizenz; dieselbe Binärdatei enthält alle Funktionen. Kein Abo, keine Pro-Stufe, kein Plugin-Marktplatz, kein „jetzt kaufen, um geteilte Panes freizuschalten“. Wer das Projekt unterstützen möchte: der Link „Unterstützen“ in der Fußzeile ist die einzige Bitte.
Wie groß sind Installation und Laufzeit?
macOS DMG ~50 MB · Linux .deb 27 MB · AppImage 43 MB · Windows MSI 43 MB. Im Leerlauf mit einem offenen Fenster liegt der residente Speicher bei ~110 MB; er wächst linear pro Pane. Die native next-core-Engine rendert über wgpu; die Laufzeitkosten werden normalerweise von der Shell und den Anwendungen in jedem Pane bestimmt.
Erkennt Unterm meine Systemsprache?
Ja. Beim ersten Start liest Unterm die Systemsprache (defaults auf macOS, $LANG auf Linux, Registry auf Windows) und wählt die nächstliegende der 9 mitgelieferten UI-Sprachen. Du kannst sie pro Fenster in Web-Einstellungen → Sprache überschreiben. Die Übersetzungen liegen in unterm-services/src/i18n/locales/*.json — Patches willkommen.
Was hält einen außer Kontrolle geratenen Agenten davon ab, rm -rf auf meinem Repo auszuführen?
Mehrere Schranken. (1) Der MCP-Server lauscht nur auf 127.0.0.1 — kein Netzwerkzugriff. (2) Er ist per Auth-Token abgesichert; das Token liegt in ~/.unterm/instances/<name>.json, und ein Agent ohne Lesezugriff auf diese Datei kann sich nicht einmal verbinden. (3) Jede Anfrage wird einer von sieben Risikostufen zugeordnet — read, local_mutation, exec, external_side_effect, credential_access, financial, destructive. Lesezugriffe gehen durch. Lokale Änderungen und Befehlsausführung gehen ohne Rückfrage durch, vorbehaltlich der gesperrten und erlaubten Befehlsmuster deiner Richtlinie. Alles ab external_side_effect aufwärts wartet auf dein Ja, und bei Zugangsdaten, Geld und Zerstörung gilt dieses Ja nur für einen einzigen Aufruf. (4) Tippen in eine Shell zählt als exec, also steht zwischen einem Agenten und rm -rf das Banner beim ersten Schreibzugriff: Schreibt ein neuer Agent zum ersten Mal in ein Pane, bekommst du Erlauben / Blockieren / Immer erlauben, und das Audit-Log protokolliert jeden Schreibversuch mit der Identität des Aufrufers. Widerrufe das Vertrauen jederzeit im MCP-Tab der Web-Einstellungen.
Wie skripte ich es?
Mit unterm-cli: session list, proxy status, theme set midnight, session record start, screenshot. Hänge --json an einen beliebigen Unterbefehl, um rohe JSON-RPC-Ausgabe für Shell-Pipelines und Cron-Jobs zu erhalten.
Welche Plattformen werden signiert und notarisiert ausgeliefert?
macOS: universelles arm64 + x86_64 DMG, mit Developer ID signiert, von Apple notarisiert inklusive Stapling (keine Gatekeeper-Warnungen). Linux: .deb für Debian/Ubuntu und AppImage für jede Distribution. Windows: mit WiX gebauter MSI-Installer und portables .zip. Alles wird bei jedem Minor-Tag auf GitHub Releases veröffentlicht.
Ist es Open Source?
Ja — MIT-lizenziert. Die aktuelle GUI und Terminal-Laufzeit nutzen Unterms native next-core-Engine; MCP, Web-Einstellungen, Aufzeichnung, i18n und Release-Tooling liegen im selben Repository. Quellcode unter github.com/zhitongblog/unterm.
Wie kann ich beitragen?
Öffne ein Issue oder einen PR auf GitHub. Bugs, Feature-Wünsche und Diskussionen laufen in einer einzigen Queue. Gesammelte Fixes bündeln wir in Minor-Releases — Patch-Versionen lösen keine CI-Builds aus. Die Dokumentation liegt im Repository unter /docs.
Unterstütze Unterm
Ein einzelner Entwickler baut und pflegt Unterm in seiner Freizeit. Wenn es deine tägliche Arbeit beschleunigt, hält ein kleines Sponsoring das Projekt am Leben.
Internationale monatliche oder einmalige Stufe. Abgewickelt von Stripe über GitHub. Jederzeit kündbar.
Einmaliges Trinkgeld, weltweit. Wähle einen beliebigen Betrag in deiner Landeswährung.
Sponsoren werden (mit Erlaubnis) in der README und im Info-Dialog der App genannt. Keine Paywall, keine Premium-Stufe — alles steckt im selben MIT-lizenzierten Binary.
Lieber Zeit als Geld geben? Werde Botschafter →
Community & Kontakt
Offene Queue, keine Hürden. Wohin deine Frage gehört, hängt davon ab, welche Art von Frage es ist.
Bug-Reports, Feature-Wünsche, Regressionen. Es gibt nur eine Triage-Queue — jeder Bericht wird gelesen.
Fragen zu MCP-Integrationsmustern, Agenten-Setup und Workflow-Design. Andere Nutzer sind vielleicht schon auf dasselbe gestoßen.
Direkter Draht für Sicherheitsprobleme, Partnerschaften oder alles, was nicht in ein öffentliches Forum passt.