Auf einem M3 Max mit 128 GB, auf dem OpenClaw 2026.9.7 mit Ollama 0.35.0 lief, bestand gemma4 – das Modell, das OpenClaws eigene Ollama-Einrichtung empfiehlt – alle 12 bewerteten Durchläufe über vier Agentenaufgaben; gpt-oss:20b bestand 11 von 12 mit fast dreimal so vielen fehlgeschlagenen Tool-Aufrufen; und qwen3-coder:30b, die übliche Wahl fürs Programmieren, bestand 2 von 12, weil seine Tool-Aufrufe im Ollama-Parser wiederholt fehlschlugen. Wir führten jedes Modell dreimal pro Aufgabe in einem frischen Arbeitsbereich aus, bewerteten das Ergebnis per Skript und zeichneten OpenClaws eigene Tool- und Tokenzählungen sowie Ollamas Serverprotokoll auf. Gemessen am 1. Oktober 2026.
Was OpenClaw selbst kostet und was ein gehostetes Modell stattdessen kosten würde, findest du unter OpenClaw-Preise; zum Ausführen eines lokalen Modells mit API-Fallback unter Mehrere Agenten und Modelle in OpenClaw.
Was ausgeführt wurde
| Maschine | Apple M3 Max, 128 GB gemeinsamer Speicher |
| OpenClaw | 2026.9.7 aus npm, Node 24.21.0, openclaw agent --local --json, ein Durchlauf pro Ausführung |
| Ollama | Release-Binary v0.35.0, native API (ohne /v1) |
| Modelle | gemma4:latest – 7.5B, Q4_K_M, 6.6 GB auf der Festplatte; gpt-oss:20b – 20.9B, MXFP4, 13.8 GB; qwen3-coder:30b – 30.5B Mixture-of-Experts, Q4_K_M, 18.6 GB |
| Kontext | OpenClaw contextWindow 32.768 für alle drei; Ollama lud gemma4 und gpt-oss mit 131.072 und qwen3-coder mit 262.144 |
| Tool-Ausführung | OpenClaws Docker-Sandbox, Arbeitsbereich mit Lese- und Schreibzugriff eingebunden |
| Durchläufe | 4 Aufgaben × 3 Wiederholungen × 3 Modelle = 36, jeweils in einem frischen Arbeitsbereich mit frischem OpenClaw-Zustand |
Die vier Aufgaben
| Aufgabe | Was der Agent tun musste | Bestanden, wenn |
|---|---|---|
| Lesen | Lies ein 301-zeiliges Serviceprotokoll und nenne den Dienst in seiner einzigen ERROR-Zeile | Die Antwort enthält den richtigen Dienstnamen |
| Lösung | Führe eine Unit-Test-Datei aus, behebe den Fehler im von ihr getesteten Modul und führe sie erneut aus – ohne die Tests zu ändern | Tests beenden sich mit 0 und die Testdatei ist byteidentisch |
| Zählen | Zähle die Datenzeilen in fünf CSV-Dateien und schreibe die Zählungen in counts.json | counts.json entspricht dem erwarteten Objekt |
| Zwei-Dateien-Fix | Zwei unabhängige Fehler in zwei Modulen hinter drei fehlschlagenden Tests; beheben Sie beide, ohne die Tests anzufassen | Alle Tests beenden sich mit 0 und die Tests sind byteidentisch |
Ergebnisse
| Modell | Aufgabe | Bestanden | Medianzeit | Mediane Tool-Aufrufe | Fehlgeschlagene Tool-Aufrufe (3 Durchläufe) | Median-Tokens ein / aus |
|---|---|---|---|---|---|---|
gemma4:latest | t1-read | 3/3 | 50.2 s | 1 | 0 | 21,438 / 19 |
gemma4:latest | t2-fix | 3/3 | 47.5 s | 4 | 0 | 13,387 / 866 |
gemma4:latest | t3-count | 3/3 | 37.9 s | 7 | 1 | 13,073 / 513 |
gemma4:latest | t4-multi | 3/3 | 75.1 s | 10 | 6 | 16,417 / 2,441 |
gpt-oss:20b | t1-read | 3/3 | 38.7 s | 3 | 5 | 16,971 / 508 |
gpt-oss:20b | t2-fix | 3/3 | 54.2 s | 7 | 6 | 12,409 / 1,193 |
gpt-oss:20b | t3-count | 2/3 | 76.5 s | 10 | 5 | 13,247 / 1,713 |
gpt-oss:20b | t4-multi | 3/3 | 65.1 s | 11 | 3 | 13,065 / 1,380 |
qwen3-coder:30b | t1-read | 0/3 | 25.1 s | 0 | 0 | 8,915 / 38 |
qwen3-coder:30b | t2-fix | 0/3 | 34.8 s | 3 | 0 | 9,435 / 163 |
qwen3-coder:30b | t3-count | 2/3 | 36.9 s | 3 | 0 | 9,503 / 279 |
qwen3-coder:30b | t4-multi | 0/3 | 42.5 s | 5 | 0 | 9,992 / 243 |
Die Zeiten sind die Wall-Clock-Zeit pro Durchlauf, einschließlich etwa fünf bis sieben Sekunden für den OpenClaw-Start. „Tokens ein“ sind die ungecachten Eingaben, wie OpenClaw sie aufgezeichnet hat; der aus dem Cache erneut gesendete Kontext kommt hinzu und wird im folgenden Kostenabschnitt gezählt. Die Spalte für fehlgeschlagene Tool-Aufrufe zählt die von OpenClaw aufgezeichneten Fehler; die Fehler von qwen3-coder traten auf, bevor ein Aufruf OpenClaw erreichte, daher werden sie dort als null angezeigt und unten erklärt.
Was die Zahlen aussagen
- gemma4 und gpt-oss:20b sind beide für kurze Agentenaufgaben brauchbar. 23 ihrer 24 Durchläufe bestanden, einschließlich des Zwei-Dateien-Fixes, der das Lesen mehrerer Module, die Bearbeitung von zwei Modulen und einen erneuten Testlauf erfordert.
- gemma4 verwendete Tools sauberer. Bei der Leseaufgabe führte es jedes Mal genau einen Tool-Aufruf aus; gpt-oss führte drei aus, von denen gewöhnlich zwei fehlschlugen, bevor es die Datei las. Über alle zwölf Durchläufe hatte gpt-oss 19 fehlgeschlagene Tool-Aufrufe gegenüber 7 bei gemma4 und durchschnittlich 9.1 Assistant-Turns pro Aufgabe gegenüber 6.8 bei gemma4.
- Der einzige Fehler war gpt-oss bei der Zählaufgabe: Nach dreizehn Tool-Aufrufen schrieb es eine fehlerhafte counts.json und beendete den Turn ohne Antwort.
- Geschwindigkeit ist hier nicht der entscheidende Unterschied. Der Median lag über alle Durchläufe bei 53 s für gemma4 und 54 s für gpt-oss; der langsamste einzelne Durchlauf war gemma4s 133-s-Durchlauf beim Zwei-Dateien-Fix mit siebzehn Tool-Aufrufen. Die Durchläufe von qwen3-coder waren nur deshalb kürzer, weil sie früh fehlschlugen.
- Die größeren Modelle brachten bei diesen Aufgaben keine höhere Genauigkeit. gpt-oss:20b hat fast dreimal so viele Parameter wie gemma4, und qwen3-coder:30b, das für Code entwickelt wurde, erzielte von den drei Modellen das niedrigste Ergebnis.
Zwölf Durchläufe pro Modell reichen aus, um bei diesen Aufgaben ein Muster zu erkennen, aber nicht, um Modelle allgemein zu bewerten. Lange Aufgaben, größere Codebasen und andere Quantisierungen wurden nicht getestet.
Warum qwen3-coder:30b fehlschlug
Nicht beim Programmieren. Von den zehn fehlgeschlagenen Durchläufen:
- Fünf endeten im Ollama-Parser. qwen3-coder schreibt Tool-Aufrufe als XML, und wenn ein Argument Code enthielt, schloss es ein
<parameter>-Element mit</function>. Ollamas Serverprotokoll bei 0.35.0 verzeichnete "qwen tool call parsing failed … XML syntax error … element <parameter> closed by </function>", und OpenClaw beendete den Turn mit "Agent run failed". - Vier führten nie einen Aufruf aus. Die Antwort kündigte den nächsten Schritt an und gab dann ein einzelnes
</tool_call>als Text aus, ohne etwas, das Ollama als Aufruf parsen konnte; der Turn endete dort. Das ist das Symptom, das OpenClaws Dokumentation mit der/v1-URL verbindet – hier trat es bei der nativen API auf. - Einer war eine falsche Antwort: Das Modell zählte die CSV-Kopfzeilen als Datenzeilen.
Der Parser gehört zu Ollama, daher ist dies ein Ergebnis für Ollama 0.35.0 und kein Urteil über das Modell. Wenn du qwen3-coder mit OpenClaw ausführst, beobachte das Protokoll von ollama serve auf "qwen tool call parsing failed", bevor du das Modell verantwortlich machst, und teste nach einem Ollama-Upgrade erneut.
Die entscheidenden Einstellungen
- Native Ollama-URL. OpenClaws Dokumentation sagt, dass die
/v1OpenAI-kompatible URL „Tool-Aufrufe kaputt macht und Modelle rohes Tool-Call-JSON als einfachen Text ausgeben können“; die Durchläufe verwendetenbaseUrlohne/v1, zusammen mitapi: "ollama". - Bei manuell geschriebenen Einträgen
contextWindowfestlegen. In einem Smoke-Test ergab ein expliziter Modelleintrag ohne diese Einstellung einen Kontext von 200.000 Tokens; OpenClaws eigene Ollama-Einrichtung trägt 32.768 für lokale Modelle ein, und genau das wurde in diesen Durchläufen verwendet. - Ollamas Kontext ist getrennt. Ollama 0.35.0 lud gemma4 und gpt-oss mit 131.072 Tokens und qwen3-coder mit 262.144 – 45.3 GB resident –, unabhängig von OpenClaws 32.768; das bestimmt den Speicherbedarf, nicht OpenClaws Budget.
- Die Shell sandboxen. Ein lokales Modell, das Shell-Befehle auf deinem Rechner ausführt, ist hier das eigentliche Risiko. Mit
sandbox.mode: "all"lief exec im Docker-Image von OpenClaw, wobei nur der Arbeitsbereich eingebunden war; das Image wird einmal mit dem Befehldocker buildaus OpenClaws Sandbox-Dokumentation erstellt.
// ~/.openclaw/openclaw.json — the runs used one model per config; the
// fallbacks line shows the pattern and was not part of the measured runs
{
models: { providers: { ollama: {
apiKey: "ollama-local",
baseUrl: "http://127.0.0.1:11434", // native Ollama URL — no /v1
api: "ollama",
timeoutSeconds: 600,
models: [
{ id: "gemma4:latest", name: "gemma4:latest", contextWindow: 32768, maxTokens: 8192,
params: { keep_alive: "30m" } },
{ id: "gpt-oss:20b", name: "gpt-oss:20b", contextWindow: 32768, maxTokens: 8192,
params: { keep_alive: "30m" } },
],
} } },
agents: { defaults: {
model: { primary: "ollama/gemma4:latest", fallbacks: ["ollama/gpt-oss:20b"] },
sandbox: { mode: "all", workspaceAccess: "rw" }, // shell runs in Docker
} },
tools: { exec: { mode: "full" } },
}Was lokale Ausführung kostet
Ein lokales Modell ersetzt eine Rechnung pro Token durch Zeit, Speicherplatz und Strom. Pro Durchlauf zeichnete OpenClaw für gemma4 etwa 16,415 ungecachete Eingabetokens, 78,469 Tokens erneut gesendeten gecachten Kontexts und 1,142 Ausgabetokens auf, für gpt-oss 13,761, 88,688 und 1,192. Als grobe Rechnung – Tokenizer unterscheiden sich zwischen Modellen – ergeben dieselben Mengen zu den Kunavo-Tarifen von Claude Haiku 4.5 ($0.70 Eingabe, $0.07 gecacht, $3.50 Ausgabe pro Million) etwa $0.021 und $0.020 pro Durchlauf. Der Stromverbrauch wurde nicht gemessen; die Stromkosten pro Durchlauf berechnen sich als Watt × Sekunden ÷ 3.600.000 × dein Preis pro kWh.
Das praktische Muster ist ein lokales Primärmodell mit einem gehosteten Fallback für die Turns, bei denen das lokale Modell fehlschlägt. OpenClaw akzeptiert eine fallbacks-Liste pro Agent; ein Kunavo-Schlüssel funktioniert neben Ollama als OpenAI-kompatibler Provider und wird pro Token aus einem vorausbezahlten Guthaben abgerechnet. Niemand bei Kunavo hat OpenClaw gegen seinen Endpunkt ausgeführt – diese Durchläufe waren vollständig lokal.
Häufig gestellte Fragen
Welches ist das beste lokale Modell für OpenClaw?
Von den drei von uns gemessenen Modellen war gemma4 das von OpenClaw selbst empfohlene Ollama-Modell. Auf einem M3 Max mit 128 GB, mit OpenClaw 2026.9.7 und Ollama 0.35.0, bestand gemma4 (7.5B, Q4_K_M) alle 12 bewerteten Durchläufe über vier Aufgaben; gpt-oss:20b (20.9B, MXFP4) bestand 11 von 12, mit 19 fehlgeschlagenen Tool-Aufrufen gegenüber 7 bei gemma4; qwen3-coder:30b bestand 2 von 12, weil seine Tool-Aufrufe im Parser von Ollama wiederholt fehlschlugen. Das Ergebnis betrifft drei Modelle bei kurzen Aufgaben, nicht eine Rangliste aller lokalen Modelle.
Kann OpenClaw mit Ollama vollständig offline laufen?
Ja, was die Modellaufrufe betrifft: Wenn der Provider auf einen lokalen Ollama-Host zeigt, gingen alle Modellanfragen in diesen Durchläufen an 127.0.0.1. Verwende die native URL http://127.0.0.1:11434, nicht die OpenAI-kompatible /v1-URL – laut OpenClaws Ollama-Dokumentation führt /v1 zu fehlerhaften Tool-Aufrufen und kann Modelle dazu bringen, rohes Tool-Call-JSON als Text auszugeben. Skills oder Tools, die das Internet erreichen, benötigen weiterhin eine Verbindung, und das Docker-Sandbox-Image von OpenClaw muss einmal erstellt werden (es wird nicht automatisch heruntergeladen).
Wie viel Speicher benötigt ein lokales OpenClaw-Modell?
Auf der Festplatte belegt gemma4 6.6 GB, gpt-oss:20b 13.8 GB und qwen3-coder:30b 18.6 GB. Im geladenen Zustand meldete Ollama 13.7 GB für gpt-oss und 45.3 GB für qwen3-coder, weil Ollama 0.35.0 den Kontext selbst festlegte – 131.072 Tokens für gemma4 und gpt-oss, 262.144 für qwen3-coder – unabhängig von den 32.768, die OpenClaw mitgeteilt wurden. Auf einem Mac mit 128 GB passt all das; auf einem Gerät mit 16 oder 32 GB wäre es ohne kleineren Kontext nicht möglich. Kleinere Geräte wurden nicht getestet.
Ist ein lokales Modell im Vergleich zu einer API kostenlos?
Not free, just billed differently: you pay in time, disk and electricity instead of per token. Each run here used about 95,000–105,000 tokens counting OpenClaw's re-sent context — on a metered API at Claude Haiku 4.5 rates that would be roughly $0.021 a run, as rough arithmetic across different tokenizers. A local run took about 54 seconds; power draw was not measured, so the electricity side is a formula: watts × seconds ÷ 3,600,000 × your price per kWh.
Warum schlägt qwen3-coder in OpenClaw mit Ollama fehl?
In unseren Durchläufen lag es am Tool-Call-Format, nicht am Code. qwen3-coder schreibt Tool-Aufrufe als XML, und bei Ollama 0.35.0 endeten fünf seiner zwölf Durchläufe mit der Meldung "qwen tool call parsing failed" im Ollama-Serverprotokoll – einem XML-Syntaxfehler, bei dem ein <parameter>-Element durch </function> geschlossen wurde. Danach stoppte OpenClaw mit "Agent run failed". Vier weitere Durchläufe gaben ein einzelnes </tool_call> als Text aus, ohne einen von Ollama parsebaren Aufruf, sodass nichts ausgeführt wurde. Prüfe das Serverprotokoll auf diese Warnung, bevor du das Modell verantwortlich machst, und teste mit einer neueren Ollama-Version erneut: Der Parser gehört zu Ollama, und dieses Ergebnis ist spezifisch für 0.35.0.
Warum sollte man contextWindow beim manuellen Hinzufügen von Ollama-Modellen zu OpenClaw festlegen?
Weil ein expliziter Modelleintrag ohne diese Einstellung in unserem Smoke-Test einen Kontext von 200.000 Tokens ergab – weit mehr, als die meisten lokalen Modelle verarbeiten können –, während OpenClaws eigene Ollama-Einrichtung 32.768 für lokale Modelle einträgt. Das Festlegen von contextWindow (und maxTokens) hält das Komprimierungsbudget von OpenClaw realistisch. Es ändert nicht Ollamas eigenes num_ctx: Ollama lud die Modelle hier weiterhin mit 131.072.
Ausgeführt am 1. Oktober 2026 auf einem Apple M3 Max (128 GB): OpenClaw 2026.9.7 (npm, Node 24.21.0), Ollama v0.35.0 (Release-Binary), gemma4:latest, gpt-oss:20b und qwen3-coder:30b aus der Ollama-Registry, geprüft per sha256. Jeder der 36 Durchläufe verwendete einen frischen Arbeitsbereich und einen frischen OpenClaw-Zustand, exec in OpenClaws Docker-Sandbox und einen Skript-Grader; Tool-Aufrufe und Tokenzahlen stammen aus OpenClaws eigener JSON-Ausgabe. Aufgaben-Fixtures, Grader und das Adapter-Skript werden mit den Belegen dieser Seite veröffentlicht. Nicht gemessen: Stromverbrauch, lange Aufgaben, andere Quantisierungen oder kleinere Geräte.