Einrichtungsanleitung

Hermes mit PayPerQ (ppq.ai) einrichten

Sieben Schritte zu einem laufenden Hermes Agent auf PayPerQ — pay-per-use, kein Abo — mit z-ai/glm-5.3-flash als einzigem gepinnten Modell. Sobald der Funktionstest klappt, ist der Agent selbst deine LLM-Schnittstelle.

1 · Hermes installieren

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash

Nicht direkt in den Setup-Assistenten springen lassen. Am Ende der Installation startet der Installer automatisch hermes setup — den vollständigen Setup-Assistenten mit Modell-/Provider-Auswahl. Beende ihn sofort (Strg+C, oder „cancel/exit" wählen) und komm hierher zurück. Das ppq-Plugin ist noch nicht installiert — alles, was du im Assistenten wählst, müsstest du danach wiederholen. Schließe zuerst die Schritte 2–5 ab und wähle das ppq-Modell dann in Schritt 5. (Nicht-interaktive bzw. headless-Installationen überspringen den Assistenten automatisch.)

2 · ppq-Plugin installieren (aus seinem GitHub-Repo)

Das Plugin ist noch nicht im Hermes-Plugin-Katalog, installiere es also manuell aus dem Repository. Das kopiert die Plugin-Dateien in das Plugin-Verzeichnis von Hermes:

git clone https://github.com/thepurpose-npub/ppq-hermes-provider
mkdir -p ~/.hermes/plugins/model-providers/ppq
cp ppq-hermes-provider/model-providers/ppq/{__init__.py,plugin.yaml} \
   ~/.hermes/plugins/model-providers/ppq/

3 · PayPerQ-Konto + API-Key besorgen

Pay-per-use, kein Abo: ab $0.10 aufladen (Krypto oder Karte), dann einen Key ziehen.

Dein Key = sk-…. Privat halten.

⚠️ Speichere die credit_id in dem Moment, in dem du sie auflädst — sie IST dein ppq-Konto. Beim API-Weg ist die credit_id, die bei der Kontoerstellung zurückkommt, das Einzige, das dein Konto identifiziert. Wenn du sie auflädst und dann verlierst, kannst du das Guthaben verlieren und aus dem Konto ausgesperrt sein. Speichere die credit_id an einem sicheren Ort — oder setze ein Lesezeichen auf die ppq-URL (sie enthält die credit_id), damit du immer zum aufgeladenen Konto zurückkommst. Mach das vor dem Aufladen, nicht danach.

4 · API-Key hinterlegen

Am einfachsten (empfohlen): den eingebauten Credential-Manager von Hermes nutzen. Er fragt nach dem Key, legt ihn im Credential-Pool ab und zeigt eine Bestätigung — kein Datei-Editieren, kein Tippfehler-Risiko in einer versteckten Datei:

hermes auth add ppq
# → Aufforderung: "Paste your ppq API key:"
#   den sk-...-Key aus Schritt 3 einfügen, Enter drücken, fertig.

Prüfen, ob gespeichert:

hermes auth list            # sollte einen Credential unter "ppq" zeigen

Fallback, falls hermes auth add ppq auf deiner Installation nicht erkannt wird: hermes config env-path | xargs nano ausführen und die Zeile PPQ_API_KEY=sk-... (dein echter Key) unten anfügen, dann speichern.

Prüfen, ob geladen:

hermes plugins list         # sollte "ppq — PayPerQ — v0.3.0" zeigen
hermes auth status          # sollte ppq als ready zeigen (nicht missing/expired)

5 · glm-5.3-flash als einziges gepinntes Modell festlegen

Der Picker des Plugins löst Pins in Schichten auf: deine pins.json gewinnt gegen alle Live-/Static-Defaults — schreibe also genau einen Eintrag.

mkdir -p ~/.hermes/ppq-plugin
cat > ~/.hermes/ppq-plugin/pins.json <<'EOF'
[
  "z-ai/glm-5.3-flash"
]
EOF

Starte dann hermes --tui, führe /model aus und wähle den ppq-Provider — z-ai/glm-5.3-flash sollte der einzige Eintrag unter seinem pinned-Bereich sein. Auswählen, damit es zum Default wird.

glm-5.3-flash ist kein Trial-/Gratis-Modell, daher ist hier kein Bootstrap-Credit-Fallback konfiguriert. Wenn du lieber zuerst den Live-Katalog durchstöbern willst: lösche pins.json, und das Plugin fällt auf eine kuratierte Liste der Top-Chat-Modelle zurück.

⚠ Vor deiner ersten Nachricht — Kosten-Leitplanken-Check

Wenn du die Modellauswahl überspringst, schützt dich Hermes nicht: sein Default-Modell-Slot ist leer, und was der Picker zuerst anzeigt, wird zum vollen Preis abgerechnet. Ein frisches Hermes kann auf einem sehr teuren Modell landen — ein verpasster /model-Schritt genügt. Prüfe alle drei Leitplanken, bevor du deine erste echte Nachricht schickst:

  1. Prüfe die Modellzeile im TUI-Header. Bei einem frischen hermes --tui-Start zeigt der Header das aktive Modell. Dort muss z-ai/glm-5.3-flash stehen — zeigt er etwas anderes: /model ausführen, den ppq-Provider-Bereich öffnen und es als Default wählen.
  2. Prüfe das Reasoning-Level. Führe /reasoning in der TUI aus. Hermes' Default ist medium — das ist das empfohlene Level: es balanciert Qualität gegen die Output-Kosten pro Anfrage. Hoch bedeutet spürbar mehr abgerechnete Output-Tokens bei jedem Turn.
  3. Prüfe die Kosten. Die TUI zeigt keinen Preis pro Antwort. Das Kostenfeld der Statusleiste (opt-in via display.show_cost) ist nur eine laufende Session-Schätzung — und bei Relay-Endpunkten wie ppq kann dort n/a stehen. Der verbindliche Preis pro Anfrage ist die Konto-Aktivitätsseite von ppq.ai: glm-5.3-flash sollte bei etwa $0.002–$0.01 pro Austausch liegen. Siehst du dort einstellige Dollarbeträge statt Cent-Bruchteilen: stopp — du bist auf dem falschen Modell.

Zusätzliche Leitplanken: eine Session pro Thema (/new zwischen Themen — lange Sessions abrechnen jeden Turn mehr Input-Tokens — siehe den Kosten-Spickzettel unten); gelegentlich ins ppq.ai-Usage-Dashboard schauen, wenn sich etwas teuer anfühlt; und deinen sk-…-Key nirgendwo einfügen außer bei hermes auth add ppq.

6 · Funktionstest

hermes -z "Sag hallo in einem Satz."

Sollte eine Antwort zurückgeben, abgerechnet mit etwa $0.002–$0.01 von deinem Guthaben (glm-5.3-flash: $0.16/M Input, $0.53/M Output — sehr günstig). Danach auf der ppq.ai-Konto-Aktivitätsseite nachsehen: die Anfrage sollte dort auftauchen, im Cent-Bruchteil-Bereich abgerechnet.

Das ist ein One-Shot-Lauf — er gibt die Antwort aus und beendet sich; damit sind Key und Modell bewiesen, ohne eine volle Session zu öffnen. Für den Alltag: hermes --tui statt -z.

7 · Übergabe an den LLM — ab hier sprichst du mit Hermes

Sobald der Funktionstest klappt, bist du fertig — hermes --tui startet Hermes, und ab hier sprichst du einfach mit ihm: viben, explorieren, fragen, bauen, arbeiten. Der Agent selbst ist die LLM-Schnittstelle. Ab hier kannst du:

Fehlerbehebung

Schnelle Lösungen für die häufigsten Symptome.
SymptomWahrscheinliche Lösung
/model zeigt unter ppq nichtspins.json fehlerhaft → reparieren oder löschen; prüfen, dass hermes plugins list ppq zeigt
Auth-Fehler 401falscher API-Key → hermes auth list, nötigenfalls neu anlegen
Guthaben reicht nichtbei ppq.ai aufladen (credit_id → Add Funds)
Kosten zeigt unknowndie TUI-Statusleiste schätzt nur die Session-Kosten (opt-in via display.show_cost) und bleibt bei Relay-Endpunkten auf n/a — für den echten Abrechnungsbetrag die ppq.ai-Konto-Aktivitätsseite prüfen

💡 Erstes Projekt — ein h-Launcher

Jetzt, wo deine Hermes-Instanz läuft, gib ihr ihren ersten kleinen Job: einen Launcher, damit du nicht den vollen Befehl tippen musst, um in die TUI zu kommen. Statt hermes --tui tippst du einfach h im Terminal, und die TUI startet.

Gib diesen Prompt deinem laufenden Hermes — er kann das Tool selbst bauen und installieren:

Baue ein kleines Tool, damit ich die Hermes-TUI starte, indem ich `h` ins Terminal
tippe statt des vollen Befehls. Installiere es so, dass es auch in neuen Shells funktioniert.

Warum das ein guter Erstbau ist: winzig und risikoarm — und es beweist die Übergabe aus Schritt 7 von A bis Z: du hast in normaler Sprache gefragt, Hermes hat geplant und gebaut, keine manuellen Schritte für dich übrig.

Kontext- & Kosten-Spickzettel — so halten Sessions die Kosten klein

Lange Sessions kosten mehr, als der Listenpreis des Modells vermuten lässt: jeder Turn rechnet den gesamten aufgelaufenen Kontext neu ab — die Kosten wachsen also mit Kadenz und mitgeschlepptem Kontext, nicht damit, wie viel du „erledigt“ hast. Dieses Blatt liefert das mentale Modell, die Kernzahlen und eine Handvoll Hebel — Kadenz, Delegation und Forking —, die die Rechnung planbar halten. Wer nur eine Minute hat, liest die Abschnitte 1–3; der Rest ist Nachschlagewerk.

Zum manuellen Nutzen oder um es jemandem zu erklären. Vor großen Entscheidungen den Preisanker neu verifizieren. Geschrieben aus dem eigenen Hermes-Workflow des Autors — Hebel, Schwellwerte und Zahlen sind vom Autor gemessen, nicht aus der Vendor-Doku.

1 · Das mentale Modell (3 Sätze)

  1. Jeder Turn schickt die gesamte Konversation erneut ans Modell — aufgelaufener Kontext ist eine wiederkehrende Kostenposition, keine einmalige.
  2. Die erneute Übertragung wird nur zum Cache-Preis (1/5 von fresh) abgerechnet, wenn der vorherige Turn aktuell ist; nach einer Minutenlücke stirbt der Cache und alles rechnet zum vollen fresh-Preis neu.
  3. Output ist die Premium-Dimension: ~3,3× der fresh-Input-Preis; Output+Reasoning dominieren typischerweise die reale Rechnung.

2 · Erklärversion (ein Absatz)

„Jeder Konversation-Turn rechnet den gesamten aufgelaufenen Kontext neu ab. Cache macht das 5× günstiger, aber nur, wenn du nicht für Minuten pausierst. Also: halte die Haupt-Session schlank (knappe Turns, gebündelte Calls, kurze Outputs), schiebe jeden großen Lesevorgang in einen Wegwerf-Subagenten, der eine Zusammenfassung zurückgibt, und wenn die Session über ihren Brief hinaus ~10–15k Tokens gewachsen ist, teile sie an einer natürlichen Bruchstelle mit einem schriftlichen Handover-Brief — der Split kostet Cents, der mitgeschleppte Kontext kostet Dollars. Miss echte Sessions in der state.db statt zu raten, und verifiziere Preise neu, bevor du den Schwellwerten vertraust.“

3 · Die drei Entscheidungen

(a) Inline — jetzt in der Haupt-Session erledigen: ≤ ~10 Tool-Calls, kein einzelner Lesevorgang > ~35k Zeichen (~8k Tokens; ~44k Zeichen, wenn die Child-Baseload ~20k ist), geringes Risiko, keine Nutzer-Eingabe mitten im Lauf nötig.

(b) Delegieren — an einen Subagenten schieben: jeder Bulk-Lesevorgang > ~8k Tokens (~35k Zeichen), wenn ≥10 Turns übrig sind.

  • Inline zahlt R fresh einmal + R × T × Trage-Rate wiederkehrend.
  • Das Child zahlt R fresh einmal in seinem eigenen kurzlebigen Kontext; das Parent trägt nur die ~2–3k-Token-Zusammenfassung.
  • Rechenbeispiel: 50k-Zeichen-Lesevorgang über 20 Turns → inline $0.0396 vs. delegiert $0.0109 — 3,6× günstiger.
  • Delegier-Regeln: in sich geschlossenes Ziel+Kontext (Children sehen nichts von deiner Konversation), überprüfbarer Anker für jeden externen Effekt, EIN Call mit Tasks-Array für parallele Posten, Children liefern KURZE Ergebnisse zurück (≤ ~2k Tokens).

(c) Fork — /new mit einem Handover-Brief: wenn der Kontext jenseits des Briefs ~10–15k Tokens übersteigt und noch mehrere Turns übrig sind. Der Fork selbst ist fast gratis; die echten Kosten sind der menschliche /new-Aufwand und der Verlust von Arbeitszustand — beide durch die Brief-Konvention minimiert.

  • Nur an natürlichen Bruchstellen forken: fertiges Deliverable, Themenwechsel, oder alle restlichen Posten nutzer-gated.
  • Fork-Prozedur: YYYY-MM-DD-handover-<slug>.md schreiben mit Status+Grund, fetter Kickoff-Formel („lies <Datei> und führe aus"), nummerierten offenen Posten mit exakten Befehlen/Pfaden, Beleg-Pfaden. Dann den Nutzer um /new bitten und den Kickoff machen.
  • Ausnahme: fork KEINEN absichtlich großen, read-only-Referenzkontext, der in enger Schleife abgefragt wird — warme Großkontext-Schleifen sind günstig.

Risiko schlägt Größe: ein winziger Posten, der Geheimnisse, destruktive Ops oder nach außen gerichtete Sends berührt, ist Nutzer-GO-Territorium — niemals ein günstiger Inline-Posten.

4 · Die Zahlen (ppq-Listenpreise)

ppq-Listenpreise für glm-5.3-flash — vor dem Verlassen auf sie bei ppq.ai prüfen.
PostenWert
Fresh-Input$0.15825 /M Tokens
Cache-Read-Input$0.03165 /M (= exakt 1/5 von fresh)
Output$0.5275 /M Listenpreis (realisierter Satz kann über dem Listenpreis liegen)
Cache-Write-Gebührkeine (ppq)
Trage-Kosten von 1M Kontext pro Turn (Rechenbeispiel bei f=0.66)≈$0.075/Turn
Cache-Anteil f, interaktive Sessionsvariabel — selbst messen
Cache-Anteil f, enge Schleifenhoch — selbst messen
Fork (/new + Brief) Einmalkostenklein — selbst messen
Min-Abrechnungs-Floor bei Mini-Calls~1,8× Listen-Input-Satz
state.db estimated_cost_usdunzuverlässig: schließt Reasoning-Output aus

f = cache_read / (fresh + cache_read) pro Session — berechenbar aus ~/.hermes/state.db, Tabelle session_model_usage.

5 · Cache-TTL-Regel

  • Keine publizierte TTL (Z.ai: nur „reasonable time limits, will recalculate after expiration“). Empirisch im Minutenbereich.
  • Jede Nutzerlücke > ein paar Minuten als vollen Cache-Miss behandeln: der gesamte aufgelaufene Kontext rechnet im nächsten Turn fresh neu ab.
  • Folge: dichte Bursts schlagen verteiltes Tempo — antworte hintereinander weg und forke dann an der Pause, statt in einer schweren Session zu idlen.
  • Willst du eine gemessene Grenze für dein Konto? Das braucht pro-Call-Timestamps aus der ppq-Usage-CSV (die Hermes-DB zeichnet keine auf).

6 · Output-Disziplin

  • Knappe Haupt-Session-Turns; von Children kurze Ergebnisse verlangen.
  • Tool-Calls zu einzelnen Turns bündeln — hält den Cache warm UND umgeht den Min-Abrechnungs-Floor, der Mini-Calls ~1,8× Input-Satz zahlen lässt.
  • Output+Reasoning ist typischerweise der größte Anteil der realen Rechnung → der Hebel Nr. 1 nach der Kadenz.

7 · Anti-Patterns

  • Eine große Datei inline vorzusammenfassen, „um Tokens zu sparen“ — verbrennt genau den Kontext, den du schützen willst. Den Lesevorgang delegieren.
  • Manuelles /new zwischen jeder Runde — Forks sind günstig, aber jeder braucht einen Brief; Arbeit stattdessen routen, nur an natürlichen Bruchstellen forken.
  • Idlen/Polling in einer schweren Session, während man auf einen Timer oder einen Nutzer-Test wartet — zeitgesteuerte Arbeit gehört in den Kickoff der NÄCHSTEN Session.
  • Der DB-Kostenschätzung für die Abrechnung vertrauen — bei reasoning-lastigen Sessions ~10–15% dazurechnen; für €-Beträge die CSV verwenden.
  • Eine warme Großkontext-Read-only-Schleife forken.
  • Einem Child einen riesigen context-Block schicken, der die gesamte Session dupliziert — in sich geschlossen ≠ alles; gib das Ziel, die exakten Pfade und die Abnahmekriterien.

8 · Messen statt vorhersagen

sqlite3 ~/.hermes/state.db \
  "SELECT session_id, input_tokens, cache_read_tokens, output_tokens,
          reasoning_tokens, api_call_count
   FROM session_model_usage ORDER BY rowid DESC LIMIT 10;"
# f = cache_read / (input + cache_read)

Die Kontextgröße einer Aufgabe lässt sich nicht vorab annehmen — frag ab, was IST, bevor du Schwellwerte justierst. Prüfe auch sessions.parent_session_id für echte Child-Baseloads.

9 · Offene Caveats (ehrliche Unbekannte)

  • Die Schwellwerte sind ein Schnappschuss — Preise neu verifizieren; es gibt keinen Repricing-Alarm.
  • Child-Baseload ~15k ist unverifiziert — nachmessen.
  • Cache-TTL ist nicht publiziert; Minutenbereich aus gemessenem f abgeleitet, nicht aus einer Vendor-Angabe.
  • Dieses Blatt deckt nur Größe/Kosten/Risiko-Routing ab — privacy-sensible Arbeit braucht eine zusätzliche Schicht obendrauf.