Alle Seiten
Auf dieser Seite

Eine Konversation teilen

Teilen gibt einer Konversation einen öffentlichen, schreibgeschützten Link. Jeder, dem du ihn schickst, kann den Verlauf ohne Anmeldung im Browser lesen und verfolgt die Konversation, während sie weitergeht. Er kann nichts senden, stoppen, ändern und nichts anderes auf deinem Relay öffnen. Du bestimmst, was der Link zeigt: Einzelne Nachrichten lassen sich ausblenden, und die Pfade des Relay-Hosts werden herausgefiltert. Du selbst siehst immer die ganze Konversation, und Settings → Sharing (Einstellungen → Teilen) listet jeden Link mit einem Protokoll, wer ihn geöffnet hat.

Der Link ist öffentlich

Jeder, der die Adresse hat, kann den geteilten Verlauf lesen, und sie kann weitergegeben werden. Das Relay fragt nicht, wer ihn öffnet. Behandle sie wie ein Passwort für diese eine Konversation, und lies die Konversation mit Preview as shared (Ansicht wie geteilt), bevor du sie verschickst.

Den Link erstellen #

  1. Öffne die Konversation.
  2. Öffne ihr ⋯-Menü und wähle ➡️ Share conversation (Konversation teilen).

Es gibt keinen Dialog. Das Relay erstellt den Link und kopiert ihn in deine Zwischenablage, und ein kurzer Hinweis sagt das:

Share link copied to clipboard.

Lässt der Browser die Seite nicht in die Zwischenablage schreiben, zeigt der Hinweis stattdessen die Adresse selbst, und du kopierst sie von dort.

Die Adresse sieht aus wie https://relay.example.com/shared/, gefolgt von einem langen zufälligen Token (64 Hexadezimalzeichen). Der Host ist der, über den du das Relay erreicht hast; hinter einem Proxy auf einem anderen Rechner ist es der, den der Proxy meldet, sobald das Relay diesem Proxy vertraut. Wird das Relay unter einem Unterpfad ausgeliefert (remotePath in der config.json), ist der Unterpfad Teil der Adresse.

Wählst du ➡️ Share conversation erneut, entsteht kein zweiter Link: Solange die Konversation einen aktiven Link hat, bekommst du dieselbe Adresse zurück. Jede Konversation kann geteilt werden, auch eine archivierte.

Deine geteilten Links Neu in 0.9.11 #

Settings → Sharing listet jede Konversation, die gerade einen Link hat, mit dem Zeitpunkt, an dem sie geteilt (und erneuert) wurde, wann sie zuletzt geöffnet wurde, wie oft und von wie vielen Betrachtern. Ein Klick auf den Titel öffnet die Konversation. Jede Zeile hat:

Button Was er tut
Copy link (Link kopieren) Kopiert den Link.
Renew link (Link erneuern) Gibt der Konversation nach einer Bestätigung einen neuen Link und kopiert ihn. Der alte Link funktioniert sofort nicht mehr. Das Zugriffsprotokoll geht auf den neuen Link über. Nutze es, wenn ein Link weiter gekommen ist, als er sollte.
Stop sharing (Teilen beenden) Beendet den Link nach einer Bestätigung. Er funktioniert sofort nicht mehr, auch für alle, die gerade lesen, und sein Zugriffsprotokoll wird gelöscht.
Access log (Zugriffsprotokoll) Klappt das Zugriffsprotokoll des Links auf.

Solange die offene Konversation geteilt ist, hat ihr ⋯-Menü außerdem ⛔ Stop sharing, das ebenfalls vorher fragt.

Nach dem Beenden oder Erneuern #

Ein beendeter oder erneuerter Link antwortet mit einem schlichten 404, die Seite wie die Daten, genau wie ein Link, den es nie gab. Eine geteilte Seite, die darauf noch offen ist, hört bei ihrer nächsten Aktualisierung auf, innerhalb von etwa einer Sekunde. Wählst du nach dem Beenden erneut ➡️ Share conversation, entsteht ein neuer Link mit einem neuen Token; eine alte Adresse kommt nie zurück.

Dasselbe geht ohne die App, mit dem Auth-Token (Zugriff) als Header, z. B. um das Teilen aus einem Skript zu beenden:

curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN" \
  https://relay.example.com/api/conversation/CONVERSATION_ID/share

POST an dieselbe Adresse erstellt den Link, POST …/share/renew erneuert ihn, und GET /api/shares listet sie.

Das Zugriffsprotokoll #

Jede Zeile der Liste klappt zu ihrem Zugriffsprotokoll auf, das neueste zuerst. Ein Eintrag ist ein Öffnen der geteilten Seite, nicht jede Aktualisierung: Die Seite lädt die Konversation etwa jede Sekunde neu, und nur das erste Laden zählt. Ein zweites Laden durch denselben Betrachter innerhalb von 10 Sekunden zählt einmal. Ein Betrachter, der nach 30 Minuten ohne Lesen zurückkommt, zählt erneut, z. B. eine Seite, die in einem Hintergrund-Tab geschlafen hat. Ein Skript, das den Link ohne die Seite liest, zählt genauso, sodass niemand den Link ohne Eintrag liest.

Teil eines Eintrags Woher er kommt
Zeit Wann die Seite geöffnet wurde.
IP-Adresse Die Adresse des Betrachters, wie das Relay sie sieht. Hinter einem Proxy ist das die Adresse, die der Proxy meldet, wenn das Relay ihm vertraut; sonst hat jeder Betrachter die Adresse des Proxys. IP not stored (IP nicht gespeichert), wenn Store viewer IP addresses (IP-Adressen der Betrachter speichern) aus war.
Land Der Ländercode, den ein Cloudflare Tunnel hinzufügt, nur von einem vertrauenswürdigen Proxy übernommen. Sonst leer.
viewer … Ein kurzer, mit einem Schlüssel gebildeter Hash über Adresse und Browser, gleich für jedes Öffnen durch denselben Betrachter, auch wenn die Adresse nicht gespeichert wird.
Browser Der User-Agent, den der Browser des Betrachters gesendet hat, als Text.

Die Liste zeigt die neuesten 200 Aufrufe und sagt, wie viele es insgesamt sind.

Das Protokoll geht beim Erneuern des Links mit über. Es bleibt erhalten, solange der Link geteilt ist, und wird gelöscht, wenn du das Teilen beendest oder die Konversation löschst.

Store viewer IP addresses unter Access log (standardmäßig an) bestimmt, ob neue Einträge die Adresse behalten. Ausgeschaltet behalten neue Einträge keine, und auch die eigene Log-Zeile des Relays für einen geteilten Abruf nicht. Sind schon Adressen gespeichert, fragt OAR, ob sie ebenfalls entfernt werden sollen: Remove them (Entfernen) löscht sie aus jedem Eintrag des Zugriffsprotokolls und aus dem Status-Log geteilter Abrufe, die Einträge selbst bleiben; Keep them (Behalten) lässt sie stehen. Die Einstellung gilt für alle Links des Relays.

Pfade und Dateinamen Neu in 0.9.11 #

Eine geteilte Ansicht trägt die Pfade des Relay-Hosts nicht vollständig. Das Relay filtert alles, was es an einen Link ausliefert, nach der Einstellung Paths and file names (Pfade und Dateinamen) in Settings → Sharing:

Option Ein Betrachter sieht für /srv/projects/shop/src/cart.js
Show every path and file name (Alle Pfade und Dateinamen zeigen) den Pfad, wie er ist
Hide the path, show the file name (Pfad ausblenden, Dateinamen zeigen) (der Standard) cart.js
Hide paths and file names (Pfade und Dateinamen ausblenden) ‹hidden›

Die Einstellung gilt für jeden Link des Relays, ab der nächsten Aktualisierung einer geteilten Seite. Deine eigene Ansicht zeigt immer alles.

Was der Filter erfasst:

  • Immer: Pfade in Tool-Argumenten, Dateierwähnungen (@file:, @folder:, auch relative), Namen von Anhängen, Aufzeichnungen von Subagents und die Dateiköpfe von Diffs.
  • In freiem Text, also in Antworten, Überlegungen, Tool-Ausgaben und Codeblöcken: die Ordner, die das Relay kennt (der Arbeitsordner der Konversation, die Workspace-Wurzeln, dein Home-Ordner, die eigenen Daten- und Upload-Ordner des Relays) mit allem, was darauf folgt, absolute Windows- und Unix-Pfade, ~/…-Pfade und dein Benutzername zwischen Trennzeichen. Das geschieht nach bestem Bemühen.
  • Nicht erfasst: relative Pfade in freiem Text (src/cart.js), Pfade mit nur einer Ebene wie /tmp, Webadressen und alles innerhalb eines Bildes.

Ansicht wie geteilt #

🔍 Preview as shared im ⋯-Menü der Konversation öffnet die Konversation so, wie ihr Link sie zeigt, ohne einen Link zu erstellen und ohne Eintrag in einem Zugriffsprotokoll. Grün markiert, was Betrachter statt eines Pfads bekommen. Bernsteinfarben markiert, was noch wie einer aussieht: ein relativer Pfad mit Dateiendung, ein Stück home/… oder Users/…, dein Benutzername als Wort und mit Show every path and file name jeder absolute Pfad. Lies die bernsteinfarbenen Markierungen und blende eine Nachricht aus, die mehr verrät, als sie sollte.

Beim Archivieren, Löschen oder Kompaktieren #

  • Archive (Archivieren) beendet den Link nicht: Eine archivierte Konversation bleibt über ihn lesbar, und das Herausholen aus dem Archiv ändert nichts.
  • Delete (Löschen) beendet ihn und löscht sein Zugriffsprotokoll: Der Link antwortet mit 404.
  • Kompaktieren (siehe Kompaktieren) archiviert die Konversation und setzt sie in einer neuen fort. Der Link bleibt bei der alten, archivierten Konversation und zeigt weiter, was er gezeigt hat. Die neue Konversation hat keinen Link, sie ist also nicht geteilt, bis du sie teilst.

Zum Archivieren und Löschen siehe Die Konversationsliste.

Was ein Betrachter sieht #

Der Link öffnet die Konversation im normalen Chat-Layout, ohne Seitenleiste und ohne Eingabebereich. Der Titel ist der Titel der Konversation.

Teil der Konversation In der geteilten Ansicht
Deine Nachrichten und die Antworten Angezeigt, mit gefilterten Pfaden.
Zeilen zur Tool-Aktivität und Überlegungen Angezeigt, mit gefilterten Pfaden.
Anhänge und Bilder Angezeigt, auch von einem Agent erzeugte Bilder, unter einem gefilterten Namen. Der Betrachter kann die an Nachrichten öffnen, die für ihn sichtbar sind.
Zeilen von Subagents Angezeigt. Neu in 0.9.11 Eine Zeile öffnet die Aufzeichnung des Subagents, schreibgeschützt, ohne Stop (Stoppen) und gefiltert wie der Rest.
Karten von Previews Nur mit ihrer Beschriftung angezeigt, ohne den Link. Ein Preview-Link, der irgendwo im Text zitiert wird, lautet [preview link removed]. Eine geteilte Konversation veröffentlicht die App in der Preview nicht.
Zeilen von Relay-Ereignissen (aus dem Beobachten von Sessions) Als Ereigniszeilen angezeigt. Der Text nennt die beobachtete Session.
Nachrichten, die von einem anderen Relay kamen Mit einem Badge angezeigt. Die Adresse des Relays und die ID der anderen Konversation werden entfernt; sein Name, der Titel der anderen Konversation, der Provider und das Modell bleiben.
Rückfrage-Karten und Plan-Boards Nicht angezeigt. Sie gehören nicht zu den Daten, die ein Betrachter bekommt, ein Betrachter sieht also nur, was der Agent um sie herum geschrieben hat.
Bilder und Dateilinks im Nachrichtentext, die auf Dateien auf deinem Relay zeigen Sie laden für einen Betrachter nicht: Diese Dateien brauchen deine Anmeldung.
Nachrichten, die du ausgeblendet hast Gar nicht gesendet.
Pins und die 🙈-Liste Nicht angezeigt: Sie gehören dir.
Arbeitsordner, Details zu Session und Runtime Nicht gesendet.
Suche, der Kontext-Button, die Auswahl für Modell und Modus, Vollbild, App-Installation Nicht verfügbar.

Die Daten, die die Seite lädt, enthalten außerdem das Modell, das für jede Nachricht verwendet wurde. Die geteilte Seite bittet Suchmaschinen, sie nicht zu indexieren.

Live-Updates #

Die geteilte Seite lädt die Konversation alle 0,9 Sekunden neu, solange sie im Vordergrund ist, sodass neue Nachrichten erscheinen, während die Konversation weitergeht. Sie öffnet keine Live-Verbindung zum Relay, und eine Seite in einem Hintergrund-Tab lädt nicht neu. Ein Betrachter, der zum Lesen nach oben scrollt, wird nicht ans Ende gezogen.

Zuschauer #

Jede offene geteilte Seite meldet dem Relay alle 12 Sekunden, dass sie da ist. Wie viele gerade lesen, siehst du als Tooltip am Titel der Konversation in deiner eigenen Ansicht, z. B. 2 watchers currently reading this conversation. Die Anzeige ist nur da, solange mindestens einer liest. Ein Betrachter, der 45 Sekunden lang still war, fällt aus der Zählung.

Einzelne Nachrichten ausblenden #

Jede Nachricht in deiner eigenen Ansicht hat einen Button Hide (Ausblenden), der erscheint, wenn du mit der Maus über die Nachricht fährst (auf Touchscreens tippst du auf die Nachricht). Drück ihn, und die Nachricht verschwindet aus der geteilten Ansicht. Sie wird nicht gelöscht. Jede Nachricht wird einzeln ausgeblendet: Das Ausblenden deiner Frage blendet die Antwort darauf nicht aus, und umgekehrt. Tool-Aktivität und Überlegungen einer Antwort gehen mit der Antwort.

  • In deiner Ansicht bleibt die Nachricht vollständig und ist mit Hidden from shared viewers markiert. Ihr Button lautet jetzt Unhide (Einblenden); drück ihn, und die Nachricht ist für Betrachter wieder sichtbar.
  • Ein Betrachter sieht an ihrer Stelle nichts. Die Nachricht fehlt im Verlauf einfach. Auch die Anhänge einer ausgeblendeten Nachricht lassen sich über den Link nicht abrufen, außer dieselbe Datei hängt an einer sichtbaren Nachricht.
  • Ein Hinweis bestätigt jede Änderung: Message hidden from shared viewers. oder Message visible to shared viewers.
  • Hide wird nicht angeboten für eine Nachricht, die noch in der Queue steht, oder für die Nachrichten des laufenden Turns. Blende sie nach dem Turn aus.

Eine ausgeblendete Nachricht ist vor jedem Link der Konversation verborgen, auch vor einem später erstellten neuen Link. Die Markierung übersteht einen Neustart des Relays.

Die 🙈-Liste Neu in 0.9.11 #

Solange eine Konversation Nachrichten ausblendet, sitzt ein Button 🙈 mit ihrer Anzahl neben 📍 in ihrem Header (nie in der geteilten Ansicht). Er öffnet die Liste der ausgeblendeten Nachrichten, wie bei den angepinnten:

  • Eine Zeile springt zu ihrer Nachricht, auch zu einer weit oben im Verlauf, und hat Unhide.
  • Unhide all (Alle einblenden) fragt vorher. Eine Nachricht, deren Turn noch läuft, bleibt ausgeblendet, und die Liste nennt sie.
  • Die Anzahl und die Liste umfassen auch Nachrichten, die noch nicht geladen sind, und andere Tabs und Geräte übernehmen eine Änderung ohne Neuladen.

Was ein Betrachter tun kann #

Das ⋯-Menü in der geteilten Ansicht hat einen Eintrag, ☀️ Day mode (Tagmodus) oder 🌙 Night mode (Nachtmodus), der das Theme der Seite für diesen Betrachter umschaltet. Darüber hinaus kann der Betrachter im Verlauf scrollen, frühere Nachrichten laden, eingeklappte Aktivität öffnen, Aufzeichnungen von Subagents öffnen und Anhänge öffnen. Das Eingabefeld ist deaktiviert und zeigt Shared conversation (read-only) (Geteilte Konversation, nur lesen). Nichts, was ein Betrachter tut, ändert die Konversation.

Grenzen #

Gleichzeitig gezählte Betrachter pro Konversation 200 (sharedPresenceMaxPerConversation).
Gleichzeitig gezählte Betrachter insgesamt 5000 (sharedPresenceMaxGlobal).
Ablauf Keiner. Ein Link funktioniert, bis du das Teilen beendest, ihn erneuerst oder die Konversation löschst.

Beide Limits stehen in der config.json. Ist ein Limit erreicht, fällt der Betrachter, der am längsten untätig war, aus der Zählung, um Platz für einen neuen zu machen. Die Limits begrenzen die Zählung, also die Zahl, die du als Zuschauer siehst; die Abfrage des Verlaufs selbst prüft sie nicht, ein Betrachter jenseits der Zählung kann also trotzdem lesen.

Das Relay erreichen #

Die geteilte Seite und ihre Bilder werden von deinem Relay ausgeliefert, nicht von oar.sh oder einem anderen Dienst. Ein Betrachter muss die Adresse des Relays von dort erreichen können, wo er ist. Ein Relay, das nur auf deinem eigenen Rechner lauscht (localhostOnly), kann niemand sonst öffnen. Um über dein Netzwerk hinaus zu teilen, erreichst du das Relay über einen Tunnel.

Hat der Tunnel Zugriffsregeln, gelten sie auch für den geteilten Link. Mit einer Cloudflare-Access-Anwendung über dem Hostnamen werden Betrachter zur Anmeldung aufgefordert, und der Link funktioniert für sie nicht, außer die Anwendung lässt /shared/* und /api/shared/* ohne Login durch. Leg auch keine Cache-Regel auf /api/shared/*: Die Seite lädt diese Adresse neu, um der Konversation zu folgen, und eine zwischengespeicherte Antwort würde weiter einen alten Stand zeigen.

Nach Provider #

Nichts unterscheidet sich nach Provider. Teilen liest die gespeicherte Konversation, es funktioniert also genauso für Chats mit GitHub Copilot, OpenAI, Claude, Claude Cloud, Cursor, Grok und DeepSeek und für Chats mit OpenAI Image, deren erzeugte Bilder über den Link ausgeliefert werden. Neu in 0.9.11 Eine Antwort trägt den roten Chip ran on … in der geteilten Ansicht nur, wenn sie wirklich auf einem anderen Provider lief als dem der Konversation.

Wenn es nicht funktioniert #

Was du siehst Ursache und Lösung
Der Link antwortet mit 404 Das Teilen wurde beendet, der Link wurde erneuert, oder die Konversation wurde gelöscht. Settings → Sharing listet die Links, die funktionieren.
Der Betrachter wird zur Anmeldung aufgefordert oder sieht einen alten Stand Cloudflare Access oder eine Cache-Regel vor dem Relay. Siehe Das Relay erreichen.
Jeder Eintrag des Zugriffsprotokolls hat dieselbe Adresse Ein Proxy auf einem anderen Rechner, dem das Relay nicht vertraut. Setze trustProxy.
Ein Pfad erscheint noch in der geteilten Ansicht Er ist relativ oder steht in einem Bild. Prüfe mit Preview as shared und blende die Nachricht aus.

Zum Verlauf, den der Betrachter liest, siehe Den Verlauf lesen.