Der Spickzettel zum Seminar Pi Coding Agent Praxis. Pi bewegt sich schnell — der Stand ist oben vermerkt, Quelle ist pi.dev. Verlässlich bleiben vor allem die Entscheidungen: Welche Regel gehört wohin, welche Rechte gibt man, wann lohnt welche Denkstufe.
Was Pi ist — und was bewusst fehlt
| Aspekt | Assistent im Editor | Agent-Harness wie Pi |
|---|---|---|
| Eingriff | Vorschlag an der Cursorstelle | Werkzeugaufrufe im Projekt |
| Umfang | eine Datei | mehrere Dateien, mehrere Schritte |
| Ergebnis | Text zum Übernehmen | geänderte Dateien, Shell-Ausgabe |
| Kontrolle | Tab drücken | Ergebnisse prüfen, Rechte setzen |
| Nicht im Kern | Konsequenz für die Arbeit |
|---|---|
| MCP | Werkzeuge kommen als Extension oder Package |
| Sub-Agents | Aufgaben selbst zerlegen — oder Package nachrüsten |
| Plan Mode | Planen als Prompt-Praxis statt als Modus |
| Permission-Popups | Rechte vorher bewusst festlegen |
| To-dos, Background-Bash | über eigene Extensions abbildbar |
Der kleine Kern ist keine Sparversion, sondern Kontrollgewinn — „Primitives, not features”. Und „fehlt” heißt nicht „geht nicht”: vieles ist nachrüstbar.
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
cd /pfad/zum/projekt
pi # interaktive Session
pi -p "Fasse dieses Repo zusammen" # ein Durchlauf
pi @README.md "Wie laufen die Checks?"
@datei stellt Dateien als Kontext bereit, !npm run lint ruft die Shell.
Module: Pi verstehen · Installation, Modelle & Konfiguration
Einsatzszenarien und Modi
| Szenario | Modus | Woran geprüft wird |
|---|---|---|
| Repo erschließen | interaktiv | Kommandos bestätigen Aussagen |
| Analyse in CI | print/JSON | Exit-Code und Ausgabeformat |
| Eigenes Tooling | RPC/SDK | Tests des umgebenden Programms |
| Teamregeln | AGENTS.md | Review der Datei im Repo |
Je unbeaufsichtigter der Modus, desto enger die Umgebung — und desto wichtiger ein Prüfpunkt, der ohne Zusehen trägt.
Modul: Pi verstehen
Zugangsdaten und Denkstufen
| Rang | Quelle | Typischer Einsatz |
|---|---|---|
| 1 | --api-key auf der CLI | einmaliger Sonderfall |
| 2 | ~/.pi/agent/auth.json | Dauerbetrieb, auch per /login |
| 3 | Umgebungsvariable | CI, Container, Skripte |
| 4 | Keys aus models.json | eigene bzw. lokale Provider |
Keys gehören nie ins Projekt-Repository — auch nicht nach .pi/. Ein
häufiges Rätsel: Der Key ist gesetzt, aber auth.json gewinnt.
| Thinking Level | Passt zu | Kosten/Zeit |
|---|---|---|
| off / minimal | Umbenennen, Formatieren, Suchen | sehr niedrig |
| low / medium | normale Feature-Arbeit | moderat |
| high | Fehlersuche, Architekturfragen | erhöht |
| xhigh / max | schwer eingrenzbare Fehler | hoch |
Niedrig starten und gezielt erhöhen, statt sich die höchste Stufe anzugewöhnen.
Welcher Kontext gehört wohin?
| Inhalt | Ort | Gilt |
|---|---|---|
| Dauerhafte Projektregeln | AGENTS.md | jede Session |
| Persönliche Vorlieben | ~/.pi/agent/AGENTS.md | alle Projekte |
| Firmenweite Vorgaben | übergeordnete Ebene | alle Repos der Firma |
| Aufgabenbezogene Dateien | @datei im Prompt | diese Aufgabe |
| Rollenverhalten | .pi/SYSTEM.md | dieses Projekt |
Je dauerhafter eine Regel gilt, desto weiter oben gehört sie hin — und Widersprüche zwischen Ebenen werden aufgelöst, nicht gestapelt.
| Anteil am Kontext | Herkunft | Steuerbar durch |
|---|---|---|
| Systemprompt | Pi bzw. SYSTEM.md | Projektdatei |
| Projektregeln | AGENTS.md | kurz halten |
| Dateien | @datei, read | Auswahl |
| Werkzeugausgaben | bash, grep | gezielte Kommandos |
Reserve für die Antwort: compaction.reserveTokens, Standard 16384.
| Vage | Präzise |
|---|---|
| „Mach das schneller” | „Reduziere Renderzeit messbar in list.tsx” |
| „Schreib Tests” | „Vitest-Test für Fehlerfall in parse()” |
| „Räum das auf” | „Nur Namen anpassen, kein Verhalten ändern” |
| „Fixe den Bug” | „npm test -- t.spec muss grün werden” |
Die rechte Spalte lässt sich prüfen — die linke nicht.
Module: AGENTS.md · Context Engineering · Development Workflow
Rechte und Schutzebenen
| Profil | Werkzeuge | Passt zu |
|---|---|---|
| Lesen | read, grep, find, ls | fremder Code, Reviews |
| Arbeiten | + write, edit | eigenes Projekt, Feature-Arbeit |
| Voll | + bash | Projekt mit Tests und Build |
Aufsteigend vergeben — nie mit dem vollen Profil beginnen. Das ergibt zugleich die Planphase, für die Pi keinen eigenen Modus braucht:
pi --tools read,grep,find,ls \
"Plane die Migration auf Vitest in 5 Schritten, je Schritt mit
Nachweis. Nichts ändern."
| Mechanismus | Schützt | Schützt nicht |
|---|---|---|
| Projektvertrauen | Konfiguration, Extensions | Dateien, Shell |
| Tool-Einschränkung | ungewollte Werkzeuge | erlaubte Werkzeuge |
| Container/VM | Host-Dateien, Netz | gemountete Pfade |
| Review der Änderungen | falsche Ergebnisse | Ausführung selbst |
Keine Schicht trägt allein — kombinieren.
Modul: Sicherheit & Agentenzugriff
Sessions
| Mittel | Wirkung | Ergebnis |
|---|---|---|
/tree | Alternativen in derselben Datei | ein Baum |
/fork | neue Datei ab früherer Nachricht | zwei Sessions |
/clone | aktiven Zweig verdoppeln | zwei Sessions |
/compact | Verlauf zusammenfassen | kürzerer Kontext |
Erst Zweck klären, dann Werkzeug wählen. Bei Themenwechsel /new statt
Nachschub in eine lange Session.
Modul: Session Management
AGENTS.md, Template, Skill oder Extension?
| Fall | Passendes Mittel | Begründung |
|---|---|---|
| Regel für jede Änderung | AGENTS.md | gilt immer |
| Formulierung, ein Schritt | Prompt Template | nur Text |
| Ablauf mit Schritten | Skill | wird geladen |
| Neues Werkzeug | Extension | braucht Code |
| Baustein | Inhalt | Wirkung |
|---|---|---|
| Umfang | „nur gestagte Änderungen” | keine Streuung |
| Kriterien | Korrektheit, Fehlerpfade | vergleichbar |
| Belegform | Datei, Zeile, Begründung | prüfbar |
| Ausschluss | „kein Stil, kein Refactoring” | kurze Berichte |
Ein Template je Zweck statt eines Universal-Reviews — der Ausschluss ist der Baustein, den man am ehesten vergisst.
| Parameter | Bedeutung | Beispiel |
|---|---|---|
$1, $2 | erstes, zweites Argument | /component Button |
$@ | alle Argumente zusammen | /note a b c |
${1:-x} | Argument oder Rückfall x | /review |
${@:2} | ab dem zweiten Argument | /task id rest… |
Mehr als drei Parameter sind ein Zeichen für einen Skill.
Module: Prompt Templates · Skills entwickeln
Extensions
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
export default function (pi: ExtensionAPI) {
pi.on("session_start", async (_e, ctx) => ctx.ui.notify("geladen", "info"));
pi.registerTool({
name: "greet",
description: "Greet someone by name",
parameters: Type.Object({ name: Type.String() }),
async execute(id, params) {
return { content: [{ type: "text", text: `Hello, ${params.name}!` }],
details: {} };
},
});
pi.registerCommand("hello", {
description: "Say hello",
handler: async (args, ctx) => ctx.ui.notify(`Hello ${args || "world"}!`),
});
// Guardrail: riskante Aufrufe abfangen
pi.on("tool_call", async (event, ctx) => {
const cmd = event.input.command ?? "";
if (event.toolName === "bash" && /rm -rf|curl .*\| sh/.test(cmd)) {
const ok = await ctx.ui.confirm("Riskant?", cmd);
if (!ok) return { block: true, reason: "blockiert" };
}
});
}
| Schutzebene | Wirkung | Grenze |
|---|---|---|
| Toolliste | Werkzeug fehlt ganz | erlaubte Werkzeuge frei |
| Guardrail-Extension | prüft je Aufruf | läuft im selben Prozess |
| Container/VM | Prozess eingesperrt | gemountete Pfade offen |
Vor dem Installieren fremder Erweiterungen:
| Kriterium | Gute Antwort | Warnsignal |
|---|---|---|
| Bedarf | konkrete, häufige Aufgabe | „könnte nützlich sein” |
| Rechte | nur was die Aufgabe braucht | Netz plus Shell plus Schreiben |
| Pflege | aktives Projekt, Quellcode lesbar | letzte Änderung unklar |
| Rückbau | pi remove, keine Reste | Handarbeit nötig |
Module: Extensions · Packages & Erweiterungen
Typische Fallen
- Verabredungen im Chat treffen, statt sie in
AGENTS.mdfestzuschreiben — und umgekehrt: Onboarding-Doku inAGENTS.mdkopieren. - Regeln, die man nicht prüfen kann („schreibe sauberen Code”).
- Drei Aufträge in einer Nachricht — dann priorisiert der Agent selbst.
- „Baue das Feature” ohne Abnahmekriterium — niemand kann prüfen.
- Die Ausgabe des Agenten als Beleg lesen statt als Behauptung.
- Änderungen übernehmen, ohne Tests oder Diff anzusehen.
- Bei jedem Tool-Aufruf bestätigen lassen — das liest bald niemand mehr.
defaultProjectTrust: "always"global setzen und fremde Repos öffnen.- Projektvertrauen vergeben, ohne
.pi/vorher gelesen zu haben. - Netzzugriff offen lassen, obwohl die Aufgabe ihn nicht braucht.
- Erweiterungen sammeln, ohne sie zu pflegen — jede ist Code mit vollen Rechten.
- Hohe Thinking Levels für mechanische Aufgaben bezahlen.
- Skills „für später” anlegen und nie testen.
- Regeln aus
AGENTS.mdins Template kopieren — zwei Wahrheiten.