Dokumentation
Junie CLI
Junie CLI übernimmt einen benutzerdefinierten Endpunkt aus einer JSON-Datei, nicht über eine Einstellungsseite. Mit neun Zeilen in $JUNIE_HOME/models/kunavo.json und junie --model custom:kunavo laufen Claude und GPT über einen Schlüssel – und der Datenverkehr für Hilfsaufgaben wird an einen günstigen Endpunkt geleitet.
Junie CLI akzeptiert einen benutzerdefinierten Endpunkt als JSON-Profil in $JUNIE_HOME/models/, wobei baseUrl die vollständige Endpunkt-URL ist und fasterModel den Zielort des Hilfsverkehrs bestimmt.
{
"id": "claude-sonnet-5",
"baseUrl": "https://api.kunavo.com/v1/chat/completions",
"displayName": "Kunavo",
"providerName": "Kunavo",
"apiType": "OpenAICompletion",
"apiKey": "${KUNAVO_API_KEY}",
"fasterModel": {
"id": "claude-haiku-4-5"
}
}baseUrl ist der vollständige Endpunkt samt Pfad. JetBrains sagt es ausdrücklich: „Die baseUrl wird als vollständige Endpunkt-URL verwendet – Junie hängt keinen Pfad daran an“ und weist an, „sie auf den vollständigen Endpunkt für den ausgewählten apiType festzulegen“. Dieses Feld enthält also weder den Ursprung noch den /v1-Stamm, den die meisten Clients erwarten, sondern https://api.kunavo.com/v1/chat/completions. Bei https://api.kunavo.com/v1 aufzuhören, ist der wahrscheinlichste Grund für einen 404-Fehler trotz ansonsten korrektem Profil.apiKey und extraHeaders können $${VAR_NAME}-Referenzen enthalten. JetBrains dokumentiert den Fehlerfall genau: „Wenn eine referenzierte Umgebungsvariable nicht gesetzt ist, kann das Profil nicht geladen werden, und Junie meldet mit einer Fehlermeldung, welche Variable fehlt.“ Exportieren Sie KUNAVO_API_KEY, bevor Sie Junie starten. Das Profil wird beim Laden eingelesen, nicht erst bei der ersten Anfrage. Fehlt der Export in der Shell, äußert sich das daher dadurch, dass das Profil aus /model verschwindet, und nicht durch einen 401-Fehler.fasterModel legt fest, wohin Junie Arbeit schickt, die Sie nicht angefordert haben. JetBrains beschreibt es als „das Modell für interne Hilfsaufgaben wie das Zusammenfassen des Kontexts oder das Klassifizieren von Aufgaben“ und erklärt, dass primaryModel oder fasterModel „die Eigenschaften der obersten Ebene übernehmen, wenn sie nicht ausdrücklich festgelegt sind“. Enthält ein Profil keinen fasterModel-Block, werden die Verwaltungsaufgaben also zum Tarif Ihres Hauptmodells abgerechnet. Die oben gezeigte einzeilige Überschreibung behebt das vollständig. Deshalb steht der Block in der minimalen Konfiguration und nicht im Anhang.curl unten können Sie in zehn Sekunden überprüfen; wie Junie darauf aufbaut, liegt zwischen Ihnen und JetBrains.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 Junie CLI-Einrichtung.Schritt für Schritt
- Erstellen Sie unter
/app/keyseinen Schlüssel und kopieren Sie ihn – er wird nur einmal angezeigt. Exportieren Sie ihn in der Shell, aus der Sie Junie starten werden, alsKUNAVO_API_KEY, oder tragen Sie stattdessen einen wörtlichen Schlüssel in die Datei ein. JetBrains weist darauf hin: „Werte ohne eine$${...}-Referenz werden unverändert verwendet.“ - Speichern Sie das obige JSON für Ihr Konto als
$JUNIE_HOME/models/kunavo.jsonoder zum Teilen mit einem Repository als.junie/models/kunavo.json. Der Dateiname ohne.jsonwird zur Profil-ID – dadurch zeigt die unten stehende Auswahlcustom:kunavoan. - Setzen Sie
idauf die ID des gewünschten Modells. Sie ist definiert als „die Modellkennung, wie vom API-Endpunkt erwartet“. Eine Kunavo-Kennung aus der Tabelle unten kann daher direkt eingetragen werden; die IDs werden am Endpunkt aufgelöst, nicht in Junie. - Starten Sie Junie und wählen Sie das Profil aus:
junie --model custom:kunavooder den Befehl/modelin einer interaktiven Sitzung. Benutzerdefinierte Modelle „erscheinen nach den integrierten Anbietern in der Modellauswahlliste“. - Geben Sie Junie eine Aufgabe, bei der eine Datei bearbeitet werden muss, statt nur eine Begrüßung. Junie ist ein agentischer Client und nutzt für fast alles Tool-Aufrufe. Ein erster Durchlauf, bei dem etwas gelesen und geschrieben wird, sagt daher viel mehr aus als eine einzelne Antwort.
Abgeglichen mit Die JetBrains-Seite zu benutzerdefinierten LLMs für Junie 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 Junie CLI.
# 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-ID | Kunavo: Ein- und Ausgabe | Wo es in Junie CLI hineinpasst |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | das primaryModel für gewöhnliche Aufgaben, bei denen Dateien bearbeitet werden |
claude-opus-5 | $3.50 / $17.50 | ein pro Sitzung festgelegter Plan, bei dem ein Fehler teuer wäre |
claude-haiku-4-5 | $0.70 / $3.50 | die Rolle fasterModel: Kontext zusammenfassen, Aufgaben klassifizieren |
gpt-5-6-sol | $2.00 / $12.00 | eine zweite Meinung aus einer anderen Modellfamilie – ein zweites Profil, derselbe Schlüssel |
Die beiden anderen apiType-Werte, die Kunavo beantwortet
apiType bezeichnet ein Anfrageformat, keinen Anbieter, und Junie akzeptiert vier Werte: OpenAICompletion, OpenAIResponses, Google und Anthropic. Kunavo stellt drei Routen bereit. Daher gibt es für zwei der drei übrigen Werte eine passende baseUrl. Da Junie keinen Pfad anhängt, müssen Sie beim Ändern des Formats auch die URL anpassen:
"apiType": "OpenAICompletion"mithttps://api.kunavo.com/v1/chat/completions– das Profil oben und die Empfehlung dieser Seite, weil diese Route von den dreien am häufigsten verwendet wird."apiType": "Anthropic"mithttps://api.kunavo.com/v1/messages– Kunavo unterstützt das Messages-Format auf diesem Pfad."apiType": "OpenAIResponses"mithttps://api.kunavo.com/v1/responses.
Welche der drei Möglichkeiten Junie für ein bestimmtes Modell am besten unterstützt, lässt sich durch einen Laufzeittest beantworten, nicht durch die Lektüre der Dokumentation. Deshalb bewertet diese Seite die Formate über die erste Zeile hinaus nicht. Wählen Sie eines aus und stimmen Sie URL und apiType aufeinander ab. Wenn ein Profil mit gesetztem Schlüssel einen 401-Fehler zurückgibt, tragen Sie die Zugangsdaten ausdrücklich ein, statt über den Header von Junie zu raten: JetBrains dokumentiert apiKey nur für den Fall, dass es weggelassen wird: „Wenn es fehlt, werden Anfragen ohne einen Authorization-Header gesendet“. Welches Schema verwendet wird, wenn es gesetzt ist, steht dort nicht. extraHeaders ist als „zusätzliche HTTP-Header, die in jede Anfrage aufgenommen werden“ dokumentiert und unterstützt dieselben $${VAR}-Referenzen. Damit ist "extraHeaders": {"Authorization": "Bearer $${KUNAVO_API_KEY}"} die eindeutige Schreibweise.
Häufig gestellte Fragen
Wie füge ich in Junie CLI einen benutzerdefinierten Anbieter hinzu?
Junie CLI liest benutzerdefinierte Anbieter aus JSON-Profilen statt aus einer Einstellungsseite. Legen Sie für Ihr Konto eine Datei in $JUNIE_HOME/models/ oder innerhalb eines Projekts in .junie/models/ ab. Der Dateiname ohne die Erweiterung .json wird zur Profil-ID. Erforderlich sind die Schlüssel id, baseUrl und apiType; optional sind apiKey, displayName, providerName, extraHeaders, extraBody, temperature, maxContextLength, primaryModel und fasterModel. Wählen Sie das Profil anschließend mit `junie --model custom:<id>` oder dem Befehl /model aus – benutzerdefinierte Modelle erscheinen nach den integrierten Anbietern in der Liste.
Muss Junie CLI bei baseUrl /v1 oder den vollständigen Pfad enthalten?
Den vollständigen Pfad. JetBrains erklärt, dass baseUrl als vollständige Endpunkt-URL verwendet wird und Junie keinen Pfad anhängt, und weist an, die URL auf den vollständigen Endpunkt für den ausgewählten apiType zu setzen. Für ein OpenAICompletion-Profil mit Kunavo lautet sie https://api.kunavo.com/v1/chat/completions – nicht der Ursprung und nicht der /v1-Stamm, den Clients wie Kilo Code benötigen. Aus demselben Grund enthalten beide Beispielprofile in der JetBrains-Dokumentation vollständige Pfade.
Warum meldet Junie, dass ein Profil wegen einer fehlenden Umgebungsvariable nicht geladen werden konnte?
Die Werte von apiKey und extraHeaders unterstützen ${VAR_NAME}-Referenzen. JetBrains dokumentiert, dass das Profil nicht geladen werden kann und Junie den Namen der fehlenden Variable in einer Fehlermeldung nennt, wenn eine referenzierte Umgebungsvariable nicht gesetzt ist. Die Auflösung erfolgt beim Laden des Profils. Das Symptom ist daher, dass das Profil aus der Modellliste verschwindet, und nicht eine fehlgeschlagene Anfrage. Exportieren Sie die Variable, bevor Sie Junie starten, oder ersetzen Sie die Referenz durch einen wörtlichen Wert.
Kann Junie CLI einen eigenen BYOK-Schlüssel über ein Gateway wie Kunavo verwenden?
Der BYOK-Bildschirm und ein benutzerdefiniertes Profil sind zwei unterschiedliche Wege. Auf der BYOK-Seite von JetBrains geht es darum, über /account oder „Use your own API key“ auf dem Willkommensbildschirm einen benannten Anbieter – OpenAI, Anthropic, Google, xAI, OpenRouter oder GitHub Copilot – anzubinden. Dort steht, dass die gesamte Nutzung vom Anbieter abgerechnet wird und kein JetBrains-AI-Abonnement erforderlich ist. Ein Endpunkt, der nicht auf dieser Liste steht, einschließlich Kunavo, wird stattdessen als benutzerdefiniertes LLM-Profil eingerichtet, also über die JSON-Datei auf dieser Seite. Eigene Schlüssel zu verwenden, ist eine Funktion von Junie CLI: In der Plugin-Dokumentation von JetBrains steht, dass das Junie-Plugin dies nicht unterstützt.
Warum ruft Junie ein Modell auf, das ich nicht ausgewählt habe?
Junie teilt ein Profil in zwei Rollen auf. fasterModel ist als Modell für interne Hilfsaufgaben wie das Zusammenfassen des Kontexts oder das Klassifizieren von Aufgaben dokumentiert. Wenn Sie diesen Block nicht festlegen, übernehmen die Rollen laut JetBrains die Eigenschaften der obersten Ebene. Der Datenverkehr für Hilfsaufgaben läuft dann über Ihr primäres Modell und wird zu dessen Tarif abgerechnet. Mit fasterModel.id legen Sie wie im Profil auf dieser Seite eine günstigere ID fest. Beide Rollen übernehmen baseUrl, apiType und apiKey von der obersten Ebene. Sie müssen daher nur die ID ändern.
Hat Kunavo Junie CLI getestet?
Nein. Am 21. September 2026 wurde die Dokumentation von JetBrains zu benutzerdefinierten LLMs geprüft. Die Feldnamen, ihre Reihenfolge, die akzeptierten apiType-Werte und die Regel für vollständige Endpunkt-URLs sind daraus zitiert. Kunavo hat Junie CLI nicht installiert, keinen Build festgelegt und keine Anfrage darüber gesendet. Kunavo macht hier keine Aussagen zu Streaming, Tool-Aufrufen und Rückgaben oder zum Modell-Routing innerhalb des Clients. Unabhängig prüfen lässt sich nur, ob Endpunkt und Schlüssel überhaupt funktionieren. Dafür dient der curl-Aufruf auf dieser Seite.