Dokumentation

Dokumentation

Pi

Pi – der Terminal-Programmieragent von Earendil, nicht der Inflection-Chatbot und auch nicht die Kryptowährung – nimmt benutzerdefinierte Anbieter als einen Block in models.json entgegen: mit baseUrl, api, key und den gewünschten Modell-IDs. Vier Felder genügen, um über einen Schlüssel mit Claude und GPT zu kommunizieren.

Ein benutzerdefinierter Anbieterblock in ~/.pi/agent/models.json — baseUrl, api und die Modell-IDs — bringt Earendils Pi-Terminal-Programmieragent mit einem Schlüssel zu Claude und GPT.

~/.pi/agent/models.json
{
  "providers": {
    "kunavo": {
      "baseUrl": "https://api.kunavo.com/v1",
      "api": "openai-completions",
      "apiKey": "$KUNAVO_API_KEY",
      "models": [
        {
          "id": "claude-sonnet-5",
          "name": "Claude Sonnet 5",
          "reasoning": true,
          "input": ["text", "image"],
          "contextWindow": 1000000,
          "maxTokens": 128000
        },
        {
          "id": "claude-haiku-4-5",
          "name": "Claude Haiku 4.5",
          "input": ["text", "image"],
          "contextWindow": 200000,
          "maxTokens": 64000
        }
      ]
    }
  }
}
Das Suffix /v1 muss bei einem openai-completions-Anbieter erhalten bleiben. Im Beispiel für einen kompatiblen Endpunkt auf der Pi-Modellseite steht dieser Wert zusammen mit http://localhost:11434/v1. Vor der Überarbeitung der Dokumentation am 22. September enthielten auch die Beispiele für OpenRouter, Vercel AI Gateway und llama.cpp denselben Versionspfad. Keine Formulierung legt die Regel ausdrücklich fest, daher sind die Beispiele ausschlaggebend. Ohne das Suffix in der Base-URL erhalten Sie 404 statt eines Authentifizierungsfehlers.
Der Standardwert für cost eines benutzerdefinierten Modells ist durchgehend null. Dieser Standardwert ist im Quellcode von Pi (v0.99.2) festgelegt, wird in der Dokumentation aber nicht mehr ausdrücklich genannt. Daher zeigt der gerade hinzugefügte Anbieter in der Fußzeile und unter /session $0 an, bis Sie die Preise selbst eingeben. Die beiden stillschweigenden Standardwerte darunter können schwerwiegendere Folgen haben: contextWindow verwendet ersatzweise 128000, und maxTokens verwendet ersatzweise 16384. Bleibt ein Feld für ein Modell leer, werden Inhalt zusammengefasst und Eingaben weit vor der tatsächlich möglichen Grenze abgeschnitten. Der obige Block übernimmt beide Werte aus dem Katalog. Gehen Sie ebenso vor, wenn Sie eine ID aus der folgenden Tabelle hinzufügen.
In dieser Reihenfolge sucht Pi nach dem Schlüssel. Auf der Pi-Modellseite steht, dass bei mehreren konfigurierten Quellen zuerst „a runtime --api-key“, danach eine gespeicherte Anmeldedatenangabe auth.json, dann ein apiKey aus models.json und zuletzt die Umgebungsvariablen des Anbieters verwendet werden. Ein veralteter Schlüssel, der über /login gespeichert wurde, hat daher Vorrang vor dem Schlüssel in Ihrer Datei. Das ist die übliche Ursache dafür, dass ein gerade bearbeiteter Block weiterhin mit anderen Anmeldedaten authentifiziert wird. Auf derselben Seite steht außerdem, dass benutzerdefinierte Modelle „can load from models.json but remain unavailable in /model until Pi can resolve credentials“. Wenn ein Modell nicht in der Auswahlliste erscheint, liegt das an den Anmeldedaten und nicht an der Syntax.
Dieser Abschnitt wurde am unten genannten Datum aus Pis eigener Dokumentation übernommen; was diese Dokumentation am 22. September nicht mehr erwähnte – die Feldnamen, die Standardwerte für benutzerdefinierte Modelle und die Werte für api – stammt aus Pis Quellcode in v0.99.2 vom selben Tag. Kunavo hat Pi nicht mit seinem Endpunkt ausgeführt – weder eine Sitzung noch einen gestreamten Durchlauf, einen Tool-Roundtrip oder eine Prüfung, bei der festgestellt wurde, bei welchem Modell eine Anfrage landet. Eine veröffentlichte Einrichtungsseite ist eine Konfigurationsreferenz, kein Kompatibilitätstest, und nichts hier sollte als solcher verstanden werden. Den unten stehenden curl können Sie in zehn Sekunden überprüfen; wie sich der Client verhält, müssen Sie mit Pi klären.
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 Pi-Einrichtung.

Schritt für Schritt

  1. Erstellen Sie unter /app/keys einen Schlüssel und kopieren Sie ihn — er wird nur einmal angezeigt.
  2. Legen Sie es als Umgebungsvariable KUNAVO_API_KEY fest. Pi löst "$NAME" oder "${NAME}" im Feld apiKey auf, ebenso wie einen Literalwert oder einen vorangestellten !command. Verwenden Sie die geschweifte Form, wenn auf den Variablennamen wörtlicher Text folgt.
  3. Erstellen oder bearbeiten Sie ~/.pi/agent/models.json und fügen Sie den obigen Block ein. Für einen nicht integrierten Anbieter sind baseUrl und ein Wert für api auf Anbieter- oder Modellebene erforderlich – Pis Quellcode verweigert das Laden des Modells, wenn diese Angaben fehlen –, alles Weitere ist optional. Wenn Sie /model öffnen, wird die Datei neu geladen.
  4. Starten Sie pi, führen Sie /model aus und wählen Sie eine der von Ihnen angegebenen IDs. Wenn sie nicht angezeigt werden, überprüfen Sie den Schlüssel vor dem JSON – siehe den Hinweis zur Auflösungsreihenfolge oben.
  5. Geben Sie Pi eine Aufgabe, bei der eine echte Datei gelesen und bearbeitet wird. Pi setzt bei fast allem, was es tut, auf Tool-Aufrufe. Ein erster Durchlauf, der das Dateisystem nutzt, verrät Ihnen daher deutlich mehr als eine Begrüßung – und dabei würden Abweichungen beim Streaming oder im Tool-Schema sichtbar, also genau die Art von Problemen, auf die Kunavo Sie nicht geprüft hat.

Abgeglichen mit Pis Dokumentation „Modell auswählen“ am 1. Oktober 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.

Dies ist die Kurzfassung. Die vollständige Anleitung – Modellauswahl, Kosten einer tatsächlichen Sitzung und Fehlerszenarien – findest du in was der tatsächliche Betrieb von Pi kostet, je nach Route.

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 Pi.

# 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 Pi hineinpasst
claude-sonnet-5$1.40 / $7.00das Standardmodell für Sitzungen, in denen Dateien bearbeitet werden
claude-opus-5$3.50 / $17.50Planung einer Änderung, bei der ein Fehler teuer wäre
claude-haiku-4-5$0.70 / $3.50günstige Durchläufe — Triage, Zusammenfassungen und die Schleife, die den ganzen Tag läuft
gpt-5-6-sol$2.00 / $12.00eine zweite Meinung aus einer anderen Modellfamilie, mit demselben Schlüssel und derselben baseUrl
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.

Der andere Weg: anthropic-messages

Bis zur Aktualisierung seiner Dokumentation am 22. September 2026 führte Pi vier Werte für api eines benutzerdefinierten Anbieters auf – openai-completions, openai-responses, anthropic-messages und google-generative-ai. Auf der aktualisierten Modellseite ist keiner davon aufgeführt: In einem Beispiel steht openai-completions, und der Anwendungsfall wird als „Ein OpenAI-, Anthropic- oder Google-kompatibler Endpunkt“ beschrieben. Pis Quellcode in v0.99.2 typisiert das Feld als beliebige Zeichenfolge und leitet es an eine der zehn integrierten Implementierungen weiter, auf die es zutrifft – die vier genannten sowie openai-codex-responses, azure-openai-responses, google-vertex, mistral-conversations, bedrock-converse-stream und pi-messages. Nur die vier wurden je für einen benutzerdefinierten Anbieter dokumentiert; keine der sechs übrigen wurde hier getestet. Nichts auf dieser Seite besagt, dass eine davon mit einem Drittanbieter-Endpunkt funktioniert.

anthropic-messages ist einer der vier dokumentierten Werte, und Kunavo unterstützt neben der OpenAI-kompatiblen Oberfläche auch die Anthropic Messages-Oberfläche. Die Route lässt sich also konfigurieren. Diese Seite gibt jedoch keine Base URL dafür in einem Block an, den Sie kopieren und einfügen könnten: Pis Dokumentation hat dieses Feld für diese api nie eindeutig festgelegt. Bis zum 22. September war es auf zwei Arten dargestellt – https://proxy.example.com/v1 in einem Beispiel, ein bloßes https://proxy.example.com in einem anderen. Bei der Aktualisierung an diesem Tag wurden beide Beispiele entfernt, ohne eine Variante auszuwählen. Wenn Sie diese Route nutzen, probieren Sie eine Variante aus. Falls der erste Aufruf 404 statt 401 zurückgibt, ändern Sie diese Zeile.

Drei Felder in Pis compat-Schema für diese api (Quellcode, v0.99.2) sollten Sie kennen, bevor Sie dort ankommen. Zuerst die einzige Regel der Dokumentation, die für alle drei gilt: Kompatibilitätseinstellungen „sollten verifizierte Unterschiede im Anfrage- oder Antwortverhalten des Endpunkts beschreiben. Aktivieren Sie sie nicht allein deshalb, weil ein Endpunkt OpenAI- oder Anthropic-Kompatibilität angibt.“

  1. compat.supportsEagerToolInputStreaming – für ein Backend, das das eager Streaming von Eingaben pro Tool zurückweist.
  2. compat.supportsStrictTools – gibt an, ob der Endpunkt Tool-Definitionen mit striktem JSON-Schema akzeptiert; ein benutzerdefiniertes Modell übernimmt nicht die Angaben eines integrierten Anthropic-Modells.
  3. compat.supportsMidConvoEffort – ändert die Reasoning-Stärke während eines Gesprächs. Ob dieser Endpunkt dafür geeignet ist, muss zur Laufzeit festgestellt werden; Kunavo hat das nicht durch Ausführen eines Tests überprüft.

Der openai-completions-Block oben auf dieser Seite lässt alle drei Einstellungen weg. Das ist der sachliche Grund, dort zu beginnen, und keine Behauptung, dass er bessere Ergebnisse liefert.

Häufig gestellte Fragen

Wie richte ich den Pi-Coding-Agenten auf einen benutzerdefinierten API-Anbieter aus?

Fügen Sie in ~/.pi/agent/models.json einen Anbieterblock hinzu. Pis Modellseite empfiehlt models.json, „wenn ein Endpunkt eine API verwendet, die Pi bereits unterstützt“. Das Schema (Quellcode, v0.99.2) akzeptiert auf Anbieterebene baseUrl, apiKey, api, headers, authHeader, models und modelOverrides. Für einen nicht integrierten Anbieter sind baseUrl und ein api-Wert auf Anbieter- oder Modellebene erforderlich. Das Schema typisiert api als beliebige Zeichenfolge, nicht als Liste: Bis zur Aktualisierung der Dokumentation am 22. September 2026 führte Pi vier Werte für einen benutzerdefinierten Anbieter auf – openai-completions, openai-responses, anthropic-messages und google-generative-ai. Pis Quellcode in v0.99.2 leitet das Feld an eine von zehn integrierten Implementierungen weiter; die sechs übrigen wurden nie für diesen Anwendungsfall dokumentiert und hier nicht getestet. Für einen OpenAI-kompatiblen Endpunkt ist openai-completions der Wert, den die aktualisierte Dokumentation weiterhin zeigt. Jeder Eintrag unter models benötigt mindestens eine id, die unverändert an den Endpunkt übergeben wird. Damit lässt sich dieselbe Struktur für ein Gateway, einen lokalen Ollama- oder vLLM-Server und jeden anderen kompatiblen Host verwenden.

Woher bezieht der Pi-Coding-Agent seinen API-Schlüssel?

Aus einer von vier Quellen; die Modellseite von Pi gibt die Reihenfolge an: zuerst ein zur Laufzeit übergebenes --api-key, dann ein gespeicherter Zugang in auth.json, danach ein apiKey aus models.json und zuletzt die Umgebungsvariablen des Anbieters. Ein zuvor mit /login gespeicherter Schlüssel hat daher Vorrang vor dem Schlüssel, den Sie gerade in models.json eingetragen haben. Im Feld apiKey sind Umgebungsvariablen wie "$NAME" oder "${NAME}", ein Literalwert oder die Ausgabe eines Shell-Befehls mit vorangestelltem "!" möglich. Das Geheimnis muss also nicht in der Datei stehen. Laut Dokumentation werden benutzerdefinierte Modelle ohne verwendbare Zugangsdaten zwar aus models.json geladen, bleiben in /model jedoch nicht verfügbar.

Muss Pis baseUrl mit /v1 enden?

Für einen openai-completions-Anbieter: ja. Pis Dokumentation formuliert die Regel nicht ausdrücklich, aber im Beispiel für einen kompatiblen Endpunkt wird für Ollama http://localhost:11434/v1 verwendet. Vor der Aktualisierung der Dokumentation am 22. September 2026 endeten auch die Beispiele für OpenRouter, Vercel AI Gateway und llama.cpp mit demselben Versionspfad. Für einen OpenAI-kompatiblen Endpunkt ist der Wert also der /v1-Stamm, zum Beispiel https://api.kunavo.com/v1. Der Fall anthropic-messages ist tatsächlich ungeklärt: In der alten Dokumentation wurde er sowohl mit als auch ohne /v1 gezeigt; bei der Aktualisierung wurden beide Beispiele entfernt, ohne eine Variante auszuwählen.

Warum zeigt mein benutzerdefinierter Pi-Anbieter in der Fußzeile 0 $ an?

Weil Pi bei einem benutzerdefinierten Modell standardmäßig für alle Werte des Kostenobjekts null einsetzt (Quellcode, v0.99.2) und die Fußzeile die Angaben aus dem Katalog meldet, nicht die Gebühren des Endpunkts. Das bedeutet nicht, dass etwas kostenlos ist; der Zahl liegt lediglich keine Quelle zugrunde, solange Sie nicht die Tarife pro Million für Eingabe, Ausgabe, cacheRead und cacheWrite sowie etwaige Tarifstufen anhand der Preisliste Ihres Anbieters eintragen. Auch zwei benachbarte Standardwerte sollten Sie anpassen: contextWindow ist standardmäßig 128000 und maxTokens 16384. Bei einem Modell mit größerem Kontextfenster wird der Kontext daher vorzeitig komprimiert und die Antwort abgeschnitten, sofern Sie nicht beide Werte ausdrücklich festlegen.

Hat Kunavo den Pi-Coding-Agenten getestet?

Nein. Die Konfiguration auf dieser Seite wurde am angegebenen Datum Pis eigener Dokumentation entnommen und – wenn bei der Aktualisierung am 22. September ein Detail entfiel – Pis veröffentlichter Quellcode. Mit diesem Client wurde jedoch keine Sitzung, kein gestreamter Durchlauf, kein Tool-Roundtrip und keine Modell-Routing-Prüfung an diesem Endpunkt durchgeführt. Dasselbe gilt für jeden Client in diesem Abschnitt. Betrachten Sie den Einrichtungsblock als Referenz dafür, welche Werte Pis Schema akzeptiert, prüfen Sie Endpunkt und Schlüssel mit dem curl-Befehl oben und halten Sie eine funktionierende Route bereit, während Sie die Einrichtung ausprobieren.