Ein nanobot-Lauf, der wie eine Endlosschleife aussieht, ist begrenzt: Im ausgelieferten Quellcode von v0.3.5 ist jeder Agent-Turn durch agents.defaults.maxToolIterations auf standardmäßig 200 begrenzt, und ein Maintainer erklärt öffentlich, dass es sich nicht um eine buchstäblich unendliche Schleife handelt. Das eigentliche Problem ist der Tokenverbrauch, weil ein Lauf, der diese Obergrenze erreicht, 201 Assistant-Turns protokolliert und bei jedem Turn einen wachsenden Prompt erneut sendet. Zu klären, welche dieser Situationen vorliegt, ist eine Diagnose mit vier Fragen; die nachweislich belegte Lösung ist kein Konfigurationswert.
Entfernen Sie zunächst den naheliegenden Hauptverdächtigen. Der Upstream-Bericht ist Issue #5781, dessen Titel auf dream.maxIterations verweist, und PR #5782 trägt den Titel „fix(dream): enforce configured iteration limit“. Dieser Schlüssel existiert in v0.3.5 nicht, und der PR wurde am 16. September 2026 ohne Merge geschlossen. Ein darauf basierendes Tutorial konfiguriert nichts.
Eine Abgrenzung, weil die Suchabfrage den falschen Tracker hervorbringt. Diese Seite handelt von HKUDS/nanobot, MIT, installiert als PyPI-Paket nanobot-ai – 0.3.5, Python 3.11 oder neuer, hochgeladen am 15. September 2026. obot-platform/nanobot ist ein anderes Go-Projekt, dessen README den Wartungsmodus mit deaktivierten Issues erklärt; seine Issue-Nummern sind hier kein Beleg. Und pip install nanobot, ohne Suffix, installiert ein nicht verwandtes Paket für Roboternavigation.
Was gemeldet wurde und gegen welche Version
Dream ist nanobots geplanter Job zur Speicherkonsolidierung, der vom Gateway als Cron-Job mit dem Namen dream ausgeführt wird. Es handelt sich nicht um einen Embedding- oder Vektorindex-Job: Kunavo stellt kein Embedding-Modell bereit, und Dream benötigt auch keines, da nanobots dauerhafter Speicher aus einfachen Dateien im Arbeitsbereich besteht und ein Dream-Lauf gewöhnlicher Chatverkehr ist.
Issue #5781 wurde am 15. September 2026 von BrianMwangi21 gegen nanobot v0.3.0 eingereicht, unter Python 3.12 mit einem über OpenRouter erreichten Reasoning-Modell. Das Symptom: Der Dream-Job wechselte Dutzende Male zwischen read_file bei memory/history.jsonl und read_file bei einem SKILL.md, während der Reasoning-Trace erneut darüber beriet, wo eine einzelne kleine Information abgelegt werden sollte. Sieben Läufe über etwa 26 Stunden dauerten ungefähr 25 bis ungefähr 111 Minuten; die Läufe nahe 200 Tool-Aufrufen stießen an das globale Limit, und ein Sitzungs-Checkpoint zeigte runtime_checkpoint.iteration: 164, Phase tools_completed, beim selben Aufruf read_file.
Drei Einschränkungen des Geltungsbereichs gehören zu diesen Zahlen. Es handelt sich um die selbst gemeldeten Gateway-Logs eines Benutzers, mit einem Modell und unter v0.3.0 — kein Maintainer hat sie reproduziert, und niemand hat sie unter v0.3.5 erneut getestet. Das Issue ist mit enhancement und priority: p2 gekennzeichnet, nicht mit bug, und weiterhin offen. Dieses Muster ist außerdem schon zuvor aufgetreten: Issue #3073, eine nahezu identische read_file-Schleife bei history.jsonl vom 12. April 2026, wurde als nicht geplant geschlossen. Nichts davon rechtfertigt die Annahme, nanobot sei generell teuer; es spricht dafür zu prüfen, ob die eigene Installation dieses Verhalten zeigt.
Der veraltete Schlüssel und die tatsächlich aktive Grenze
Die gesamte Verwirrung ist eine Versionslücke, und die Quelle klärt sie. Gelesen an den beiden Release-Tags am 21. September 2026:
| Konfigurationsschlüssel | In v0.3.0 | In v0.3.5 | Was jetzt zu tun ist |
|---|---|---|---|
dream.maxIterations | Standardwert 15, gekennzeichnet mit # Deprecated: no longer used | Aus dem Schema entfernt | Nicht schreiben; er konfiguriert nichts |
dream.maxBatchSize | Standardwert 20, derselbe Veraltungskommentar | Entfernt | Nicht schreiben |
dream.annotateLineAges | Standardwert true, derselbe Veraltungskommentar | Entfernt | Nicht schreiben |
dream.enabled | Standardwert true | Standardwert true | In den Laufzeiteinstellungen der WebUI bearbeitbar |
dream.intervalH | Standardwert 2 | Standardwert 2 | config.json bearbeiten; kein WebUI-Unterpunkt |
dream.cron | Null; veraltete Überschreibung | Null; veraltete Überschreibung | Hat Vorrang vor intervalH, wenn gesetzt |
dream.modelOverride | Deklariert, kommentiert mit Implementierung ausstehend | Implementiert | Nur Preset-Namen, niemals eine rohe Modell-ID |
agents.defaults.maxToolIterations | 200 | 200 | Das einzige Limit, und es gilt prozessweit |
Zwei Dinge führen leicht dazu, diese Tabelle falsch zu verstehen. Die 200 stimmt in zweierlei Hinsicht — sie ist der Wert in der Konfiguration des Meldenden und der ausgelieferte Standardwert in Zeile 129 von nanobot/config/schema.py, identisch am v0.3.5-Tag und auf main, sodass auch ein Leser, der ihn nie gesetzt hat, 200 verwendet. Außerdem ist sie undokumentiert: Ein Abruf von nanobots eigener Konfigurationsreferenz 0.3.5 am 21. September 2026 lieferte 488.608 Bytes HTML mit null Vorkommen von maxToolIterations, und auch die Datei docs/configuration.md im Repository enthält an diesem Versions-Tag keine Vorkommen. Die Zahl lässt sich aus dem Quellcode und einem Maintainer-Kommentar belegen, nicht aus einer Dokumentationsseite — behandeln Sie daher jedes Tutorial, das eine andere Zahl nennt, mit Skepsis.
modelOverride ist das einzige Heilmittel mit einer Versionsvoraussetzung. In v0.3.0 existierte das Feld mit dem Kommentar Implementierung ausstehend, aber ohne jeglichen auflösenden Code; PR #5107, am 27. Juli 2026 zusammengeführt, implementierte es für v0.3.5. Die offizielle Speicherseite zu 0.3.5 besagt, dass damit ein benannter Eintrag aus model_presets für Dream ausgewählt wird, nur Preset-Namen akzeptiert werden und rohe Modellkennungen nicht unterstützt werden. Diese Seite dokumentiert drei Dream-Schlüssel und erwähnt nirgendwo ein Iterationslimit. Hier ist die vollständige aktuelle Oberfläche, einschließlich des providers-Blocks, auf den sie sich stützt, abgedeckt auf der nanobot-Einrichtungsseite:
{
"modelPresets": {
"dream-cheap": {
"provider": "kunavo",
"model": "claude-haiku-4-5",
"maxTokens": 8192
}
},
"agents": {
"defaults": {
"maxToolIterations": 200,
"dream": {
"enabled": true,
"intervalH": 2,
"modelOverride": "dream-cheap"
}
}
}
}Beachten Sie, was in dieser Datei nicht enthalten ist: eine Möglichkeit, nur Dream zu begrenzen. AgentLoop wird einmal mit max_iterations aus den Prozessstandards erstellt, und sowohl der Dream-Cron-Pfad als auch der manuelle /dream-Pfad rufen process_direct(...) ohne Iterationsargument auf, ebenso wie Subagenten. Das Senken des Limits senkt es gleichzeitig für Chat, Dream, Heartbeat und Subagenten.
In dieser Reihenfolge diagnostizieren
Beantworten Sie diese vier Fragen, bevor Sie etwas ändern, denn drei davon kosten nichts und die vierte zeigt, ob die ersten drei überhaupt relevant sind. Die Log-Zeichenketten sind der wörtliche Text in v0.3.5; die geschweiften Klammern enthalten Laufzeitwerte.
| Frage | Wo nachsehen | Was die Antwort bedeutet |
|---|---|---|
| 1. Wurde der Lauf selbstständig beendet oder stieß er an die Obergrenze? | Gateway-Log: Max iterations (200) reached, von agent/loop.py | Vorhanden bedeutet: ein begrenzter Lauf mit ungefähr 201 Assistant-Zügen. Fehlt es, endete der Lauf vor der Obergrenze — entweder konvergierte das Modell oder der Lauf schlug vollständig fehl und protokollierte Dream cron job failed |
| 2. Ist der Dream-Cursor vorgerückt? | Drei unterschiedliche Zeilen in cli/gateway_runtime.py: Dream cron job completed, cursor advanced to …; … completed with no memory changes; cursor advanced to …; Dream cron job did not complete (…); cursor remains at … | Die dritte Zeile ist der in v0.3.5 funktionierende Ausfallschutz: Ein unvollständiger Lauf lässt den Batch zur erneuten Verarbeitung zurück. Das bedeutet auch, dass derselbe Batch beim nächsten Tick wiederkommt |
| 3. Wiederholt sich dasselbe Tool mit denselben Argumenten? | Die Tool call:-Zeilen zwischen diesen beiden Markierungen | Identisches Tool und identische Argumente immer wieder bedeuten eine Nichtkonvergenz des Modells, zu der Upstream gelangte. Die einzige Wiederholungssperre in v0.3.5 erkennt web_fetch und web_search; eine sich wiederholende read_file wird nicht erkannt |
| 4. Was hat es gekostet? | llm_usage.sqlite3 im Konfigurationsverzeichnis, nach Datum und Quelle aggregiert; auf Gateway-Seite nach Schlüssel und Tag in Nutzung | Dream ist mit dream gekennzeichnet. Der Heartbeat ist mit cron gekennzeichnet, daher findet die Filterung nach "heartbeat" nichts |
Sie müssen nicht zwei Stunden auf den Cron-Tick warten, um das Problem zu reproduzieren. Der Befehl /dream führt denselben Job auf Abruf aus und meldet im Chat dieselbe Unterscheidung: Dream completed in Ns. oder Dream completed in Ns; no memory changes. bei Erfolg, gegenüber Dream did not complete after Ns (reason); memory cursor was not advanced., wenn er nicht fertig wird. Eine weitere Änderung in v0.3.5 ist bei der Suche nach Belegen wichtig: Sitzungs-JSONL-Dateien wurden in den sessions/<workspace-id>/-Baum des Konfigurationsverzeichnisses verschoben, daher befinden sich die im Issue-Thread genannten Pfade aus v0.3.0 nicht dort, wo Ihr Checkpoint liegt.
Fünf Stellschrauben und was jeweils tatsächlich belegt ist
| Hebel | Beleg dafür | Vorteile, wenn | Ihre Kosten |
|---|---|---|---|
| v0.3.0 auf v0.3.5 aktualisieren | Commit 4e2640f in v0.3.5, nicht jedoch in v0.3.0, lässt den Cursor nur vorrücken, wenn der Beendigungsgrund completed lautet | Ihr Symptom ist übersprungener Speicher statt Verbrauch | Es verkürzt keine nicht konvergierende Schleife, und niemand hat #5781 unter 0.3.5 erneut getestet |
| Das Modell für Dream ändern | Das einzige Mittel mit einem Vorher-Nachher-Vergleich: Im Audit des Meldenden wurde ein Batch, für den ein Modell 91 Minuten ohne Abschluss benötigte, beim nächsten Lauf mit einem anderen Modell in etwa einer Minute mit 6 Tool-Aufrufen abgeschlossen — bei identischem Prompt, identischem Verlauf und identischen Tools | Die Chatqualität muss auf Ihrem teuren Modell bleiben | Erfordert v0.3.5 und ein definiertes Preset; unter v0.3.0 wird das Feld zu nichts aufgelöst |
maxToolIterations senken | In den Laufzeiteinstellungen der WebUI bearbeitbar, Minimum 1, pro webui/settings_runtime.py | Sie möchten während der Diagnose eine Obergrenze für den schlimmsten Fall | Ein Regler für Chat, Dream, Heartbeat und Subagenten; außerdem rückt ein begrenzter Lauf den Cursor nicht vor, sodass derselbe Batch beim nächsten Tick erneut versucht wird |
| Dream verlangsamen oder deaktivieren | intervalH oder dream.enabled in der WebUI; der zusammengeführte PR #5407 entfernt den gespeicherten Job bei Deaktivierung | Konsolidierung ist für Ihre Arbeitslast die Kosten nicht wert | Sie verlieren die Speicherkonsolidierung, also genau die Funktion |
| So weiterleiten, dass das erneute Senden günstiger ist | In v0.3.5 setzen genau zwei Provider-Spezifikationen supports_prompt_caching: anthropic und openrouter; das Feld hat standardmäßig den Wert false | Sie akzeptieren lange Läufe und möchten, dass sie weniger kosten | Hängt davon ab, welchen Protokollpfad Sie konfiguriert haben, und davon, dass Sie die zurückgegebene Nutzung selbst überprüfen |
Die beiden Modell-IDs des Meldenden waren deepseek/deepseek-v4-flash-0731 und openai/gpt-5.6-luna, wie er sie über OpenRouter angegeben hat; diese IDs und ihre Preise wurden hier nicht geprüft. Lesen Sie den Vergleich daher als Beleg dafür, dass das Modell die Konvergenz bestimmt, nicht als Empfehlung für eines der beiden. Upstream kam zum selben Schluss: Bei der Ankündigung des Abschlusses von PR #5782 zu Issue #5781 schrieb chengyongru, dass ein festes Dream-Iterationslimit das zugrunde liegende, modellabhängige Konvergenzproblem nicht behebt und dazu führen kann, dass ansonsten brauchbare Läufe wiederholt werden.
Was ein begrenzter Lauf kostet: beispielhafte Berechnung
Dies ist eine beispielhafte Tokenberechnung, keine gemessenen Aufgabenkosten und keine Abrechnungsobergrenze. nanobot veröffentlicht keine Tokenzahl pro Dream-Lauf, daher ist jede Eingabe hier eine Annahme, die Sie durch Ihre eigene Messung ersetzen sollten. Nehmen wir einen Lauf an, der das Limit bei 201 Assistant-Zügen erreicht — der Anzahl im Audit des Meldenden — wobei jeder einen konstant gehaltenen Prompt mit 25.000 Tokens erneut sendet, seiner Beschreibung seines eigenen Arbeitsbereichs, nicht einer veröffentlichten Zahl. Das sind 5,03M Eingabetokens. Ausgabetokens sind ausgeschlossen, und ein realer Prompt wächst mit jedem Tool-Ergebnis, daher unterschätzt dies einen realen Lauf in zweierlei Hinsicht gleichzeitig. Die Tarife sind aktuelle Preise aus dem Kunavo-Katalog.
| Modell | Eingabe pro 1M | Cache-Lesen pro 1M | Ein begrenzter Lauf, ohne Cache | Derselbe Lauf, erneute Sendungen aus dem Cache gelesen |
|---|---|---|---|---|
| Claude Haiku 4.5 | $0,70 | $0,07 | $3,52 | $0,37 |
| GPT-5.6 Terra | $0,70 | $0,07 | $3,52 | $0,37 |
| Claude Sonnet 5 | $1,40 | $0,14 | $7,04 | $0,74 |
Die letzte Spalte setzt einen Best Case voraus, den hier nichts getestet hat: die erste Sendung zum normalen Eingabetarif und alle 200 erneuten Sendungen als Cache-Lesevorgänge. Ein Cache-Schreibvorgang wird zu seinem eigenen Tarif abgerechnet, der bei manchen Modellen über dem normalen Eingabetarif liegt; ein Cache-Eintrag läuft ab; und ein wachsender Prompt wird neu geschrieben statt erneut gelesen — betrachten Sie daher die Differenz zwischen den letzten beiden Spalten als Größe des möglichen Vorteils, nicht als Angebot. Der einzige Punkt ist, dass bei einem langen, repetitiven Lauf die erneute Sendung — nicht das Modell — das Geld kostet.
Ob Cache-Markierungen überhaupt über die Leitung gesendet werden, wird in Ihrer nanobot-Konfiguration entschieden und ist im ausgelieferten Quellcode sichtbar. Ein erfundener Provider-Schlüssel unter providers wird als einfacher OpenAI-kompatibler Provider behandelt und lässt supports_prompt_caching auf dem Standardwert false, sodass nanobots Client auf diesem Pfad keine cache_control-Markierungen sendet, selbst bei einer Claude-ähnlichen Modell-ID. Wenn das Preset beim integrierten Provider anthropic bleibt und providers.anthropic.apiBase überschrieben wird, bleiben sie erhalten. Das beschreibt, was nanobots Client sendet, nicht was ein beliebiger Endpunkt auf seiner Seite tut, und Kunavo hat nanobot nicht zur Laufzeit getestet. Lesen Sie die zurückgegebene Nutzung eines echten Aufrufs, bevor Sie einen wiederkehrenden Job als gecacht budgetieren — die Caching-Dokumentation zeigt, wie ein funktionierender Cache aussieht, und die Referenz zur Basis-URL nennt beide Endpunktkonventionen.
Der Betrag aus Kunavos Katalog ist eine Abrechnungsuntergrenze, keine Obergrenze: Wenn der Upstream seine Kosten meldet, ist die Rechnung der größere Wert aus den Katalogkosten und den Upstream-Kosten multipliziert mit dem jeweils geltenden Aufschlag. Die minimale Aufladung beträgt $10 als Prepaid-Guthaben — eine Mindestfinanzierung, keine Aufgaben- oder Abonnementgebühr. Siehe Abrechnungsdetails und Kostenoptimierung für die Messmethode, die die obigen Annahmen ersetzt.
Die Korrektur in einem Lauf überprüfen
Ändern Sie eine Sache, führen Sie dann einmal /dream aus, statt auf den Zeitplan zu warten, und prüfen Sie die drei Markierungen der Reihe nach: keine Max iterations (200) reached-Warnung, eine cursor advanced to …-Zeile statt cursor remains at …, und dazwischen eine plausible Anzahl von Tool-Aufrufen. Lesen Sie anschließend die von Ihrem eigenen Konto für dieses Zeitfenster erfassten Kosten nach Schlüssel und Tag in Nutzung; nanobots Speicher zählt Tokens, kein Geld. Wenn Sie den Endpunkt zum ersten Mal konfigurieren, behandeln der Schnellstart und die nanobot-Einrichtungsseite beide Protokollpfade, und ein Kunavo-Konto zu erstellen ist der Schritt vor der Finanzierung eines Schlüssels. Vergleichen Sie stattdessen Laufzeiten? nanobot vs. OpenClaw stellt die beiden Hintergrundintervalle gegenüber, und das Verzeichnis der Agent-APIs ordnet Clients nach Drahtprotokoll.
Häufig gestellte Fragen
Steckt nanobot wirklich in einer Endlosschleife fest?
Nein, und ein Maintainer sagt dies öffentlich. In einem Kommentar zu Issue #5324 vom 10. August 2026 schrieb chengyongru, dass nanobots Agent-Runner durch agents.defaults.maxToolIterations begrenzt ist, standardmäßig 200, sodass dies keine buchstäblich unendliche Schleife ist – zugleich fügte er hinzu, dass eine lange begrenzte Schleife weiterhin einen sehr hohen kumulierten Tokenverbrauch verursachen kann und die praktischen Auswirkungen daher real sind. Der ausgelieferte Quellcode von v0.3.5 bestätigt dies: max_tool_iterations ist in nanobot/config/schema.py standardmäßig auf 200 gesetzt, und agent/loop.py protokolliert die Warnung „Max iterations (200) reached“, wenn ein Lauf dieses Limit erreicht. Was viele als Endlosschleife bezeichnen, ist ein Lauf, der diese Obergrenze erreicht; in den Protokollen eines Meldenden bedeutete dies 201 Assistant-Turns, die dieselben zwei Dateien erneut lasen.
Warum bewirkt das Setzen von dream.maxIterations nichts?
Weil das Feld nicht mehr existiert. In nanobot v0.3.0 enthielt die Dream-Konfiguration max_iterations, max_batch_size und annotate_line_ages, jeweils im Quellcode mit dem Kommentar „Deprecated: no longer used“ gekennzeichnet; im v0.3.5-Tag sind alle drei verschwunden, und die Klasse definiert nur enabled, intervalH, cron und modelOverride. Maintainer chengyongru erklärte am 15. September 2026, dass dream.maxIterations absichtlich als veraltet und ungenutzt markiert wurde, als Dream auf die normale Agent-Schleife umgestellt wurde, und inzwischen aus main entfernt ist. Der Pull Request, der es wiederhergestellt hätte, #5782, wurde am nächsten Tag ohne Merge geschlossen. Wenn Sie diesen Schlüssel in eine v0.3.5-Konfiguration schreiben, schreiben Sie einen Schlüssel, den das Schema nicht definiert.
Wie begrenze ich Token nur für den nanobot-Dream-Job?
Nicht als kumulatives Budget in nanobot v0.3.5. Nichts im ausgelieferten Code summiert die Token eines Laufs und stoppt ihn beim Erreichen eines bestimmten Werts, und agents.defaults.maxToolIterations ist die einzige Iterationsobergrenze – sie gilt prozessweit und gleichzeitig für gewöhnliche Chat-Turns, Dream, den Heartbeat und Subagenten. Zwei Dinge können Sie über agents.defaults.dream.modelOverride ausschließlich für Dream festlegen: das Modell und die eigenen Limits dieses Presets pro Aufruf, da ModelPresetConfig maxTokens und contextWindowTokens enthält und dream_runtime() das benannte Preset in die Laufzeitumgebung auflöst, unter der der Dream-Lauf ausgeführt wird. Diese begrenzen jeden einzelnen Aufruf, nicht die Gesamtheit des Laufs; 200 Aufrufe unter einem niedrigen maxTokens bleiben also 200 Aufrufe. Auch der Zeitplan kann über intervalH auf Dream beschränkt werden. Ein kumulatives Budget ist das, was der Upstream vorerst nicht hinzufügen wollte: In Issue #5781 schrieb chengyongru am 16. September 2026, dem Tag, an dem er PR #5782 schloss, dass ein Token- oder Ressourcenbudget für Hintergrundaufgaben ein detaillierteres Design bezüglich Budgeteinheit und -umfang, Beendigungssemantik, Retry- und Cursor-Verhalten, Beobachtbarkeit und Interaktion mit verschiedenen Modellen erfordert und dass sie dies vorerst nicht weiterverfolgen wollen.
Wie stoppe ich einen bereits laufenden nanobot-Dream-Lauf?
Nicht mit /stop, wenn man den Quellcode von v0.3.5 zugrunde legt. /stop ist als Abbruch des aktiven Agent-Turns für diesen Chat dokumentiert und wird als Abbruch über Aufgaben implementiert, die unter dem Sitzungsschlüssel dieses Chats registriert sind, während ein Dream-Lauf unter einem eigenen kurzlebigen Schlüssel der Form dream:YYYYMMDD-HHMMSS erstellt wird. Das ist eine Analyse des Codepfads und kein getestetes Ergebnis – /stop wurde hier nicht gegen einen live laufenden Dream-Lauf ausgeführt. Dokumentierte Hebel sind /restart, das Deaktivieren von agents.defaults.dream.enabled oder das Stoppen des Gateway-Prozesses. Der gemergte PR #5407 in v0.3.5 sorgt dafür, dass das Deaktivieren den persistierten Systemjob tatsächlich entfernt, statt ihn geplant zu lassen.
Wie sehe ich, wie viele Token nanobots Hintergrundaufgaben verbraucht haben?
Lesen Sie den lokalen Nutzungsdatenspeicher, nicht einen Slash-Befehl. nanobot v0.3.5 erfasst jeden Modellaufruf mit einem source-Feld des Typs user, api, cron, dream oder system und schreibt ihn im Konfigurationsverzeichnis – standardmäßig ~/.nanobot – in llm_usage.sqlite3 mit Token-Spalten für input, output, cache-read und cache-write; außerdem werden die Daten nach Datum und Quelle gruppiert aggregiert. Zwei Fallen. Es gibt keinen /insights- oder /cost-Befehl: Beide Pull Requests, die einen solchen vorschlugen, #3735 und #3921, wurden ohne Merge geschlossen, und die integrierte Liste von v0.3.5 lautet /new, /compact, /stop, /restart, /status, /model, /history, /goal, /trigger, /dream, /dream-log, /dream-restore, /dream-prompt, /evaluator-prompt, /skill, /help und /pairing. Außerdem sind die Bezeichnungen asymmetrisch: Dream-Ausgaben werden als dream markiert, Heartbeat-Ausgaben dagegen als cron, weil der Heartbeat-Sitzungsschlüssel wörtlich „heartbeat“ lautet. Das sind Token-Zählungen, kein Geld; gleichen Sie sie daher mit dem eigenen Hauptbuch Ihres Anbieters ab.
Behebt ein Upgrade auf nanobot v0.3.5 die Schleife?
Niemand hat gesagt, dass dies der Fall ist, und auch diese Seite wird es nicht behaupten. Issue #5781 wurde gegen v0.3.0 eröffnet und ist weiterhin offen, mit den Labels enhancement und priority p2; der Meldende hat nach dem Upgrade nicht erneut getestet, und kein Maintainer hat das Problem reproduziert. Was v0.3.5 tatsächlich behebt, ist enger gefasst und dennoch sinnvoll: Commit 4e2640f verhindert, dass ein unvollständiger Lauf den Dream-Cursor weiterbewegt und den Verlauf stillschweigend überspringt, der gemergte PR #5442 lässt einen unvollständigen Lauf melden, warum er nicht abgeschlossen wurde, und der gemergte PR #5325 lässt edit_file „Error: new_text must be different from old_text.“ zurückgeben, statt bei einer wirkungslosen Bearbeitung Erfolg zu melden. Letzteres behebt die Lese-dann-Bearbeite-Schleife aus Issue #5324, nicht die schreibgeschützte Schleife aus #5781. Auch eine allgemeine Sperre für wiederholte identische Tool-Aufrufe wird in v0.3.5 nicht ausgeliefert. Die einzige Wiederholungssperre im ausgelieferten Quellcode, repeated_external_lookup_error in nanobot/utils/runtime.py, blockiert einen identischen web_fetch- oder web_search-Aufruf nach zwei Versuchen und passt zu keinem anderen Toolnamen; ein wiederholtes read_file läuft daher bis zum Iterationslimit weiter. Die fünf Pull Requests für eine allgemeine Sperre – #3077, #4522, #5344, #3701 und #4154 – sind alle nicht gemergt.
Geprüft am 21. September 2026: die GitHub-API für HKUDS/nanobot sowie für die Issues #5781, #5324 und #3073 und die Pull Requests #5782, #5107, #5325, #5442, #5407, #3077, #4522, #5344, #3701, #4154, #3735, #3921 und #4622; der PyPI-Eintrag für nanobot-ai 0.3.5; nanobots Speicher- und Konfigurationsdokumentation zu 0.3.5; sowie der ausgelieferte Quellcode am v0.3.5-Tag für jeden oben zitierten Standardwert, Log-Text und Codepfad, verglichen mit v0.3.0, wo sie sich unterscheiden. Kunavo hat nanobot weder installiert noch ausgeführt, kein Verhalten hier wurde von Kunavo getestet, und die Schleife aus Issue #5781 wurde von niemandem unter v0.3.5 erneut getestet. Token-Tarife stammen aus dem aktuellen Katalog, und jede Dollarzahl ist eine beispielhafte Berechnung unter den angegebenen Annahmen.