Dokumente, Sprache, Video, Benachrichtigungen, Sessions und Session-Nachrichten
Der Rest des hbcode-Namensraums: Erklärvideos mit Sprechertext, Sprache und Videoanalyse mit Ihrem Gemini-Schlüssel, Push-Meldungen über den Relay, Session-Verwaltung und Nachrichten zwischen Sessions.
Gegen den Quellcode geprüft am 5. Oktober 2026
Auf dieser Seite
Die Tools, die der Agent aufrufen kann
- Ein Katalogbuild_app_capabilities
Fünf Tools stehen immer in der Liste: use_user_browser, maintain_sessions, manage_sessions und send_session_message. Ein gespeicherter Gemini-Schlüssel ergänzt synthesize_speech, create_explainer_video und extract_video_context. Desktop- und Telefon-Benachrichtigungen ergänzen send_mobile_notification.
- Codex-ListedynamicTools
Der Desktop sendet die Liste, wenn ein Thread startet. Die Anfrage thread/resume hat kein Feld dafür, deshalb behält eine fortgesetzte Session die Tools, mit denen sie begonnen hat.
- Claude-ListeappCapabilities
Der Desktop baut die Liste für jeden Run neu und sendet sie in der Anfrage open. Der Agent-Host registriert sie als SDK-MCP-Server hbcode.
- Prüfung bei jedem Aufrufhas_gemini_api_key · show_notifications
Ein Handler liest den Schlüssel oder die Einstellung bei jedem Aufruf neu. Ein Tool, das ein Codex-Thread noch auflistet, schlägt sofort fehl, nachdem Sie den Schlüssel gelöscht oder die Benachrichtigungen ausgeschaltet haben.
Codex und Claude teilen sich einen Tool-Katalog und einen Satz Desktop-Handler. Die Funktion build_app_capabilities erstellt die Liste. Fünf Tools stehen immer darin: use_user_browser, maintain_sessions, manage_sessions und send_session_message. Desktop- und Telefon-Benachrichtigungen ergänzen send_mobile_notification. Ein gespeicherter Gemini-Schlüssel ergänzt synthesize_speech, create_explainer_video und extract_video_context. Die volle Liste hat 8 Tools. Die Agenten unterscheiden sich darin, wann sie die Liste bekommen und wie ein Aufruf den Desktop erreicht.
| Schritt | Codex | Claude |
|---|---|---|
| Die Liste trifft ein | Als dynamic | Als app |
| Eine Einstellung ändert sich später | Der Thread behält seine erste Liste. Nur eine neue Codex-Session sieht die Änderung. | Der nächste Run derselben Session sieht die Änderung. |
| Ein Aufruf trifft ein | Die Anfrage item/ | Das Host-Ereignis tool |
| Session und Run des Aufrufs | Der Desktop liest thread | Der Desktop bindet die Session, den Run und das Projektverzeichnis des Runs, dem der Host gehört. Ein Ereignis, das session |
| Identität des Aufrufs | call | tool |
Die Argumente des Modells wählen nie die Session oder den Run. Ein Codex-Thread ohne Session-Link erhält den Tool-Fehler „is not linked to a HB Code session yet. Try the call again.“ Codex-Threads aus älteren Versionen senden noch sessionId, runId und projectDirectory als Argumente. Das Browser-Tool ignoriert sie.
Der Desktop führt Tool-Aufrufe von Claude als eigene Tasks neben dem Leser der Host-Ereignisse aus. Ein langsames Tool blockiert weder Stop noch Freigaben, Timeline-Updates oder andere Tool-Ergebnisse. Bricht Claude einen Aufruf ab, sendet der Host das Ereignis toolCancel, der Desktop bricht den Task ab, und Claude erhält das Ergebnis „Run stopped.“ Das Ende eines Runs bricht jeden noch offenen Aufruf ab.
Ein Handler prüft seine Einstellung oder seinen Schlüssel bei jedem Aufruf neu. Ein Tool, das ein Codex-Thread noch auflistet, stoppt sofort, wenn Sie den Gemini-Schlüssel löschen oder die Benachrichtigungen ausschalten.
Wer einen Tool-Aufruf freigibt
Codex fragt Sie vor dem Aufruf eines HB-Code-Tools nicht, auf keiner Zugriffsstufe. Codex sendet die Anfrage item/tool/call, und der Desktop startet den Handler sofort. Claude fragt vor einem Tool-Aufruf, wie es die Zugriffsstufe der Session vorgibt. Der Desktop gibt jedem Tool für Claude eine von drei Freigabeklassen, und die Funktion tool_approval enthält die Regel. Die Klasse gelangt im Feld approval jedes Tools zum Claude-Host.
- Klasse read-only: maintain_sessions. Beide Agenten führen es sofort aus. Für Claude steht das Tool in allowedTools und hat die Annotation readOnlyHint.
- Klasse desktop: send_session_message. Beide Agenten führen es sofort aus, und für Claude steht das Tool in allowedTools. Die Desktop-Regel im Tool kann die Nachricht in der Warteschlange des Empfängers zurückhalten.
- Klasse agent: use_user_browser, manage_sessions, send_mobile_notification, synthesize_speech, create_explainer_video und extract_video_context. Codex führt sie sofort aus. Claude fragt Sie gemäß der Zugriffsstufe.
Der Host bildet allowedTools aus jedem Tool, dessen Klasse nicht agent ist. Das SDK nennt ein Tool mcp__hbcode__ plus den Tool-Namen. Ein Tool, das nicht in allowedTools steht, nimmt denselben Freigabeweg wie Claudes eigene Tools.
HTML-Dokumente
Ein angefordertes HTML-Dokument kann mit den nativen Agent-Tools erstellt werden, auch durch einen Subagenten. Der Autor wählt den Speicherort, schreibt Stile und Skripte und prüft das Ergebnis im Browser. Die letzte Nachricht verlinkt die gespeicherte Datei.
Dokumentlinks öffnen sich in den Dateibetrachtern auf Desktop, iOS und Android. Die Vorschau stellt das App-Design über --hb-*-CSS-Variablen bereit. Natives Erstellen ergänzt weder automatisch ein Dokument-Stylesheet noch eine Interaktionslaufzeit, eine Abschlussprüfung oder einen verwalteten Revisionsverlauf.
Erklärvideos mit Sprechertext
Bitten Sie den Agenten um ein kurzes Erklärvideo. Geben Sie ihm die Frage, die Fakten und die Quellen. Das Tool create_explainer_video startet einen privaten Worker mit dem Agenten und Modell der Session. Der Worker erstellt animierte SVG-Szenen und prüft gerenderte Bilder vom Anfang und Ende jeder Szene. Seine privaten Entwürfe erscheinen nicht im Hauptchat.
Wenn der Worker fertig ist, erstellt der Desktop mit Ihrem Gemini-Schlüssel den Sprechertext und passt jede Szene an den gesprochenen Text an. Das vertonte Video muss 30–120 Sekunden dauern. Wenn nicht, scheitert der Abschluss mit der gemessenen Länge, und der Worker überarbeitet den Sprechertext und schließt erneut ab. Dann rendert der Desktop eine 1080p-MP4 mit 30 Bildern pro Sekunde. SVG-Rendering und Videokodierung laufen auf Ihrem Computer. Der Worker verwendet das Konto der Session, und der Sprechertext geht an Gemini.
Die Timeline zeigt Phase, Revision, Szenenzahl, Dauer und gerenderte Bilder. Eine fertige Zeile öffnet das gespeicherte Video. Die Prüfung nennt die Kontrollen und Einschränkungen. Übergeben Sie den gespeicherten videoPath bei einem späteren Aufruf, um dieselbe Datei zu überarbeiten. Bei einem Fehler oder Abbruch bleibt das vorige Video verfügbar.
Sprache und Video mit Ihrem Gemini-Schlüssel
Speichern Sie einen Gemini-API-Schlüssel unter Einstellungen → API Keys. Drei weitere Tools erscheinen in der Liste. Eine Claude-Session erhält sie beim nächsten Run. Eine Codex-Session erhält sie nur beim Start ihres Threads. Jedes Tool liest den Schlüssel bei jedem Aufruf. Wenn Sie ihn löschen, stoppt das Tool auch in Sessions, die es noch auflisten. Ohne Schlüssel scheitern synthesize_speech und create_explainer_video mit „Add a Gemini API key in Settings > API Keys.“ Der Schlüssel bleibt auf dem Desktop. Anfragen für Sprache und Videoanalyse gehen von Ihrem Computer direkt an Gemini.
- Sprachausgabe. Der Desktop teilt den Text an Satzgrenzen in Blöcke von höchstens 1.800 Zeichen, synthetisiert drei gleichzeitig mit gemini-3.1-flash-tts-preview, wiederholt jeden Block zweimal mit wachsendem Backoff und fügt die 24-kHz-Mono-16-Bit-PCM-Teile mit 180 ms Stille dazwischen zu einer WAV-Datei unter agent-speech im Cache-Verzeichnis zusammen. Regieanweisungen bleiben außerhalb des gesprochenen Transkripts, und ein mehrteiliger Prompt weist das Modell an, die Teilnummer nicht vorzulesen. Dreißig vorgefertigte Stimmen stehen bereit, und Kore ist die Voreinstellung.
- Videokontext. Die Quelle ist eine öffentliche YouTube-URL, eine öffentliche https-Video-URL oder eine lokale Aufnahme, mit der Absicht Tutorial oder Meeting. Eine YouTube-ID muss 11 Zeichen haben, und ein Playlist-Parameter wird abgelehnt. gemini-3.1-pro-preview läuft mit Temperatur 0,2 gegen ein JSON-Schema, das zu Markdown gerendert wird. Der Tutorial-Modus extrahiert Konzepte, Abläufe, Befehle, Code, Bildschirmtext und Vorbehalte; der Meeting-Modus extrahiert Entscheidungen, Anforderungen, Blocker, Aufgaben und offene Fragen. Das Ergebnis sind Notizen mit Zeitstempeln, auf Ihr Ziel zugeschnitten, mit benannten Lücken.
Videoquellen sind genau eine von youtube_url, local_file oder video_url. Eine entfernte URL braucht einen von zwölf unterstützten Video-MIME-Typen wie video/mp4, video/webm, video/quicktime oder video/mpeg, und Gemini muss sie direkt abrufen können. Es gibt keine Rückfallpfade: Eine private, unerreichbare oder mehrdeutige Quelle scheitert ausdrücklich.
Vom Agenten geschriebene Benachrichtigungen
- Angefordertagent-notification-requested
Der Aufruf kehrt zurück, sobald das Event in einem verbundenen Device-Link eingereiht ist. Der Server verteilt es und sendet die Pushes danach selbstständig.
- Sichtbarer Fehlerinitialize_connection
Ist der Link nicht bereit, startet der Desktop ihn neu und versucht es 8 weitere Male. Mit ausgeschaltetem Allow Remote Access oder abgemeldet kommt er nie hoch, sodass der Fehler nach etwa 2 Sekunden eintrifft, oder sofort, wenn der Link seit dem App-Start nie gestartet wurde.
- Stiller Verlustsend_agent_notification_push
Hinter dem Relay kommt nichts zurück. Ein Server ohne APNs oder FCM, ein Konto ohne registriertes Telefon und ein abgelehntes Token werden nur protokolliert. Ein Telefon ohne Benachrichtigungsberechtigung zeigt nichts an.
Schalten Sie „Desktop and phone notifications“ unter Settings → General ein, und die Liste bekommt send_mobile_notification, ein Tool für eine Push-Meldung zur aktuellen Session pro Aufruf. Eine Claude-Session bekommt es bei ihrem nächsten Run. Eine Codex-Session bekommt es nur, wenn ihr Thread startet. Der Desktop prüft die Einstellung bei jedem Aufruf erneut. Schalten Sie sie aus, kommen sofort keine Meldungen mehr, auch aus Sessions, die das Tool noch haben. Jede Meldung nennt die Session und den Run, der aktiv ist, wenn der Agent das Tool aufruft. Die Zeile „Agent notifications“ darunter wählt die Anleitung in der Tool-Beschreibung: Important beschränkt es auf Ergebnisse und blockierende Fragen, Frequent ergänzt bedeutsame Meilensteine und Fehler, weist den Agenten aber weiterhin an, routinemäßige Fortschrittsmeldungen zu vermeiden. Beide Richtlinien stellen dasselbe Tool bereit. Der Titel fasst höchstens 60 Zeichen und der Text höchstens 180, das zwingt das Ergebnis nach vorn.
Session-Suche
maintain_sessions ist eine schreibgeschützte Sicht auf appdata.db mit drei Aktionen: guide, listSessions und resolveSession. Es verknüpft Sessions mit dem Workspace-Zustand des Projekts, der die aktive Session markiert, mit den Codex-Session-Links und mit der Tabelle claude_sessions. Es gibt den Agenten jeder Session aus, sortiert nach letzter Änderung, liefert standardmäßig 25 und höchstens 200 Zeilen und filtert nach dem Hash des Projektverzeichnisses. resolveSession liefert den Codex-Thread-Link oder die Claude-Session-ID einer Session. Das Tool kann weder Session-Metadaten noch den Zustand der aktiven Session ändern, und es ist kein SQL-Tool.
Nachrichten an eine andere Session
Mit send_session_message schreibt der Agent einer Session an eine andere HB-Code-Session. Der Empfänger kann mit Codex oder Claude laufen. Das Tool hat zwei Argumente: recipientSessionId und message. Die Absender-Session, ihr Run und die ID des Aufrufs kommen vom aufrufenden Agenten. Eine Empfänger-ID findet der Agent mit maintain_sessions.
Der Aufruf wartet nicht auf den anderen Agenten. Der Desktop legt die Nachricht in die Outbox des Empfängers und gibt eine Quittung zurück. Ein Empfänger, der läuft, bekommt die Nachricht in seinen laufenden Turn, nach dem aktuellen Schritt des Agenten. Ein Empfänger, der nicht läuft, startet einen Turn für sie. Eine Antwort kommt später als neue Nachricht in der Absender-Session, und das Tool weist den Agenten an, nicht darauf zu warten und nicht nachzufragen.
| Status der Quittung | Bedeutung |
|---|---|
| queued | Die Nachricht steht in der Outbox des Empfängers und geht ohne Ihr Zutun hinaus. |
| waiting-for-approval | Die Nachricht steht in der Warteschlange des Empfängers und bleibt dort, bis Sie sie aus dieser Session senden. Die Quittung nennt den Grund und weist den Agenten an, es Ihnen zu sagen. |
| already-sent | Ein früherer Versuch desselben Tool-Aufrufs hat die Nachricht schon eingereiht. Der Desktop speichert in chat_ |
In diesen Fällen lehnt der Desktop einen Aufruf ab, bevor er etwas einreiht.
| Grenze | Wert |
|---|---|
| Nachrichtentext | Eine leere Nachricht schlägt fehl. |
| Absender | Die Absender-Session muss einen aktiven Run haben. |
| Empfänger | Eine vorhandene Session, die nicht der Absender ist. Dieselbe Aufruf-ID kann keinen zweiten Empfänger nennen. |
Eine Nachricht darf Arbeit nur mit dem Zugriff starten, den ihr Absender hatte. Der Desktop hält eine Nachricht für Ihre Freigabe zurück, wenn eine von zwei Regeln zutrifft. Er prüft die Regeln, wenn der Aufruf ankommt, und noch einmal kurz vor der Zustellung, weil sich die Einstellungen des Empfängers ändern können, während die Nachricht wartet. Wenn der Empfänger einen Turn ausführt, vergleicht der Desktop den Zugriff dieses Turns. Der Turn läuft mit der Zugriffsstufe, die der Empfänger in diesem Moment hat.
| Halteregel | Detail |
|---|---|
| Der Empfänger hat mehr Zugriff | Die vier Stufen bilden eine Skala für beide Agenten: read-only, full auto, full access, unrestricted. Ein Empfänger über der Stufe des Absenders wartet. |
| Ein anderes Projekt | Die Projektverzeichnisse sind verschieden und der Empfänger ist nicht read-only. |
Der Agent des Empfängers bekommt die Nachricht als Benutzernachricht in einem Umschlag. Die erste Zeile ist reiner Text, und das Tag nennt den Absender. Um zu antworten, sendet der Agent eine Nachricht an from_session_id. Die Operations-ID einer Session-Nachricht beginnt mit session-message-. Ein Client kann eine solche ID nicht einreichen, deshalb nennt ein Tag, das Sie selbst tippen, keinen Absender.
Message from another HB Code session. Answer this message in one of three ways: do it, ask one question, or object with the reason.
<session_message from_session_id="…" from_title="…" from_agent="codex">
…message…
</session_message>Der Desktop gibt Claude eine Regel in dem Text, den Claude an seinen System-Prompt anhängt: send_session_message für eine andere HB-Code-Session verwenden, weil Claudes eigene Tools SendMessage und ListAgents HB-Code-Sessions nicht erreichen.
Die Timeline des Absenders zeigt den Aufruf als Nachrichtenzeile „Message to <recipient title>“ mit dem Signal Sent, Needs approval oder Not sent. Solange die Zustellung Sent ist, ist der Name des Empfängers in der Zeile ein Link zur User-Zeile der Nachricht in der Empfänger-Session. Diese User-Zeile hat den Link zurück.
Wohin die Daten gehen
Die Browsersteuerung bedient Ihr Chrome, Sprache und Video senden Text oder Video unter Ihrem Schlüssel an Gemini, und Meldungen laufen über den regionalen Server.