Sehen, was dein KI-Coding-Agent auf deinen Servern ausführt

Dein Agent arbeitet auf einem Produktionsserver, und sein Terminal sagt nur, dass er ein Tool aufruft. Welchen Befehl hat er ausgeführt, und was hat die Maschine geantwortet? Das Transkript verrät es dir hinterher. So haben wir es sichtbar gemacht, während es passiert, das haben wir zuerst probiert, und so bekommst du dasselbe ohne unsere App.

Du fragst einen DevOps-Agenten, warum die Produktions-API langsam ist. Er legt los. In seinem Terminal steht eine Zeile, dass er ein Tool aufruft, dann noch eine, dann noch eine. Sechs Aufrufe später teilt er dir mit, dass die Festplatte zu 97 % voll ist, und bietet an, das Log-Verzeichnis zu leeren.

Was hat er auf dieser Maschine tatsächlich ausgeführt? Welches du, welches find, hat er schon etwas gelöscht? Die Antwort gibt es, aber sie steht im Transkript der Session, als JSON geschrieben, und du liest sie hinterher. Auf einem Laptop ist das in Ordnung. Auf einem Produktionsserver ist hinterher zu spät, um zu sagen: „Moment, nicht dieser Ordner.“

Wir entwickeln AgentsRoom, eine Desktop-App, die Coding-Agenten laufen lässt und ihnen Tools gibt, um deine Server, Datenbanken und Cluster zu erreichen. Hier erzählen wir, wie wir diese Aufrufe sichtbar gemacht haben, während sie passieren: die Version, die nicht funktioniert hat, die Zahlen hinter der, die funktioniert, und wie du dasselbe bekommst, wenn du unsere App nicht nutzt.

Die kurze Antwort

  • Das CLI zeigt dir, dass ein Tool gelaufen ist, nicht die Session auf der anderen Seite. Der vollständige Befehl und seine Ausgabe gehen ins Transkript auf deiner Festplatte.
  • Um live zuzusehen, muss etwas jeden Aufruf festhalten, wenn er startet, nicht wenn die Session endet.
  • Ein Protokoll pro Verbindung funktioniert. Ein Terminal-Tab pro Befehl nicht. Wir haben 166 Remote-Befehle in einer einzigen Session gemessen.
  • Behalte dieses Protokoll auf deiner Maschine. Eine Befehlszeile auf einem Produktionshost transportiert Secrets und Kundendaten.
  • Ohne unsere App: Ein Hook von Claude Code, der jeden Shell-Befehl an eine Datei anhängt, bringt dich den größten Teil des Weges, und das Transkript liefert den Rest.

Warum das Transkript auf einem Server nicht reicht

Claude Code, Codex und die anderen CLIs zeichnen durchaus alles auf. Claude Code schreibt eine JSONL-Datei pro Session unter ~/.claude/projects/, Codex eine unter ~/.codex/sessions/. Jeder Tool-Aufruf steht darin, mit seiner Eingabe und seinem Ergebnis.

Das Problem ist nicht die Vollständigkeit, sondern der Zeitpunkt und die Form. Das Transkript ist für das CLI geschrieben, damit es eine Session fortsetzen kann. Du liest es, wenn der Agent fertig ist, indem du dich durch JSON-Zeilen wühlst. Wenn drei Agenten gleichzeitig arbeiten, liest du drei Dateien. Und das Terminal des Agenten, also der Ort, auf den du tatsächlich schaust, zeigt von jedem Aufruf nur eine eingeklappte Zusammenfassung.

Bei Code auf deinem Laptop ist hinterher lesen der normale Review-Ablauf: Du schaust dir den Diff an, bevor du committest. Ein Server hat keinen Diff. Ein systemctl restart oder ein DELETE wirkt in dem Moment, in dem er läuft.

Was wir zuerst probiert haben, und die 166 Befehle

Unser erstes Remote-Tool für Agenten öffnete eine Verbindung in einem Terminal-Tab. Das wirkte richtig: Der Nutzer konnte die Session sehen. Es scheiterte auf eine Art, mit der wir nicht gerechnet hatten.

Das Tool gab dem Agenten keine Möglichkeit zu lesen, was in dem Tab passierte, den er gerade geöffnet hatte. Also hörte der Agent im Projekt eines Nutzers auf, es zu verwenden. Die Bilanz dieser Session: 16 Aufrufe unseres Verbindungs-Tools und 166 sshpass-Befehle über das eigene Shell-Tool des Agenten, wobei der Agent den Nutzer nach dem Passwort fragte und der Nutzer es in den Chat einfügte. Produktionszugangsdaten landeten im Klartext in den Transkripten, in ps aux, solange jeder Befehl lief, und in einer Datei unter /tmp.

Die Lehre war nicht „Agenten sind leichtsinnig“. Der Agent hat das Einzige getan, was funktionierte. Ein sicheres Tool, das den Agenten seine Arbeit nicht machen lässt, wird umgangen, und die Umgehung ist schlimmer, als gar kein Tool zu haben.

Also haben wir ssh_exec geschrieben: Der Agent schickt einen Befehl, AgentsRoom führt ihn auf der gespeicherten Verbindung aus, wobei das Passwort in der App bleibt, und gibt die Ausgabe und den Exit-Code zurück. Der Agent sieht die Zugangsdaten nie und hat keinen Grund mehr, eine sshpass-Zeile zu bauen.

Das löste das Sicherheitsproblem und schuf ein Sichtbarkeitsproblem. Hätte jeder ssh_exec einen Tab geöffnet, hätte diese Session 166 Tabs erzeugt. Also öffnete ssh_exec keinen, und zwei Monate lang war der einzige Ort, an dem man diese Befehle sehen konnte, wieder die Unterhaltung des Agenten.

Ein Protokoll pro Verbindung

Die Version, die wir am 29. Oktober 2026 ausgeliefert haben (AgentsRoom 1.242.0), hält an einer Regel fest: kein Tab pro Befehl. Stattdessen landet jeder Aufruf in einem Protokoll, eines pro Verbindung.

  • Der Tab Aktivität im rechten Panel, neben Dateien, Änderungen und Tests, listet die Verbindungen, die Agenten berührt haben, als Karten auf (letzter Befehl, Agent, Uhrzeit, Status) und die 40 neuesten Aufrufe auf einer Zeitleiste. Er filtert nach Agent und durchsucht Befehle, Verbindungsnamen und Ausgaben.
  • Das Protokoll einer Verbindung liest sich wie ein Terminal: Agent · Uhrzeit, dann $ Befehl, dann die Ausgabe, dann Erledigt · Exit-Code 0 · 1,2 s. Die SSH-Ausgabe läuft live durch, und die Ansicht folgt dem Ende, bis du nach oben scrollst. Ein Button kopiert das ganze Protokoll als Text.
  • Pillen im Header des Agenten, eine pro Server, Datenbank oder Cluster, die dieser Agent berührt hat, mit einem grünen Punkt während eines Aufrufs. Ein Klick öffnet das zugehörige Protokoll.
  • Ein Badge Agent bei der Arbeit in der Zeile der Verbindung in den Fenstern Server, Datenbanken und Kubernetes, nur solange ein Aufruf läuft.

Das Protokoll ist schreibgeschützt. Um selbst auf der Maschine zu tippen, bleibt der SSH-Tab im Fenster Server der Weg hinein. Die vollständige Feature-Seite ist der SSH-Verbindungsmanager, und die Datenbankseite findest du unter Datenbankverbindungen.

Was erfasst wird und was nicht

AufrufIm ProtokollWarum
ssh_exec (SSH, AWS SSM, WinRM)JaDer Hauptfall: ein Befehl auf einer entfernten Maschine, ohne eigenen Tab
ssh_transferJaEine Datei, die auf einen Server oder von ihm kopiert wird, ist eine Aktion auf diesem Server
db_query, db_schemaJaDas SQL so, wie der Agent es geschrieben hat, und die ersten Zeilen des Ergebnisses
kube_kubectlJaAngezeigt als kubectl-Zeile mit ihren Argumenten
commands_run, ssh_connectNeinSie öffnen bereits einen Terminal-Tab, dem du zusehen kannst
Das eigene Shell-Tool des Agenten (ssh, psql, kubectl direkt getippt)NeinEs läuft nicht über AgentsRoom: Es steht im Terminal und im Transkript des Agenten

Die letzte Zeile ist die ehrliche Grenze. Das Protokoll sieht, was über unsere Tools läuft. Wenn du willst, dass jede Remote-Aktion dort auftaucht, müssen die Tools für den Agenten der einfachere Weg sein. Das ist die Lehre aus den 166 Befehlen.

Noch ein Detail: Nur SSH streamt die Ausgabe, während der Befehl läuft, weil es über ein echtes Terminal auf deiner Maschine geht. Ergebnisse von WinRM, SQL und kubectl erscheinen, wenn der Aufruf beendet ist.

Was das Protokoll kostet

Unsere Nutzer lassen viele Agenten gleichzeitig laufen: 45 Agenten in 18 Projekten auf einer Maschine, 48 Konsolen auf einer anderen. Alles, was pro Agent oder pro Ausgabe-Chunk anfällt, wird damit multipliziert, deshalb hat das Protokoll feste Grenzen:

  • 120 Aufrufe pro Projekt, die ältesten fallen zuerst weg.
  • 32.000 Zeichen Ausgabe pro Aufruf, wobei das Ende behalten wird, denn dort stehen Fehler und Exit-Codes.
  • 2.000 Zeichen Befehl oder SQL pro Aufruf.
  • Eine Update-Nachricht pro Aufruf alle 120 ms für die Live-Ausgabe, nie eine pro Chunk der Terminal-Ausgabe.
  • Kein Timer im Leerlauf. Solange kein Agent ein Remote-Tool aufruft, kostet das Protokoll nichts.

Die Erfassung passiert an einer einzigen Stelle: der Brücke, über die die Tool-Aufrufe aller CLIs laufen. Deshalb funktioniert sie für Claude Code, Codex, Antigravity CLI und alle anderen CLIs, die die App ausführt, gleich, ohne Code pro Provider.

Die Grenze, die wir gewählt haben: nichts verlässt die Maschine

Das Protokoll liegt im Arbeitsspeicher der Desktop-App und verschwindet, wenn du sie beendest. Es wird nicht mit unseren Servern synchronisiert, was für uns ungewöhnlich ist: Fast alles andere in AgentsRoom folgt deinem Konto von Computer zu Computer.

Das hier nicht, und zwar mit Absicht. Die Ausgabe eines env auf einem Server enthält Secrets. Ein SELECT auf eine Kundentabelle enthält Kundendaten. Ein Werkzeug, das solche Dinge sichtbar machen soll, sollte sie nicht zusätzlich woandershin kopieren.

Das Handy kann dasselbe Protokoll im Profil des Agenten mitverfolgen (Mobile-App 2.47 und neuer). Der Datenstrom geht von deinem Computer über die Ende-zu-Ende-verschlüsselte Verbindung zu deinem Handy, Secrets werden maskiert, bevor sie das Gerät verlassen (API-Schlüssel, KEY=value-Paare, Passwörter in URLs, Tokens), und nichts wird auf einem Server gespeichert. Derselbe Aufruf bleibt außerdem wie bisher in der Unterhaltung des Agenten lesbar.

Audit-Logs von Claude Code sind etwas anderes

Wenn du nach „Claude Code audit log“ gesucht hast, bist du wahrscheinlich auf die Compliance API von Anthropic für Claude Enterprise gestoßen: ein Aktivitäts-Feed, Audit-Log-Ereignisse und, für lokale Sessions, die im Enterprise-Konto angemeldet sind, die Transkripte der Sessions. Sie ist für Administratoren und Compliance-Teams gebaut, deckt die Organisation ab, und man liest sie hinterher.

Sie beantwortet „wer im Unternehmen hat was mit Claude gemacht“. Sie beantwortet nicht „welchen Befehl führt mein Agent gerade auf dem Datenbankserver aus“. Beides kann nebeneinander existieren, und wenn du in einem Unternehmen mit Compliance-Vorgaben arbeitest, brauchst du das Erste wahrscheinlich ohnehin, egal was du für das Zweite verwendest.

Wenn du AgentsRoom nicht nutzt

Einen großen Teil davon bekommst du mit dem, was die CLIs schon mitbringen.

Protokolliere jeden Shell-Befehl, sobald er startet. Die Hooks von Claude Code können vor jedem Tool-Aufruf einen Befehl ausführen. Der Hooks-Leitfaden zeigt das Muster: ein PreToolUse-Hook auf das Tool Bash, der jq -r .tool_input.command in eine Logdatei leitet. Lass tail -f auf dieser Datei in einem zweiten Terminal laufen, und du siehst jeden Befehl in dem Moment, in dem der Agent ihn abschickt, ssh-Zeilen inklusive.

Lies das Transkript, wenn du die Ausgabe brauchst. Der Hook liefert dir den Befehl, nicht das, was der Server geantwortet hat. Dafür enthält die Session-Datei unter ~/.claude/projects/ (oder ~/.codex/sessions/ für Codex) das vollständige Ergebnis jedes Aufrufs.

Gib dem Agenten ein eigenes Konto auf dem Server. Ein eigener Benutzer macht jede Verbindung im Auth-Log des Servers zuordenbar, und wenn auf deinen Servern auditd läuft, erfasst eine Regel auf execve für diesen Benutzer jeden Prozess, den er startet, und zwar auf der Serverseite, wo der Agent sie nicht umgehen kann.

Halte Zugangsdaten außer Reichweite des Agenten. Wenn der einzige Weg zur Verbindung ein Passwort ist, nach dem der Agent dich fragen muss, wirst du sshpass-Zeilen im Chat sehen. Nutze einen Schlüssel, den der Agent nie liest, oder ein Tool, das das Secret für ihn verwahrt. Wir haben einen eigenen Leitfaden dazu geschrieben, wie du einem Agenten ein Secret gibst, ohne es in den Prompt zu schreiben.

Was dir dieses Setup nicht gibt, ist die Verbindung zwischen den dreien: welcher Agent, auf welcher Verbindung, mit welcher Live-Ausgabe, an einem Ort. Genau diesen Teil haben wir gebaut.

Fragen, die uns wirklich gestellt werden

Kann ich sehen, was Claude Code auf einem Remote-Server macht, während es arbeitet?

Im Terminal siehst du den Tool-Aufruf und, sobald er fertig ist, ein gekürztes Ergebnis. Der vollständige Befehl und seine Ausgabe landen im Transkript der Session auf deiner Festplatte, das du hinterher liest. Um live zuzusehen, brauchst du etwas, das jeden Aufruf in dem Moment festhält, in dem er startet: einen Hook in Claude Code, der jeden Bash-Befehl in eine Logdatei schreibt, oder eine App, die die Remote-Aufrufe für den Agenten ausführt und sie live anzeigt. Genau das macht der Tab Aktivität von AgentsRoom.

Wo hält Claude Code fest, welche Befehle es ausgeführt hat?

Im Transkript der Session, einer JSONL-Datei unter ~/.claude/projects/, ein Ordner pro Projekt und eine Datei pro Session. Jeder Tool-Aufruf ist dort eine Zeile mit seiner Eingabe und seinem Ergebnis. Codex führt eine ähnliche Datei pro Session unter ~/.codex/sessions/. Beide sind vollständig, und beide sind dafür geschrieben, dass das CLI eine Session fortsetzen kann, nicht dafür, dass ein Mensch sie überfliegt.

Ist das dasselbe wie die Audit-Logs von Claude Code?

Nein. Die Audit-Logs, die man unter diesem Namen sucht, sind die Aufzeichnungen auf Organisationsebene, die Anthropic in seinem Enterprise-Tarif über die Compliance API anbietet: ein Aktivitäts-Feed, Audit-Ereignisse und, für angemeldete Sessions, die Transkripte, die ein Administrator später liest. Sie beantworten, wer in der Organisation was getan hat. Eine Live-Ansicht der Befehle auf einem Server ist ein anderes Werkzeug für eine andere Person.

Warum nicht einen Terminal-Tab pro Befehl des Agenten öffnen?

Diesen Weg sind wir gegangen und haben ihn gemessen: Ein Agent, der einen Produktionsvorfall bearbeitete, hat in einer einzigen Session 166 Remote-Befehle abgesetzt. Ein Tab pro Befehl macht die Tab-Leiste nach zehn Minuten unbrauchbar. Was funktioniert, ist ein Protokoll pro Verbindung, in dem jeder Aufruf ein Eintrag mit seinem Befehl, seiner Live-Ausgabe, seinem Exit-Code und seiner Dauer ist.

Schickt AgentsRoom die Befehle und ihre Ausgabe an einen Server?

Nein. Das Protokoll liegt im Arbeitsspeicher der Desktop-App, begrenzt auf 120 Aufrufe pro Projekt, und es ist weg, wenn du die App beendest. Das Handy kann es im Profil des Agenten mitverfolgen (Mobile-App 2.47 und neuer): Der Datenstrom geht von deinem Computer über die Ende-zu-Ende-verschlüsselte Verbindung zu deinem Handy, Secrets maskiert, und nichts wird auf einem Server gespeichert.

Welche Befehle des Agenten zeigt der Tab Aktivität nicht?

Erfasst werden nur Aufrufe, die über die Tools von AgentsRoom laufen: ssh_exec, ssh_transfer, db_query, db_schema und kube_kubectl. Ein Befehl, den der Agent mit seinem eigenen Shell-Tool ausführt, etwa eine rohe ssh- oder psql-Zeile, steht in seinem Terminal und seinem Transkript, aber nicht im Protokoll. commands_run und ssh_connect sind bewusst ausgenommen, weil sie bereits einen Terminal-Tab öffnen, dem du zusehen kannst.

Die Kurzfassung

Ein Agent auf einem Server braucht zwei Dinge von dir: eine Arbeitsweise, die ohne dein Passwort auskommt, und eine Möglichkeit für dich zu sehen, was er tut, während er es tut. Das Erste ohne das Zweite lässt dich hinterher JSON lesen. Das Zweite ohne das Erste wird von einem Agenten umgangen, der sshpass-Zeilen einfügt.

Herausgekommen ist ein Protokoll pro Verbindung, begrenzt und auf deiner Maschine gespeichert. Wenn du es ausprobieren willst, gibt es AgentsRoom kostenlos zum Download, und die Seite zu SSH-Verbindungen zeigt die Einrichtung Schritt für Schritt. Wenn du lieber nur bei deinem CLI bleibst, fang mit dem PreToolUse-Hook und einem tail -f an: Das dauert fünf Minuten, und du wirst dich nie wieder fragen, was die letzten sechs Tool-Aufrufe waren.

AgentsRoom herunterladen

Führe alle deine KI-Agenten aus, in all deinen Projekten, aus einem einzigen Fenster.

KostenlosAgentsRoom herunterladen

Companion-App: Agenten auch unterwegs im Blick behalten

Nutze Claude, Codex, Antigravity CLI oder einen anderen KI-Anbieter.

Erweiterung installieren
Chrome Web Store

Bugs und Wünsche direkt in dein öffentliches Backlog schicken.

Multi-Projekte
Multi-Provider
Multi-Agenten
Live-Status
Diff & Commit
Mobile App
Live-Vorschau
Agent-Teams
Browser-Tests
Backlog-getriebene Entwicklung
Prompt-Bibliothek
Skills-Bibliothek
Alle Funktionen ansehen

Weiterlesen