Claude Code schreibt Session-Links in Commits
Ein Trailer mit claude.ai-Link landet aus Cloud- und Remote-Control-Sessions im Git-Verlauf. Was passiert, wie ihr es abstellt und warum es Streit gibt.
Am Wochenende hat es ein Detail aus Claude Code auf die Startseite von Hacker News geschafft, das seit Juni bekannt ist: Das Werkzeug hängt an Commits und Pull Requests einen Link auf die zugehörige claude.ai-Session. Voreingestellt an, ohne Nachfrage. Der Streit darüber ist alt, aber die technische Lage hat sich verschoben, und das macht ihn wieder aktuell.
Was genau passiert
Die Dokumentation ist an der Stelle eindeutig. Der Schlüssel heißt attribution.sessionUrl, ist ein Boolean, und sein Standardwert ist true.
| Wo | Was angehängt wird |
|---|---|
| Commit | ein Git-Trailer namens Claude-Session mit der Session-URL |
| Pull Request | der Link in der PR-Beschreibung |
| Wann | wenn Claude Code aus einer Cloud-Session oder aus Remote Control heraus committet oder einen PR öffnet |
Der bekannte Co-Authored-By-Trailer ist davon unabhängig und bleibt erhalten, wenn man nur den Link abschaltet. Abstellen lässt sich das in jeder Settings-Datei:
{
"attribution": {
"sessionUrl": false
}
}
Wer die gesamte Attribution loswerden will, setzt zusätzlich attribution.commit und attribution.pr auf leere Strings. Der ältere Schlüssel includeCoAuthoredBy ist seit Version 2.0.62 abgelöst und greift nicht mehr, sobald attribution.commit oder attribution.pr gesetzt ist.
Wo ihr die Einstellung setzt, entscheidet mit
Hier liegt die Falle, und sie ist leicht zu übersehen. Eine Cloud-Session über claude.ai/code läuft nicht auf eurer Maschine, sondern auf einem frischen Klon des Repositories in einer Cloud-Umgebung. Welche Einstellungen sie überhaupt erreicht, sagt die Dokumentation deutlich:
| Datei | Lokal | Cloud-Session |
|---|---|---|
~/.claude/settings.json | gilt | wird nicht gelesen |
.claude/settings.local.json | gilt | wird nicht gelesen |
.claude/settings.json (eingecheckt) | gilt | gilt, weil im Klon enthalten |
Wer die Einstellung also nur in seiner Benutzerdatei setzt und danach über die Weboberfläche arbeitet, hängt die Links weiter an. Das ist genau der Fall, in dem man sich für abgesichert hält und es nicht ist.
Die Einstellung gehört deshalb in die eingecheckte .claude/settings.json des Repositories. Der zweite Weg wäre eine Umgebungsvariable auf der Cloud-Umgebung, aber für die Attribution ist keine dokumentiert.
Warum die Entwarnung nicht ganz trägt
Ein Anthropic-Mitarbeiter hat am 17. August im Issue geantwortet: Der Link werde nur in Web- und Remote-Control-Sessions gesetzt und lasse sich abschalten. Danach wurde das Issue geschlossen. Das deckt sich mit der Dokumentation.
Der Einwand, der die Diskussion elf Tage später neu gezündet hat, setzt an einer anderen Stelle an. Ein Nutzer schreibt am 28. August, in aktuellen Versionen seien praktisch alle Sessions remote, er sehe /rc in jeder Sitzung. Ein zweiter bestätigt das. Wenn das zutrifft, ist die Einschränkung "nur Cloud und Remote Control" in der Praxis keine mehr.
Nachprüfbar ist der Punkt nur halb, und das ist selbst schon die Nachricht. Der zuständige Schlüssel heißt remoteControlAtStartup. Die Dokumentation beschreibt seinen Standardwert so: nicht gesetzt, dann folgt der Auto-Connect dem Admin-Standard der Organisation, sofern einer existiert, und sonst dem aktuellen Standard von Claude Code. Welcher Wert das ist, steht dort nicht.
Damit greifen zwei Voreinstellungen ineinander. Die eine ist dokumentiert (sessionUrl ist true), die andere ist es der Zahl nach nicht. Ob ein Team betroffen ist, lässt sich aus der Doku allein also nicht beantworten. Man muss es am eigenen Repository nachsehen:
git log --format="%H %(trailers:key=Claude-Session,valueonly)" -50
Kommen dabei URLs zurück, schreibt eure Installation die Links mit.
Wir haben das beim Schreiben dieses Artikels an unseren eigenen Repositories gemacht, und das Ergebnis war unangenehmer als erwartet. In einem Repo stehen 16 Commits mit Claude-Session-Trailer, alle längst gepusht. In einem zweiten vier, in einem dritten keiner. Eingeschaltet hat das niemand, aufgefallen ist es auch niemandem. Gemerkt haben wir es erst, weil wir für diesen Text nachgesehen haben.
Glück im Unglück: Die betroffenen Repositories sind privat, das eine öffentliche war sauber. Genau deshalb steht der Befehl hier oben. Die Frage "sind wir betroffen" beantwortet man in dreißig Sekunden, und die Antwort ist häufiger ja, als man denkt.
Was daran wirklich das Problem ist
Im Issue steht seit dem Wochenende auch der Vorwurf, das sei mit ziemlicher Sicherheit ein DSGVO-Verstoß. Das ist eine Nutzeraussage in einem GitHub-Kommentar, keine Bewertung durch eine Aufsichtsbehörde, und als solche trägt sie erst einmal nichts. Der prüfbare Kern darunter ist aber unabhängig davon vorhanden und deutlich konkreter.
Ein Commit ist nicht widerrufbar. Die URL wandert mit jedem Klon, jedem Fork und jedem Mirror weiter, sie steht bei öffentlichen Repositories dauerhaft im Netz, und sie überlebt jede spätere Änderung der Einstellung. Wer sie nach zwei Wochen bemerkt, bekommt sie nur noch mit einem Rewrite der Historie weg, und der ist in geteilten Repositories teuer.
Dazu kommt die Frage, worauf der Link eigentlich zeigt. Ein Entwickler beschreibt im Issue, dass er nach dem Fund erst ein zweites Konto anlegen musste, um überhaupt zu prüfen, ob die verlinkte Session für Fremde erreichbar ist. Genau diese Unklarheit ist das Problem: Der Link steht in einem Artefakt, das man mit anderen teilt, und die Zugriffsregeln dahinter kennt man aus dem Werkzeug heraus nicht.
Der zweite Punkt betrifft Auftragsarbeit. Wer für Kunden entwickelt, schreibt mit jedem solchen Commit einen Hinweis auf Werkzeug und Sitzung in fremde Repositories, und das kann Vertragsklauseln zum KI-Einsatz berühren, die man vorher hätte klären wollen.
Was Teams jetzt mitnehmen
Einordnung
Der Sachverhalt ist klein, und das Abschalten dauert eine halbe Minute. Interessant ist er trotzdem, weil er ein Muster zeigt, das wir bei Claude Code nicht zum ersten Mal sehen. Im Juli hatten wir versteckten Code beschrieben, der chinesische Nutzer per Steganografie markierte. Auch dort war das Ziel diskutabel, aber der eigentliche Aufreger war die Art der Einführung.
Die Parallele ist nicht der Datenschutz, sondern die Voreinstellung. Ein Werkzeug, das tief in den Entwicklungsprozess greift, schreibt an Artefakte, die dauerhaft und öffentlich sind, und die Entscheidung darüber fällt nicht am Arbeitsplatz. Anthropic hat die Einstellung nachgeliefert und dokumentiert sie sauber, das ist mehr als viele Anbieter tun. Was im Issue seit Mitte August unbeantwortet steht, ist die andere Frage: warum sie auf true steht.
Für die eigene Praxis lohnt sich daraus vor allem eine Gewohnheit. Nach jedem Update eines Agentenwerkzeugs einmal nachsehen, was es in Commits schreibt. Das ist billiger als die Frage, wie man einen Trailer wieder aus vierzig geteilten Forks bekommt.