Dokumentation

Dokumentation

OpenHands

OpenHands leitet jeden Modellaufruf über LiteLLM weiter. Daher müssen zwei Felder zusammenpassen: eine Modell-ID mit dem Präfix openai/ und eine Basis-URL mit /v1. Stimmen beide Angaben, kommuniziert der Reiter „Advanced“ über einen einzigen Schlüssel mit Claude und GPT.

Settings → LLM → Advanced erwartet drei Felder — Custom Model, Base URL, API Key — wobei die Modell-ID das Präfix openai/ trägt und die Basis-URL /v1 behält.

Settings → LLM → Advanced
# Settings → LLM → Advanced  (toggle "Advanced" on first)
Custom Model   openai/claude-sonnet-5
Base URL       https://api.kunavo.com/v1
API Key        sk-kn-...

# The "openai/" prefix is the provider, not a vendor: it tells OpenHands to
# speak the OpenAI Chat Completions protocol to the Base URL above. The model
# id after the slash is Kunavo's, and resolves at Kunavo.
#
# Keep the /v1. It belongs to the openai/ prefix — a litellm_proxy/ model
# takes the bare origin instead, which is the opposite convention.
Behalten Sie /v1 bei und behalten Sie das Präfix openai/ bei — beides gehört zu einer einzigen Entscheidung. Auf der Einstellungsseite von OpenHands steht lediglich: „Wenn Ihr Provider über eine spezifische Basis-URL verfügt, geben Sie sie hier an.“ Das Feld selbst klärt die erforderliche Form also nicht. Das Präfix schon. Auf der Seite „Configure a Model“ wird für einen OpenAI-kompatiblen Server openai/<served-model-id> vorgegeben. Die ID stammt „üblicherweise von dessen Endpunkt GET /v1/models“. Der einzige konkrete Wert, den die Seite für die Base URL dieser Route zeigt, endet mit /v1 — http://host.docker.internal:1234/v1 in der Anleitung zu LM Studio. Der Vergleich belegt den Unterschied: Für ein litellm_proxy/-Modell ist eine Basis-URL mit https://your-litellm-proxy.com dokumentiert, ganz ohne /v1. Wer beides vermischt — openai/ mit einem Basis-Endpunkt oder ein /v1 unter litellm_proxy/ — erhält häufig einen 404- statt eines 401-Fehlers.
Beide openai/-Beispiele von OpenHands beziehen sich auf lokale Server — LM Studio, Ollama, vLLM, SGLang. Die Dokumentation enthält kein konkretes Beispiel für ein entferntes OpenAI-kompatibles Gateway. Oben werden daher die Präfixregel und die Form des Werts zitiert, nicht eine Seite zu genau diesem Anwendungsfall. Sollte OpenHands künftig ein solches Gateway dokumentieren, ist diese Seite maßgeblich.
Diese Konfiguration wurde anhand der eigenen Dokumentation von OpenHands am unten angegebenen Datum gelesen. Kunavo hat OpenHands nicht mit seinem Endpunkt ausgeführt — weder einen Dialog noch eine gestreamte Runde, einen Tool-Aufruf mit Rückgabe oder eine festgelegte Client-Version. Eine veröffentlichte Einrichtungsseite ist kein Test, und nichts hier sollte als solcher verstanden werden. Den untenstehenden curl können Sie in zehn Sekunden überprüfen; das Verhalten des Clients klären Sie mit OpenHands.
Kunavo stellt keine Embedding-, Text-to-Speech- oder Speech-to-Text-Modelle bereit. Dieser Endpunkt beantwortet daher ausschließlich Chat-Completions-Anfragen — lassen Sie LLM_EMBEDDING_MODEL und LLM_EMBEDDING_DEPLOYMENT_NAME ungesetzt und verwenden Sie für jeden Vektorindex oder Audioschritt in Ihrer Einrichtung weiterhin den bereits dafür zuständigen Provider.
Noch kein Schlüssel? Erstelle ein Kunavo-Konto, erstelle einen Schlüssel (er beginnt mit sk-kn-) und füge ab $10 Guthaben hinzu – Aufrufe werden aus diesem Guthaben bezahlt, fehlgeschlagene Aufrufe werden nicht berechnet. Das Dashboard öffnet anschließend die OpenHands-Einrichtung.

Schritt für Schritt

  1. Erstellen Sie unter /app/keys einen Schlüssel und kopieren Sie ihn — er wird nur einmal angezeigt.
  2. Öffnen Sie Einstellungen → LLM und aktivieren Sie den Schalter Advanced. Die drei Felder erscheinen in dieser Reihenfolge: Custom Model, Base URL, API Key.
  3. Geben Sie die Modell-ID mit Präfix ein — openai/claude-sonnet-5, nicht claude-sonnet-5. Die von Kunavo bereitgestellten IDs erhalten Sie über GET /v1/models. Es handelt sich um dieselbe Liste, aus der laut eigener Dokumentation von OpenHands eine benutzerdefinierte ID stammen soll.
  4. Fügen Sie https://api.kunavo.com/v1 in Base URL und Ihren Schlüssel in API Key ein. Klicken Sie anschließend auf Änderungen speichern. Laut OpenHands-Dokumentation überprüft das Speichern eines lokalen Profils zuerst die Konfiguration anhand des Backends und blockiert das Speichern bei einem Fehler. Eine Fehlermeldung an dieser Stelle bedeutet daher eine tatsächliche Zurückweisung und ist kein bloßer Schönheitsfehler.
  5. Prüfen Sie, was das Backend erreichen kann, nicht was Ihr Browser erreicht. Die Basis-URL muss von dem Rechner aus aufgelöst werden können, auf dem der Agent Server läuft. Laut Dokumentation ist 127.0.0.1 der Container, wenn Agent Canvas in Docker läuft. Ein öffentlicher Endpunkt wie der von Kunavo ist unkompliziert; ein vorgeschalteter Unternehmensproxy hingegen nicht.
  6. Starten Sie eine neue Unterhaltung und geben Sie ihr eine Aufgabe, bei der eine Datei gelesen und bearbeitet wird. OpenHands weist darauf hin, dass ein gespeichertes LLM für neue Unterhaltungen gilt und ältere Unterhaltungen erst neu gestartet werden müssen. Ein Durchlauf, der die Tools verwendet, verrät mehr über die Kombination als eine Begrüßung.

Abgeglichen mit Die Seite „Language Model (LLM) Settings“ von OpenHands am 21. September 2026. Einstellungen von Drittanbietern können sich ändern; wenn ein Feldname hier nicht mehr mit deiner Ansicht übereinstimmt, ist diese Seite maßgeblich, nicht diese hier.

Vor dem Debugging des Clients prüfen

Eine Anfrage klärt, ob der Fehler am Endpunkt, am Schlüssel oder an der Konfigurationsdatei liegt. Wenn diese Anfrage JSON zurückgibt, funktionieren dieselbe Basis-URL und derselbe Schlüssel in OpenHands.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
  -H "Authorization: Bearer sk-kn-..."

Welche Modell-ID in das Feld gehört

Jedes Textmodell ist über eine Modell-ID erreichbar – die aktuelle Liste findest du unter GET /v1/models, den Katalog mit Preisen auf der Modellseite. Die Tarife sind USD pro 1 Mio. Token, Eingabe / Ausgabe.

Modell-IDKunavo: Ein- und AusgabeWo es in OpenHands hineinpasst
claude-sonnet-5$1.40 / $7.00das Arbeitsmodell für den Alltag — geben Sie es als openai/claude-sonnet-5 ein
claude-opus-4-8$3.50 / $17.50das Modell, das OpenHands' eigene Indextabelle an die Spitze der Claude-Familie setzt
claude-haiku-4-5$0.70 / $3.50ein günstiges Profil für Routineänderungen, zu dem mitten im Gespräch gewechselt wird
gpt-5-6-sol$2.00 / $12.00eine zweite Modellfamilie mit demselben Schlüssel und derselben Basis-URL
gpt-6-astra$4.00 / $20.00eine dritte Meinung, wenn ein Plan wiederholt aus dem Ruder läuft
Die Abrechnung erfolgt pro Token aus einem vorausbezahlten Guthaben ohne Monatsgebühr – siehe Abrechnung. Bei wiederholtem Kontext – dem Großteil dessen, was ein Editor oder Chat-Client sendet – verändert Prompt-Caching die Rechnung stärker als die Modellwahl.

Drei Grenzen, die Sie vor der Fehlersuche kennen sollten

OpenHands umfasst mehr Komponenten als eine CLI mit einem einzigen Prozess. Zwei davon sehen wie der LLM-Endpunkt aus, sind es aber nicht. Diese Angaben stammen aus der eigenen Dokumentation von OpenHands, die am oben genannten Datum eingesehen wurde:

  1. Die Sandbox ist nicht das Modell. OpenHands führt Ihre Arbeit in einer Agent-Server-Sandbox aus und ruft das Modell über das Netzwerk auf. Das sind separate Komponenten mit separaten Zugangsdaten. Ein hier konfigurierter Schlüssel ermöglicht Modellaufrufe. Er sagt nichts darüber aus, was die Sandbox erreichen kann; ein Netzwerkproblem der Sandbox äußert sich nicht als Authentifizierungsfehler.
  2. ACP-Agenten sind vollständig davon getrennt. Agent Canvas kann Aufgaben an Claude Code, Codex oder Gemini CLI als ACP-Agent delegieren. Auf der Seite „Configure a Model“ steht, dass diese „ihren Modellzugriff selbst verwalten“. Ein LLM-Profil leitet diesen Unterprozess also nicht um. Wenn Sie Anfragen über Ihren Schlüssel erwartet haben, aber keine sehen, prüfen Sie, welcher Agent tatsächlich läuft. Unter OpenHands im Vergleich zu Claude Code wird diese Aufteilung einschließlich der Regel zur Priorität von Zugangsdaten erläutert, die darüber entscheidet.
  3. Profile und die Obergrenze von 10 Profilen. Eine gespeicherte Konfiguration wird zu einem LLM-Profil. Das zuletzt gespeicherte Profil wird für neue Unterhaltungen aktiv. Zwischen Profilen kann während einer Unterhaltung gewechselt werden, ohne den Kontext zu verlieren. So lassen sich eine günstige und eine teure Modell-ID mit einem einzigen Schlüssel nutzen. Die Dokumentation begrenzt die Zahl auf 10 Profile pro Konto. In einer Provider-Verbindung werden Provider, API-Schlüssel und eine optionale Basis-URL einmalig für mehrere Profile hinterlegt. Auf derselben Seite steht, dass dieser Bereich bei lokalen Agent-Server-Backends verfügbar ist und bei einem OpenHands-Cloud-Backend ausgeblendet wird.

Häufig gestellte Fragen

Wie richte ich OpenHands auf einen benutzerdefinierten API-Endpunkt aus?

Öffnen Sie Einstellungen → LLM und aktivieren Sie den Schalter Advanced. Laut OpenHands dient er dazu, „benutzerdefinierte Modelle und einige zusätzliche LLM-Einstellungen festzulegen“. Es erscheinen drei Felder in dieser Reihenfolge: Custom Model, Base URL, API Key. Geben Sie die Modell-ID mit einem Provider-Präfix ein — openai/<model-id> für einen OpenAI-kompatiblen Endpunkt —, tragen Sie den Endpunkt in Base URL ein, fügen Sie Ihren Schlüssel ein und klicken Sie auf Save Changes. Die gespeicherte Konfiguration wird zu einem LLM-Profil und gilt für neue Unterhaltungen; ältere müssen neu gestartet werden, damit sie übernommen wird.

Muss die Base-URL von OpenHands mit /v1 enden?

Bei einem Modell mit dem Präfix openai/: ja. Auf der Einstellungsseite steht lediglich, dass die Base-URL angegeben werden soll, wenn der Anbieter eine bestimmte URL hat. Daraus allein geht das Format nicht hervor – entscheidend ist das Präfix. Auf der Seite „Configure a Model“ von OpenHands wird für einen OpenAI-kompatiblen Server openai/<served-model-id> vorgegeben. Die ID wird dem GET /v1/models-Endpunkt entnommen. Die einzige konkrete Base-URL, die OpenHands für diesen Weg im LM-Studio-Tutorial angibt, lautet http://host.docker.internal:1234/v1. Bei einem Modell mit dem Präfix litellm_proxy/ ist es umgekehrt: Die dokumentierte Base-URL ist der reine Proxy-Ursprung ohne /v1. Für Kunavo lautet der Wert also https://api.kunavo.com/v1.

Warum weigert sich OpenHands, mein LLM-Profil zu speichern?

OpenHands prüft ein lokales Profil vor dem Speichern anhand des Backends. Laut Dokumentation wird das Speichern blockiert und der Fehler angezeigt, wenn die Validierung fehlschlägt – als Beispiele werden ein ungültiger API-Schlüssel und ein nicht verfügbares Modell genannt. Eine blockierte Speicherung ist also eine tatsächliche Ablehnung. Prüfen Sie zunächst außerhalb des Clients, welche der beiden Angaben falsch ist: Ein curl-Aufruf an den /v1/models-Endpunkt mit demselben Schlüssel gibt bei korrekter Kombination JSON zurück, bei einem falschen Schlüssel 401 und bei einer falschen URL 404. Ältere Backends ohne Validierungsunterstützung überspringen die Prüfung und speichern das Profil normal.

Kann OpenHands Claude-Modelle über einen OpenAI-kompatiblen Endpunkt verwenden?

Ja. Das Präfix openai/ bezeichnet ein Wire-Protokoll, keinen Anbieter: OpenHands sendet eine Chat-Vervollständigung im OpenAI-Format an die konfigurierte Base-URL und übergibt die ID nach dem Schrägstrich unverändert. Daher wird eine Claude-ID an diesem Endpunkt aufgelöst, nicht innerhalb von OpenHands. Beachten Sie, dass OpenHands stark auf Tool-Aufrufe setzt und laut eigener Dokumentation ein leistungsstarkes Modell benötigt, um ordnungsgemäß zu funktionieren. Das ist also nicht der richtige Ort für die günstigste verfügbare ID.

Hat Kunavo diese Konfiguration mit OpenHands getestet?

Nein. Am 21. September 2026 wurde die Dokumentation von OpenHands geprüft – daraus stammen die zitierten Feldnamen, ihre Reihenfolge, die Präfixregel und das Format der Base-URL. Kunavo hat keine OpenHands-Konversation über seinen Endpunkt ausgeführt und macht hier keine Aussagen zu Authentifizierung, Streaming, Tool-Rundläufen oder zum Modell-Routing in einer festgelegten Client-Version. Unabhängig prüfen lässt sich lediglich, ob der Endpunkt und der Schlüssel überhaupt funktionieren. Dafür dient der curl-Aufruf auf dieser Seite.