Nikolai Bockholt EN

Gerald

Gebaut

Ein Handheld-Terminal neben der Tastatur – ein ClockworkPi uConsole mit Raspberry Pi CM4 – das als großes gezeichnetes Gesicht zeigt, was Claude Code gerade tut: denken, arbeiten, warten, fertig. Es klingelt, wenn Claude eine Eingabe braucht, streamt die Tool-Aufrufe mit, und man kann Shell-Befehle mit einem Tastendruck am Gerät freigeben oder ablehnen.

Das uConsole-Handheld auf einem Schreibtisch. Auf dem Display in grüner Schrift: der Name Gerald, ein gezeichnetes Gesicht mit hochgezogenen Brauen, darunter das große Statuswort „ARBEITE“ mit laufendem Balken, der aktuelle Tool-Aufruf und eine Statuszeile mit Modell, Kontextfüllung und Nutzungsgrenzen.
Zustand „arbeitet“, darunter der laufende Aufruf und das Session-HUD.

Der Teil, der es nicht zur Deko macht

Ein Gesicht, das den Zustand spiegelt, ist eine Anzeige. Interessant wird es, wenn der Weg zurückführt: wartet ein Bash-Befehl auf Freigabe, übernimmt er den Bildschirm des Geräts, und ein Druck auf Y oder N erlaubt oder verweigert ihn in der echten Session.

Damit ist es kein Ambient-Display mehr, sondern ein Bedienelement. Die Entscheidung, ob ein Befehl auf meinem Rechner läuft, passiert an einem Stück Hardware neben dem Rechner.

Wie es zusammenhängt

Claude-Code-Hooks feuern bei Session-Ereignissen und schicken eine kleine JSON-Zeile an einen Unix-Socket, fire-and-forget. Ein Daemon hält genau eine BLE-Verbindung zum Gerät und schiebt JSON-Snapshots über Nordic UART, ein Objekt pro Zeile – dasselbe Protokoll wie Anthropics Hardware-Buddy-Referenz, aus der das Projekt ursprünglich hervorgegangen ist.

Der Rückweg ist der eigentliche Trick: PreToolUse(Bash) macht einen Round-Trip. Das Gerät antwortet mit einer Freigabe, und die wird zum allow oder deny des Hooks.

Dazu ein Session-HUD: Modell, Füllstand des Kontextfensters, Nutzungsgrenzen mit Reset-Countdown – abgegriffen aus der Statusline und aufs Gerät gespiegelt.

Stand

Öffentliches Monorepo, beide Hälften mit eigener Git-Historie. Oberfläche auf Englisch und Deutsch, umschaltbar über GERALD_LANG. Läuft; der Autostart des Mac-Daemons über einen echten Reboot ist noch offen, das ist ein macOS-Berechtigungsthema.

Quellcode auf GitHub

← Alles, was ich gebaut habe