Auf meinem Schreibtisch steht ein Mac mini M4. Basismodell, 16 GB, 256 GB SSD, 599 Euro. Er läuft rund um die Uhr und tut die meiste Zeit nichts. Seit ein paar Wochen hat er einen Telegram-Account und hört auf den Namen Neo.
Wenn ich ihm schreibe, antwortet nicht der Mini. Es antwortet ein Agent, der auf ihm läuft, vollen Zugriff auf meine Server hat und in meinen Notizen lesen und schreiben darf. Ich tippe „starte mal den Container XY neu”, und dreißig Sekunden später steht da, dass er wieder läuft.
Das klingt nach einer Lösung für ein Problem, das ich nicht habe. Nach vier Wochen Betrieb kann ich sagen: stimmt ungefähr. Und trotzdem würde ich es wieder bauen.
Was er darf und was nicht
Neo kommt an genau zwei Maschinen: meinen Docker-Host mit rund 54 Containern und meine Synology mit noch mal zwanzig. Das ist mein privates Zeug — Mailserver, Automatisierung, Medien, Überwachung.
An die Webserver mit Kundenseiten kommt er nicht. An alles, was beruflich ist, auch nicht. Das ist keine technische Grenze, das ist eine Entscheidung. Ein Bot, der einen Fehler macht, darf mich Zeit kosten. Er darf nicht jemand anderen etwas kosten.
Innerhalb dieser Grenze läuft er in drei Stufen:
Sofort, ohne Rückfrage: alles lesen. Status, Logs, wer läuft, wer nicht. Dazu einzelne Container neu starten — das ist der Griff, der in neun von zehn Fällen hilft und im zehnten nichts kaputt macht.
Kurz bestätigen: stoppen, starten, einen Stack aktualisieren, etwas Neues installieren, eine Konfiguration ändern.
Immer ausdrücklich bestätigen: löschen. Alles mit --force, alles mit --volumes, alles, wo Daten wegkönnen. Da will ich das Wort „ja” von mir selbst sehen, in ganzer Länge, bevor irgendwas passiert.
Diese drei Stufen sind der wichtigste Teil des ganzen Aufbaus. Nicht die Technik. Ein Agent mit Root-Rechten und ohne Abstufung ist keine Bequemlichkeit, das ist eine Wette.
Der erste echte Einsatz war unspektakulär
Ich hatte mir vorgestellt, wie das aussehen würde: Ich stehe irgendwo, das Handy vibriert, ein Dienst ist umgefallen, ich tippe zwei Sätze, alles läuft wieder. Fernwartung im Stehen.
So war es nicht.
Der erste Befehl, den ich wirklich unterwegs abgesetzt habe, kam auf der Arbeit. Mir war eine Idee für einen Blogartikel gekommen, so eine, die man bis zum Feierabend garantiert wieder vergessen hat. Handy raus, Neo geschrieben, zwei Minuten später war die Sache erledigt und lag als Notiz in meinem Vault.
Kein Notfall. Kein Server in Flammen. Nur ein Gedanke, der sonst weg gewesen wäre.
Das war der Moment, in dem ich verstanden habe, wofür das Ding eigentlich gut ist. Nicht für die Krise — für die Krise habe ich Überwachung und Push-Benachrichtigungen. Sondern für die zwei Minuten, in denen man sonst nichts machen kann.
Ehrlich: ich benutze ihn selten
Der Laptop ist meistens dabei. Und wenn der Laptop dabei ist, mache ich die Sachen am Laptop, weil ich dort sehe, was passiert, statt es mir erzählen zu lassen.
Das ist die unbequeme Wahrheit über dieses Projekt. Der Nutzen liegt nicht im Alltag, er liegt in den Lücken. Und die Lücken sind bei mir seltener, als ich beim Bauen dachte.
Der richtige Test kommt jetzt. Ich bin zwei Wochen im Urlaub, ohne Laptop. Wenn Neo etwas taugt, merke ich es genau dann. Wenn nicht, weiß ich es auch — und dann steht das hier so im Netz.
Was schiefgegangen ist
Er hat mal wie zwei verschiedene Leute geantwortet
Eine Zeit lang klang Neo mal so, mal ganz anders. Selbe Frage, unterschiedlicher Stil, unterschiedliche Gründlichkeit. Ich habe das erst auf Tagesform geschoben, was bei einem Programm schon ein bemerkenswerter Gedanke ist.
Die Erklärung kam durch einen Fehler nach einem Update: Telegram getUpdates conflict, HTTP 409. Telegram lässt nur einen Abrufer pro Bot zu.
Auf meinem MacBook lief eine zweite Instanz derselben Software, mit demselben Bot-Zugang, aber einem anderen Sprachmodell voreingestellt. Beide fragten bei Telegram nach neuen Nachrichten. Wer zuerst kam, antwortete. Deshalb die zwei Persönlichkeiten.
Der Fehler war die ganze Zeit da, sichtbar wurde er erst, als eine Version ihn endlich meldete. Vorher hat das System einfach das Naheliegende getan und nichts gesagt.
Der Mini wurde 90 Grad heiß
Ein abgebrochener Aufruf hatte einen Suchprozess hinterlassen, der niemandem mehr gehörte und fröhlich weiterlief. Parallel dazu drehte ein völlig unbeteiligtes Programm mit 885 Prozent CPU-Last frei. Dazu lief eine lokale Modell-Software doppelt.
Ergebnis: ein sehr warmer Mac mini und ein Bot, der ewig für Antworten brauchte. Ich hatte wochenlang gedacht, die Software sei langsam. Sie war nicht langsam, sie hatte nur keine Rechenzeit mehr übrig.
Seitdem räumt die Brücke Zeitüberschreitungen über die ganze Prozessgruppe ab, statt nur den obersten Prozess zu beenden.
Ein Test, der nichts bewiesen hat
Beim Einrichten wollte ich prüfen, ob der Bot überhaupt in mein Notizen-Verzeichnis schauen darf. Also per SSH eingeloggt und eine Datei gelesen. Fehlermeldung, Zugriff verweigert. Klarer Fall, dachte ich, die Rechte fehlen.
Sie fehlten nicht. Meine SSH-Sitzung hatte keine Freigabe für dieses Verzeichnis, der Bot schon — macOS vergibt solche Rechte pro Programm, nicht pro Nutzer. Während ich noch überlegte, woran es liegt, hatte Neo längst einen kompletten Artikelentwurf dort abgelegt, mit korrekten Metadaten.
Die Lehre gilt weit über diesen Fall hinaus: Ein fehlgeschlagener Test beweist nur, dass dieser eine Weg nicht funktioniert. Nicht, dass es nicht geht.
Und einer, den ich erst heute gefunden habe
Neo schickt mir täglich Vorschläge, worüber ich schreiben könnte. Nur konnte ich darauf oft nicht mehr antworten — drückte ich später auf einen der Vorschläge, kam zurück: „Diesen Vorschlag finde ich nicht mehr.”
Ich hatte das als Macke abgehakt. Der Bot vergisst halt, dachte ich.
Er hat nicht vergessen. Im Code stand, dass jeder Vorschlag, den ich nicht binnen sieben Tagen bearbeite, gelöscht wird. Nicht archiviert. Gelöscht. Und ich reagiere auf so etwas fast nie innerhalb einer Woche.
Gefunden habe ich es, weil ich für diesen Artikel aufschreiben wollte, was alles nicht funktioniert. Behoben ist es auch: Vorschläge bleiben jetzt dreißig Tage aktiv und danach in einem Ruhelager, aus dem sie sich weiter abrufen lassen.
Gerade noch rechtzeitig. Mit der alten Regel wäre alles, was mir in der ersten Urlaubswoche einfällt, tot gewesen, bevor ich zurück bin.
Was ich daraus mitnehme
Der Aufbau ist billiger, als er klingt. Ein Rechner, den ich ohnehin habe. Ein Bot-Zugang, der nichts kostet. Eine Freigabeliste mit genau einer Nummer drauf — meiner. Kein offener Port nach draußen, weil die Verbindung von innen nach außen aufgebaut wird.
Der teure Teil war das Nachdenken darüber, was das Ding nicht darf. Und das ist auch der Teil, den ich niemandem abnehmen kann.
Was mir am meisten aufgefallen ist: Fast jeder Fehler in diesem Projekt war ein stiller. Der doppelte Bot hat nicht gemeckert, er hat nur abwechselnd geantwortet. Der heiße Mini hat nicht gewarnt, er war nur langsam. Die gelöschten Vorschläge haben keine Fehlermeldung erzeugt, sie waren einfach weg.
Ein System, das laut kaputtgeht, repariert man. Eins, das leise falsch läuft, gewöhnt man sich an.
Nachtrag folgt: Ich schreibe das hier, bevor ich zwei Wochen ohne Laptop wegfahre. Wenn ich zurück bin, steht hier, ob ich Neo tatsächlich gebraucht habe — oder ob er zwei Wochen lang stumm auf dem Schreibtisch stand.


