Pi mit mittwald AI Hosting
Pi ist ein CLI-Coding-Agent mit Read-, Bash-, Edit- und Write-Tools, einem Erweiterungssystem und einer Terminal-UI. Provider werden in einer JSON-Datei deklariert, was einen OpenAI-kompatiblen Endpoint wie mittwald AI Hosting unkompliziert einzubinden macht.
Installation
Das Installationsskript legt alle Abhängigkeiten auf feste Versionen fest.
Aktualisieren kannst du Pi danach mit pi update:
curl -fsSL https://pi.dev/install.sh | sh
Oder mit npm, dafür brauchst du Node.js 22.19 oder neuer:
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
Oder mit Homebrew:
brew install pi-coding-agent
Installation prüfen:
pi --version
Pi oder opencode
Beide sind CLI-Coding-Agenten, die mit mittwald AI Hosting funktionieren; der
Unterschied liegt darin, wie viel vor der eigentlichen Arbeit geladen wird.
Direkt gegen das mittwald-Gateway gemessen sendet Pis erste Anfrage einen
2.640 Zeichen langen System-Prompt (als Nachricht mit der Rolle developer)
plus JSON-Schemas für seine 4 eingebauten Tools – read, bash, edit,
write – zusammen 3.024 Zeichen, macht insgesamt rund 6 KB für den ersten
Request-Body. Dank des kleinen, festen Toolsets und des kompakten Prompts geht
weniger vom Kontextfenster des Modells drauf, bevor die eigentliche Arbeit
beginnt.
opencode bringt von Haus aus mehr mit: ein Plugin-Array, Agent Packs, in denen jeder Agent sein eigenes Modell bekommen kann, und ein Schrittlimit pro Agent. Auf der Platte belegt Pi rund 142 MB, opencode rund 160 MB, ein moderater Unterschied so oder so.
Wer einen kleinen, skriptbaren Agenten will und MCP-Server sowie Erweiterungen lieber erst bei Bedarf hinzufügt, startet mit Pi. Wer von Anfang an ein volleres, batteries-included Setup will, siehe opencode.
Pi auf mittwald AI Hosting zeigen lassen
Pi liest Provider aus ~/.pi/agent/models.json. Füge einen Provider-Block
hinzu:
{
"providers": {
"mittwald": {
"name": "mittwald AI Hosting",
"baseUrl": "https://llm.aihosting.mittwald.de/v1",
"api": "openai-completions",
"apiKey": "sk-...",
"models": [
{
"id": "Qwen3.8-27B-NVFP4",
"name": "Qwen3.8-27B-NVFP4",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 256000,
"maxTokens": 32768,
"samplingParams": {
"temperature": 1.0,
"top_p": 0.95,
"top_k": 20,
"presence_penalty": 0
}
},
{
"id": "Qwen3.6-35B-A3B-FP8",
"name": "Qwen3.6-35B-A3B-FP8",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 256000,
"maxTokens": 32768
}
]
}
}
}
Ersetze sk-... durch deinen AI-Hosting-API-Key. Den legst du im Bereich
AI-Hosting deines mStudio-Projekts an — siehe
API-Key einrichten. Ein
mStudio-API-Token aus den Profileinstellungen ist ein anderes Zugangsmittel und
funktioniert hier nicht.
Der Wert von api muss openai-completions sein – das wählt das
OpenAI-kompatible Request-Format.
Mach ihn in ~/.pi/agent/settings.json zum Standard:
{
"defaultProvider": "mittwald",
"defaultModel": "Qwen3.8-27B-NVFP4"
}
samplingParams pro Modell sind optional. Pi übernimmt sie unverändert in
jede Anfrage, Felder wie presence_penalty kommen also beim Modell an. Die
empfohlenen Werte für jedes Modell stehen auf dessen Seite in der
Dokumentation zu KI-Modellen.
Für Qwen3.8-27B-NVFP4 stehen oben die Werte für den Thinking-Modus. Das
Modell denkt standardmäßig, und Pi schaltet das nicht ab: Pi schickt seine
Thinking-Stufe als reasoning_effort mit. Solange du defaultThinkingLevel
nicht änderst, ist das medium. Bei der Stufe off lässt Pi das Feld ganz
weg, und das Modell denkt trotzdem.
Verbindung prüfen
Die deklarierten Modelle sollten jetzt aufgelistet sein:
pi --list-models
Erzwinge dann einen Tool Call, denn eine reine Chat-Antwort würde auch bei kaputtem Tool Calling gelingen:
pi --provider mittwald --model Qwen3.8-27B-NVFP4 --no-session \
-p "Create a file called hello.txt containing the word hello, then read it back."
Erwartet: Pi schreibt die Datei, liest sie zurück und gibt den Inhalt aus.
Führe das in einem Scratch-Verzeichnis aus – der Agent schreibt Dateien dort,
wo du ihn startest. --no-session hält den Lauf flüchtig, es bleibt also
kein gespeicherter Chatverlauf zurück.
Empfohlene Erweiterungen und MCP-Server
Erweiterungen
Erweiterungen werden aus npm installiert und in settings.json unter
packages festgehalten:
pi install npm:pi-safe-compact
pi list
| Erweiterung | Was sie macht |
|---|---|
pi-safe-compact | Sichere Context-Compaction in langen Sessions |
@narumitw/pi-plan-mode | Ein Plan-dann-Ausführen-Modus |
pi-background-tasks | Langlaufende Befehle, ohne die Session zu blockieren |
@juicesharp/rpiv-todo | Aufgaben-Tracking innerhalb einer Session |
Aktiviertes lässt sich mit pi config umschalten.
MCP-Server
Seit Version 0.99.0 kann Pi MCP selbst, eine Erweiterung brauchst du dafür
nicht mehr. Trag die Server in ~/.pi/agent/mcp.json ein:
{
"mcpServers": {
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp"]
},
"fetch": {
"command": "uvx",
"args": ["mcp-server-fetch"]
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp"]
}
}
}
Du kannst Server auch von der Shell aus hinzufügen und danach prüfen, ob sich jeder davon verbindet:
pi mcp add context7 -- npx -y @upstash/context7-mcp
pi mcp list
Beim Start einer Session verbindet Pi alle aktivierten Server im Hintergrund.
Ihre Tools meldet Pi dem Modell standardmäßig nicht einzeln an. Das Modell
ruft sie über Pis Tool codemode auf, dadurch landen die Tool-Schemas nicht
in jeder Anfrage. Wie du das mit exposure änderst und Remote-Server
einbindest, steht unter
MCP Servers
in der Pi-Dokumentation.
Die Erweiterung pi-mcp-adapter gibt es weiterhin. Sie ersetzt aber die
eingebaute MCP-Unterstützung, und Pi liest dann keine mcp.json mehr.
Für den Zugriff auf mittwald-Infrastruktur siehe MCP-Integration.
Skills
Pi entdeckt Skills automatisch, oder du lädst einen explizit:
pi --skill ./path/to/skill
Discovery für einen Lauf deaktivieren mit --no-skills.
Troubleshooting
Ein deklariertes Modell fehlt in pi --list-models
Der Provider-Block hat einen JSON-Syntaxfehler, oder api ist nicht
openai-completions. Datei validieren:
python3 -m json.tool ~/.pi/agent/models.json.
MCP-Server werden ignoriert
Ruf pi mcp list auf. Der Befehl verbindet sich mit jedem aktivierten Server
und zeigt Status, Tools und Fehler an. Sieht die Liste gut aus, fehlen in der
Session aber trotzdem die MCP-Tools, dann schau mit pi list nach
pi-mcp-adapter. Diese Erweiterung ersetzt die eingebaute MCP-Unterstützung,
und Pi ignoriert dann die mcp.json. Die .pi/mcp.json eines Projekts liest
Pi erst, wenn du dem Projekt vertraust.
Der Agent wiederholt denselben Tool-Call
Der Agent liest immer wieder dieselben Dateien und kommt nie zu einer
Änderung. Jede Runde geht von deinem Token-Kontingent ab. Ein Schritt- oder
Rundenlimit hat Pi 1.4.0 nicht, weder in den
Einstellungen
noch bei den
Kommandozeilenoptionen.
In der Terminal-UI brichst du die laufende Aufgabe mit Escape ab. Läuft Pi
unbeaufsichtigt mit -p, begrenz die Laufzeit über die Shell, etwa mit
timeout 15m pi -p "..." aus den GNU coreutils.
Verhindern lässt sich eine Schleife damit nicht. Sie entsteht vor allem bei
ausgeschaltetem Thinking. Lass bei Qwen3.8-27B-NVFP4 das Thinking für
Planung und Tool-Arbeit an, so wie in der Konfiguration oben. Hast du es
abgeschaltet, etwa mit chat_template_kwargs in samplingParams, nimm das
wieder heraus. Siehe
Agent-Schleifen im Non-Thinking-Modus.
Ein .pi/-Verzeichnis erscheint trotz --no-session
Das ist erwartbar, wenn die Erweiterung pi-background-tasks installiert
ist – sie schreibt Task-Status pro Lauf unter .pi/tasks/, unabhängig vom
Session-Flag, denn --no-session deaktiviert nur den Konversationsverlauf,
nicht erweiterungslokalen Zustand. Gefahrlos löschbar; führe Agenten in einem
Scratch-Verzeichnis aus, wenn nichts zurückbleiben soll.
Nächste Schritte
- Hermes Agent – ein weiterer CLI-Agent
- opencode – ein dritter
- MCP-Integration – mittwald-Infrastruktur aus dem Agenten heraus verwalten
- KI-Modelle – die vollständige Modellliste
Disclaimer
Drittanbieter-Tools, MCP-Server und externe Links werden zur Vereinfachung bereitgestellt, ohne Gewährleistung oder Empfehlung. Nutze sie auf eigenes Risiko, prüfe Lizenzen und Datenschutzrichtlinien und vergib nur die nötigen Berechtigungen (Least Privilege). Sende keine sensiblen Daten an externe Services, sofern nicht nötig und erlaubt.