Sessions beobachten Neu in 0.9.10
Ein Agent kann andere Sessions beobachten, statt immer wieder nach ihnen zu sehen. Er abonniert sie, macht mit seiner eigenen Arbeit weiter oder wartet, und OAR weckt ihn, wenn in den beobachteten Sessions etwas passiert: Eine Rückfrage wartet auf eine Antwort, ein Turn schlägt fehl, eine Session antwortet, ein Hintergrund-Task endet. Das Wecken ist eine kurze Nachricht, die OAR in die Konversation des beobachtenden Agents schreibt.
Typische Bitten:
- Einen Stapel betreuen. „Beobachte die drei Review-Sessions. Weck mich, wenn eine eine Rückfrage stellt oder fehlschlägt, und fass die Antworten zusammen, wenn alle fertig sind.“
- Auf eine lange Arbeit warten. „Starte den vollen Testlauf in einer Session und beobachte sie. Sag mir, wenn ihr Hintergrund-Task fertig ist, und sag es, wenn er fehlschlägt.“
- Einen anderen Rechner im Auge behalten. „Beobachte die nächtliche
Deploy-Session auf
build-und sag mir Bescheid bei Fehlern.“box
Die Sessions können auf diesem Relay liegen (mit eingeschalteten
Agent-Sessions) oder auf einem
gekoppelten Relay. Jeder Provider kann beobachten außer Claude Cloud und OpenAI Image, deren
Sessions nicht abonnieren können (siehe Nach Provider). Das
Tool selbst, subscribe von relay_, ist unter
Sessions beobachten in
der Referenz beschrieben; diese Seite erklärt, was du siehst und was du steuerst.
Was einen beobachtenden Agent weckt #
Ein Abonnement nennt die zu beobachtenden Sessions oder alle Sessions eines Relays, später angelegte eingeschlossen. Es kann darum bitten, benachrichtigt zu werden bei:
| Ereignis | In deinen Worten |
|---|---|
| Question (Rückfrage) | Eine beobachtete Session wartet auf eine Antwort oder eine Freigabe. Die Nachricht enthält die Frage und ihre Optionen. Neu in 0.9.16 Bei einer Frage, die nicht blockiert, erfährt das Abonnement später auch deine Antwort. |
| Error (Fehler) | Ein Turn ist fehlgeschlagen, ein Nutzungslimit wurde erreicht, oder der Agent-Prozess der Session ist abgestürzt. |
| Reply (Antwort) | Eine Session hat einen Turn beendet. Die Nachricht enthält den Anfang der Antwort. |
| Task started, finished, failed (Task gestartet, beendet, fehlgeschlagen) | Ein Hintergrund-Agent oder Shell-Task einer beobachteten Session ist gestartet (nur wenn das Abonnement danach fragt), abgeschlossen oder fehlgeschlagen. Ein Shell-Befehl, der mit einem anderen Code als null endet, gilt als fehlgeschlagen. |
| Stalled (Stillstand) | Eine Session ist still, obwohl sie noch arbeitet. |
| All idle (Alle untätig) | In den beobachteten Sessions läuft nichts mehr. |
Neu in 0.9.13 Ein Abonnement, das keine Ereignisse nennt, wird nicht von einem Shell-Befehl oder Monitor geweckt, der gut ausgegangen ist: Eine geschäftige Session beendet etwa jede Minute einen, und jeder würde den beobachtenden Agent einen Turn auf seinem ganzen Kontext kosten. Abgeschlossene Subagents und fehlgeschlagene Tasks wecken ihn weiterhin. Ein Agent, der jedem Befehl folgen muss, bittet um jedes Task-Ende. Früher angelegte Abonnements ohne genannte Ereignisse wechseln von selbst zu diesem Standard; solche, die ihre Ereignisse genannt haben, behalten sie.
Die genauen Ereignisnamen und die Optionen eines Abonnements (ein regulärer Ausdruck, auf den Antworten und Task-Ergebnisse passen müssen, Enden nach dem ersten Auslösen, die Ruhezeit, bevor stalled gemeldet wird) stehen in der Referenz.
Die eigene Konversation des beobachtenden Agents wird nie beobachtet, seine eigenen Turns können ihn also nicht wecken.
Ein Abonnement benachrichtigt nur
Es genehmigt nichts und beantwortet nichts. Die Rückfrage einer beobachteten Session bleibt offen, bis du oder der Agent, der sie beantworten darf, das tut, genau wie zuvor. Eine Freigabekarte in einer beobachteten Session kannst nur du beantworten; das Ereignis sagt das.
Die Freigabekarte #
Wenn ein Agent in einer Konversation zum ersten Mal Sessions eines Relays abonniert, muss er dich fragen. In dieser Konversation erscheint eine Freigabekarte:
This agent wants to watch “Review: server/” (3f9c…), “Review: web/” (a12b…) and be woken by their events.
Events: question_asked, error, turn_end, subagent_finished, task_failed, stalled, all_idle
| Deine Wahl | Was passiert |
|---|---|
| Allow (Erlauben) | Das Abonnement wird angelegt. Spätere Abonnements der Konversation auf Sessions desselben Relays brauchen keine neue Karte. |
| Deny (Ablehnen) | Das Abonnement wird abgelehnt. Der Agent erfährt es und macht ohne weiter. |
Sonderfälle:
- Alle Sessions. Ein Abonnement auf
allwird immer ausgeschrieben („ALL sessions of this relay, including ones created later“; Neu in 0.9.16 mit „except N it leaves out“, wenn es Sessions auslässt). War die erste Karte nicht fürall, fragt ein späteres Abonnement aufallerneut. War sie es, deckt Allow jedes spätere Abonnement ab,alleingeschlossen. - Ein gekoppeltes Relay. Die Karte nennt das Relay. Jedes Relay wird einzeln gefragt, und auf dem anderen Relay wird nichts gefragt.
- Übernehmen. Ein Agent, der einen anderen beobachtenden Agent ersetzt,
kann jedes Abonnement des alten übernehmen. Das fragt immer, egal wie viele
Karten du vorher erlaubt hast. Die Karte sagt, wie viele Abonnements wandern
und aus welcher Session; die alte Session bekommt deren Ereignisse nicht mehr,
und die Abonnements behalten ihre Einstellungen. Dein Allow zählt auch als
Freigabe für Abonnements auf den beteiligten Relays,
alleingeschlossen, wenn eines davon alle Sessions beobachtet hat.
Neu in 0.9.16 Die Karte nennt auch die Optionen eines Abonnements: once (einmal), heartbeat every N min (Heartbeat alle N Min.), digest every N min (Zusammenfassung alle N Min.) und quiet HH:MM–HH:MM (Ruhezeit HH:MM–HH:MM) mit der Zeitzone.
Die Karte erscheint in jedem Relay-Modus: Sie hängt nicht von ask, plan oder agent ab. Die Freigabe gehört zur Konversation und bleibt über einen Neustart des Relays erhalten.
Was du siehst #
Der Chip und seine Liste #
Solange eine Konversation Abonnements hat, zeigt ihr Header watching N sessions (beobachtet N Sessions) und zählt dabei jede einzelne Session, die sie beobachtet. Mit einem Abonnement auf alle Sessions lautet er watching all sessions (beobachtet alle Sessions), gefolgt von (+N listed) (+N aufgeführt), wenn die Konversation zusätzlich Sessions mit Namen nennt. Neu in 0.9.16 Ein kleiner Hinweis daneben zeigt die Optionen eines Abonnements, digest N min (Zusammenfassung N Min.) oder quiet HH:MM–HH:MM, höchstens zwei. Klick auf den Chip, um die Liste zu öffnen: eine Zeile pro Abonnement, mit den Sessions (oder dem Relay), den Ereignissen und ob es once ist oder einen Heartbeat hat, Neu in 0.9.16 eine Zusammenfassung, Ruhezeiten oder ausgelassene Sessions: N left out (N ausgelassen). Unsubscribe (Abbestellen) beendet dieses Abonnement sofort, ohne den Agent zu fragen.
Die Badge „watched“ #
Eine Session, die eine andere Konversation mit Namen beobachtet, trägt eine Badge watched (beobachtet) in der Session-Liste und in ihrem Header. Fahr mit der Maus darüber, um zu sehen, wer beobachtet; ein Agent auf einem gekoppelten Relay erscheint als seine Session und sein Relay. Ein Abonnement auf alle Sessions fügt in der Session-Liste keine Badge hinzu, nur im Header jeder Session. Ein Abonnement von dir auf einem gekoppelten Relay fügt auf deiner Seite keine Badge hinzu. Neu in 0.9.16 Eine Session, die ein Abonnement auf alle auslässt, zeigt dafür keine Badge.
Ereigniszeilen #
Im Verlauf des beobachtenden Agents ist ein Ereignis eine kompakte Zeile mit der Markierung relay event (Relay-Ereignis), nie eine deiner Nachrichten. Sie ist zu einer Zeile zugeklappt, etwa:
relay event 3 events · question, reply
Öffne sie, um die Zeilen zu lesen, zum Beispiel:
[relay event] session "Review: server/" (3f9c…): turn_end (done) "Found 4 places without input checks: …"
Eine Zeile mit einer Rückfrage oder einem Fehler bleibt offen. Eine Zeile, die Ereignisse sammelt, die das Stundenlimit zurückgehalten hat, beginnt mit Digest (Zusammenfassung); Neu in 0.9.16 ebenso eine, die die Zusammenfassung eines Abonnements gesammelt hat, und eine, die während der Ruhezeiten zurückgehalten wurde, beginnt mit After quiet hours (Nach den Ruhezeiten). Eine Zeile mit der Markierung replayed (erneut zugestellt) enthält Ereignisse, die ein gekoppeltes Relay aufbewahrt hat, während die Verbindung unterbrochen war.
Hinter der Zeile steckt eine Nachricht, die mit einer Zeile beginnt, die sagt, dass sie automatisch ist, nicht von dir, und dass sie nichts genehmigt. Der Agent liest diese Zeile auch.
Wenn der beobachtende Agent beschäftigt ist #
- Untätig. Die Nachricht startet einen neuen Turn.
- Mitten in einem Turn. Bei Claude, bei DeepSeek und bei der SDK-Engine von GitHub Copilot und OpenAI wird die Nachricht in den laufenden Turn nachgesteuert. Bei den anderen Providern wartet sie und wird zum nächsten Turn. Ereignisse, die ankommen, während eine Nachricht noch wartet, werden ihr hinzugefügt, ein beschäftigter beobachtender Agent bekommt also eine Folgenachricht, nicht eine pro Ereignis.
Taktung #
Jedes Wecken kostet den beobachtenden Agent einen Turn, deshalb begrenzt OAR es.
- Bündeln. Ereignisse innerhalb von 30 Sekunden kommen als eine Nachricht an.
- Stundenlimit. Nach 20 Weckvorgängen in der letzten Stunde wird der Rest zurückgehalten und alle 10 Minuten als Zusammenfassung gesendet. Das Wecken in 30-Sekunden-Bündeln setzt wieder ein, sobald weniger als 20 Weckvorgänge in die letzte Stunde fallen.
- Nie zurückgehalten. Eine Rückfrage, Neu in 0.9.16 deine Antwort auf einen Ask und ein Fehler kommen immer sofort, auch über das Limit hinaus. Sie zählen trotzdem dazu.
- Stalled. Eine Session gilt als stillstehend, wenn sie 15 Minuten lang (oder so lange, wie das Abonnement gewählt hat) still war, während ein Turn oder Hintergrund-Task noch läuft. Das wird einmal pro stiller Phase gemeldet. Eine Session, die auf eine Antwort wartet, steht nicht still: Ihre Rückfrage wurde schon gemeldet.
- Heartbeat. Hat der Agent einen verlangt, bekommt er in diesem Abstand eine Nachricht, solange ein beobachteter Turn oder Task läuft, und keine, solange alles untätig ist. Er sagt dem beobachtenden Agent, dass sein Beobachten funktioniert. Ein Heartbeat wird nicht für die Zusammenfassung zurückgehalten und zählt nicht zum Limit.
Dieselben Zahlen stehen unter Wie Ereignisse ankommen in der Referenz.
Weniger Weckvorgänge Neu in 0.9.16 #
Ein Agent kann pro Abonnement um weniger Weckvorgänge bitten. Eine Rückfrage und ein Fehler kommen weiterhin sofort; alles andere wartet.
| Option | Was sie bewirkt |
|---|---|
Zusammenfassung (digest_, 1 bis 1440) |
Die Ereignisse des Abonnements kommen alle N Minuten als eine Nachricht, die nächste frühestens N Minuten nach der letzten. |
Ruhezeiten (quiet_, zum Beispiel {"from":"23:) |
Ein tägliches Zeitfenster in einer Zeitzone, das über Mitternacht reichen darf und den Zeitumstellungen folgt. Was darin passiert, kommt als eine Nachricht, wenn das Fenster endet, markiert als während der Ruhezeiten zurückgehalten. Darin wird kein Heartbeat gesendet. |
Sessions auslassen (exclude, bis zu 50 Session-IDs) |
Ein Abonnement auf alle Sessions ignoriert diese, auch für „nichts läuft mehr“ und den Heartbeat. |
In der Nacht, in der die Uhren zurückgestellt werden und die Endzeit zweimal kommt, endet das Fenster beim ersten Mal und wird in der wiederholten Stunde nicht erneut betreten; in der Nacht, in der sie vorgestellt werden und die Endzeit überspringen, endet es im Moment des Sprungs. Eine Einschränkung: Eine Startzeit innerhalb der wiederholten Stunde startet das Fenster beim ersten Durchlauf, und beim zweiten Durchlauf zählen die Minuten vor der Startzeit als außerhalb.
Kein Echo. Schickt der beobachtende Agent selbst einer Session einen Prompt
und wartet auf die fertige Antwort (über send, create_ oder ein
späteres wait), weckt ihn die Antwort dieses Turns nicht ein zweites Mal.
Ihre Fehler und Rückfragen tun es weiterhin, und ein Prompt, auf den er nicht
gewartet hat, weckt ihn wie zuvor.
Zurückgehaltene Ereignisse überstehen einen Neustart des Relays, und das
Stundenlimit gilt zusätzlich weiter. Der Agent sieht mit list_, wie viele Ereignisse jedes Abonnement
zurückhält und wann sie fällig sind. Die Details stehen unter
Weniger Weckvorgänge in der Referenz.
Wie lange ein Abonnement hält #
Ein Abonnement endet, wenn:
- der Agent oder du es abbestellt;
- die Konversation des beobachtenden Agents archiviert oder gelöscht wird;
- eine beobachtete Session archiviert oder gelöscht wird. Ein Abonnement, das mehrere Sessions auflistet, behält die anderen und endet mit der letzten;
- es ein Abonnement mit once war und ausgelöst hat (mit einem regulären Ausdruck: beim ersten Treffer);
- bei einem gekoppelten Relay die Kopplung entfernt wird: Die Abonnements auf jenem Relay enden sofort.
Abonnements und noch nicht zugestellte Ereignisse überstehen einen Neustart des Relays.
Eine Konversation kann 20 Abonnements gleichzeitig haben.
Sessions auf einem gekoppelten Relay #
Eine Session auf einem gekoppelten Relay zu beobachten braucht dasselbe wie
jeder Aufruf von relay_ dort:
- Das Relay ist in der Konversation freigeschaltet;
- seine Stufe unter Agents may (Agents dürfen) für dieses Relay ist mindestens Lesen (was ein gekoppeltes Relay erlaubt);
- das andere Relay nimmt Agents anderer Relays an: Accept prompts from other relays' agents (Prompts von Agents anderer Relays annehmen).
Die Karte wird hier gefragt, wie oben beschrieben. Die Kopplung muss nur in einer Richtung bestehen. Dein Relay holt die Ereignisse alle paar Sekunden vom anderen ab, und ihre Zeilen beginnen mit dem Namen des anderen Relays:
[relay event] build-box · session "Nightly deploy" (77aa…): turn_end (done) "Deployed. The health check is green."
Antwortet das andere Relay eine Minute lang nicht, gilt die Verbindung als
verloren. Das andere Relay bewahrt auf, was passiert: bis zu 500 Ereignisse
pro Abonnement, für bis zu 7 Tage. Wenn es wieder antwortet, bringt eine Zeile
mit der Markierung replayed sie herein, Rückfragen und Fehler zuerst,
zwischen einer Zeile link_ und einer Zeile link_. Ist mehr
passiert, als es aufbewahren konnte, sagt die letzte Zeile, wie viele verworfen
wurden. Ein Abonnement, das 7 Tage lang niemand abgeholt hat, endet dort.
Neu in 0.9.16 Erneut zugestellte Ereignisse halten sich wie alle anderen an die
Zusammenfassung und die Ruhezeiten des Abonnements; die letzte Zeile sagt dann,
wie viele davon später kommen.
Neu in 0.9.16 Die Zusammenfassung und die Ruhezeiten eines Abonnements auf ein
gekoppeltes Relay gelten hier, wo der beobachtende Agent ist; dem anderen Relay
wird mitgeteilt, welche Sessions ausgelassen werden. Ein gekoppeltes Relay mit
einem älteren OAR kennt exclude nicht: Dein Relay verwirft die Ereignisse
dieser Sessions trotzdem, aber jenes Relay zählt sie für „nichts läuft mehr“,
für Stillstände und in der Liste des Heartbeats mit.
Ein gekoppeltes Relay, auf dem ein älteres OAR läuft, antwortet, dass es ein Update braucht.
Nach Provider #
Welche Sessions sich beobachten lassen, hängt nicht vom Provider ab: Jede Session des Relays kann es. Was sich unterscheidet, ist die Session, die beobachtet.
| Provider der beobachtenden Session | Kann abonnieren | Ereignis, während ein Turn läuft |
|---|---|---|
| Claude | ja | wird in den laufenden Turn nachgesteuert |
| DeepSeek Neu in 0.9.17 | ja | wird in den laufenden Turn nachgesteuert |
| GitHub Copilot, OpenAI, SDK-Engine | ja | wird in den laufenden Turn nachgesteuert |
| GitHub Copilot, OpenAI, Extension-Engine | ja | wird zum nächsten Turn |
| Cursor | ja | wird zum nächsten Turn |
| Grok | ja | wird zum nächsten Turn |
| Claude Cloud | nein: Es hat kein relay_ |
|
| OpenAI Image | nein: Es ruft die Images API auf und führt keinen Agent aus |
Welche Provider relay_ überhaupt bekommen, steht unter
Agent-Tools.
Sessions, die vor dem Update gestartet sind
Ein Session-Worker baut seine Tools, wenn er startet. Eine Konversation, deren
Agent schon lief, als du auf 0.9.10 aktualisiert hast, hat kein subscribe,
bis sie neu gestartet wird: Kill session (Session beenden) auf einer untätigen Session genügt.