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.
- Schnellster Weg:
curl -X POST https://api.ppq.ai/accounts/create→ liefert sofort einecredit_id+api_key. Diese credit_id bei ppq.ai aufladen. - Oder im Browser bei ppq.ai registrieren und den Key unter API Docs anlegen.
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:
- Prüfe die Modellzeile im TUI-Header. Bei einem frischen
hermes --tui-Start zeigt der Header das aktive Modell. Dort mussz-ai/glm-5.3-flashstehen — zeigt er etwas anderes:/modelausführen, denppq-Provider-Bereich öffnen und es als Default wählen. - Prüfe das Reasoning-Level. Führe
/reasoningin 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. - 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 dortn/astehen. 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:
- Einfach Fragen/Befehle tippen — Hermes plant und führt aus, mit seinen eingebauten Tools (Websuche, Dateien, Terminal usw.).
- Beliebige konkrete Aufgaben in normaler Sprache übergeben — z. B. „fasse diese URL zusammen", „recherchiere X und gib mir 3 Optionen", „schreib ein Skript, das Y tut".
/newbeim Themenwechsel nutzen, um Sessions sauber und günstig zu halten./model, um später das Modell zu wechseln (das Plugin bietet auch eine Live-Liste aus ppqs/v1/models).
Fehlerbehebung
| Symptom | Wahrscheinliche Lösung |
|---|---|
| /model zeigt unter ppq nichts | pins.json fehlerhaft → reparieren oder löschen; prüfen, dass hermes plugins list ppq zeigt |
| Auth-Fehler 401 | falscher API-Key → hermes auth list, nötigenfalls neu anlegen |
| Guthaben reicht nicht | bei ppq.ai aufladen (credit_id → Add Funds) |
| Kosten zeigt unknown | die 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)
- Jeder Turn schickt die gesamte Konversation erneut ans Modell — aufgelaufener Kontext ist eine wiederkehrende Kostenposition, keine einmalige.
- 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.
- 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>.mdschreiben 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)
| Posten | Wert |
|---|---|
| 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ühr | keine (ppq) |
| Trage-Kosten von 1M Kontext pro Turn (Rechenbeispiel bei f=0.66) | ≈$0.075/Turn |
| Cache-Anteil f, interaktive Sessions | variabel — selbst messen |
| Cache-Anteil f, enge Schleifen | hoch — selbst messen |
| Fork (/new + Brief) Einmalkosten | klein — selbst messen |
| Min-Abrechnungs-Floor bei Mini-Calls | ~1,8× Listen-Input-Satz |
state.db estimated_cost_usd | unzuverlä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.