Bitdoze-Logo

Tern: Stencils Rust-Terminal ist ein ganzer Dev-Workspace

Praxistest mit Tern, Stencils Rust-Terminal in geschlossener Beta: Daemon-persistente Sessions, native Blöcke für Git, SQLite, Jupyter und Kanban, Remote-Hosts und eingebaute omp-Agenten.

Dragos

14 Min. Lesezeit

Tern Terminal von Stencil

Tern ist das neue Terminal von Stencil, dem Team hinter der omp-Agent-CLI. Nach ein paar Stunden darin verstehe ich den Slogan: „ein Neoterminal für Electron-Müde”. Es ist eine native Rust-App, in der die Shell nur eine Art von Pane ist. Ein Git-Client, ein SQLite-Browser, Jupyter-Notebooks, ein Kanban-Board über deinem TODO.md, ein Dateieditor, ein Taskmanager, sogar ein Webbrowser sind alles „Blocks”, die sich neben deinem Prompt splitten, in Tabs legen und schweben lassen. Und weil Stencil auch omp baut, ist der KI-Agent ein First-Class-Block statt eines angeflanschten Plugins.

Tern ist in geschlossener Beta. Zugang gibt es über die Warteliste auf der Website (bei mir hat es etwa zwei Tage gedauert). Builds gibt es für macOS, Windows, Linux und Android, ein iPhone-Client kommt als Nächstes – die Session, die du auf deinem Schreibtisch liegen lässt, folgt dir aufs Handy.

Was Tern wirklich ist

Zwei Ideen, übereinandergelegt:

  1. Ein Daemon besitzt die Prozesse, das Fenster ist nur ein Client. Tern beenden, neu starten, wieder öffnen – jeder Pane kommt in seinem Verzeichnis mit seinem alten Scrollback zurück, samt Agent mitten im Gespräch. tern remote serve stellt denselben Session-Daemon auf einem Server über QUIC bereit, und tern web serve bringt ihn in einen Browser-Tab. Mehrere Clients können sich gleichzeitig mit einem Daemon verbinden – Desktop-App, Browser-Tab, Handy – und was du auf einem tippst, erscheint auf den anderen.
  2. Blocks, nicht nur Panes. Alles, wofür du normalerweise per ⌘-Tab in eine andere App wechselst, existiert als nativer Block einen ⌘K entfernt: Git, ein Datenbank-Browser, ein Notebook, ein Kanban-Board. Programme beschreiben ihre UI über das Tern Surface Protocol, und Tern zeichnet sie nativ: kein gebündeltes Chromium, und Stencil verspricht ~150 ms bis zum bereiten Prompt beim Kaltstart (151 ms p95, 153 ms zum Wiederöffnen von sechs Tabs).

Das Vokabular: Eine Session enthält Tabs, ein Tab enthält Panes, ein Pane führt einen Block aus – eine Shell, einen Agenten oder einen der App-Blöcke weiter unten. Sessions bleiben im Daemon bestehen (tern daemon, von jedem Fenster automatisch gestartet und als Login-Item installierbar), sodass Fenster nur wegwerfbare Ansichten auf Arbeit sind, die nicht stoppt.

Der KI-Teil ist omp, das als nativer Block mit eigenem Renderer läuft statt als ANSI-Kunst im Terminalraster. Agent-Blöcke bekommen Model-Picker, Slash-Commands, Skills und einen Kontext-Inspektor. Ein normaler Shell-Pane führt weiterhin jede andere Agent-CLI aus – Codex, Devin, was auch immer du schon nutzt – denn am Ende des Tages ist es immer noch ein Terminal.

Das Fenster: Panes, Tabs, Layouts

Tern-Workspace: Der Files-Pane verfolgt das Projekt neben einer Shell mit git-log-Ausgabe

Splits, Tabs und Layouts verhalten sich wie bei einem modernen Multiplexer: nach rechts oder unten splitten, einen Pane auf den ganzen Tab zoomen, den Baum ausgleichen, einen Pane per Drag & Drop in einen anderen Tab oder eine andere Session ziehen. Der Files-Pane links ist eine Projekt-Seitenleiste, die dem Block folgt, der gerade den Fokus hat – git-bewusst, filterbar, und sie zeigt, was der Agent gerade angefasst hat. Alles hat einen Shortcut, und die Shortcuts sind neu belegbar.

Drei Terminal-Panes in Tern, nach rechts und unten gesplittet

Jeder Pane kann als Picture-in-Picture herausgelöst werden – ein kleines Always-on-Top-Fenster, das du ziehen, zurück in den Split-Baum docken, an eine Fensterkante parken oder auffächern kannst, wenn du mehrere hast. Ich nutze das, um einen laufenden Agenten sichtbar zu halten, während ich darunter weiterarbeite.

Ein als Picture-in-Picture-Fenster herausgelöster Terminal-Pane in Tern

Die Command Palette (⌘K) ist der Ort, an dem alles wohnt, mit Tabs pro Bereich: All, Commands, Files, Branches, Commits, Sessions, Hosts. Das heißt: Datei per Fuzzy-Suche öffnen, einen Branch auschecken, zu einem Commit springen oder den Host wechseln sind alles dieselbe Geste.

Es gibt auch ein echtes Benachrichtigungssystem: Eine „Needs attention”-Inbox sammelt Bell-Signale, fertige Builds, beendete Programme und Agenten, die auf Eingabe warten – jeder Eintrag deeplinkt zurück zu dem Pane, der ihn ausgelöst hat. Wenn ein langer Agent-Lauf endet, landet er hier, statt lautlos davonzuscrollen.

Terns Inbox sammelt Benachrichtigungen aus Panes: Agent wartet auf Eingabe, Build abgeschlossen

Die Blöcke

Dateien und der Editor

tern open file (oder ⌘O) öffnet Code mit Syntax-Highlighting und Git-Änderungen im Gutter, Markdown mit Rendered/Source-Umschalter, Bilder, SVGs, PDFs und Medien in echten Viewern – Videodateien bekommen sogar eine Frame-Strip-Vorschau. Es speichert automatisch, und EDITOR='tern open --wait' funktioniert für git commit-artige Abläufe, weil die CLI blockiert, bis du den Block schließt.

AGENTS.md als Dokument gerendert in Terns Datei-Block

Eine TypeScript-Datei mit Syntax-Highlighting in Terns Datei-Block

Git (⌥⌘G)

Ein echter Git-Client: Branch- und Tag-Lanes auf einem Commit-Graph, eine Working-Tree-Ansicht mit staged/unstaged-Gruppen und +/−-Zählern pro Datei, Diffs mit Line-Staging und Fold/Unfold unveränderter Kontextblöcke, git peek auf jedem Commit, ein Refs-Tab für Branches/Remotes/Tags/Stashes/Worktrees/Submodules, Undo und KI-gestützte Commit-Messages („Generate message”, AI Explain, AI Staging).

Terns Git-Block: Working Tree mit unstaged Dateien neben dem Commit-Graph

Datenbank

SQLite, portiert aus dem DB Browser, als Block. Vier Bereiche: Structure (Schema-Baum, Tabellen und Indizes anlegen/bearbeiten, Attach, CSV/SQL-Import), Browse (Daten-Grid mit Filtern pro Spalte, Sortierung, Inline-Zell-Editoren – Text, Hex, JSON, XML, Bild – New Record, gespeicherte Ansichten, Export nach CSV/JSON), Execute (SQL-Tabs mit Completion, Ergebnis-Grid, ein SQL-Log, sogar Ergebnis-Plots) und Pragmas. Änderungen werden als „Write Changes”/Revert gestaged statt auto-committet, und In-Memory-Datenbanken für Scratch-Arbeit sind einen Klick entfernt.

Eine SQL-Abfrage in Terns Datenbank-Block mit Ergebnissen im Grid

Eine Tabelle in Terns Datenbank-Block durchsuchen

Board (⌥⌘K)

Zeig es auf eine TODO.md und es wird ein Kanban: Todo/Doing/Done-Lanes aus den Überschriften, Karten aus den Checkboxen, Board- und Listenansichten, Drag zwischen Lanes, Tags und Daten auf Karten. Agenten können die Datei lesen und aktualisieren, was sie zu einer billigen gemeinsamen Aufgabenliste zwischen dir und dem Modell macht – genau so habe ich einem Agenten eine Arbeitswarteschlange übergeben.

Eine TODO.md als Kanban-Board in Terns Board-Block

Notebook

Jupyter auf einem schlichten Python-Kernel – ohne Server. Code- und Markdown-Zellen, echte Outputs, Completion, Inspection, ein Variablen-Sheet, Restart/Interrupt. Meine Testzelle lief auf dem Python 3.12 des Systems.

Ein Jupyter-Notebook mit einer Python-Zelle in Tern

Der Rest des Block-Regals

  • Canvas: ein freier Sketch-Block (Zeichnen, Formen, Pfeile, Text) neben deiner Shell – gut, um Screenshots für ein Video zu annotieren.
  • Taskmanager: Prozessliste oder -baum mit CPU-, Speicher- und GPU-Anzeigen, Filterung und Quit/Force-Quit pro Zeile.
  • Browser (⇧⌘B): echte Seiten in einem Block; der Punkt ist, dass omp ihn steuern kann, um zu inspizieren, was es gerade gebaut hat – inklusive Page-Snapshots.
  • Screen Share: das Display eines anderen Rechners sehen und steuern, angepasst oder in Originalgröße, mit Control-Toggle. Das habe ich noch nicht ausprobiert.
  • Notes: ein Scratch-Textblock zum schnellen Notieren.
  • Carly: Stencils eingebauter Assistent mit Echtzeit-Sprachmodus – eigene Settings-Seite, noch früh.

Terns Taskmanager-Block listet Prozesse sortiert nach CPU

Eine Zeichnung auf Terns Canvas-Block

Sessions überleben das Fenster – und reisen

Die Persistenz-Story ist dasselbe Versprechen, das Herdr macht, nur weitergedacht: Fenster mitten im Build schließen und nichts stoppt, wieder öffnen und du bist genau da, wo du aufgehört hast. Ich habe die App gekillt, während eine Remote-Session auf einem VPS lief – alles, inklusive der Agent-Konversation, war noch da, als ich zurückkam.

Der Hosts-Bereich der Command Palette ist der Umschalter: deine Maschine, entfernte Tern-Daemons – direkt erreichbar oder über ein Tailnet – und „Connect from mobile”, das ein Handy per Code-Scan koppelt. Einen Host hinzuzufügen ist ein Dialog, keine Config-Datei: Gib einen SSH-Host, Hostnamen oder IP:port (oder eine Tern-Endpoint-ID) an, sag, als welcher User agiert werden soll, und Tern richtet tern remote serve für dich ein – es kann Hosts auch direkt aus ~/.ssh/config übernehmen.

Der Hosts-Picker in Terns Command Palette mit lokaler Maschine und Remote-Optionen

Einen Remote-Host in Tern hinzufügen: SSH-Adresse, Act-as-User, Tailnet-Peers

Jeder Host behält seinen eigenen Session-Status, sodass ein Wechsel zwischen Laptop und VPS keine Seite stört. tern whoami --json meldet die Identitätskette des Panes, in dem du bist (welcher User, über welchen Host). Und tern web serve stellt den Daemon unter einer Token-URL bereit (http://127.0.0.1:8377/?token=…) – der Browser-Client ist ein Wasm-Build, der auf WebGPU rendert, also ist ein Browser-Tab wirklich ein weiterer Client und kein Remote-Desktop-Hack.

Es ist dasselbe Modell, das ich im Superlogical-Rex-Briefing beschrieben habe (der Server besitzt die Session, Clients attachen), nur dass Tern es heute für Linux, Windows und Android liefert, nicht nur für macOS.

Agenten sind nativ, nicht eingebettet

Ein omp-Agent-Block in Tern: Model-Picker, 1M-Kontextanzeige, Prompt-Eingabe

Der Agent-Block ist omp, nativ gezeichnet – der Kontrast, den die Website macht, ist eine omp-Session als ANSI-Text in einem 48×37-Raster gegenüber derselben Session, von Tern gerendert: ein Model-Picker (meiner stand auf GLM-5.3-Flash), Slash-Commands mit Skills, ein Thinking-Toggle, ein Task-Agents-Panel, das gespawnte Subagenten zeigt, und ein Kontext-Inspektor, der das Fenster aufschlüsselt. In meiner Session zeigte das ein 1M-Token-Budget, aufgeteilt auf System-Prompt (~3k), Tools, Skills und Messages – MCP-Server würden dort auch auftauchen. Du bekommst eine Benachrichtigung, wenn ein Lauf endet – wichtig, wenn du zwischen Panes hin- und herspringst.

Andere Agent-CLIs laufen als gewöhnliche Terminals. Ich habe Devin und Codex in Panes geöffnet und normal gechattet; sie bekommen nur nicht omps natives Chrome. Was ein „Agent-Block” startet, ist konfigurierbar (agent-command), also bist du auch nicht an omp gebunden.

Dann die Plugin-Ebene: Luau-Plugins fügen Blöcke, Command-Lenses, Commands und Styles hinzu – lokal und auf Remote-Hosts, mit denen du dich verbindest, was ungewöhnlich ist. Es gibt einen tern plugin-Manager (list|install|remove|link|reload), ein dokumentiertes Plugin SDK und eine Community-Liste bei awesome-tern. Jemand hat schon ein Herdr-Plugin geschrieben – ich habe es installiert (v0.4.0, zwei Blöcke). Wenn du also in Herdr-Clients und die Agent-State-Sidebar investiert bist, kannst du Herdr in einen Tern-Pane nesten und beide Welten behalten.

Scriptbar, bis hin zu den Screenshots

tern ist gleichzeitig die Control-CLI, und jedes attached Fenster folgt live:

bash
tern ls                              # sessions, tabs, panes
tern new | split | move | pip | dock # window surgery
tern run 'make test'                 # run a command in a pane
tern send / capture / wait           # type into, read back, block on panes
tern events --filter pane_spawned    # stream daemon events
tern whoami --json                   # identity chain of this pane
tern ssh user@host                   # ssh with Tern's terminfo installed
tern register                        # become the OS handler for its URL schemes

Es gibt auch eine Dev-Ebene (tern help dev): tern serve führt eine Headless-Session auf einem Control-Socket aus, tern ctl schickt ihr Befehle – dump, tree, pick, state, stats, layers, css reload, perf, trace, sogar record, um ein Dokument als mp4 zu filmen – und tern shot rendert Szenario-Dateien offscreen. Jeder Screenshot in diesem Artikel wurde mit tern shot-Szenario-Dateien erzeugt, demselben Harness, mit dem sie die App testen.

Wenn dir die „alles ist automatisierbar”-Philosophie der rex-CLI aus dem Rex-Artikel gefallen hat: das ist derselbe Instinkt.

Anpassung und Geschwindigkeit

Vier Fenster-Layouts (Rail, Float, Tiles, Studio), die ganze omp-Theme-Galerie mit Live-Vorschau und deine echte powerlevel10k-Config, nativ gezeichnet. Eingebaute Prompt-Styles (Tern, Lean, Classic, Rainbow, Pure, Starship, Spaceship, Robby Russell, Agnoster) brauchen nichts installiert. Fonts sind getrennt für Terminal, UI und Code; Fensterdeko kann die des Systems oder Terns eigene Traffic-Lights/Buttons sein; Statusleiste und Pane-Header sind Schalter. Die Settings sind ein schnelles Panel mit Suchfeld und Seiten für General, Agents, Appearance, Terminal, Databases, Notebooks, Carly, Keyboard, Git, Plugins, Sessions, Hosts und Advanced.

Terns Settings-Panel mit der Theme-Galerie

Performance war das Erste, was mir auffiel: Pane-Operationen, der Datei-Viewer und die Settings-UI sind alle sofort da – keine Electron-Startzeit, kein gebündeltes Chromium im Browser-Block. Sogar meine Headless-Screenshot-Renders (CPU-gezeichnet auf llvmpipe, ohne GPU) lieferten volle Frames in wenigen Sekunden.

Der MiniMax-M3.1-Test

Beim Durchklicken habe ich einen omp-Agenten mit dem kostenlosen MiniMax-M3.1-Flash-Modell auf ein Board voller Aufgaben losgelassen: „use the to-do and create my website.” Es baute eine komplette Astro-Site (etwa 2.000 Zeilen in 72 Dateien), spawnte Task-Agenten, iterierte über seine eigenen mittelmäßigen SVGs, nachdem es sie im Browser-Block angeschaut hatte, zeigte die Site auf localhost in der Vorschau und holte sich einen 100er-Lighthouse-Performance-Score. Das Modell ist wirklich schnell, aber es hat viel nachgedacht, das Design war schlicht, und es hat die Kanban-Datei erst am Ende aktualisiert statt fortlaufend. Das Tool hat seinen Job gemacht; das Modell ist mittelprächtig. Ein kostenloses Modell in einem so fähigen Terminal ist trotzdem eine nette Kombination für Boilerplate-Arbeit.

Tern vs Herdr vs Rex vs tmux

Tern Herdr Rex tmux
Was es ist Terminal + Workspace-App Agent-Multiplexer in deinem Terminal Terminal + Multiplexer Multiplexer in deinem Terminal
Persistenz Daemon-eigene Sessions Session-Server Server-eigene PTYs Server (Detach/Attach)
Remote-Story tern remote serve (QUIC), Web- + Mobile-Clients SSH-Attach / Thin Client Eingebautes Remoting, echter Login Per SSH rein, dann attachen
KI-Agenten omp als nativer Block + jede CLI State-Sidebar + Socket-API Nichts Spezifisches Keine
Zusätzliche Fläche Git/SQLite/Jupyter/Kanban/Browser-Blöcke Plugin-Marktplatz Lua-Config + rex-CLI Riesiges Plugin-Ökosystem
Erweiterbar mit Luau-Plugins (lokal + remote) Community-Plugins Lua-Actions tmux-Plugins
Plattformen macOS, Windows, Linux, Android Linux, macOS (Windows-Beta) macOS (andere in Arbeit) Überall
Status Geschlossene Beta (Warteliste) Open Source, pre-1.0 Öffentlicher Test, macOS zuerst Überall, ausgereift

Ehrlich gesagt: verschiedene Werkzeuge. Tern ist ein Terminal, das deinen ganzen Workflow absorbieren will (im Geiste am nächsten an Ghosttys Native-UI-Philosophie, gekreuzt mit einer IDE). Herdr ist eine Control Plane für Agent-Flotten, die in jedem Terminal läuft (inklusive Tern, per Plugin). Rex ist die Terminal-als-Multiplexer-Wette vom Ghostty-Schöpfer, vorerst nur für macOS. tmux bleibt der Amtsinhaber, den du überall schon hast. Der Sechs-Wege-Multiplexer-Vergleich bringt Zellij und TuiOS mit ins Bild.

Schwachstellen, die du kennen solltest

  • Geschlossene Beta. Zugang nur über Warteliste, keine Preise bekannt, Features bewegen sich schnell.
  • Files-Pane-Lag. Vom Agenten erzeugte Dateien tauchten in meinem Lauf nicht ohne Refresh in der Sidebar auf – frühe Beta eben.
  • Board-Sync liegt am Modell. Die Kanban-Datei spiegelt Fortschritt nur, wenn der Agent sie schreibt; MiniMax hat es am Ende gemacht, nicht kontinuierlich.
  • Junges Plugin-Ökosystem. Das SDK ist dokumentiert und awesome-tern existiert, aber es ist erst Tage alt.
  • Closed Source. Luau-Plugins erweitern es, aber die App selbst ist nicht offen wie Herdr oder tmux.
  • iOS ist noch nicht draußen. Android kam zuerst; der Phone-Client und Screen Share sind die zwei Teile, die ich nicht voll verifizieren konnte.

FAQ

Ist Tern kostenlos?

Es ist in geschlossener Beta ohne bekanntgegebene Preise. Zugang gibt es über die Warteliste auf stencil.so/tern mit einem Stencil-Account. Die Freischaltung hat bei mir etwa zwei Tage gedauert.

Auf welchen Plattformen läuft Tern?

Builds für macOS, Windows, Linux und Android gibt es schon heute. Ein iPhone-Client ist in Arbeit, und tern web serve stellt eine Session schon jetzt in einem Browser-Tab bereit.

Ersetzt Tern tmux oder Herdr?

Verschiedene Ebenen. Tern ist das Terminal; tmux und Herdr laufen in einem (Herdr läuft wörtlich in Tern über ein Community-Plugin – v0.4.0 bringt zwei Blöcke). Wenn dein Problem ist, den Zustand vieler Agenten zu verfolgen, machen Herdrs Sidebar und Socket-API immer noch etwas, das Tern nicht kann. Siehe den tmux-Grundlagen-Guide für den Amtsinhaber-Workflow.

Was ist omp?

Stencils Agent-CLI – omp.sh – die mit Modellen mehrerer Anbieter arbeitet (und auf Abos wie dem von Codex mitreiten kann). Terns Agent-Blöcke führen sie nativ aus, aber jede Agent-CLI funktioniert in einem normalen Pane.

Wie geht Tern mit Remote-Servern um?

Der Session-Daemon ist das Produkt: tern remote serve stellt den Daemon eines Servers über QUIC bereit, Hosts werden über einen Dialog hinzugefügt (SSH-Adresse oder Tailnet-Peer, Act-as-User, ~/.ssh/config-Import), und jeder Host behält seinen eigenen Session-Status. tern web serve liefert einen Browser-Client; das Koppeln per Handy ist ein QR-Code-Scan.

Kann ich Tern scripten?

Ja – das tern-Binary ist gleichzeitig die Control-CLI (split, run, send, capture, wait, events), tern serve/ctl steuern Headless-Sessions, und tern shot rendert gescriptete Szenario-Screenshots. Agenten können es genauso steuern.

Fazit

Tern ist der interessanteste Terminal-Release, den ich dieses Jahr ausprobiert habe. Die Daemon-persistenten Sessions, das Block-Modell (Git, SQLite, Jupyter, Kanban als native Panes), First-Class-omp-Agenten, Remote-Hosts und eine scriptbare CLI ergeben zusammen etwas, das näher an einem IDE-förmigen Terminal ist als an einem Terminal mit Tabs. Es ist eine Beta: die Warteliste, die Refresh-Haken, die unbekannten Preise. Aber das Fundament ist schnell und wirklich anders. Wenn du schon Agenten in Herdr laufen lässt oder Rex von der Seitenlinie beobachtest, ist Tern die zwei Tage Warteliste wert.

Auf die Tern-Warteliste setzen
#Terminal#Tern#Stencil

Hat diese Anleitung bei dir funktioniert?

Brauchst du Hilfe bei Astro, VPS oder einer Self-hosted-App? Services ansehen →