Zum Inhalt springen
In Entwicklung · nicht auf npm

PromptPrinter CLI

Finn im Terminal, mit demselben Konto wie die Web-App. Den Server-Teil dafür habe ich in der Web-App gebaut, er läuft seit dem 29. Oktober 2026 in Produktion.

  • Node 22+
  • 0 Abhängigkeiten
  • Deutsch · Englisch
  • MIT-Lizenz
PromptPrinter 0.1.0 Finn ist eine KI und kann Fehler machen. Prüf wichtige Angaben selbst. /pp <Idee> Prompt drucken /help Befehle /exit Ende

Das echte Startbild aus src/banner.mjs. In schmalen Terminals oder in einer Pipe steht nur PromptPrinter 0.1.0.

Eine echte Sitzung

Vom Einfall zum fertigen Prompt

Nachgespielt aus der Aufnahme vom 3. November 2026, Zeile für Zeile. Finns Antworten sind echt, die Eingaben Beispiele.

Angemeldet als lena.demo@example.test, Pro, Server-Key /pp <Idee> Prompt drucken /help Befehle /exit Ende /pp Ich will meinen Lebenslauf für eine Junior-Stelle als Webentwickler überarbeiten lassen. Finn denkt nach ... Finn: Kurz ein paar Fragen, damit ich den Lebenslauf optimal für dich anpassen kann: 1. In welchem Bereich möchtest du genau arbeiten (z.B. Frontend, Backend, Full Stack)? 2. Welche Programmiersprachen und Frameworks beherrschst du am besten? 3. Hast du bereits berufliche oder relevante Praktikaerfahrung? 4. Soll der Lebenslauf eher konservativ oder kreativ gestaltet sein? Kleine Agentur in Zürich, eine Seite, sachlich, Schwerpunkt auf meinen Projekten mit Next.js und Supabase. Finn denkt nach ... Finn: ┌─ Prompt Du bist ein erfahrener Karriereberater mit Spezialisierung auf Webentwickler-Bewerbungen. Überarbeite meinen Lebenslauf für eine Bewerbung als Junior-Webentwickler bei einer kleinen Agentur in Zürich. Der Lebenslauf soll sachlich und auf einer Seite sein, mit besonderem Fokus auf meinen Projekten, die ich mit Next.js und Supabase umgesetzt habe. Strukturiere den Lebenslauf wie folgt: 1. Persönliche Daten (mit Platzhaltern [Name], [Adresse], [Telefonnummer], [E-Mail]) 2. Kurzprofil (2-3 Sätze zu meinen Kernkompetenzen als Webentwickler) 3. Kompetenzen (mit Fokus auf Next.js, Supabase, sowie relevanten Programmiersprachen, Frameworks und Tools) ... /copy kopieren /save speichern /pp neuer Prompt
Das Original. Lokaler Server mit Demokonto, Finns Antworten echt (Modell glm-4.5-air). Hier steht der ganze Prompt.

Anmeldung

Ein Code statt eines Passworts

Das Terminal zeigt einen Code, der Browser bestätigt ihn. Den Server-Teil und die Seite /cli dafür habe ich in der Web-App gebaut.

  1. 1Das Terminal zeigt einen Code und die Adresse.
  2. 2Im Browser den Code eintippen und das Terminal anmelden.
  3. 3Das Terminal ist angemeldet. Kein Passwort im Terminal.

/pp --kontext

Erst zeigen, dann senden

Mit --kontext nimmt Finn den Projektordner dazu. Was den Rechner verlässt, sieht man vorher ganz.

  1. 01 Ordner Der Ordner, in dem das Programm gestartet wurde.
  2. 02 Sammeln Bis drei passende Zeilen je Datei, aus höchstens zehn Dateien. Git-StandRegeldateienTrefferzeilen
  3. 03 Schwärzen [redacted: …] Bekannte Geheimnis-Muster ersetzt, .env und Schlüssel nur mit Namen. Idee und Kontext höchstens 8000 Zeichen.
  4. 04 Vorschau Die ganze Nachricht, wer sie bekommt und dass sie im Chat-Verlauf bleibt.
  5. 05 Senden? jgeht an Finn. nAlles andere, Strg+C oder eine Pipe: nichts geht weg.
10. src/repl.mjs (Prompt, Terminal; 21 hits; changed recently) 5: import { extractPrompt } from "./extract-prompt.mjs"; ... Darin: Git-Stand, Regeldateien, Trefferzeilen (Zeilen: 30, Dateien: 10). Geschwärzte Stellen: 0. Gesperrte Dateien, nur mit Namen: 0. An: PromptPrinter und, über den Server-Key, Z.ai in Singapur. Auch die Auszüge aus deinem Code gehen dorthin. Der Text bleibt in deinem Chat-Verlauf gespeichert, sichtbar im Browser, und geht mit späteren Nachrichten dieses Gesprächs erneut ans Modell. Das Schwärzen erkennt bekannte Muster, nicht jedes Geheimnis. Lies den Text, bevor du sendest. Senden? Nur j sendet. [j/N] n Nichts gesendet.

Antworte selbst auf die Frage im Terminal:

Das Original. Hier mit n abgebrochen.

Befehle

Tipp einen Befehl an

Die Antworten im Fenster sind die Texte aus dem Programm (src/messages.mjs), Konto und Datei aus der Demo.

/pp <Idee> Prompt drucken /help Befehle /exit Ende

Alles andere geht an Finn. Strg+C stoppt eine laufende Antwort, an der leeren Eingabe beendet es das Programm.

Aus der Shell: promptprinter loginlogoutwhoami--version--help

Stand

Gebaut, noch nicht auf npm

122Tests
66Mutationstests, in der CI unter Linux alle erkannt
30/30Abnahme mit dem echten Programm gegen einen lokalen Server, darunter ein Konto mit zweitem Faktor
3Betriebssysteme in der CI: Ubuntu, Windows und macOS, mit Node 22 und 24

Noch nicht geprüft: ein Lauf mit echtem Konto und echtem Modell gegen Produktion, und ob Finn mit dem Projektkontext bessere Prompts druckt. Auf npm kommt das Programm erst mit meinem eigenen Konto und meiner Freigabe.

Sicherheit

Schranken im Programm

  • Text vom Server wird bereinigt

    Ein Terminal führt Steuerfolgen aus. Darum wird alles vom Server vor der Anzeige gesäubert.

  • Ein Token, ein Server

    Die Anmeldung geht nur an den Server, der sie ausgestellt hat.

  • Kein KI-Key im Terminal

    Den Key des KI-Anbieters kennt das Programm nie, er bleibt in der Web-App.

Herausforderung · Windows

Die Anmeldedatei war unter Windows für fremde Konten lesbar

ProblemUnter Linux und macOS darf nur der Besitzer die Anmeldedatei lesen. Unter Windows erbt sie die Rechte des Ordners, und auf meinem Rechner durften zwei lokale Konten einer Sandbox-Software den ganzen AppData-Ordner lesen. Mit der Datei hätten sie in meinem Namen chatten können.

LösungDas Programm nimmt seinem Ordner die geerbten Rechte und gibt ihn nur dem eigenen Konto, wie 0700 unter Linux. Ein Test prüft das unter Windows. Er fand gleich den nächsten Fehler: In Git Bash war die erste Fassung still wirkungslos, weil dort ein anderes whoami zuerst im Pfad steht. Jetzt mit festem Pfad.