ai-workbench: Vom Claude-Cockpit zum Backend-Wechsler
Drei Monate Entwicklung an einem Terminal-Multiplexer – austauschbare KI-Backends, Multi-Line-Eingabe und ein Sicherheitsrelease, das eine Funktion mitgenommen hat.
Ende Juli haben wir in ai-workbench eine Sicherheitslücke geschlossen und dabei das Pullen abgeschaltet. Nicht mit einer Fehlermeldung – die Funktion war einfach nicht mehr erreichbar. Aufgefallen ist es erst beim Review eine Woche später. Das steht stellvertretend für die letzten drei Monate am Terminal- Multiplexer: mehr Auswahl, weniger Reibung, und die Erkenntnis, dass Absicherung selten kostenlos ist.
TL;DR: ai-workbench löst im Juli das Vorgängerprojekt claude-workbench ab und unterstützt seitdem sechs KI-Backends statt einem. Dazwischen: Multi-Line Eingabe im KI-Bereich, signierte Release-Archive, ein Startbildschirm ohne Wartezeit – und ein Sicherheitsrelease, das zwei Standardeinstellungen umgedreht hat.
Juni: Was das Original noch gelernt hat
Bis Ende Juni hieß das Werkzeug claude-workbench und konnte genau ein KI-Backend. Der Monat ging fast vollständig für Feinschliff drauf – 47 Commits, die du einzeln kaum bemerkst und in Summe täglich spürst.
Das Vorprojekt liegt weiter offen auf GitHub und bekommt noch Sicherheitskorrekturen, aber keine neuen Funktionen mehr.
Ein Sicherheits-Audit brachte acht Befunde, die am 1. Juni geschlossen wurden. Darunter vorhersagbare Temp-Dateipfade beim PDF-Export, ein Browser-Aufruf ohne Prüfung des übergebenen Programmnamens und eine Update-Auswahl, die schlicht den ersten Eintrag der GitHub-Releases nahm – ein nachträglich veröffentlichtes Patch-Release auf einem alten Branch konnte damit ein echtes Update verdecken. Seitdem entscheidet ein Versionsvergleich nach semver.
Der Fix mit dem größten Alltagseffekt kam am 12. Juni. Claude Code zeichnet seit Version 2.1.89 auf dem Alternate Screen – jenem zweiten Bildschirmpuffer, den auch vim oder less belegen – und meldet dabei Mausereignisse selbst an. Der lokale Rückblick-Puffer des Bereichs blieb damit leer, und das Mausrad tat nichts mehr. Die Lösung entspricht dem Verhalten von tmux: Läuft im Pane eine Anwendung mit Maus-Tracking, wird das Wheel-Event als Maus-Sequenz an die Anwendung durchgereicht. Nur wenn niemand mithört, scrollt der eigene Puffer.
Mitte Juni ersetzten Standard-Shortcuts die alten Block-Operationen im Editor:
Ctrl+C, Ctrl+X, Ctrl+V, Ctrl+Z statt der F-Tasten-Kombinationen im Stil
des Midnight Commander, die sich ohnehin mit den globalen F-Tasten bissen.
Dazu ein echter Hardware-Cursor, weil der selbstgemalte in Terminus und iTerm2
unsichtbar blieb.
Am 30. Juni kam noch der Prefix-Passthrough: Mit Ctrl+B im Shell-Bereich
gehen alle Tasten roh an die Anwendung darunter – nano, mc und vim bekommen
ihre F-Tasten zurück. Die Befehle der Workbench erreichst du dann über Ctrl+B
plus Taste.
Juli: Der Schnitt
Am 10. Juli erschien ai-workbench als eigenes Projekt – mit einer Änderung, die den neuen Namen trägt: Der KI-Bereich ist nicht mehr auf Claude Code festgelegt.
Angefangen hat es mit einem Positionsargument beim Start
(ai-workbench opencode), zwei Tage später kam der Wechsel zur Laufzeit über
F8. Der rotierte zunächst stumm durch die Backends, was in der Praxis
unbrauchbar war – nach drei Tastendrücken wusstest du nicht mehr, wo du
gelandet warst. Seit v1.5.0 öffnet F8 ein Auswahlmenü.
Heute stehen sechs Backends zur Wahl:
| Backend | Start | Bemerkung |
|---|---|---|
| Claude Code | ai-workbench claude |
Standard, mit Berechtigungsdialog |
| OpenCode | ai-workbench opencode |
Startbefehl in den Einstellungen anpassbar |
| Pi | ai-workbench pi |
dito |
| Codex | ai-workbench codex |
OpenAI, seit v1.8.0 |
| Ollama + OpenCode | ai-workbench ollama-opencode |
lokal, seit v1.9.4 |
| Ollama + Pi | ai-workbench ollama-pi |
lokal, seit v1.9.4 |
Die Wahl wird in der Sitzung gespeichert. Claude-spezifische Dialoge – etwa die Auswahl des Berechtigungsmodus – erscheinen nur, wenn das Backend sie versteht.
Multi-Line-Eingabe, dritter Anlauf
Shift+Enter im KI-Bereich klingt nach einer Kleinigkeit und war die
hartnäckigste Baustelle des Monats. Terminals melden diese Taste nur, wenn das
Kitty-Keyboard-Protokoll aktiv ist; die Workbench schaltet es deshalb ein und
übersetzt für die Anwendung darunter.
Dann stellte sich heraus: Hast du /terminal-setup von Claude Code ausgeführt,
legt das in iTerm2 eine globale Tastenbelegung an, die Shift+Enter abfängt und
ein nacktes Zeilenvorschubzeichen sendet – am Protokoll vorbei. Seit v1.7.1
behandelt der KI-Bereich auch dieses Zeichen als Zeilenumbruch. Was dein
Terminal tatsächlich schickt, zeigt dir ai-workbench --key-diag.
Alt+Enter und Ctrl+J funktionieren ohne Protokoll, und \ plus Enter
bleibt der Weg, der überall geht.
Zwei Dinge, die niemand vermisst hat
Der Start zeigte drei bis fünf Sekunden lang einen schwarzen Bildschirm, weil der Abhängigkeitscheck zwölf bis zwanzig Prozesse nacheinander startete, bevor irgendetwas erschien. Seit v1.9.0 kommt der Bildschirm sofort, der Check läuft im Hintergrund.
Seit v1.6.0 trägt jedes Release-Archiv eine kryptografische Signatur, erzeugt mit zipsign. Die Prüfung beim Herunterladen ist noch nicht scharf geschaltet – dafür braucht es erst ein paar signierte Releases in der Historie, sonst sperre ich die eigene Nutzerschaft aus. Alle Archive liegen offen auf GitHub.
Das Thema hinter vielen dieser Änderungen: SSH
Sieh dir an, wofür in diesen drei Monaten Arbeit draufging – Zwischenablage über fünf Verfahren, Dateiübertragung durch die Terminalverbindung, XRDP-Eigenheiten, ein Assistent fürs Einfügen von Bildern über SSH. Auffällig viel davon betrifft nicht das lokale Terminal.
Das ist kein Zufall, sondern der Grund, warum das Ganze eine Terminaloberfläche ist und keine Anwendung mit Fenstern: Du startest sie über SSH auf jedem Server, und das komplette Cockpit läuft dort, wo dein Code liegt. Kein lokaler Client, keine Gegenstelle, die sich installiert, kein Dateiabgleich zwischen zwei Maschinen.
Genau deshalb kostet jede Kleinigkeit, die lokal selbstverständlich ist, remote Arbeit. Kopieren zum Beispiel: Auf dem eigenen Rechner reicht die native Anbindung. Über SSH ohne Display bleibt am Ende eine Escape-Sequenz, die den Text durch die Terminalverbindung selbst schickt – und die kann nicht zurücklesen. Solche Grenzen gehören benannt, nicht versteckt.
Ende Juli: Sicherheit, und was sie kostet
v1.10.0 schloss zwei Löcher derselben Bauart: Ein Verzeichnis, das man nur öffnet, sollte nicht bestimmen, welcher Code läuft.
Eine config.yaml im Arbeitsverzeichnis hatte bis dahin höchste Priorität und
legt unter anderem fest, welche Befehle in den drei Bereichen starten. Ein
geklontes Repository mit einer solchen Datei genügte also, um beim Start fremde
Programme auszuführen. Seitdem gilt sie erst nach ausdrücklicher Freigabe:
ai-workbench --trust-local-config
Die Freigabe hängt am Inhalt, nicht nur am Pfad – ein SHA-256 wandert in eine
Liste unter ~/.config/ai-workbench/. Wird die Datei bearbeitet oder von einem
git pull überschrieben, ist die Freigabe hinfällig.
Zweitens führt jeder Git-Aufruf inzwischen eine Reihe von Konfigurationswerten
auf der Kommandozeile mit, damit das Repository sie nicht überschreiben kann:
core.fsmonitor, core.sshCommand, core.gitProxy, credential.helper und
protocol.ext.allow. Und git fetch läuft nicht mehr automatisch beim
Betreten eines Repositorys.
Genau dieser abgeschaltete Automatismus war der einzige Weg zum Pull-Dialog. Mit dem neuen Standardwert war Pullen aus der Oberfläche nicht mehr möglich – ohne Meldung, ohne Hinweis. Der Kommentar im Quelltext behauptete sogar, ein Tastenkürzel dafür sei unberührt. Dieses Kürzel gab es nie.
v1.10.1 hat das korrigiert: Das Dateimenü hat mit F9 → p einen echten
Eintrag für Git Pull bekommen, der unabhängig von der Einstellung
funktioniert und vorher nachfragt. Bei der Gelegenheit fielen drei weitere
Dinge auf – Dateinamen mit Umlauten verloren ihre Git-Farbe, weil git sie
standardmäßig als "\303\234bung.txt" ausgibt, ein deutschsprachiges git ließ
die Erkennung „kein Remote konfiguriert" ins Leere laufen, und git pull
führte weiterhin die Hooks des Repositorys aus.
Was bleibt: Ein git status kann über .gitattributes und einen passenden
Filter noch immer einen Befehl starten. Dagegen hilft kein Schalter auf der
Kommandozeile. Deshalb bleibt der automatische Fetch aus – Härtung ist die
zweite Verteidigungslinie, nicht die erste.
Was das für die Praxis heißt
Hast du die Workbench über Homebrew installiert, holst du dir v1.10.1 mit
brew upgrade ai-workbench. Zwei Dinge lohnen nach dem Update einen Blick:
- Liegt in deinem Projektverzeichnis eine
config.yaml, wird sie ab jetzt ignoriert. Einmal durchlesen, dannai-workbench --trust-local-config. - Vermisst du den automatischen Remote-Abgleich, setz
git.auto_fetch: truein der Konfiguration – oder nimmF9→p, wenn dir ein Pull reicht.
Die drei Bereiche – KI, LazyGit, Shell – zeigen weiterhin dasselbe Arbeitsverzeichnis wie der Dateibrowser. Das war von Anfang an der Kern des Werkzeugs und hat sich in drei Monaten als das Einzige erwiesen, an dem nichts zu ändern war.