malandereideen

Ein Dashboard für meine Arbeit mit Claude

·Software & KI

Irgendwo hab ich mal einen Screenshot von so einem “Agentic OS”-Dashboard gesehen. Nutzungsstatistiken, eine Kachelwand mit Skills, verbundene Dienste, letzte Läufe. Sah gut aus. Und ich dachte mir, sowas will ich für meinen eigenen Kram auch haben. Also gebaut. Next.js, läuft lokal, zeigt was bei mir mit Claude Code so passiert.

Eine Regel von Anfang an

Echte Daten. Keine Platzhalter, keine hübschen Zahlen die keiner nachrechnen kann. Das klingt selbstverständlich, ist es aber nicht. Wenn du sowas nachbaust, ist die Versuchung groß, die Lücken mit was Plausiblem zu füllen. Sieht ja keiner. Bei mir kommen die Zahlen aus den Session-Dateien, die Claude Code sowieso schreibt. Da liegt für jede Sitzung ein JSON-Log. Das Dashboard liest daraus Zeitstempel, Session-ID, Arbeitsverzeichnis, Modell und Token-Verbrauch. Den Inhalt der Gespräche liest es nicht, den braucht es nicht. Die Skills kommen genauso aus den echten Dateien, also aus dem Frontmatter der SKILL.md-Dateien.

Und dann das, was nicht ging

Was ich eigentlich wollte: die Anzeige aus den Kontoeinstellungen. Wie viel vom Fünf-Stunden-Fenster ist verbraucht, wann setzt das Wochenlimit zurück, wie viel Fable-Nutzung ist noch drin. Das ist nicht rauszukriegen. Ich habe alles durchsucht was mir eingefallen ist:

  • die Dateien unter ~/.claude/
  • claude auth status, liefert nur subscriptionType: "pro" und sonst nichts Brauchbares
  • den Cache-Ordner von Claude Desktop
  • die Admin-API von Anthropic

Die Admin-API bräuchte einen Organisations-Admin-Key, nicht die normale Anmeldung, und liefert dann historische Abrechnungsberichte. Nicht die Prozentzahlen, die man in den Kontoeinstellungen sieht. Laut Doku gibt es die nur dort und über keine Schnittstelle. Damit war die Sache erledigt. Das ist kein “später nochmal probieren”, das ist schlicht nicht baubar. Ich hätte mir jetzt was ausdenken können. Aus den Token-Zahlen einen Prozentwert schätzen, hübscher Ring, sieht aus wie eine echte Anzeige. Genau das habe ich gelassen. Eine geschätzte Zahl, die aussieht wie eine gemessene, ist schlimmer als gar keine Zahl. Beim ersten Mal glaubst du ihr, beim zweiten Mal richtest du dich danach, und irgendwann triffst du eine Entscheidung auf Basis von was Erfundenem. Dieselbe Sache nochmal bei den “letzten Läufen” aus dem Screenshot. Sowas gibt es bei mir gar nicht, es gibt kein Automatisierungs-Log. Der Abschnitt heißt jetzt “Letzte Sessions” und zeigt, was wirklich da ist. Was sich nicht messen lässt, steht als Konfigurationsdatei drin. Die verbundenen Dienste zum Beispiel, oder die Nutzungsgrenzen. Da trage ich von Hand ein, was gilt. Unspektakulär, dafür weiß ich woher es kommt.

Das Eingabefeld, das dreimal anders wurde

Oben im Dashboard ist ein Feld: “Sag Claude was zu tun ist”. Da tippst du was rein und es passiert was. Der erste Ansatz war, ein Terminal aufzumachen und dort eine Session zu starten. Claude Code prüft aber selbst mit, was es da gerade baut, und diese Prüfung hat zweimal blockiert: einmal schon beim Plan, einmal beim fertigen Code. Die Begründung leuchtet ein, wenn man sie mal ausformuliert: Ein HTTP-Endpunkt, der aus beliebigem Text eine vollberechtigte Sitzung startet, ist eine Angriffsfläche. Alles was auf meinem Rechner läuft und localhost:3000 erreicht, könnte das auslösen. Interessant fand ich, dass die Erlaubnis dafür von mir kommen musste. Selbst eintragen durfte Claude sie nicht, das wird erkannt und ebenfalls geblockt. Ich musste den Eintrag außerhalb des Chats in die Einstellungen schreiben. Und dann noch was: Als ich später von Terminal auf Claude Desktop umgestellt habe, war die alte Erlaubnis wertlos. Bewertet wird der konkrete Weg, nicht die Absicht. Also zweite Regel schreiben. Zwischendrin gab es eine abgespeckte Variante, die den Prompt eingeschränkt ausgeführt und das Ergebnis im Dashboard angezeigt hat. Habe ich wieder rausgeworfen. Ich konnte danach nicht weiterreden, und genau darum geht es ja. Heute macht das Feld etwas anderes: Es öffnet Claude Desktop mit dem Prompt schon drin, im richtigen Ordner. Über einen Deep-Link, den Claude Desktop versteht. Der ist allerdings nirgends dokumentiert. Gefunden wurde er, indem das App-Bundle nach der Stelle durchsucht wurde, die eingehende claude://-Adressen verteilt. Funktioniert zuverlässig, aber ich weiß, worauf ich mich da einlasse: Ein Update kann das jederzeit stillschweigend kaputtmachen. Wenn das Feld eines Tages nichts mehr tut, ist das die erste Stelle zum Nachsehen.

Zwei Sachen, die Zeit gekostet haben

Das Datum im Kopf des Dashboards stand irgendwann fest. Nicht falsch berechnet, sondern eingefroren: Next.js hatte die Seite beim Bauen einmal vorgerendert und das damalige Datum mit eingebacken. Die Zahlen darunter waren aktuell, weil die nachgeladen werden. Nur die Begrüßung war von vorgestern. Ein force-dynamic an der richtigen Stelle, dann passt es. Und das Dashboard hängt bewusst an 127.0.0.1 und nicht im Netzwerk. next start bindet ohne weitere Angabe an alle Adressen, damit hinge es auch im Heimnetz. Da drin steckt aber ein Endpunkt, der in mein Vault schreibt, und der hat im Heimnetz nichts verloren.

Wo es steht

Läuft als Hintergrunddienst, startet mit dem Rechner. Mittlerweile hängt mehr dran als am Anfang: die Digest-Routinen, die morgens Inspiration und neue Videos aus meinen Abos einsammeln, und seit kurzem ein Reiter für meine Webseiten mit Zustand und Nutzungszahlen. Die Anzeige aus den Kontoeinstellungen fehlt mir trotzdem weiter. Falls Anthropic die irgendwann über eine Schnittstelle rausgibt, ist das die erste Zahl, die ich nachrüste.

Entwurf mit KI aus meinen Projektnotizen, redigiert von mir.Wie diese Texte entstehen