Kirat - Multi Model AI Council

offiziell

Eine KI liefert dir eine Denkweise. Kirat ist eine Claude-Desktop-Erweiterung und ein Claude-Code-Plugin, das ChatGPT und Gemini als Rat hinzufügt: unabhängige Positionen, eine Abstimmung mit beibehaltener abweichender Meinung und Code-Review, bei dem jeder Befund von einer zweiten Modellfamilie geprüft wird. Eigene API-Schlüssel mitbringen. Kostenpflichtig, einmalig.

Was kann man mit Kirat Multi Model AI Council MCP machen?

  • Eine Multi-Modell-Abstimmung zu einer Entscheidung einholen — Bitte kirat_vote, den Rat zu einer geschäftlichen oder technischen Frage mit Optionen und Kontext zu befragen.
  • Code auf Sicherheit und Korrektheit prüfen — Verwende kirat_review, um gegengeprüfte Befunde mit Schweregraden und vorgeschlagenen Korrekturen zu erhalten, bevor du auslieferst.
  • Die abweichende Meinung und die Begründung hinter einer Entscheidung sehen — Erhalte die vollständigen Positionen jedes Modells, einschließlich der Minderheitsstimme, mit Konfidenzwerten und Begründung.

Dokumentation

01 — Replay

Sieh dem Rat bei der Arbeit zu.

Echte Aufzeichnungen von Kirats Werkzeugen, erstellt am 13. Oktober 2026 mit der Version, die du kaufst. Wähle ein Werkzeug und sieh dem Rat bei der Arbeit zu: unabhängige Positionen, Gegenprüfungen, anonyme Rankings und die abweichende Meinung. Dies ist eine Wiedergabe: Nichts, was du hier anklickst, ruft ein Modell auf, und nichts verlässt diese Seite. Der Chat dient der Veranschaulichung und gibt nur das aufgezeichnete Ergebnis wieder; was Claude an Kirat gesendet hat und was zurückkam, wird unverändert unter „Hinter den Kulissen“ gezeigt.

Fünf Fragen aus verschiedenen Bereichen. Wähle eine.

Lass Kirat darüber abstimmen: Ich betreibe allein ein kleines B2B-SaaS. Sollte ich eine kostenlose Stufe hinzufügen?

kirat_vote hat den Rat gefragt

Der Rat hat entschieden (Mehrheit 2:1): Nur kostenpflichtig bleiben, nichts ändern.

Meine eigene Stimme war die abweichende Meinung: „Nur kostenpflichtig bleiben, die Testphase auf 30 Tage verlängern“. Sie bleibt mit ihrer Begründung im Protokoll, damit du sie selbst abwägen kannst.

Hinter den Kulissen

kirat_vote Was Claude an Kirat sendet

Frage: Ich betreibe allein ein kleines B2B-SaaS. Sollte ich eine kostenlose Stufe hinzufügen?

AUFGEZEICHNET 2026-10-13 · KIRAT_VOTE · AUFWAND: STANDARD · 1 RUNDE

Gesendeter Kontext: Einzelentwickler. Rechnungsstellungstool für Freiberufler, 19 USD pro Monat, 14-tägige kostenlose Testphase, 30 zahlende Kunden nach 5 Monaten. Anmeldungen kommen hauptsächlich über zwei Blogbeiträge, die bei Google ranken. Etwa 12 % der Testphasen konvertieren. Der Support beansprucht bereits etwa 5 Stunden pro Woche. Der Entwickler hat einen Hauptberuf und etwa 10 Stunden pro Woche für das Produkt.

Optionen: Eine kostenlose Stufe hinzufügen · Nur kostenpflichtig bleiben, die Testphase auf 30 Tage verlängern · Nur kostenpflichtig bleiben, nichts ändern

Ergebnis des Rates

gpt-5.6 Konfidenz 88

Nur kostenpflichtig bleiben, nichts ändernEine kostenlose Stufe würde wahrscheinlich die Zahl nicht zahlender Nutzer und die Supportlast erhöhen, die bereits die Hälfte der verfügbaren 10 Stunden pro Woche beansprucht. Eine Testphasen-Konversion von 12 % ist beachtlich, es gibt also keine klaren Hinweise darauf, dass die Länge der Testphase der Engpass ist. Behalte das aktuelle Modell bei und verwende die knappe Zeit darauf, den Supportbedarf zu senken und die Akquise über die zwei Blogbeiträge hinaus auszuweiten.

gemini-3.6-flash Konfidenz 90

Nur kostenpflichtig bleiben, nichts ändernBei nur 10 verfügbaren Stunden pro Woche beansprucht der Support bereits 50 % der Kapazität. Eine kostenlose Stufe würde das Supportvolumen durch nicht zahlende Nutzer ohne jede Kontrolle erhöhen. Eine Testphasen-Konversion von 12 % ist bereits stark; der Engpass ist der Traffic, nicht das Preismodell.

claude (dritter Wähler) Konfidenz 58

Nur kostenpflichtig bleiben, die Testphase auf 30 Tage verlängernEine kostenlose Stufe erhöht vor allem die Supportlast, die bereits die Hälfte der verfügbaren Zeit ausmacht. Die Rechnungsstellung erfolgt monatlich, daher kann eine 14-tägige Testphase enden, bevor ein Freiberufler eine zweite Rechnung versendet und den Wert erkennt. Eine 30-tägige Testphase deckt einen vollständigen Abrechnungszyklus ab, ohne dauerhaft kostenlose Nutzer hinzuzufügen.Abbeichende Meinung, protokolliert

Entscheidung Nur kostenpflichtig bleiben, nichts ändern Pfad Mehrheit 2:1 Kosten $0.015

Lass Kirat darüber abstimmen: Der Online-Shop unseres Kunden muss neu aufgebaut werden. Auf WooCommerce neu aufbauen oder zu Shopify migrieren?

kirat_vote hat den Rat gefragt

Der Rat hat entschieden (einstimmig 3:0): Zu Shopify migrieren.

Alle drei Positionen, einschließlich meiner, weisen in dieselbe Richtung. Jede kommt mit ihrer Begründung.

Hinter den Kulissen

kirat_vote Was Claude an Kirat sendet

Frage: Der Online-Shop unseres Kunden muss neu aufgebaut werden. Auf WooCommerce neu aufbauen oder zu Shopify migrieren?

AUFGEZEICHNET 2026-10-13 · KIRAT_VOTE · AUFWAND: STANDARD · 1 RUNDE

Gesendeter Kontext: Wir sind eine kleine Digitalagentur. Der Kunde verkauft etwa 1.800 Möbelprodukte in Deutschland, Österreich und der Schweiz, hat 3 Mitarbeiter und keinen eigenen Entwickler. Der aktuelle Shop ist eine selbst gehostete WooCommerce-Installation, 6 Jahre alt, mit 31 Plugins, langsamen Seiten und zwei Sicherheitsvorfällen im letzten Jahr. Der Umsatz beträgt etwa 1,2 Millionen EUR pro Jahr. Der Kunde wünscht weniger Wartung und weniger Notfälle; er nutzt ein lokales ERP, das Produktdaten als CSV exportiert. Budget für den Neuaufbau: 25.000 EUR.

Optionen: Auf WooCommerce neu aufbauen · Zu Shopify migrieren

Ergebnis des Rates

gpt-5.6 Konfidenz 89

Zu Shopify migrierenShopify entspricht besser den Hauptzielen des Kunden: weniger Wartung, weniger Sicherheitsnotfälle und kein Bedarf an einem eigenen Entwickler. Ein Katalog mit 1.800 Produkten und ein CSV-basierter ERP-Workflow sind handhabbar, und das Budget von 25.000 EUR sollte eine disziplinierte Migration plus DACH-spezifische Steuer-, Zahlungs- und Rechtskonfiguration abdecken. Die Kompromisse sind wiederkehrende App-/Plattformkosten, weniger Backend-Flexibilität und die Notwendigkeit, den ERP-Import-Workflow und etwaige möbelspezifische Varianten vor der Zusage zu validieren. Ein Neuaufbau auf WooCommerce könnte die Flexibilität bewahren, würde aber die Verantwortung für Hosting, Updates, Plugin-Kompatibilität und Sicherheit behalten – genau die operative Last, die der Kunde reduzieren möchte.

gemini-3.6-flash Konfidenz 90

Zu Shopify migrierenOhne eigenen Entwickler, mit 3 Mitarbeitern und einer Vorgeschichte von Sicherheitsvorfällen reduziert Shopify den Wartungsaufwand und die Sicherheitsrisiken drastisch. Ein Budget von 25.000 € reicht für eine Shopify-Migration einschließlich CSV-ERP-Integration, während ein Neuaufbau auf WooCommerce hohe Wartungskosten und fortbestehende Notfallrisiken perpetuieren würde.

claude (dritter Wähler) Konfidenz 72

Zu Shopify migrierenOhne eigenen Entwickler, mit 31 Plugins und zwei Sicherheitsvorfällen ist das eigentliche Problem des Kunden die Wartung, nicht die Funktionen. Shopify beseitigt Hosting, Updates und den größten Teil der Sicherheitsarbeit; der CSV-Produktimport aus dem ERP ist Standard. Der Kompromiss sind Transaktions- und App-Gebühren sowie weniger Flexibilität, was in dieser Größenordnung weniger zählt als Stabilität.

Entscheidung Zu Shopify migrieren Pfad einstimmig 3:0 Kosten $0.015

Lass Kirat darüber abstimmen: Eine lokale Bäckerei möchte mehr Kuchen-Vorbestellungen. Wohin sollten die nächsten 3.000 EUR zuerst fließen?

kirat_vote hat den Rat gefragt

Der Rat hat entschieden (einstimmig 3:0): Eine richtige Online-Bestellseite.

Alle drei Positionen, einschließlich meiner, weisen in dieselbe Richtung. Jede kommt mit ihrer Begründung.

Hinter den Kulissen

kirat_vote Was Claude an Kirat sendet

Frage: Eine lokale Bäckerei möchte mehr Kuchen-Vorbestellungen. Wohin sollten die nächsten 3.000 EUR zuerst fließen?

AUFGEZEICHNET 2026-10-13 · KIRAT_VOTE · AUFWAND: STANDARD · 1 RUNDE

Gesendeter Kontext: Bäckerei mit 6 Mitarbeitern in einer deutschen Stadt mit 40.000 Einwohnern. Individuelle Torten und Vorbestellungen haben die beste Marge. Heute kommen Bestellungen nur per Telefon und E-Mail; die Website hat Öffnungszeiten und ein Kontaktformular, nichts zum Bestellen. Das Google-Unternehmensprofil hat 4,7 Sterne aus 120 Bewertungen. Bisher keine bezahlte Werbung. Budget: 3.000 EUR für das nächste Quartal, der Inhaber hat wenig Zeit.

Optionen: Google Ads · Eine richtige Online-Bestellseite · Gleichmäßig auf beide aufteilen

Ergebnis des Rates

gpt-5.6 Konfidenz 94

Eine richtige Online-BestellseiteZuerst den Engpass beheben: Derzeit können interessierte Kunden nicht bequem oder strukturiert vorbestellen. Eine einfache, mobilfreundliche Bestellseite mit Kuchenauswahl, Abholdatum, Anpassungsoptionen, Preis oder Anzahlung und Bestätigung nutzt die starke lokale Sichtbarkeit, die die Bäckerei bereits hat, und reduziert Telefon- und E-Mail-Arbeit. Google Ads ohne einen zuverlässigen Bestellprozess würden bezahlten Traffic in einen schwachen Konversionspfad leiten. Nach einigen Wochen messbarer Bestellungen kann ein späteres Werbebudget gezielter eingesetzt werden.

gemini-3.6-flash Konfidenz 90

Eine richtige Online-BestellseiteOhne einen digitalen Bestellweg erzeugen Anzeigen nur mehr zeitaufwändige manuelle Arbeit per Telefon und E-Mail, die der Inhaber kaum bewältigen kann. Zudem wird das starke Google-Profil (4,7 Sterne) den organischen Traffic, den es bereits bringt, mit einer echten Bestellseite sofort viel besser konvertieren, bevor überhaupt Geld in Anzeigen fließen sollte.

claude (dritter Wähler) Konfidenz 74

Eine richtige Online-BestellseiteAnzeigen zahlen sich nur aus, wenn der Klick zu einer Bestellung werden kann. Derzeit muss jeder Besucher anrufen oder eine E-Mail schreiben, sodass bezahlter Traffic verloren ginge. Eine Bestellseite mit Produktauswahl, Abholdaten und Vorauszahlung konvertiert die Nachfrage, die das 4,7-Sterne-Profil bereits bringt, und macht spätere Anzeigen messbar.

Entscheidung Eine richtige Online-Bestellseite Pfad einstimmig 3:0 Kosten $0.012

Lass Kirat darüber abstimmen: Unser Abrechnungsmodul jetzt in einen separaten Dienst extrahieren oder zuerst seine Grenzen im Monolithen härten?

kirat_vote hat den Rat gefragt

Der Rat hat entschieden (einstimmig 3:0): Zuerst die Grenzen im Monolithen härten.

Alle drei Positionen, einschließlich meiner, weisen in dieselbe Richtung. Jede kommt mit ihrer Begründung.

Hinter den Kulissen

kirat_vote Was Claude an Kirat sendet

Frage: Unser Abrechnungsmodul jetzt in einen separaten Dienst extrahieren oder zuerst seine Grenzen im Monolithen härten?

AUFGEZEICHNET 2026-10-13 · KIRAT_VOTE · AUFWAND: STANDARD · 1 RUNDE

Gesendeter Kontext: Team von 8 Entwicklern. Ein TypeScript-Monolith, etwa 60.000 Zeilen, eine Postgres-Datenbank, mehrmals täglich bereitgestellt. Das Abrechnungsmodul ändert sich jede Woche und verursachte 5 der letzten 8 Produktionsvorfälle, meist weil andere Module direkt in Abrechnungstabellen lesen und schreiben. Niemand im Team hat ein verteiltes System in der Produktion betrieben. Die Führung möchte innerhalb von zwei Quartalen weniger Vorfälle.

Optionen: Abrechnung jetzt in einen Dienst extrahieren · Zuerst die Grenzen im Monolithen härten

Ergebnis des Rates

gpt-5.6 Konfidenz 94

Zuerst die Grenzen im Monolithen härtenDie Vorfälle werden in erster Linie durch unkontrollierten Datenbankzugriff verursacht, nicht durch das Fehlen einer Netzwerkgrenze. Erzwinge die Abrechnungszuständigkeit innerhalb des Monolithen: Entferne direkten Tabellenzugriff, stelle eine schmale interne API bereit, füge Datenbankberechtigungen oder Kontrollen auf Schemaebene hinzu und ergänze Vertrags- und Integrationstests. Dies adressiert das Fehlermuster schnell innerhalb des Zwei-Quartals-Fensters. Eine Extraktion jetzt würde Bereitstellung, Observability, Wiederholungsversuche, Datenkonsistenz und operative Komplexität zu einem Team hinzufügen, das keine Erfahrung mit verteilten Systemen hat. Sobald Zugriffspfade und Datenzuständigkeit explizit sind, wird die Extraktion sicherer und kann überdacht werden, falls unabhängige Skalierung oder Bereitstellung weiterhin wertvoll ist.

gemini-3.6-flash Konfidenz 90

Zuerst die Grenzen im Monolithen härtenDie Hauptursache der Ausfälle ist, dass andere Module direkt auf Abrechnungstabellen in der Datenbank zugreifen. Das Härten der Modulgrenzen löst dieses Problem direkt innerhalb des bestehenden Monolithen. Da das 8-köpfige Team keine Erfahrung mit verteilten Systemen hat, würde eine Extraktion des Moduls jetzt neue Risiken schaffen und das Ziel gefährden, die Vorfälle innerhalb von zwei Quartalen zu reduzieren.

claude (dritter Wähler) Konfidenz 76

Zuerst die Grenzen im Monolithen härtenDie Vorfälle entstehen, weil andere Module direkt auf Abrechnungstabellen zugreifen. Eine Dienstaufteilung würde diese Grenze ebenfalls erzwingen, fügt aber Netzwerkausfälle, verteilte Transaktionen und neue Betriebsarbeit für ein Team ohne diese Erfahrung hinzu. Das Erzwingen einer Modul-API und Tabellenzuständigkeit innerhalb des Monolithen behebt die Ursache schneller und hält die Extraktionsoption für später offen.

Entscheidung Zuerst die Grenzen im Monolithen härten Pfad einstimmig 3:0 Kosten $0.014

Lass Kirat darüber abstimmen: Kann in unserem systematischen Review ein einzelner LLM-Screening-Durchlauf den zweiten menschlichen Screener ersetzen?

kirat_vote hat den Rat gefragt

Der Rat hat entschieden (einstimmig 3:0): Das LLM als zusätzlichen Screener nutzen; Menschen lösen Konflikte.

Alle drei Positionen, einschließlich meiner, weisen in dieselbe Richtung. Jede kommt mit ihrer Begründung.

Hinter den Kulissen

kirat_vote Was Claude an Kirat sendet

Frage: Kann in unserem systematischen Review ein einzelner LLM-Screening-Durchlauf den zweiten menschlichen Screener ersetzen?

AUFGEZEICHNET 2026-10-13 · KIRAT_VOTE · AUFWAND: STANDARD · 1 RUNDE

Gesendeter Kontext: Titel- und Abstract-Screening von etwa 3.000 Datensätzen für ein systematisches Review in der Versorgungsforschung, zur Veröffentlichung geplant. Aktuelles Protokoll: zwei unabhängige menschliche Screener, Konflikte werden durch Diskussion gelöst. Die Personalzeit ist knapp. Das Review folgt PRISMA, und die Gutachter der Zeitschrift werden fragen, wie das Screening durchgeführt wurde. Eine relevante Studie zu verpassen (falscher Ausschluss) ist schlimmer, als eine irrelevante einzuschließen. Optionen: Ja, den zweiten menschlichen Screener ersetzen · Das LLM als zusätzlichen Screener verwenden; Menschen lösen Konflikte · Nein, zwei menschliche Screener beibehalten und kein LLM

Ergebnis des Councils

gpt-5.6 Konfidenz 94

Das LLM als zusätzlichen Screener verwenden; Menschen lösen KonflikteEin einzelner LLM-Durchlauf sollte unabhängiges menschliches Screening nicht ersetzen, wenn falsche Ausschlüsse das Hauptrisiko sind: Die Leistung kann je nach Thema, Prompt und Modellversion variieren, und Fehler können systematisch sein. Verwenden Sie es, um Datensätze zu priorisieren oder Unstimmigkeiten zu markieren, verlangen Sie aber eine menschliche Auflösung von Konflikten und eine menschliche Bestätigung von Ausschlüssen. Dokumentieren Sie Modell, Version, Prompt, Validierungsstichprobe und Entscheidungsablauf für die PRISMA-Berichterstattung und Reproduzierbarkeit.

gemini-3.6-flash Konfidenz 88

Das LLM als zusätzlichen Screener verwenden; Menschen lösen KonflikteEin hybrider Ansatz reduziert den menschlichen Arbeitsaufwand für 3.000 Titel und Abstracts erheblich und bewahrt gleichzeitig die methodische Strenge, die PRISMA und Peer-Reviewer verlangen. Da falsche Ausschlüsse vermieden werden müssen, stellt die menschliche Auflösung jeder Abweichung (oder ein hochsensibler Prompt-Ansatz) sicher, dass keine relevanten Studien verloren gehen.

claude (dritter Wähler) Konfidenz 70

Das LLM als zusätzlichen Screener verwenden; Menschen lösen KonflikteFalsche Ausschlüsse sind der kostspielige Fehler, und der Recall von LLMs beim Screening variiert je nach Thema und Prompt. Den zweiten Menschen zu ersetzen entfernt die Prüfung, die diese Fehler abfängt, und ist gegenüber Journal-Reviewern schwer zu verteidigen. Das LLM als dritten Screener hinzuzufügen und Konflikte durch Menschen aufzulösen hält das Protokoll verteidigbar und markiert weiterhin wahrscheinliche Auslassungen.

Entscheidung Das LLM als zusätzlichen Screener verwenden; Menschen lösen Konflikte Pfad einstimmig 3:0 Kosten $0.019

Aufgezeichnet am 13. Oktober 2026 mit kirat_vote in der Standard-Effort-Stufe; jede Sitzung dauerte unter 20 Sekunden und kostete unter zwei Cent. Fragen, Optionen und Kontext werden exakt wie gesendet angezeigt, die Begründung vollständig. Gemini antwortete viermal auf Deutsch und ChatGPT einmal; diese Antworten sind hier übersetzt. Bei der Frage zur kostenlosen Stufe verlor Claude die Abstimmung mit 2:1, und sein Einwand blieb im Protokoll. Konfidenzwerte sind jeweils die Selbsteinschätzung des Modells.

Fünf Codeauszüge aus verschiedenen Bereichen, jeweils exakt wie gezeigt gesendet. ChatGPT und Gemini prüfen parallel, Claude ergänzt zwei eigene Befunde, und jeder Befund wird von der anderen Modellfamilie geprüft. Nur bestätigte Befunde zählen. Wählen Sie einen aus.

Lassen Sie Kirat unseren Stripe-Zahlungs-Webhook auf Sicherheit und Korrektheit prüfen, bevor wir ihn ausliefern.

kirat_review fragte den Council

Kirat fand 14 bestätigte Probleme (4 × kritisch, 4 × hoch, 6 × mittel). Jeder Befund wurde von der anderen Modellfamilie gegengeprüft.

Beginnen Sie mit denen oben in der Liste; jeder kommt mit einem vorgeschlagenen Fix.

Hinter den Kulissen

kirat_review Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_REVIEW · EFFORT: STANDARD · 14 BESTÄTIGT, 0 ABGELEHNT · $0.14

Fokus: Sicherheit und Korrektheit eines Zahlungs-Webhooks

Gesendeter Code:

// routes/webhooks.js — payment webhook of a solo invoicing SaaS (Node 20, Express 4, Stripe, pg)
const express = require('express');
const { db } = require('../db');
const router = express.Router();

router.post('/webhooks/stripe', express.json(), async (req, res) => {
  const event = req.body;

  if (event.type === 'invoice.paid') {
    const invoice = event.data.object;
    const userId = invoice.metadata.userId;
    await db.query('UPDATE users SET plan = $1, paid_until = $2 WHERE id = $3',
      ['pro', new Date(invoice.period_end * 1000), userId]);
    await db.query('INSERT INTO payments (user_id, amount) VALUES ($1, $2)',
      [userId, invoice.amount_paid / 100]);
  }

  if (event.type === 'customer.subscription.deleted') {
    await db.query("UPDATE users SET plan = 'free' WHERE stripe_customer = '" + event.data.object.customer + "'");
  }

  res.sendStatus(200);
});

module.exports = router;

Ergebnis des Councils

  1. kritisch Der Webhook verarbeitet den Request-Body, ohne die Stripe-Signatur zu prüfen. Jeder externe Aufrufer kann daher gefälschte invoice.paid\- oder customer.subscription.deleted\-Events senden und Benutzerkonten freischalten oder herabstufen. Der JSON-Parser verwirft außerdem den unveränderten Raw-Body, den die Stripe-Signaturprüfung benötigt. Fix: Verwenden Sie express.raw({ type: 'application/json' })\ für diese Route und rufen Sie stripe.webhooks.constructEvent(req.body, req.headers\['stripe-signature'\], webhookSecret)\ vor jeder Verarbeitung auf. Stellen Sie sicher, dass auf diese Route vorher kein globaler JSON-Parser angewendet wird; lehnen Sie ungültige Signaturen mit 400 ab. Zeile 6 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  2. kritisch Fehlende Validierung der Stripe-Webhook-Signatur. Ein Angreifer kann beliebige gefälschte Webhook-Events an diesen Endpunkt senden, um Konten ohne Autorisierung auf Pro zu setzen oder Datenbankeinträge zu manipulieren. Fix: Verwenden Sie stripe.webhooks.constructEvent() mit dem Stripe-Webhook-Secret, um Authentizität und Integrität jedes Events zu prüfen. Zeile 6 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  3. kritisch SQL-Injection-Schwachstelle durch direkte Verkettung von Benutzereingaben (event.data.object.customer) in den SQL-Query-String. Fix: Verwenden Sie parametrisierte Queries wie in den vorherigen Statements: db.query('UPDATE users SET plan = $1 WHERE stripe_customer = $2', ['free', event.data.object.customer]). Zeile 18 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  4. kritisch Der Webhook prüft nie die Stripe-Signatur, und express.json() verwirft den Raw-Body, der dafür benötigt wird. Jeder kann ein gefälschtes invoice.paid-Event per POST senden und jedes Konto kostenlos auf pro upgraden. Fix: Verwenden Sie express.raw({ type: 'application/json' }) auf dieser Route und bauen Sie das Event mit stripe.webhooks.constructEvent(req.body, req.headers['stripe-signature'], endpointSecret); lehnen Sie die Anfrage bei Fehlschlag ab. Zeile 6 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  5. hoch Die Kunden-ID wird direkt in ein SQL-Statement eingefügt. Ein Wert wie ' OR 1=1 --\ kann die WHERE-Klausel manipulieren und alle Benutzer auf den kostenlosen Plan setzen; je nach Datenbankkonfiguration sind weitere SQL-Injections möglich. Fix: Parametrisieren Sie die Query vollständig: UPDATE users SET plan = 'free' WHERE stripe\_customer = $1\ mit \[event.data.object.customer\]\. Authentifizieren Sie das Event zusätzlich über die Stripe-Signatur. Zeile 19 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  6. hoch Es gibt keine Idempotenzprüfung. Stripe liefert Webhooks mindestens einmal aus und wiederholt sie bei Timeouts oder Fehlern. Dasselbe invoice.paid\-Event kann daher mehrfach identische Zahlungseinträge erzeugen. Fix: Speichern Sie die Stripe-Event-ID oder Invoice-ID im Zahlungsdatensatz, sichern Sie sie mit einer UNIQUE-Constraint ab und führen Sie die Event-Verarbeitung zusammen mit der Zahlung atomar als Insert/Upsert aus. Bestätigen Sie bereits verarbeitete Events mit 200, ohne die Geschäftsoperation zu wiederholen. Zeile 14 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  7. hoch Der async\-Handler hat keine Fehlerweiterleitung. Express 4 fängt abgelehnte Promises von asynchronen Route-Handlern nicht automatisch ab. Ein DB-Fehler oder ein unvollständiges invoice.paid\-Objekt führt daher zu einer unbehandelten Promise-Rejection und kann unter Node 20 den Prozess beenden, statt kontrolliert eine Fehlerantwort zurückzugeben. Fix: Umschließen Sie den Handler mit try/catch\ und leiten Sie Fehler an next(err)\ weiter, oder verwenden Sie einen Async-Wrapper. Validieren Sie die Eingabestruktur vor dem Zugriff und geben Sie bei temporären Verarbeitungsfehlern kontrolliert einen 5xx-Status zurück, damit Stripe erneut zustellt. Zeile 6 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  8. hoch Die Verwendung von express.json() für den Webhook-Endpunkt parst den Body vorab als JSON. Stripes Signaturprüfung benötigt jedoch den unveränderten Raw-Body. Fix: Verwenden Sie express.raw({ type: 'application/json' }) statt express.json() für den Stripe-Webhook-Route-Handler. Zeile 6 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  9. mittel Das Benutzer-Update und der Zahlungseintrag sind zwei unabhängig committete Datenbankoperationen. Wenn das INSERT nach einem erfolgreichen UPDATE fehlschlägt, erhält der Benutzer den Pro-Plan, obwohl kein entsprechender Zahlungsdatensatz existiert. Fix: Führen Sie beide Operationen zusammen mit dem Idempotenz-Marker in einer einzigen Datenbanktransaktion auf demselben Client aus und rollen Sie bei jedem Fehler vollständig zurück. Zeile 12 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  10. mittel Die Verarbeitung berücksichtigt nicht, dass Stripe Events außerhalb ihrer Erstellungsreihenfolge zustellen kann. Ein verzögertes älteres invoice.paid\ kann paid\_until\ zurücksetzen; ein verzögertes customer.subscription.deleted\ kann einen inzwischen reaktivierten Benutzer wieder auf free\ setzen. Fix: Gleichen Sie den aktuellen Abonnementstatus über stabile Stripe-IDs ab, indem Sie ihn beispielsweise von Stripe abrufen, und persistieren Sie Statusübergänge oder den Zeitstempel des zuletzt verarbeiteten Events. Aktualisieren Sie mindestens paid\_until\ nur vorwärts und wenden Sie Lösch-Events nicht blind auf den aktuellen Benutzerstatus an. Zeile 12 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  11. mittel amount\_paid / 100\ geht ohne Prüfung davon aus, dass die Währung genau zwei Nachkommastellen hat. Das ist beispielsweise für JPY falsch. Außerdem wird die Währung nicht daneben gespeichert, sodass der Betrag im Zahlungsdatensatz keine eindeutige Einheit hat. Fix: Speichern Sie Beträge vorzugsweise unverändert in der kleinsten Währungseinheit zusammen mit invoice.currency\. Wenn Haupteinheiten der Währung benötigt werden, führen Sie die Umrechnung anhand der jeweiligen Währungsexponenten durch. Zeile 15 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  12. mittel Fehlende Exception-Behandlung in einer asynchronen Express-4-Route. Bei einem Datenbankfehler oder fehlenden Feldern führt dies zu einer unbehandelten Promise-Rejection, die die Anwendung zum Absturz bringen kann. Fix: Fügen Sie einen try-catch-Block hinzu und leiten Sie Fehler an next(err) weiter, oder verwenden Sie ein Hilfsmittel wie express-async-handler. Zeile 6 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  13. mittel Keine Validierung, dass invoice.metadata.userId vorhanden ist. Wenn das metadata- oder userId-Feld fehlt oder undefined ist, schlagen die SQL-Queries fehl oder arbeiten mit ungültigen Werten. Fix: Prüfen Sie vor der Ausführung der Datenbankabfragen explizit, ob invoice.metadata und invoice.metadata.userId vorhanden und gültig sind. Zeile 10 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  14. mittel Stripe wiederholt Webhooks und kann dasselbe Event mehrfach zustellen. Jede Zustellung fügt eine weitere Zahlungszeile ein, sodass Umsatzberichte doppelt zählen. Fix: Speichern Sie event.id (oder die Invoice-ID) mit einer Unique-Constraint und überspringen Sie bereits verarbeitete Events. Zeile 14 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash

Lassen Sie Kirat dieses WooCommerce-Import-Plugin auf Sicherheit und Korrektheit prüfen.

kirat_review fragte den Council

Kirat fand 21 bestätigte Probleme (5 × kritisch, 5 × hoch, 10 × mittel, 1 × niedrig). Jeder Befund wurde von der anderen Modellfamilie gegengeprüft.

Beginnen Sie mit denen oben in der Liste; jeder kommt mit einem vorgeschlagenen Fix.

Hinter den Kulissen

kirat_review Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_REVIEW · EFFORT: STANDARD · 21 BESTÄTIGT, 0 ABGELEHNT · $0.17

Fokus: Sicherheit und Korrektheit eines WooCommerce-Import-Plugins

Gesendeter Code:

<?php
// erp-import.php — custom plugin: imports the ERP's CSV export into WooCommerce (WordPress 6, WooCommerce 9)
add_action('wp_ajax_erp_import', 'erp_import');
add_action('wp_ajax_nopriv_erp_import', 'erp_import');

function erp_import() {
    global $wpdb;
    $path = $_POST['file'];
    $rows = array_map('str_getcsv', file($path));

    foreach ($rows as $row) {
        [$sku, $name, $price, $stock] = $row;
        $id = $wpdb->get_var("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_sku' AND meta_value = '$sku'");
        if (!$id) continue;
        update_post_meta($id, '_price', $price);
        update_post_meta($id, '_regular_price', $price);
        update_post_meta($id, '_stock', $stock);
        wp_update_post(['ID' => $id, 'post_title' => $name]);
    }
    echo 'Imported ' . count($rows) . ' rows';
    wp_die();
}

Ergebnis des Councils

  1. kritisch Der Import ist über wp\_ajax\_nopriv\_erp\_import\ öffentlich erreichbar; dem authentifizierten Hook fehlen außerdem Capability- und Nonce-Prüfungen. Dadurch können anonyme Benutzer oder CSRF-Angriffe Produktnamen, Preise und Lagerbestände ändern. Fix: Entferne den nopriv\-Hook, prüfe vor jeder Verarbeitung eine geeignete Capability wie manage\_woocommerce\ und sichere die Anfrage mit check\_ajax\_referer()\ ab. Zeile 3 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  2. kritisch Der Hook wp_ajax_nopriv_erp_import gewährt nicht authentifizierten Besuchern Zugriff auf die Importfunktion. Fix: Entferne den nopriv-Hook und prüfe die Berechtigung mit current_user_can('manage_options'). Zeile 4 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  3. kritisch Der Dateipfad aus $_POST['file'] wird ungeprüft an file() übergeben, was Path Traversal und beliebiges Dateilesen (LFI) ermöglicht. Fix: Verarbeite Datei-Uploads über $_FILES oder validiere den Eingabepfad strikt gegen erlaubte Verzeichnisse (z. B. wp_upload_dir()). Zeile 7 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  4. kritisch SQL-Injection-Schwachstelle, da $sku ohne Bereinigung direkt in die SQL-Abfrage eingefügt wird. Fix: Verwende Prepared Statements mit $wpdb->prepare(). Zeile 11 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  5. kritisch Der Import ist für wp_ajax_nopriv registriert, und es gibt weder eine Capability-Prüfung noch eine Nonce. Jeder Besucher kann ihn auslösen und Preise, Bestände und Produktnamen überschreiben. Fix: Entferne den nopriv-Hook, prüfe current_user_can('manage_woocommerce') und verifiziere eine Nonce mit check_ajax_referer(), bevor irgendetwas getan wird. Zeile 4 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  6. hoch Der vom Client übergebene Pfad wird ungeprüft an file()\ übergeben. Dadurch können beliebige lesbare lokale Dateien und – abhängig von allow\_url\_fopen\ – externe oder interne URLs verarbeitet werden, was unerwünschten Dateizugriff und blindes SSRF ermöglicht. Fix: Akzeptiere keine frei gewählten Pfade. Verwende nur serverseitig bekannte Upload-IDs, prüfe den kanonischen Pfad gegen ein festes Importverzeichnis und erlaube nur reguläre lokale CSV-Dateien. Zeile 8 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  7. hoch $sku\ stammt aus der CSV und wird direkt in SQL interpoliert. Ein SKU-Wert mit SQL-Metazeichen kann die Abfrage manipulieren und unter anderem eine beliebige Post-ID als Update-Ziel auswählen. Fix: Parametrisiere die Abfrage mit $wpdb-\>prepare()\, zum Beispiel mit meta\_value = %s\, oder verwende die WooCommerce-Funktion zum Nachschlagen eines Produkts anhand der SKU. Zeile 13 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  8. hoch file()\ lädt die gesamte Eingabe in den Speicher, und array\_map()\ erzeugt zusätzlich das vollständige geparste Array. Ohne Größenbeschränkung kann eine große oder endlose entfernte Ressource Speicher, Laufzeit und PHP-Worker erschöpfen; die öffentliche Erreichbarkeit verschlimmert dies. Fix: Begrenze Dateigröße und Zeilenanzahl, öffne die Datei lokal mit fopen()\ und verarbeite Datensätze streamingbasiert über fgetcsv()\. Verwende zusätzlich Rate Limits oder einen kontrollierten Hintergrundjob. Zeile 9 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  9. hoch Fehlender CSRF-Schutz (Nonce-Validierung). Fix: Rufe check_ajax_referer() am Anfang der Funktion auf. Zeile 6 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  10. hoch Der Dateipfad kommt direkt aus der Anfrage und wird an file() übergeben. Ein Angreifer kann jede Datei lesen, die der Webserver lesen kann, oder eine entfernte URL, wenn allow_url_fopen aktiviert ist. Fix: Akzeptiere eine hochgeladene Datei über wp_handle_upload() oder lies nur aus einem festen Importverzeichnis; übernimm niemals einen Pfad aus der Anfrage. Zeile 8 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  11. mittel Es wird angenommen, dass jede Zeile genau vier verwendbare Spalten hat. Leere oder beschädigte Zeilen ergeben fehlende Werte, was Warnungen erzeugt und unbeabsichtigt Name, Preis oder Bestand auf leere Werte setzen kann. Fix: Prüfe vor dem Destrukturieren die Spaltenanzahl und die erforderlichen Felder, überspringe leere Zeilen und lehne fehlerhafte Datensätze mit einer klaren Fehlermeldung ab. Zeile 12 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  12. mittel Die Kombination aus file()\ und str\_getcsv()\ parst jede physische Zeile separat. Gültige CSV-Felder mit eingebetteten Zeilenumbrüchen werden daher in mehrere fehlerhafte Datensätze aufgeteilt. Fix: Lies die CSV als Stream mit fgetcsv()\; diese Funktion verarbeitet mehrzeilige, korrekt quotierte Felder über Datensatzgrenzen hinweg. Zeile 9 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  13. mittel Preis und Bestand werden ungeprüft als beliebige Zeichenketten gespeichert. Nicht numerische Werte, falsche Dezimalformate oder unzulässige Bestandswerte können die Produktdaten beschädigen und zu inkonsistenten Berechnungen führen. Fix: Validiere Preis und Bestand vor dem Schreiben und normalisiere sie mit WooCommerce-Helfern wie wc\_format\_decimal()\ und wc\_stock\_amount()\; lehne Werte ab, die ungültig oder aus geschäftlicher Sicht unzulässig sind. Zeile 15 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  14. mittel WooCommerce-Daten werden direkt als Post-Meta geändert. Dadurch werden zugehörige Zustände wie \_stock\_status\, Produkt-Lookup-Tabellen und möglicherweise Caches nicht zuverlässig mit den neuen Preisen und Lagerbeständen synchronisiert. Fix: Lade das Produkt über wc\_get\_product()\, verwende die CRUD-Methoden wie set\_regular\_price()\, set\_price()\ und set\_stock\_quantity()\, setze den Lagerstatus oder manage\_stock\ gemäß den Geschäftsregeln und rufe anschließend save()\ auf. Zeile 15 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  15. mittel Die SKU-Suche berücksichtigt alle Post-Metadaten und prüft weder den Post-Typ noch, ob die gefundene ID tatsächlich ein WooCommerce-Produkt oder eine Variante ist. Bei doppelten oder unzusammenhängenden \_sku\-Metadaten wird zudem eine nicht deterministische Übereinstimmung aktualisiert. Fix: Verwende wc\_get\_product\_id\_by\_sku()\ und validiere das Ergebnis anschließend mit wc\_get\_product()\ und dem erwarteten Produkttyp; behandle doppelte SKUs als Importfehler. Zeile 13 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  16. mittel Die Rückgabewerte von update\_post\_meta()\ und wp\_update\_post()\ werden ignoriert. Der Import kann teilweise fehlschlagen oder abbrechen, meldet aber dennoch die Gesamtzahl der gelesenen Zeilen als erfolgreich importiert. Fix: Erfasse Erfolg und Fehlschlag pro Produkt, verwende wp\_update\_post(..., true)\, zähle nur tatsächlich aktualisierte Datensätze und gib eine strukturierte Fehlerantwort zurück. Stelle für große Importe einen fortsetzbaren Hintergrundjob bereit. Zeile 15 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  17. mittel Für jede CSV-Zeile werden mindestens eine Lookup-Abfrage und mehrere einzelne Schreiboperationen synchron ausgeführt. Große Importe verursachen daher viele Datenbank-Roundtrips, können in ein Request-Timeout laufen und einen nur teilweise aktualisierten Katalog hinterlassen. Fix: Führe den Import in begrenzten Batches als Hintergrundprozess aus, löse SKUs kollektiv auf und speichere Fortschritt und Wiederaufnahmezustand. Zeile 11 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  18. mittel file() liest die gesamte Datei auf einmal in den Speicher, was bei großen CSV-Dateien zu Fehlern wegen Speichererschöpfung führt. Fix: Streame die Datei Zeile für Zeile über fopen() und fgetcsv(). Zeile 8 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  19. mittel Die Array-Destrukturierung geht davon aus, dass jede Zeile mindestens 4 Elemente enthält; andernfalls treten PHP-Warnungen oder Fehler wegen nicht initialisierter Indizes auf. Fix: Prüfe vor dem Entpacken mit count($row), ob genügend Spalten vorhanden sind. Zeile 10 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  20. mittel Datenbankabfragen und Post-Updates werden einzeln in einer Schleife ausgeführt (N+1-Problem), was die Ausführungszeit erheblich verlangsamt. Fix: Teile den Import in Batches auf und bündele Abfragen/Updates. Zeile 11 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  21. niedrig Fehler von file()\ werden nicht geprüft. Bei einem fehlenden, nicht lesbaren oder nicht unterstützten Pfad gibt file()\ false\ zurück, woraufhin array\_map()\ unter aktuellen PHP-Versionen eine TypeError\ auslösen kann. Fix: Prüfe Öffnen und Lesen explizit, verwende PHP-Warnungen nicht als Kontrollfluss und gib bei Fehlern eine passende HTTP- oder wp\_send\_json\_error()\-Antwort zurück. Zeile 9 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash

Lass Kirat den Bestell- und Zahlungsablauf der Bestellseite der Bäckerei auf Sicherheit und Korrektheit prüfen.

kirat_review hat den Rat gefragt

Kirat fand 14 bestätigte Probleme (4 × kritisch, 4 × hoch, 5 × mittel, 1 × niedrig). Jeder Befund wurde von der anderen Modellfamilie gegengeprüft.

Beginne mit denen oben in der Liste; zu jedem gibt es einen vorgeschlagenen Fix.

Hinter den Kulissen

kirat_review Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_REVIEW · EFFORT: STANDARD · 14 BESTÄTIGT, 0 ABGELEHNT · $0.11

Fokus: Sicherheit und Korrektheit eines Bestell- und Zahlungsablaufs

Gesendeter Code:

// routes/order.js — order endpoint of the bakery's ordering page (Node 20, Express 4, pg)
const express = require('express');
const { pool } = require('../db');
const { sendConfirmation } = require('../mail');
const router = express.Router();

router.post('/order', async (req, res) => {
  const { cakeId, pickupDate, name, email, price, note } = req.body;

  const cake = await pool.query(\`SELECT * FROM cakes WHERE id = ${cakeId}\`);
  if (!cake.rows.length) return res.status(404).send('Unknown cake');

  const order = await pool.query(
    'INSERT INTO orders (cake_id, pickup_date, name, email, amount, note) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id',
    [cakeId, pickupDate, name, email, price, note]
  );

  sendConfirmation(email, order.rows[0].id);
  res.redirect(\`/pay?order=${order.rows[0].id}&amount=${price}\`);
});

module.exports = router;

Ergebnis des Rats

  1. kritisch cakeId wird direkt in den SQL-String interpoliert. Ein Angreifer kann SQL-Ausdrücke oder zusätzliche Anweisungen einschleusen und dadurch Daten lesen oder verändern oder die Datenbank belasten. Fix: Auch diese Abfrage parametrisieren, z. B. SELECT... FROM cakes WHERE id = $1\ mit \[cakeId\]\, und zusätzlich cakeId auf den erwarteten Typ prüfen. Zeile 10 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  2. kritisch SQL-Injection-Schwachstelle durch direkte Template-String-Interpolation von cakeId in der SQL-Abfrage. Fix: Eine parametrisierte SQL-Abfrage verwenden: pool.query('SELECT * FROM cakes WHERE id = $1', [cakeId]). Zeile 9 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  3. kritisch Clientseitige Preismanipulation ist möglich. Der Preis wird aus req.body übernommen und direkt gespeichert und verarbeitet. Fix: Den Preis serverseitig aus der Datenbank lesen (cake.rows[0].price) und dem vom Client gesendeten Wert nicht vertrauen. Zeile 8 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  4. kritisch cakeId aus dem Request-Body wird in den SQL-String interpoliert: SQL-Injection. Fix: Eine parametrisierte Abfrage verwenden: SELECT * FROM cakes WHERE id = $1. Zeile 10 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  5. hoch Der Betrag, der gespeichert und an den Zahlungsablauf übergeben wird, stammt vollständig aus req.body.price\. Ein Kunde kann für jeden Kuchen einen manipulierten, negativen oder sehr kleinen Betrag eingeben. Fix: Den Preis ausschließlich serverseitig aus dem ausgewählten Kuchen oder einer unveränderlichen Preisversion ermitteln. Beim Zahlungsanbieter eine serverseitige Zahlungssitzung mit diesem Betrag erstellen und den erwarteten Betrag bei der Zahlungsbestätigung erneut serverseitig verifizieren. Zeile 16 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  6. hoch Die Bestellung wird erstellt und eine Bestätigung versendet, bevor eine erfolgreiche Zahlung verifiziert wurde. Abgebrochene oder bewusst unbezahlte Transaktionen erscheinen daher als bestätigte Bestellungen und können beliebig erzeugt werden. Fix: Bestellungen zunächst mit einem Status wie pending\_payment\ anlegen. Erst nach einer authentifizierten, idempotent verarbeiteten Benachrichtigung des Zahlungsanbieters auf paid\ wechseln und dann die Bestätigung senden oder die Produktion bzw. Reservierung auslösen. Zeile 19 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  7. hoch Fehlende Fehlerbehandlung in einer asynchronen Express-4-Route. Datenbank- oder Laufzeitfehler führen zu unbehandelten Promise-Rejections. Fix: Einen try/catch-Block verwenden und Fehler mit next(err) weiterleiten oder ein Paket wie express-async-errors einsetzen. Zeile 8 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  8. hoch Der Betrag wird vom Client übernommen (Preis im Request-Body), sodass ein Kunde seinen eigenen Preis festlegen kann. Fix: Den Preis serverseitig aus der cakes-Zeile lesen und jeden Client-Wert ignorieren. Zeile 15 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  9. mittel Der asynchrone Handler leitet Fehler nicht weiter. Express 4 behandelt abgelehnte Promises von async\-Handlern nicht automatisch; Datenbank- oder synchrone Mail-Fehler können daher zu unbeantworteten Anfragen und unbehandelten Rejections führen. Fix: Den Handler in try/catch\ einwickeln und Fehler an next(err)\ weitergeben oder einen etablierten Async-Wrapper verwenden. Zusätzlich eine zentrale Fehlerbehandlung konfigurieren. Zeile 7 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  10. mittel Das Ergebnis von sendConfirmation\ wird weder abgewartet noch anderweitig auf Fehler geprüft. Eine Promise-Rejection kann unbehandelt bleiben; gleichzeitig erhält der Client bereits eine Erfolgsantwort, obwohl das Senden der Mail möglicherweise fehlgeschlagen ist. Fix: Das Senden nach bestätigter Zahlung über eine persistente Outbox oder Job-Queue mit Wiederholungen durchführen. Mindestens das Promise abwarten und Fehler kontrolliert protokollieren oder behandeln. Zeile 19 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  11. mittel Es gibt keinen Idempotenzschutz. Browser-Wiederholungen, Doppelklicks oder Netzwerk-Wiederholungen erzeugen jeweils eine neue Bestellung und möglicherweise mehrere Bestätigungen oder Zahlungsversuche. Fix: Einen Idempotenzschlüssel oder eine Checkout-Session-ID akzeptieren, mit einer Unique-Constraint absichern und bei Wiederholungen die bereits vorhandene Bestellung zurückgeben. Zeile 13 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  12. mittel pickupDate, name, email, price und note werden ohne geschäftliche oder syntaktische Validierung verarbeitet. So können beispielsweise vergangene oder ungültige Abholdaten, fehlende Kundendaten und ungeeignete Feldwerte gespeichert werden; Datenbankfehler treten zudem erst spät und unkontrolliert auf. Fix: Ein Request-Schema mit Typen, Pflichtfeldern, Längenbegrenzungen und normalisierten Formaten verwenden. Abholdaten gegen Zeitzone, Vorlaufzeit und zulässige Öffnungszeiten- oder Kapazitätsregeln prüfen; den Preis nicht als Client-Eingabe akzeptieren. Zeile 8 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  13. mittel Der asynchrone Aufruf von sendConfirmation wird weder abgewartet noch auf Fehler geprüft. Fix: await vor sendConfirmation setzen und mögliche Fehler beim Senden der E-Mail behandeln. Zeile 17 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  14. niedrig Unvollständige Eingabevalidierung für Felder wie email, pickupDate, name und note. Fix: Schema-Validierung implementieren (z. B. mit Zod oder express-validator), bevor die Request-Daten verarbeitet werden. Zeile 8 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6

Lass Kirat diese Abrechnungsfunktion auf Korrektheit und Datenintegrität prüfen.

kirat_review hat den Rat gefragt

Kirat hat 16 bestätigte Probleme gefunden (1 × kritisch, 11 × hoch, 3 × mittel, 1 × niedrig). Jeder Befund wurde von der jeweils anderen Modellfamilie gegengeprüft.

Beginne mit den Einträgen oben in der Liste; jeder enthält einen vorgeschlagenen Fix.

Hinter den Kulissen

kirat_review Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_REVIEW · AUFWAND: STANDARD · 16 BESTÄTIGT, 0 ABGELEHNT · $0.14

Fokus: Korrektheit und Datenintegrität einer Abrechnungsfunktion

Gesendeter Code:

// billing/applyCredit.ts — billing module in the monolith (TypeScript, node-postgres)
import { pool } from '../db';

export async function applyCredit(customerId: string, invoiceId: string, creditCents: number) {
  const inv = await pool.query('SELECT total_cents, status FROM invoices WHERE id = $1', [invoiceId]);
  const balance = await pool.query('SELECT credit_cents FROM customers WHERE id = $1', [customerId]);

  const available = balance.rows[0].credit_cents;
  if (creditCents > available) throw new Error('Not enough credit');

  const newTotal = inv.rows[0].total_cents - creditCents;
  await pool.query('UPDATE invoices SET total_cents = $1 WHERE id = $2', [newTotal, invoiceId]);
  await pool.query('UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2', [creditCents, customerId]);

  if (newTotal <= 0) {
    await pool.query("UPDATE invoices SET status = 'paid' WHERE id = $1", [invoiceId]);
  }
  return newTotal * 1.19 / 100;
}

Ergebnis des Rats

  1. kritisch Fehlende Datenbanktransaktion und Zeilensperre. Bei parallelen Anfragen können Race Conditions (z. B. doppelte Verwendung von Guthaben) und unvollständige Aktualisierungen im Fehlerfall auftreten. Fix: Verwende einen Client aus dem Pool mit BEGIN/COMMIT und nutze SELECT FOR UPDATE, um Zeilen atomar zu sperren und zu aktualisieren. Zeile 5 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  2. hoch Die drei zusammenhängenden Aktualisierungen werden nicht in einer Datenbanktransaktion ausgeführt. Wenn das Belasten des Kundenguthabens oder die Statusänderung fehlschlägt, kann die Rechnung bereits reduziert worden sein, ohne dass das Guthaben korrekt belastet oder der Status gesetzt wurde. Fix: Hole einen dedizierten Client aus dem Pool und führe alle Prüfungen und Aktualisierungen zwischen BEGIN und COMMIT aus; verwende bei jedem Fehler ROLLBACK. Zeile 11 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  3. hoch Die Rechnung wird zuerst gelesen und später mit einem absolut berechneten Wert überschrieben. Zwei parallele Aufrufe können denselben Ausgangswert lesen und sich dann gegenseitig überschreiben; beide Guthabenbelastungen finden dennoch statt, während nur eine Belastung in der Rechnung vollständig sichtbar bleibt. Fix: Sperre die betroffene Rechnung innerhalb derselben Transaktion mit SELECT... FOR UPDATE, oder ändere den Betrag atomar über UPDATE... SET total_cents = total_cents - $1 mit geeigneten Bedingungen. Zeile 4 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  4. hoch Die Prüfung und Belastung des Kundenguthabens sind nicht atomar. Parallele Aufrufe können beide dieselbe verfügbare Deckung sehen und das Guthaben anschließend unter null reduzieren. Fix: Sperre den Kundendatensatz transaktional oder verwende ein bedingtes UPDATE, etwa UPDATE customers SET credit_cents = credit_cents - $1 WHERE id = $2 AND credit_cents >= $1 RETURNING credit_cents, und verlange genau eine zurückgegebene Zeile. Zeile 8 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  5. hoch Es wird nicht geprüft, ob die Rechnung zum angegebenen Kunden gehört. Dadurch kann das Guthaben eines Kunden auf eine beliebige, über invoiceId identifizierte Rechnung angewendet werden. Fix: Frage Rechnung und Kunde über die Eigentumsbeziehung ab und aktualisiere sie, zum Beispiel mit WHERE invoices.id = $1 AND invoices.customer_id = $2; brich ab, wenn es keine Übereinstimmung gibt. Zeile 4 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  6. hoch Das anzuwendende Guthaben ist nicht auf den offenen Rechnungsbetrag begrenzt. Wenn creditCents größer als total_cents ist, wird ein negativer Rechnungsbetrag gespeichert und überschüssiges Kundenguthaben verbraucht. Fix: Erlaube nur Beträge bis zum offenen Rechnungswert, oder bestimme den tatsächlich verwendeten Betrag als min(creditCents, total_cents) und belaste nur diesen Betrag vom Kundenguthaben. Zeile 10 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  7. hoch Negative, nicht ganzzahlige oder nicht sicher darstellbare Werte werden nicht abgelehnt. Insbesondere erhöht ein negativer creditCents-Wert den Rechnungsbetrag und gleichzeitig durch die Subtraktion eines negativen Werts das Kundenguthaben. Fix: Verlange Number.isSafeInteger(creditCents) && creditCents > 0 vor jedem Datenbankzugriff; behandle Geldbeträge durchgängig als ganzzahlige Cent-Werte. Zeile 8 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  8. hoch Der gelesene Rechnungsstatus wird vollständig ignoriert. Guthaben kann daher auch auf Rechnungen angewendet werden, die bereits bezahlt, storniert oder anderweitig nicht mehr änderbar sind; eine bereits bezahlte Rechnung kann dadurch negativ werden. Fix: Definiere die zulässigen Ausgangsstatus explizit und prüfe sie atomar in der UPDATE-Bedingung, zum Beispiel AND status = 'open'. Wenn es keine Übereinstimmung gibt, brich den Vorgang ab. Zeile 4 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  9. hoch Zugriff auf balance.rows[0] und inv.rows[0] ohne vorherige Prüfung. Wenn ein Kunde oder eine Rechnung nicht gefunden wird, stürzt die Anwendung mit einem unbehandelten TypeError ab. Fix: Prüfe inv.rows.length und balance.rows.length vor dem Zugriff und wirf eine explizite Fehlermeldung. Zeile 8 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  10. hoch Fehlende Validierung von creditCents auf negative Werte. Ein negativer Wert umgeht die Prüfung (creditCents > available) und führt zu fehlerhaften Guthaben- oder Rechnungsanpassungen. Fix: Stelle sicher, dass creditCents eine positive ganze Zahl größer als 0 ist. Zeile 9 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  11. hoch Die Lesezugriffe und die drei Aktualisierungen laufen außerhalb einer Transaktion und ohne Zeilensperren. Zwei gleichzeitige Aufrufe können beide die Guthabenprüfung bestehen und dasselbe Guthaben doppelt verbrauchen, und ein Absturz zwischen den Aktualisierungen hinterlässt Rechnung und Guthabenstand inkonsistent. Fix: Führe alles in einer Transaktion auf einem einzigen Client aus, sperre die Zeilen mit SELECT... FOR UPDATE und committe erst, nachdem alle Aktualisierungen erfolgreich waren. Zeile 5 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  12. hoch Die Funktion prüft nie, ob die Rechnung zum Kunden gehört oder ob sie noch offen ist. Guthaben eines Kunden kann auf die Rechnung eines anderen Kunden oder auf eine bereits bezahlte Rechnung angewendet werden. Fix: Wähle die Rechnung mit WHERE id = $1 AND customer_id = $2 AND status = 'open' aus und schlage fehl, wenn keine Zeile zurückkommt. Zeile 11 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  13. mittel Die Existenz der Rechnung und des Kunden wird nicht geprüft. Bei unbekannten IDs führt der Zugriff auf rows[0] zu Laufzeitfehlern statt zu einem kontrollierten Geschäftsfehler; außerdem werden beide Abfragen unnötig ausgeführt, bevor dies offensichtlich wird. Fix: Prüfe rowCount oder rows.length für beide Abfragen und löse einen definierten Not-found-Fehler aus; integriere die Prüfung in die Transaktion und, wenn möglich, in eine relationale Abfrage. Zeile 4 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  14. mittel Der Rückgabewert entspricht weder dem gespeicherten Cent-Betrag noch einer einfachen Umrechnung in die Hauptwährung: Er addiert pauschal 19 Prozent und verwendet Gleitkommaarithmetik. Dadurch kann der Aufrufer einen Wert erhalten, der sich steuer- und rundungsbedingt vom tatsächlich gespeicherten verbleibenden Rechnungsbetrag unterscheidet. Fix: Gib den verbleibenden Betrag unverändert in Cent zurück, oder definiere einen klar typisierten Rückgabewert. Wenn aus geschäftlichen Gründen eine Steuerberechnung erforderlich ist, entnimm Steuersatz und Rundungsregel den Rechnungsdaten und rechne mit Ganzzahl- oder Dezimalarithmetik. Zeile 17 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  15. mittel Verwendung von IEEE-754-Gleitkommaarithmetik (newTotal * 1.19 / 100) für Finanzberechnungen. Dies führt zu Präzisions- und Rundungsfehlern. Fix: Rechne durchgängig in Cent mit Ganzzahlen (BigInt/Math.round), oder verwende eine Bibliothek für exakte Dezimalarithmetik. Zeile 18 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  16. niedrig Ein separates UPDATE-Kommando für den Rechnungsstatus verursacht unnötige Datenbank-Roundtrips. Fix: Fasse die Aktualisierung von total_cents und status in einer einzigen UPDATE-Abfrage zusammen. Zeile 12 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6

Lass Kirat das Screening-Analyseskript für unsere systematische Überprüfung auf Korrektheit prüfen.

kirat_review hat den Rat gefragt

Kirat hat 11 bestätigte Probleme gefunden (6 × hoch, 4 × mittel, 1 × niedrig). Jeder Befund wurde von der anderen Modellfamilie gegengeprüft.

Beginne mit denen oben in der Liste; jeder enthält einen vorgeschlagenen Fix.

Hinter den Kulissen

kirat_review Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_REVIEW · AUFWAND: STANDARD · 11 BESTÄTIGT, 0 ABGELEHNT · $0.09

Fokus: Korrektheit einer Screening-Analyse für eine systematische Überprüfung

Gesendeter Code:

# screening/agreement.py — compares two screeners' include/exclude decisions (Python 3.12, pandas)
import pandas as pd

a = pd.read_csv('screener_a.csv')   # columns: record_id, decision ('include'/'exclude')
b = pd.read_csv('screener_b.csv')

merged = a.merge(b, on='record_id', suffixes=('_a', '_b'))

agree = (merged.decision_a == merged.decision_b).mean()
p_inc_a = (merged.decision_a == 'include').mean()
p_inc_b = (merged.decision_b == 'include').mean()
expected = p_inc_a * p_inc_b + (1 - p_inc_a) * (1 - p_inc_b)
kappa = (agree - expected) / (1 - expected)

conflicts = merged[merged.decision_a != merged.decision_b]
excluded = merged[merged.decision_a == 'exclude']

print(f'Records screened: {len(a)}')
print(f"Cohen's kappa: {kappa:.2f}")
excluded.record_id.to_csv('excluded.csv', index=False)
conflicts.to_csv('conflicts.csv', index=False)

Ergebnis des Rats

  1. hoch Der standardmäßige Inner Join entfernt alle record_id-Werte, die nur in einer der beiden Dateien vorkommen. Kappa und Konflikte werden daher nur für die Schnittmenge berechnet, ohne fehlende Screenings sichtbar zu machen. Gleichzeitig meldet „Records screened“ in Zeile 18 die Länge von a statt der tatsächlich analysierten Schnittmenge. Fix: Verwende einen Outer Join mit Merge-Indikator, vergleiche die ID-Mengen explizit und melde fehlende Entscheidungen separat oder behandle sie als Datenfehler. Gib für jede Metrik den tatsächlich verwendeten Nenner aus. Zeile 7 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  2. hoch Die Eindeutigkeit von record_id wird nicht geprüft. Doppelte IDs führen beim Merge zu einem Many-to-Many-Kartesischen Produkt und gewichten einzelne Studien mehrfach, was Übereinstimmung, Prävalenzen, Kappa und Ausgabedateien verzerrt. Fix: Prüfe vor dem Merge record_id in beiden Dateien auf Nicht-Nullheit und Eindeutigkeit und brich bei Duplikaten ab. Verwende zusätzlich merge(..., validate='one_to_one'). Zeile 7 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  3. hoch Entscheidungswerte werden nicht validiert. Fehlende Werte, Tippfehler, Groß-/Kleinschreibung oder zusätzliche Kategorien werden bei der Berechnung der Include-Prävalenz implizit wie „exclude“ behandelt, während die beobachtete Übereinstimmung exakte Werte vergleicht. Die Berechnung entspricht daher nicht mehr einem binären Cohen's Kappa und kann widersprüchliche Ergebnisse liefern. Fix: Normalisiere decision vor der Analyse kontrolliert und stelle sicher, dass jeder Wert genau 'include' oder 'exclude' ist. Behandle fehlende oder unbekannte Werte separat als Datenfehler oder unvollständiges Screening. Zeile 9 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  4. hoch excluded enthält alle von Screener A ausgeschlossenen Datensätze, einschließlich Konflikten, in denen Screener B „include“ entschieden hat. Solche Datensätze werden daher sowohl in excluded.csv als auch in conflicts.csv geschrieben. Wenn excluded.csv die endgültig ausgeschlossenen Treffer repräsentieren soll, können ungelöste Konflikte fälschlich aus dem Review entfernt werden. Fix: Ohne dokumentierte Vorrangregel wähle nur übereinstimmende Ausschlüsse aus, d. h. (decision_a == 'exclude') & (decision_b == 'exclude'). Halte Konflikte ausschließlich in conflicts.csv, bis eine Konsensentscheidung getroffen wurde. Zeile 16 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  5. hoch Fehlerhafte Filterung der ausgeschlossenen Studien: 'excluded' berücksichtigt nur die Entscheidung von Screener A ('merged.decision_a == "exclude"'). Bei einem Konflikt (Screener A schließt aus, Screener B schließt ein) wird die Studie fälschlich als ausgeschlossen gezählt. Fix: Exportiere Ausschlüsse nur, wenn beide Screener übereinstimmend 'exclude' gewählt haben (z. B. '(merged.decision_a == "exclude") & (merged.decision_b == "exclude")'), oder warte, bis der Konflikt gelöst ist. Zeile 16 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  6. hoch excluded.csv enthält jeden Datensatz, den Screener A ausgeschlossen hat, einschließlich Konflikten, in denen Screener B ihn eingeschlossen hat. Diese Datensätze werden vor der Konfliktdiskussion verworfen, was genau der falsche Ausschluss ist, den das Protokoll vermeiden muss. Fix: Schließe nur Datensätze aus, die beide Screener ausgeschlossen haben: merged[(merged.decision_a == 'exclude') & (merged.decision_b == 'exclude')]; leite jeden Konflikt zuerst an die Konfliktlösung weiter. Zeile 16 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  7. mittel Wenn beide Screener nur dieselbe Kategorie verwenden, ist expected gleich 1 und der Nenner von Kappa gleich 0. Das Ergebnis wird NaN oder kann eine Division-durch-Null-Warnung erzeugen; die formatierte Ausgabe „nan“ erklärt nicht, dass Kappa mathematisch undefiniert ist. Eine leere analysierte Schnittmenge führt ebenfalls zu bedeutungslosen NaN-Metriken. Fix: Prüfe vor der Division, ob überhaupt gepaarte gültige Entscheidungen vorliegen und ob 1 - expected größer als 0 ist. Melde Kappa in degenerierten Fällen explizit als „nicht definiert“ und gib die zugrunde liegenden Häufigkeiten an. Zeile 13 · gefunden von gpt-5.6 · bestätigt von gemini-3.6-flash
  8. mittel Mögliche Division durch Null bei Cohen's Kappa, wenn der erwartete Zufallswert 'expected' gleich 1 ist (z. B. wenn beide Screener für 100 % der Datensätze dieselbe Kategorie wählen). Fix: Prüfe vor der Berechnung, ob '1 - expected == 0' gilt, und weise in diesem Fall einen definierten Wert zu (z. B. 1.0 oder NaN). Zeile 12 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  9. mittel Stilles Verwerfen von Datensätzen durch den standardmäßigen Inner Join. Wenn Screener A und Screener B unterschiedliche Mengen von 'record_id's bewertet haben, werden Abweichungen bei den bearbeiteten Studien nicht gemeldet. Außerdem entspricht 'len(a)' in der Konsolenausgabe dann nicht der Anzahl der tatsächlich abgeglichenen Studien. Fix: Prüfe, ob 'len(a) == len(b) == len(merged)' gilt, oder führe einen Outer Join durch, um unvollständig bewertete Datensätze explizit anzuzeigen. Zeile 7 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6
  10. mittel Der innere Merge verwirft stillschweigend Datensätze, die nur ein Screener entschieden hat, und die ausgegebene Anzahl verwendet len(a). Ungescreente Datensätze verschwinden sowohl aus der Übereinstimmung als auch aus den PRISMA-Zahlen. Fix: Führe den Merge mit how='outer', indicator=True durch und brich ab oder melde, wenn einem Datensatz die Entscheidung eines der beiden Screener fehlt. Zeile 7 · gefunden von claude · bestätigt von gpt-5.6, gemini-3.6-flash
  11. niedrig Fehlende Eingabebereinigung und Behandlung fehlender Werte in der Spalte 'decision'. Groß-/Kleinschreibung, Leerzeichen oder NaN-Werte führen zu fehlerhaften Vergleichen. Fix: Bereinige die Spaltenwerte vor dem Vergleich (z. B. mit '.str.strip().str.lower()') und stelle die Typsicherheit der Daten sicher. Zeile 9 · gefunden von gemini-3.6-flash · bestätigt von gpt-5.6

Angezeigt: jeder bestätigte Befund mit seinem Fix, so wie die Mitglieder ihn formuliert haben; die Begründung der Prüfer ist auf ihr Urteil gekürzt. Duplikate werden nicht zusammengeführt, sodass ein Problem mehrfach erscheinen kann, wenn mehrere Mitglieder es melden. Code, Fokus und Claudes eigene Befunde wurden auf Englisch eingereicht; Befunde, die die Mitglieder auf Deutsch formuliert haben, sind hier übersetzt.

Fünf Ideen-Briefings aus unterschiedlichen Bereichen. ChatGPT und Gemini arbeiten in drei Spuren, Claude ergänzt eine Idee, und beide Mitglieder bewerten jede Idee anonym (je 1–10, bis zu 20 Punkte). Wähle eine aus.

Meine beiden Blogbeiträge ranken auf Google, aber wenige Leser starten eine Testphase. Brainstorme Ideen mit Kirat.

kirat_brainstorm fragte den Rat

Der Rat kam auf 14 Ideen und bewertete jede anonym. Die Top drei:

  1. Ersetze die 14-Tage-Uhr durch drei echte Sendungen (18/20 Punkte)
  2. Erledige die Aufgabe direkt im Artikel (17/20 Punkte)
  3. Verwandle den Mahnungsartikel in eine Recovery-Konsole (17/20 Punkte)

Hinter den Kulissen

kirat_brainstorm Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_BRAINSTORM · AUFWAND: STANDARD · 14 IDEEN · 1 RUNDE · $0,11

Thema: Ideen für einen Solo-Entwickler, um mehr Leser zweier auf Google rankender Blogbeiträge in Testanmeldungen für ein Rechnungstool für Freelancer zu verwandeln

Gesendeter Kontext: Rechnungstool für Freelancer, 19 USD pro Monat, 14-tägige kostenlose Testphase, 30 zahlende Kunden nach 5 Monaten. Anmeldungen kommen überwiegend aus zwei Blogbeiträgen, die auf Google ranken (wie man eine Freelancer-Rechnung schreibt; wie man verspätete Zahlungen einfordert). Etwa 12 % der Testphasen konvertieren. Der Entwickler hat einen Hauptjob und etwa 10 Stunden pro Woche für das Produkt. HART: keine bezahlte Werbung. HART: höchstens 3 Stunden pro Woche dafür.

Ergebnis des Rats

  1. 1 Ersetze die 14-Tage-Frist durch drei echte Versendungen gpt-5.6 · Regelbrecher · 18/20 Punkte (9 + 9) Teste eine Testphase, die nach drei versendeten Rechnungen oder Zahlungserinnerungen endet statt nach 14 Kalendertagen. Damit wird bewusst die weiche Annahme durchbrochen, dass eine zeitlich begrenzte Testphase angemessen ist: Freelancer stellen möglicherweise in einem beliebigen Zwei-Wochen-Fenster keine Rechnungen aus, sodass die aktuelle Testphase ablaufen kann, bevor das Produkt seinen Wert beweist. Behalte den 19-Dollar-Monatsplan unverändert bei und vergleiche die Konversion von Aktivierung zu Bezahlung nach Kohorten.
  2. 2 Schließe die Aufgabe direkt im Artikel ab gpt-5.6 · im Rahmen des Auftrags · 17/20 Punkte (9 + 8) Bette einen winzigen Rechnungsgenerator in „Wie man eine Freelancer-Rechnung schreibt“ ein: Leser geben Kunde, Betrag, Fälligkeitsdatum und Zahlungsbedingungen ein und sehen dann eine fertige Vorschau. „Diese Rechnung senden oder speichern“ erstellt eine Testphase, in der diese Angaben bereits geladen sind, und beseitigt so die Lücke zwischen Lernen und Tun. Baue es in Wochenscheiben von maximal drei Stunden und halte den Wartungsaufwand danach nahe null.
  3. 3 Verwandle den Mahnungsartikel in eine Wiederherstellungskonsole gpt-5.6 · Nachbar · 17/20 Punkte (9 + 8) Als einstufige Ersetzung des eingebetteten Rechnungsgenerators können Leser einen überfälligen Betrag und ein Fälligkeitsdatum eingeben, um eine datierte dreiteilige Mahnsequenz zu erzeugen. Beim Start einer Testphase wird der Schuldner gespeichert, die Nachrichten werden geplant und der erste Entwurf wird versandbereit geöffnet. Dies bewahrt das stärkste Muster – nützliche Ausgabe vor der Anmeldung – und entspricht zugleich der Absicht des zweiten Beitrags.
  4. 4 Setze den Konversionsmoment in den Kalender des Schuldners gpt-5.6 · im Rahmen des Auftrags · 16/20 Punkte (7 + 9) Biete im Artikel über verspätete Zahlungen eine generierte .ics-Datei mit Erinnerungen für das Fälligkeitsdatum und eskalierenden Nachfassungen an Tag 1, 7 und 14 an. Jedes Kalenderereignis enthält einen Deep-Link, der den relevanten Mahn-Workflow mit vorausgefüllten Daten öffnet und den Leser zurückholt, wenn der Schmerz real ist, statt während er nur recherchiert. Es erfordert keine E-Mail-Erfassung und kann unbeaufsichtigt laufen.
  5. 5 Dauerhaft kostenloser Plan für einen Kunden statt Testphase gemini-3.6-flash · Regelbrecher · 16/20 Punkte (8 + 8) Diese Idee durchbricht die weiche Vorgabe der 14-tägigen Testphase und ersetzt sie durch einen Freemium-Plan für genau einen aktiven Kunden. Freelancer nutzen das Produkt dauerhaft kostenlos für ihren ersten Kunden und wechseln nahtlos zum Pauschalpreis von 19 Dollar, sobald ein zweiter Kunde hinzukommt.
  6. 6 Leite Leser nach ihrem unmittelbaren Problem gpt-5.6 · im Rahmen des Auftrags · 14/20 Punkte (8 + 6) Ersetze generische Testphasen-Banner durch drei Inline-Optionen wie „Ich brauche meine erste Rechnung“, „Ich stelle regelmäßig Rechnungen“ und „Ein Kunde ist bereits im Verzug“. Jede Option öffnet einen passenden Onboarding-Zustand statt derselben Startseite, und Abschnitts-IDs im Artikel können sinnvolle Standardwerte vorauswählen. Miss die abgeschlossene Aktivierung der Testphase, nicht nur Klicks auf CTAs, und teste pro Woche eine Route.
  7. 7 Veröffentliche drei forensische Rechnungs-Makeovers gpt-5.6 · im Rahmen des Auftrags · 14/20 Punkte (8 + 6) Verwandle mit Erlaubnis drei anonymisierte Kundenrechnungen in statische Vorher-Nachher-Fallstudien, die genau zeigen, was geändert wurde und warum. Füge jedes Makeover neben dem relevanten Ratschlag im Ranking-Beitrag ein, mit einem CTA, der dieselbe korrigierte Struktur als bearbeitbare Testphasen-Vorlage öffnet. Konkrete Belege aus einer kleinen Kundenbasis können glaubwürdiger sein als breite Testimonials.
  8. 8 Lass Leser ihren Fortschritt zwischen beiden Beiträgen mitnehmen gpt-5.6 · im Rahmen des Auftrags · 14/20 Punkte (7 + 7) Speichere die gewählte Währung, die Rechnungsphase und das Fälligkeitsdatum eines Lesers lokal im Browser und nutze diesen Zustand, wenn er zwischen den beiden Artikeln wechselt. Wer einen Rechnungsplan erstellt hat, sieht später einen kontextuellen Hinweis wie „Deine Rechnung ist jetzt 3 Tage überfällig – öffne die vorbereitete Nachfassung“, mit vorausgefülltem Testphasen-Onboarding. So entsteht eine leichte Reise über zwei Beiträge, ohne Konto oder laufende Content-Produktion.
  9. 9 Interaktiver Konfigurator für Mahnschreiben gemini-3.6-flash · im Rahmen des Auftrags · 14/20 Punkte (7 + 7) Füge dem Artikel über das Nachfassen bei überfälligen Zahlungen einen Generator für eskalierende Zahlungserinnerungsschreiben hinzu. Nach Eingabe des Textes wird die Vorlage erzeugt und mit dem CTA kombiniert, automatische Zahlungserinnerungen für zukünftige Rechnungen im Testkonto einzurichten.
  10. 10 Magic Link zum Sofortversand ohne vorherige Registrierung gemini-3.6-flash · Nachbar · 14/20 Punkte (8 + 6) Mutation des In-Content-Generators: Der Leser gibt die Rechnungsdaten direkt im Blogartikel ein und klickt auf „Rechnung jetzt senden“. Im Hintergrund erstellt das System nahtlos ein Testkonto und versendet die E-Mail direkt; das Passwort wird erst danach gesetzt.
  11. 11 Live-Rechnungsgenerator direkt im Blogartikel gemini-3.6-flash · im Rahmen des Auftrags · 13/20 Punkte (6 + 7) Bette ein einfaches, interaktives Formularwerkzeug direkt in den Artikel über das Schreiben von Rechnungen ein. Leser geben ihre Rechnungsdaten ein und können das fertige PDF sofort und kostenlos herunterladen. Ein auffälliger Button bietet an, die Rechnung mit einem Klick digital zu versenden und den Zahlungsstatus im 14-tägigen Testkonto zu verfolgen.
  12. 12 Einmalige Pay-per-Use-Erinnerung statt Monatsabo gemini-3.6-flash · Regelbrecher · 13/20 Punkte (6 + 7) Diese Idee durchbricht die weiche Vorgabe des reinen SaaS-Abonnementmodells zu 19 Dollar pro Monat. Für eine einmalige Gebühr von 5 Dollar können Leser des Artikels über verspätete Zahlungen ein rechtssicheres Mahnschreiben inklusive Tracking-Link versenden lassen, wobei die Gebühr vollständig angerechnet wird, wenn sie später ein Abonnement abschließen.
  13. 13 Vorlage, die sich im Tool öffnet claude · im Rahmen des Auftrags · 11/20 Punkte (6 + 5) Biete die Rechnungsvorlage aus dem Beitrag als sofort nutzbare Rechnung im Tool an: Ein Klick öffnet ein vorausgefülltes Testkonto statt eines Dateidownloads.
  14. 14 Problemspezifische Exit-Intent mit automatisierter E-Mail-Sequenz gemini-3.6-flash · im Rahmen des Auftrags · 8/20 Punkte (4 + 4) Implementiere auf dem Artikel über verspätete Zahlungen ein Exit-Intent-Popup, das eine Notfall-E-Mail-Vorlage für säumige Kunden im Austausch gegen eine E-Mail-Adresse anbietet. Eine automatisierte dreiteilige E-Mail-Sequenz erklärt dann passiv, wie automatisierte Workflows verspätete Zahlungen reduzieren, und verlinkt auf das Testkonto.

Brainstorm mit Kirat: Wie machen wir aus diesem einmaligen Shop-Umbau einen Care-Plan, den der Kunde tatsächlich will?

kirat_brainstorm fragte den Rat

Der Rat entwickelte 15 Ideen und bewertete jede anonym. Die Top drei:

  1. Budgetbruch: Betrieb vor Launch-Glanz (18/20 Punkte)
  2. CSV-Produkt-Gatekeeper (17/20 Punkte)
  3. Zuverlässigkeitsdividende (17/20 Punkte)

Hinter den Kulissen

kirat_brainstorm Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_BRAINSTORM · AUFWAND: STANDARD · 15 IDEEN · 1 RUNDE · $0,10

Thema: Ideen für eine kleine Digitalagentur, um einen einmaligen Shop-Umbau in einen wiederkehrenden Care-Retainer zu verwandeln, den der Kunde tatsächlich will

Gesendeter Kontext: Agentur mit 4 Personen. Der Kunde verkauft etwa 1.800 Möbelprodukte in Deutschland, Österreich und der Schweiz, hat 3 Mitarbeiter und keinen eigenen Entwickler, Umsatz etwa 1,2 Mio. EUR pro Jahr. Der alte selbst gehostete WooCommerce-Shop hatte 31 Plugins und zwei Sicherheitsvorfälle im letzten Jahr; der Kunde wünscht weniger Wartung und weniger Notfälle. Ein lokales ERP exportiert Produktdaten als CSV. Umbau-Budget: 25.000 EUR. HART: kein Lock-in; der Kunde muss jederzeit mit allen Daten und Zugängen wechseln können. HART: keine zusätzlichen Einstellungen bei der Agentur.

Ergebnis des Rats

  1. 1 Budgetbruch: Betrieb vor Launch-Gloss gpt-5.6 · Regelbrecher · 18/20 Punkte (9 + 9) Diese Idee bricht bewusst die weiche Vorgabe des 25.000-EUR-Umbudgets: Das Angebot lautet beispielsweise 22.000 EUR für einen bewusst schlanken Launch plus 12.000 EUR für ein verbindliches erstes Betriebsjahr. Im Gegenzug entfallen Nice-to-have-Funktionen aus dem initialen Projekt; stattdessen werden Import-Härtung, Restore-Übungen, Monitoring und monatliche Verbesserungen finanziert. Das höhere Gesamtvolumen zahlt sich aus, weil der Kunde nicht erneut einen scheinbar fertigen Shop kauft, dessen echte Betriebskosten erst nach dem Launch sichtbar werden; alle Zugangsdaten, Daten und Arbeitsergebnisse bleiben jederzeit übertragbar.
  2. 2 CSV Product Gatekeeper gpt-5.6 · im Rahmen · 17/20 Punkte (9 + 8) Vor jedem ERP-Import prüft eine automatisierte Pipeline die CSV auf fehlende Preise, Duplikate, ungültige Varianten, Bildfehler, DACH-Steuerlogik und verdächtige Bestandsänderungen. Der monatliche Retainer deckt Regelpflege, Import-Monitoring und einen verständlichen Fehlerbericht für die drei Mitarbeitenden ab. So wird technische Wartung zu einem direkten Geschäftsvorteil: weniger falsche Produkte, Rückfragen und abgebrochene Käufe.
  3. 3 Zuverlässigkeitsdividende gpt-5.6 · im Rahmen · 17/20 Punkte (8 + 9) Der Kunde zahlt eine moderate Grundgebühr für Monitoring und Wartung; ein zusätzlicher Quartalsbetrag wird nur fällig, wenn vereinbarte Zuverlässigkeitsziele wie erfolgreiche Importe, getestete Wiederherstellung und Reaktionszeiten erreicht wurden. Vermeidbare Ausfälle, die durch die Agentur verursacht werden, erzeugen Servicegutschriften statt abrechenbarer Notfallstunden. Dieses Modell richtet die wirtschaftlichen Anreize auf Prävention aus und nimmt dem Kunden die Angst, dass die Agentur von Problemen profitiert.
  4. 4 Exit-ready Care Charter gpt-5.6 · im Rahmen · 16/20 Punkte (9 + 7) Der Retainer wird bewusst als Anti-Lock-in-Produkt verkauft: Monitoring, Updates, Backups, Sicherheitschecks und zwei kleine Änderungen pro Monat für etwa 1.200–1.500 EUR. Alle Konten liegen beim Kunden, und Code und Importskripte befinden sich im Repository des Kunden; jeden Monat erhält der Kunde außerdem Dokumentation, einen Datenexport und ein Übergabepaket, das ihm jederzeit eine Kündigung ermöglicht. So zahlt der Kunde für nachweisbare Betriebsfähigkeit statt für Abhängigkeit.
  5. 5 Seasonal release train gpt-5.6 · im Rahmen · 16/20 Punkte (8 + 8) Statt beliebiger Support-Tickets gibt es vier planbare Commerce-Releases pro Jahr, zum Beispiel für Gartenmöbel, Sommerende, Black Week und Weihnachten. Im Retainer enthalten sind pro Release ein kleines UX- oder Merchandising-Paket, Regressionstests und die technische Wartung dazwischen. So erhält der Kunde sichtbare laufende Weiterentwicklung, und der Aufwand bleibt für die vierköpfige Agentur bündelbar.
  6. 6 Der vierteljährliche Escape-Test gpt-5.6 · im Rahmen · 16/20 Punkte (9 + 7) Einmal pro Quartal stellt die Agentur einen vollständigen Export von Produkt-, Kunden-, Bestell- und Inhaltsdaten bereit und führt einen dokumentierten Neustart in einer neutralen Testumgebung durch. Was der Kunde ausgerechnet bezahlt, ist der regelmäßig nachgewiesene Exit: Zugriffsliste, Restore-Log und Übergabehandbuch gehören dem Kunden. Das harte No-Lock-in-Kriterium wird so vom Einwand zum ungewöhnlichen Verkaufsargument für den Retainer.
  7. 7 Care Charter plus growth exchange gpt-5.6 · Nachbar · 16/20 Punkte (8 + 8) Als kleine Mutation der Exit-ready Care Charter sind die enthaltenen Änderungsstunden nicht im Voraus festgelegt, sondern werden monatlich zwischen Betrieb, Datenqualität und Conversion-Verbesserungen verschoben; ungenutztes Volumen wird höchstens ein Quartal übertragen. Ein gemeinsames 30-minütiges Board entscheidet anhand von Risiken und Umsatzchancen über die Verwendung. Der Retainer bleibt exit-ready, fühlt sich aber weniger wie eine Versicherung und mehr wie ein flexibles externes Digitalteam an.
  8. 8 ERP sync & catalog safety retainer gemini-3.6-flash · im Rahmen · 13/20 Punkte (7 + 6) Die Agentur übernimmt die kontinuierliche Überwachung und Wartung der Schnittstelle zwischen lokaler ERP-CSV und Onlineshop. Fehlerhafte Datenimporte, fehlende Möbelvarianten oder falsche Preise werden automatisch abgefangen, bevor sie live gehen. Damit nimmt sie dem dreiköpfigen Team des Kunden die operative Last der Datenpflege vollständig ab.
  9. 9 AI-powered product data enrichment flat rate gemini-3.6-flash · Nachbar · 13/20 Punkte (6 + 7) Mutation der ERP-Schnittstellen-Idee: Die Agentur wartet nicht nur den CSV-Import, sondern reichert die Rohdaten mit KI-Skripten automatisch um strukturierte Attribute, SEO-Texte und DACH-spezifische Lieferzeithinweise an. Das spart dem Kunden manuellen Pflegeaufwand und erhöht die Sichtbarkeit im Möbelmarkt ohne zusätzliches Agenturpersonal.
  10. 10 CI/CD-based visual regression maintenance contract gemini-3.6-flash · im Rahmen · 12/20 Punkte (6 + 6) Statt riskanter Live-Updates richtet die Agentur eine Staging-Pipeline ein, die monatliche Plugin-Updates automatisch visuell und funktional prüft. Der Kunde erhält einen monatlichen Transparenzbericht und garantierte Reaktionszeiten bei Sicherheitslücken. Das garantiert absolute Stabilität ohne die bisherigen Notfälle.
  11. 11 Quarterly conversion & UX polishing gemini-3.6-flash · im Rahmen · 11/20 Punkte (6 + 5) Neben der Basiswartung enthält der Retainer feste Stundenkontingente für die Optimierung von Checkout-Funktionen und Möbelvarianten-Anzeigen. Die Agentur analysiert monatlich das Nutzerverhalten in der DACH-Region und setzt ertragreiche Anpassungen um. So wird der Retainer vom reinen Kostenfaktor zum Umsatztreiber.
  12. 12 Safe update & instant rollback guarantee gemini-3.6-flash · Nachbar · 11/20 Punkte (5 + 6) Mutation des CI/CD-Wartungsvertrags: Der Retainer konzentriert sich rein auf ein garantiertes Zero-Downtime-SLA mit automatisierter Snapshot-Wiederherstellung innerhalb von 15 Minuten im Störungsfall. Das adressiert direkt die Angst des Kunden nach den beiden Sicherheitsvorfällen, bei minimalem laufendem manuellem Aufwand.
  13. 13 Revenue-share growth package instead of a fixed budget gemini-3.6-flash · Regelbrecher · 9/20 Punkte (4 + 5) Bricht die weiche Annahme eines starren einmaligen Umbudgets von 25.000 EUR: Die Umbaukosten werden auf 10.000 EUR reduziert, gekoppelt mit einem monatlichen Retainer mit einem kleinen Anteil am zusätzlichen Umsatz. Das zahlt sich aus, weil der Kunde sein Investitionsrisiko senkt und die Agentur direkt am Wachstum des 1,2-Millionen-EUR-Shops teilhat.
  14. 14 Headless-Architecture Care Service gemini-3.6-flash · Regelbrecher · 7/20 Punkte (3 + 4) Bricht die weiche Vorgabe eines klassischen Monolith-Setups (etwa Standard-WooCommerce): Das Frontend wird vom Backend entkoppelt, sodass Plugin-Sicherheitslücken die Website nicht mehr direkt angreifen können. Das zahlt sich aus, weil Notfälle strukturell eliminiert werden und der Kunde dank Open-Source-Stack und vollem Git-Zugriff jederzeit portabel bleibt.
  15. 15 Monthly one-page care report claude · im Rahmen · 6/20 Punkte (4 + 2) Ein einseitiger Monatsbericht mit Uptime, Seitengeschwindigkeit, durchgeführten Updates und verhinderten Vorfällen, damit der Kunde sieht, wofür der Retainer bezahlt.

Unsere neue Bestellseite geht nächsten Monat live. Brainstorme mit Kirat, wie wir mehr Kuchen-Vorbestellungen ohne bezahlte Anzeigen bekommen.

kirat_brainstorm fragte den Rat

Der Rat entwickelte 15 Ideen und bewertete jede anonym. Die Top drei:

  1. Der jährliche Geburtstags-Autopilot (18/20 Punkte)
  2. Echte Kuchen-Slots statt generischer Posts (17/20 Punkte)
  3. Der Kuchen reist als eigenes Werbemedium (16/20 Punkte)

Hinter den Kulissen

kirat_brainstorm Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_BRAINSTORM · AUFWAND: STANDARD · 15 IDEEN · 1 RUNDE · $0,09

Thema: Ideen für eine lokale Bäckerei, mehr Vorbestellungen für individuelle Torten über ihre neue Online-Bestellseite zu erhalten, ohne bezahlte Anzeigen

Gesendeter Kontext: Bäckerei mit 6 Mitarbeitenden in einer deutschen Kleinstadt mit 40.000 Einwohnern. Individuelle Torten und Vorbestellungen haben die beste Marge. Eine neue Online-Bestellseite (Tortenauswahl, Abholdatum, Vorauszahlung) geht nächsten Monat live; bisher kamen Bestellungen nur per Telefon und E-Mail. Das Google-Business-Profil hat 4,7 Sterne aus 120 Bewertungen. Der Inhaber hat wenig Zeit, daher müssen die Ideen mit höchstens 2 Stunden pro Woche laufen. HART: keine bezahlte Werbung in diesem Quartal. HART: kein zusätzliches Personal.

Ergebnis des Rats

  1. 1 Der jährliche Geburtstags-Autopilot gpt-5.6 · within brief · 18/20 Punkte (9 + 9) Beim Bezahlen können Kundinnen und Kunden freiwillig den Anlass und den Monat für eine Erinnerung im Folgejahr hinterlassen. Eine automatisierte E-Mail 21 Tage vorher führt zur vorausgefüllten Bestellseite; so baut jede Bestellung eine künftige Bestellung auf, ohne laufende Kundenakquise und mit sauberer Einwilligung.
  2. 2 Echte Tortenslots statt allgemeiner Posts gpt-5.6 · within brief · 17/20 Punkte (9 + 8) Die Bestellseite zeigt die tatsächlich verbleibenden Produktionsslots für die nächsten vier Wochen, etwa „Noch 2 individuelle Torten für Samstag verfügbar“. Ein wöchentlicher Google-Business-Post verlinkt direkt auf diese Ansicht; das Aktualisieren und gemeinsame Posten dauert höchstens 20 Minuten und erzeugt glaubwürdige Dringlichkeit ohne Rabatte.
  3. 3 Die Torte reist als eigenes Werbemedium gpt-5.6 · within brief · 16/20 Punkte (8 + 8) Jede abgeholte Torte erhält eine kleine Karte mit der Aufschrift „Diese Torte nachbestellen oder anpassen“ und einem QR-Code für die passende Variante. Die Karte wird beim Anschneiden der Torte sichtbar präsentiert, sodass genau die anwesenden Geburtstags- oder Hochzeitsgäste den Weg zur Bestellung entdecken; ein einmal erstelltes Kartenset verursacht fast keinen wöchentlichen Aufwand.
  4. 4 Einmalige Tortenberatungsstunde zum Start gpt-5.6 · rule breaker · 16/20 Punkte (8 + 8) Am ersten Samstag nach dem Start gibt es vier Stunden lang eine offene Tortenberatungsstunde: Gäste wählen Geschmack und Stil anhand von Musterkarten und geben ihre Bestellung anschließend selbst über die für sie ausgelegten QR-Codes auf. Damit wird die weiche Vorgabe von höchstens zwei Stunden Aufwand in dieser Woche bewusst gebrochen; der Mehraufwand lohnt sich, weil echte Bestellungen, beobachtete Usability-Probleme sowie wiederverwendbare Fotos und Kundenfragen gleichzeitig entstehen — ohne zusätzliches Personal oder bezahlte Werbung.
  5. 5 Anlass-Partner statt Influencer gpt-5.6 · within brief · 15/20 Punkte (8 + 7) Kinder-Indoorspielplätze, Fotografen, Floristen, Hochzeitslocations und Vereinsheime erhalten jeweils einen kleinen QR-Aufsteller, der zu einer für ihren Anlass vorkonfigurierten Tortenauswahl führt. Im Gegenzug nennt die Bäckerei diese Partner auf einer lokalen Empfehlungsseite; fünf gezielte Anfragen pro Monat reichen aus, und Provisionen und bezahlte Reichweite entfallen.
  6. 6 Torten-Rota für Büros und Vereine gpt-5.6 · within brief · 15/20 Punkte (8 + 7) Lokale Büros, Praxen und Vereine erhalten eine Seite, auf der mehrere Geburtstage oder wiederkehrende Termine gesammelt und nacheinander vorausbezahlt werden können. Quartalsweise Rotas verwandeln, einmal eingerichtet, einzelne Anlässe in planbare Serienbestellungen; die Ansprache kann auf zwei Organisationen pro Woche begrenzt werden.
  7. 7 Hybride Tortenberatung am Tresen-Tablet gemini-3.6-flash · rule breaker · 14/20 Punkte (7 + 7) Bricht bewusst die weiche Vorgabe „nur Online-Bestellung“, indem freitags 1 Stunde Beratung im Laden angeboten wird, während der Bestellungen gemeinsam auf einem Tablet eingegeben werden. Es lohnt sich, weil unentschlossene und ältere Kundinnen und Kunden schrittweise an das neue Online-System herangeführt werden.
  8. 8 Bewertungen werden zur Entscheidungshilfe gpt-5.6 · neighbor · 13/20 Punkte (7 + 6) Als kleine Rekombination des stärksten vorhandenen Materials werden zwölf aussagekräftige Sätze aus den 120 Google-Bewertungen mit passenden Tortenstilen kombiniert, jeweils mit direktem Bestelllink. So werden die 4,7 Sterne nicht nur als Vertrauenssignal gezeigt, sondern helfen bei der Produktauswahl; nach der einmaligen Einrichtung ist die Seite weitgehend wartungsfrei.
  9. 9 Musterkuchen-Displays mit Shop-Deeplinks gemini-3.6-flash · neighbor · 13/20 Punkte (6 + 7) Eine physische Fotogalerie der schönsten Torten im Verkaufsraum enthält zu jedem Bild einen spezifischen QR-Code, der genau dieses Tortenmodell vorausgewählt im Online-Shop öffnet. Mutation von Idee 1: Verknüpfung des Displays im Laden mit einem direkten Deeplink im Shop.
  10. 10 Google-Profil-Optimierung & automatisierte Bewertungslinks gemini-3.6-flash · within brief · 12/20 Punkte (6 + 6) Das starke Google-Profil (4,7 Sterne) wird um den offiziellen Button „Online bestellen“ ergänzt und wöchentlich mit einem Foto aktueller Torten aktualisiert. Bei der Abholung erhalten Kundinnen und Kunden per E-Mail eine Vorlage mit Link zur Bewertungs- und Nachbestellseite. Dauert unter 30 Minuten pro Woche.
  11. 11 QR-Code-Teaser auf Kassenbons & Brottüten gemini-3.6-flash · within brief · 11/20 Punkte (6 + 5) Ein auffälliger QR-Code wird auf jeden Kassenbon und auf Verpackungen gedruckt und führt direkt zum Online-Tortenkonfigurator („Planen Sie Ihre Traumtorte für Ihre Feier online“). So werden tägliche Laufkundschaften ohne Mehraufwand am Tresen zu digitalen Vorbestellern.
  12. 12 B2B-Partnerschaft mit lokalen Eventlocations gemini-3.6-flash · within brief · 11/20 Punkte (6 + 5) Aufsteller und Flyer mit einem direkten Buchungscode für die Website werden bei lokalen Restaurants, Event-Scheunen und Hochzeitsplanern platziert. Feiernde Kundinnen und Kunden buchen ihre Torte direkt online, während die Location im Gegenzug eine kleine Aufwandsentschädigung oder eine Empfehlung erhält.
  13. 13 Geburtstagskalender für Kitas & Schulen gemini-3.6-flash · neighbor · 10/20 Punkte (4 + 6) Kooperation mit lokalen Kindergärten über Info-Flyer für Elternräte, die einen festen Rabattcode für Kindertorten enthalten. Mutation von Idee 3: Statt allgemeiner B2B-Partner wird der hochfrequente Anlass Kindergeburtstag gezielt und automatisiert angesprochen.
  14. 14 Monatlicher Mini-Workshop für dekorierte Torten gemini-3.6-flash · rule breaker · 10/20 Punkte (4 + 6) Bricht bewusst die weiche Vorgabe „maximal 2 Stunden Zeit pro Woche“, da einmal im Monat ein 4-stündiger Workshop stattfindet. Es lohnt sich, weil Teilnehmende als Markenbotschafter wirken, begeisterte Social-Media-Inhalte erstellen und garantiert Folgeaufträge über den Online-Shop platzieren.
  15. 15 Bestelllink auf jeder Tortenschachtel claude · within brief · 8/20 Punkte (4 + 4) Einen QR-Code zur Bestellseite auf den Tortenschachteln und Kassenbons drucken, damit jede Kundin und jeder Kunde, der bereits eine Torte kauft, für den nächsten Geburtstag ohne Anruf nachbestellen kann.

Kirats Hinweis an Claude: Die beste rule_breaker-Idee erst auf Rang 4: „Einmalige Tortenberatungsstunde zum Start“ — sie bricht bewusst eine weiche Vorgabe. Einmal steelmanen, bevor sie verworfen wird.

Brainstorm mit Kirat, wie wir Billing-Incidents innerhalb von zwei Quartalen reduzieren, ohne Billing aus dem Monolithen herauszulösen.

kirat_brainstorm fragte den Rat

Der Rat entwickelte 15 Ideen und bewertete jede anonym. Die Top drei:

  1. Datenbank-Firewall um Billing-Tabellen (17/20 Punkte)
  2. Ausführbare finanzielle Invarianten (17/20 Punkte)
  3. Incident-Replay als Release-Gauntlet (17/20 Punkte)

Hinter den Kulissen

kirat_brainstorm Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_BRAINSTORM · AUFWAND: STANDARD · 15 IDEEN · 1 RUNDE · $0,06

Thema: Ideen, um Produktionsincidents durch das Billing-Modul innerhalb von zwei Quartalen zu reduzieren, ohne es in einen separaten Service auszulagern

Gesendeter Kontext: Team aus 8 Engineers. Ein TypeScript-Monolith, etwa 60.000 Zeilen, eine Postgres-Datenbank, mehrmals täglich deployt. Das Billing-Modul ändert sich jede Woche und verursachte 5 der letzten 8 Produktionsincidents, meist weil andere Module direkt in Billing-Tabellen lesen und schreiben. Niemand im Team hat ein verteiltes System in Produktion betrieben. Die Führung will innerhalb von zwei Quartalen weniger Incidents. HART: kein Rewrite des Billing-Moduls. HART: Feature-Arbeit an Billing läuft jede Woche weiter.

Ergebnis des Rats

  1. 1 Datenbank-Firewall um Abrechnungstabellen gpt-5.6 · within brief · 17/20 Punkte (9 + 8) Erstelle separate Postgres-Rollen für die Abrechnungs- und Nicht-Abrechnungscodepfade des Monolithen und entziehe dann der allgemeinen Anwendungsrolle direkte Schreibzugriffe auf Abrechnungstabellen. Leite alle Mutationen über eine kleine Menge geprüfter Stored Procedures oder Transaktionsfunktionen und füge zuerst temporäres Audit-Logging hinzu, um Aufrufer zu entdecken und zu migrieren, ohne die wöchentliche Feature-Arbeit zu stoppen.
  2. 2 Ausführbare finanzielle Invarianten gpt-5.6 · within brief · 17/20 Punkte (9 + 8) Kodiere eine kurze Liste von Invarianten – wie unveränderliche finalisierte Rechnungen, ausgeglichene Ledger-Einträge, idempotente Gebührenerstellung und gültige Zustandsübergänge – als Datenbank-Constraints, wo es sicher ist, und als geplante Produktions-Probes, wo nicht. Führe dieselben Probes gegen anonymisierte, produktionsähnliche Fixtures in CI aus und verwandle so Incident-Wissen in permanente Stolperdrähte statt in eine breite Testausweitung.
  3. 3 Incident-Replay als Release-Gauntlet gpt-5.6 · within brief · 17/20 Punkte (9 + 8) Konvertiere die fünf Abrechnungs-Incidents in deterministische Replay-Szenarien unter Verwendung erfasster Query-Formen und bereinigter Zeilen und verlange dann, dass jede Abrechnungsänderung sie übersteht. Füge generative Tests hinzu, die Retries, doppelte Events, Transaktionsreihenfolge und Teilausfälle rund um genau diese Szenarien permutieren, und ziele auf die Fehlernachbarschaft ab, statt eine erschöpfende Monolithen-Abdeckung zu versuchen.
  4. 4 Die Abrechnungsgrenze im Shadow-Modus durchsetzen gpt-5.6 · neighbor · 16/20 Punkte (9 + 7) Als risikoärmere Mutation der Datenbank-Firewall behalte zunächst die aktuellen Berechtigungen bei, protokolliere aber jede Query, die Abrechnungstabellen berührt, mit ihrem Modul, Aufrufort und Transaktions-ID. Nach vier Wochen verwandle unerwartete Schreibzugriffe in CI-Fehler und dann modulweise in Produktionsfehler; dies ersetzt eine sofortige Berechtigungsumstellung durch eine stufenweise Durchsetzung.
  5. 5 Schaltpult für den Blast-Radius der Abrechnung gpt-5.6 · within brief · 16/20 Punkte (9 + 7) Stelle riskante Abrechnungsverhaltensweisen – nicht das ganze Modul – hinter serverseitige Kill-Switches und prozentuale Rollouts, mit Dashboards, die auf Rechnungs-, Zahlungs- und Abstimmungsanomalien ausgerichtet sind. Jedes wöchentliche Feature wird mit einem getesteten Off-Path ausgeliefert, damit Responder das neue Verhalten deaktivieren können, ohne unzusammenhängende Monolithen-Deployments zurückzurollen oder Schema-Migrationen rückgängig zu machen.
  6. 6 Postgres-Schema-Kapselung und Row Level Security gemini-3.6-flash · within brief · 15/20 Punkte (7 + 8) Isoliere Abrechnungstabellen in einem dedizierten Postgres-Schema (billing.*) und entziehe anderen DB-Rollen direkten Schreib- und Lesezugriff. Module greifen nur über definierte SQL-Views oder gespeicherte Schnittstellen darauf zu. Dies beseitigt die Hauptursache der Incidents direkt auf Datenbankebene.
  7. 7 Contract-Testing und Shadow-Pipeline für Abrechnungs-Releases gemini-3.6-flash · within brief · 15/20 Punkte (8 + 7) Etabliere automatisierte, consumer-getriebene Contract-Tests für alle Abrechnungsschnittstellen in der CI-Pipeline. Zusätzlich laufen Abrechnungsänderungen an kritischen Berechnungen im Shadow-Modus in der Produktion, ohne Nebenwirkungen und mit automatischer Differenzprüfung.
  8. 8 Eine zweite Datenbank als Sicherheitsinstrument gpt-5.6 · rule breaker · 14/20 Punkte (7 + 7) Brüch bewusst die weiche Annahme von „einer Postgres-Datenbank“, indem du eine schreibgeschützte Shadow-Datenbank hinzufügst, die über logische Replikation gespeist wird, während die Abrechnung im Monolithen bleibt und die Primärdatenbank der einzige Schreiber bleibt. Führe neue Abrechnungs-Lesevorgänge und Abstimmungsprüfungen gegen beide Datenbanken aus, vergleiche die Ergebnisse vor der Exposition und nutze die Shadow-Datenbank für forensische Queries, damit die Incident-Diagnose die Produktion nicht überlasten oder versehentlich mutieren kann.
  9. 9 Striktes Linting der Modulgrenzen und Public-API-Fassade gemini-3.6-flash · within brief · 14/20 Punkte (7 + 7) Führe Architektur-Linting über dependency-cruiser ein, das direkte Importe von Abrechnungs-Interna in anderen Modulen bereits im Build-Schritt verbietet. Kommunikation darf nur über eine einzige, typsichere BillingFacade-Schnittstelle stattfinden, sodass schleichende Kopplung sofort blockiert wird.
  10. 10 Abrechnungs-Änderungspässe gpt-5.6 · within brief · 13/20 Punkte (7 + 6) Verlange, dass jeder abrechnungsbezogene Pull Request einen maschinell geprüften Pass mitführt: betroffene Tabellen, Invarianten, Migrationskompatibilität, Rollback-Pfad und eine Produktions-Query, die die Gesundheit nach dem Deployment belegt. Ein CODEOWNERS-Gate plus ein 15-minütiges rotierendes Review durch einen Abrechnungs-Steward hält den Prozess leicht genug für wöchentliche Änderungen und konzentriert die Prüfung auf modulübergreifende Effekte.
  11. 11 Automatisch generierte schreibgeschützte Postgres-Views für externe Module gemini-3.6-flash · neighbor · 13/20 Punkte (7 + 6) Eine Mutation der Schema-Kapselung: Statt kostspieliger API-Refactorings werden schreibgeschützte Postgres-Views für externe Queries automatisch bereitgestellt. Externe Module lesen nur diese stabilen Views, während direkter Tabellenzugriff über DB-Berechtigungen blockiert wird.
  12. 12 Asynchroner In-Process-Event-Bus für Read-Models gemini-3.6-flash · within brief · 12/20 Punkte (4 + 8) Statt dass andere Module Abrechnungstabellen direkt abfragen, sendet das Abrechnungsmodul bei Zustandsänderungen In-Memory-Events. Empfangende Module bauen ihre eigenen lokalen Projektionen auf. Dies entkoppelt den Lesezugriff vollständig von den Abrechnungstabellen, ohne verteilte Systeme einzuführen.
  13. 13 Zweiwöchiger Feature-Freeze für die Abrechnungs-Kapselung gemini-3.6-flash · rule breaker · 11/20 Punkte (5 + 6) Brüch die weiche Einschränkung kontinuierlicher wöchentlicher Feature-Auslieferung für genau zwei Wochen. Das gesamte Team konzentriert sich auf die Trennung von DB-Kopplungen. Der einmalige Aufwand legt die Grundlage dafür, die Incident-Zahlen über die verbleibenden 5 Monate nachhaltig zu senken.
  14. 14 Datenbankrolle pro Modul claude · within brief · 11/20 Punkte (6 + 5) Gib der Abrechnung ein eigenes Postgres-Schema und eine eigene Rolle und entziehe anderen Modulen den Schreibzugriff auf Abrechnungstabellen, sodass direkte Schreibzugriffe bereits im Staging fehlschlagen, bevor sie die Produktion erreichen.
  15. 15 Physische DB-Partitionierung in eine zweite Postgres-Instanz gemini-3.6-flash · rule breaker · 9/20 Punkte (3 + 6) Brüch die weiche Einschränkung der Ein-Datenbank-Architektur, behalte aber den monolithischen Code. Abrechnungsdaten wandern in eine eigene Datenbankinstanz, was modulübergreifende SQL-Joins technisch unmöglich macht. Die operative Komplexität bleibt minimal, da der Code monolithisch bleibt.

Kirats Anmerkung an Claude: Die beste rule_breaker-Idee erst auf Rang 8: „Eine zweite Datenbank als Sicherheitsinstrument“ – sie brüch bewusst eine weiche Einschränkung. Steelmanne sie einmal, bevor du sie verwirfst.

Brainstorme mit Kirat, wie wir die Screening-Zeit für etwa 3.000 Datensätze verkürzen können, ohne das Review zu schwächen.

kirat_brainstorm fragte den Rat

Der Rat brachte 14 Ideen hervor und bewertete jede anonym. Die Top drei:

  1. Zwei-Personen-Ausschluss-Gate (18/20 Punkte)
  2. Kalibrierungs-Sprint mit einem Edge-Case-Ledger (16/20 Punkte)
  3. Schnelle binäre Konsole, keine Miniatur-Datenextraktion (15/20 Punkte)

Hinter den Kulissen

kirat_brainstorm Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_BRAINSTORM · AUFWAND: STANDARD · 14 IDEEN · 1 RUNDE · $0,18

Thema: Ideen zur Reduzierung der Personalzeit für das Titel- und Abstract-Screening von etwa 3.000 Datensätzen, ohne die Rigorosität einer systematischen Übersichtsarbeit zu schwächen

Gesendeter Kontext: Systematische Übersichtsarbeit in der Versorgungsforschung, zur Publikation geplant. Aktuelles Protokoll: zwei unabhängige menschliche Screener, Konflikte durch Diskussion gelöst. Personalzeit ist knapp. Gutachter der Zeitschrift werden fragen, wie das Screening durchgeführt wurde. Das Verpassen einer relevanten Studie (falscher Ausschluss) ist schlimmer als das Einschließen einer irrelevanten. HART: Die Methode muss unter PRISMA 2020 berichtbar sein. HART: Die Rate falscher Ausschlüsse darf nicht steigen.

Ergebnis des Rats

  1. 1 Zwei-Personen-Ausschluss-Gate gpt-5.6 · Regelbrecher · 18/20 Punkte (10 + 8) Lassen Sie Prüfer A jeden Datensatz sichten, aber A's Einschlüsse und unsicheren Entscheidungen direkt weiterleiten; Prüfer B bewertet unabhängig nur A's vorgeschlagene Ausschlüsse. Schließen Sie einen Datensatz nur aus, wenn beide Personen ihn unabhängig ausschließen, und leiten Sie jede Uneinigkeit automatisch weiter, wodurch die meisten Konfliktgespräche entfallen. Dies bricht bewusst die weiche Annahme des aktuellen Protokolls, dass zwei Personen jeden Datensatz bewerten müssen; es lohnt sich, weil es Screening-Zeit spart und strukturell mehr falsche Einschlüsse, aber keine zusätzlichen falschen Ausschlüsse zulässt, und es ist im PRISMA-Abschnitt zum Auswahlprozess unkompliziert zu beschreiben.
  2. 2 Kalibrierungs-Sprint mit einem Randfall-Register gpt-5.6 · im Rahmen · 16/20 Punkte (9 + 7) Sichten Sie unabhängig im Doppel einen stratifizierten ersten Stapel, lösen Sie Konflikte und verwandeln Sie wiederkehrende Unklarheiten in kurze operative Regeln mit positiven und negativen Beispielen. Fixieren Sie die Regeln vor dem Fortfahren; behalten Sie Pilotentscheidungen nur bei, wenn sich die Eignungskriterien nicht geändert haben, andernfalls sichten Sie sie erneut. Dies bewahrt das unabhängige Doppel-Screening und reduziert gleichzeitig spätere Beratungs- und Konfliktlösungszeit, und die Kalibrierung kann unter PRISMA berichtet werden.
  3. 3 Schnelle binäre Konsole, keine Miniatur-Datenextraktion gpt-5.6 · im Rahmen · 15/20 Punkte (8 + 7) Geben Sie beiden Prüfern eine verblindete, tastaturgesteuerte Oberfläche, beschränkt auf Einschließen, Ausschließen oder Unsicher, mit stets sichtbarem vollständigem Titel und Abstract; verschieben Sie detaillierte Kodierung und Ausschlussgründe auf die Volltextprüfung. PRISMA 2020 verlangt auf der Titel-und-Abstract-Stufe keine Gründe auf Datensatzebene. Der Entscheidungsprozess bleibt unverändert, aber vermeidbare Lese-, Klick- und Dokumentationszeit sinkt.
  4. 4 Nur-Einschluss-Ventil der Maschine gpt-5.6 · Nachbar · 15/20 Punkte (9 + 6) Als einstufige Mutation des Zwei-Personen-Ausschluss-Gates führen Sie A's vorgeschlagene Ausschlüsse durch einen validierten Klassifikator, der Datensätze nur zum Einschluss freigeben, sie aber niemals ausschließen darf; Prüfer B sichtet unabhängig alles, was der Klassifikator nicht freigibt. Ein endgültiger Ausschluss erfordert weiterhin übereinstimmende Entscheidungen zweier Personen, sodass ein Maschinenfehler Volltexte hinzufügen, aber keinen falschen Ausschluss erzeugen kann. Berichten Sie unter PRISMA das Modell, die Version, die Eingaben, die Schwellenwerte, die Validierung und seine strikt nur einschließende Rolle.
  5. 5 Asymmetrisches Ausschluss-Screening gemini-3.6-flash · im Rahmen · 15/20 Punkte (7 + 8) Ein erster Prüfer klassifiziert alle 3.000 Datensätze vollständig. Der zweite Prüfer prüft nur diejenigen Datensätze, die der erste Prüfer ausgeschlossen hat, um falsche Negative zu erkennen (Einschlüsse werden direkt akzeptiert). Dies halbiert nahezu den Aufwand des zweiten Prüfers, hält das Risiko falscher Ausschlüsse extrem niedrig und erfüllt alle PRISMA-Anforderungen.
  6. 6 Screening-Umgehung für ertragreiche Schichten gpt-5.6 · Regelbrecher · 13/20 Punkte (8 + 5) Legen Sie ertragreiche Teilmengen im Voraus fest – etwa Datensätze aus einem hochspezifischen Suchblock, direkte Nachfahren bekannter geeigneter Studien oder Datensätze, die bereits in einer eng verwandten Übersicht eingeschlossen wurden – und leiten Sie alle direkt zur Volltextbeschaffung, ohne Entscheidungen zu Titel und Abstract. Dies bricht bewusst das weiche Zwei-Prüfer-Protokoll für diese Datensätze, kann aber keine falschen Ausschlüsse erhöhen, da nichts in der Teilmenge ausgeschlossen wird; der Kompromiss ist zusätzliche Volltextarbeit. Berichten Sie die Umgehungsregel und die resultierenden Zahlen ausdrücklich im PRISMA-Flussdiagramm und in den Auswahlmethoden.
  7. 7 Priorisiertes Screening durch aktives Lernen gemini-3.6-flash · im Rahmen · 13/20 Punkte (5 + 8) Beide menschlichen Prüfer verwenden ein Werkzeug für aktives Lernen (etwa ASReview), das relevante Titel/Abstracts nach oben sortiert. Sobald ein statistisch validiertes Abbruchkriterium erreicht ist (z. B. 500 irrelevante Treffer in Folge), wird das Screening beendet. Das Verfahren spart bis zu 70 % der Zeit, lässt sich PRISMA-2020-konform dokumentieren und hält durch die Algorithmus-Kalibrierung eine minimale Rate falscher Ausschlüsse aufrecht.
  8. 8 Nur exakte Deduplizierung vor dem Screening gpt-5.6 · im Rahmen · 12/20 Punkte (8 + 4) Entfernen Sie nur Datensätze, die durch DOI, Datenbank-Zugangsnummer oder exakte normalisierte bibliografische Übereinstimmung als identisch erwiesen sind; behalten Sie die metadatenreichste Kopie und markieren Sie unsichere Beinahe-Duplikate lediglich. Beide Prüfer sichten dann unabhängig jeden verbleibenden eindeutigen Datensatz, während PRISMA die vor dem Screening entfernten Duplikate berichtet. Dies reduziert das Volumen, ohne einen Weg zu schaffen, eine eindeutige Studie auszuschließen.
  9. 9 Mensch-KI-Kaskade mit einem KI-Sicherheitsnetz gemini-3.6-flash · Nachbar · 12/20 Punkte (5 + 7) Eine Mutation des asymmetrischen Ausschluss-Screenings: Ein menschlicher Prüfer bearbeitet alle Datensätze allein, während ein KI-Modell, das auf maximale Sensitivität abgestimmt ist, nur die menschlichen Ausschlüsse prüft. Ein zweiter Mensch prüft nur dort, wo es Abweichungen gibt. Dies reduziert die menschliche Kapazität um über 50 % bei vollständiger Abdeckung.
  10. 10 Vollautomatischer KI-Zweitprüfer gemini-3.6-flash · Regelbrecher · 11/20 Punkte (3 + 8) Bricht die weiche Vorgabe, dass notwendigerweise zwei Menschen das Screening durchführen müssen. Ein großes Sprachmodell (LLM) übernimmt die Rolle des unabhängigen Zweitprüfers mit Zero-False-Negative-Prompting. Es lohnt sich, weil die menschliche Arbeitszeit halbiert wird und LLMs nachweislich hohe Recall-Raten beim Abstract-Screening erreichen; PRISMA 2020 erlaubt ausdrücklich die Berichterstattung von KI-Werkzeugen.
  11. 11 Risikoadaptiertes Einzel-Screening mit Konfidenz-Triage gemini-3.6-flash · Regelbrecher · 11/20 Punkte (5 + 6) Bricht die weiche Vorgabe des durchgängigen Doppel-Screenings für den gesamten Datensatz. Wenn der erste Prüfer eine hohe subjektive Konfidenz angibt und klare Ausschlussgründe vorliegen, entfällt der zweite Prüfer; nur unsichere Fälle gehen ins Doppel-Screening. Dies spart bis zu 60 % der Personalzeit, während das Risiko übersehener Studien minimal bleibt, weil Ressourcen auf Graubereiche konzentriert werden.
  12. 12 Zuerst eine Kalibrierungsrunde claude · im Rahmen · 11/20 Punkte (6 + 5) Beide Prüfer sichten dieselben 100 Datensätze, besprechen jeden Konflikt und schärfen die Eignungskriterien vor der Hauptrunde, sodass spätere Konflikte und erneutes Lesen entfallen.
  13. 13 Binarisiertes Schnell-Screening mit KI-Triage gemini-3.6-flash · Nachbar · 10/20 Punkte (4 + 6) Mutation der Priorisierung durch aktives Lernen: Das Team nutzt eine vereinfachte Oberfläche für schnelle Bewertung (nur Klicks für „Einschließen/Unsicher“ vs. „Ausschließen“). Ein KI-Modell bewertet Unsicherheiten im Hintergrund und leitet nur Grenzfälle zur eingehenden Doppelprüfung weiter. Minimiert drastisch die kognitive Last und die Lesezeit pro Abstract.
  14. 14 Deterministische Vorfilterung durch Abgleichalgorithmen gemini-3.6-flash · im Rahmen · 6/20 Punkte (3 + 3) Konservative Suchfilter und Skripte sortieren eindeutig ungeeignete Treffer im Voraus aus (z. B. falsches Studiendesign oder nicht-menschliche Population). Beide Prüfer kontrollieren diese automatischen Ausschlüsse nur über eine repräsentative Stichprobe (z. B. 10 %). Dies reduziert das manuell zu sichtende Gesamtvolumen auf PRISMA-konforme Weise und ohne Sensitivitätsverlust.

Alle Ideen, vollständig und in Rangfolge. Claudes eigene Idee nimmt anonym und zu gleichen Bedingungen teil. Thema und Kontext wurden auf Englisch gesendet; Ideen, die die Mitglieder auf Deutsch geschrieben haben, sind hier übersetzt.

Fünf Schlagzeilen und Titel aus verschiedenen Bereichen. Jedes Mitglied schreibt eine Variante, Claudes Entwurf nimmt teil, und beide Mitglieder bewerten alle drei anonym. Wählen Sie eine.

Lassen Sie Kirat Schlagzeilen-Varianten für meine Preisseite schreiben. Max. 8 Wörter, keine Superlative.

kirat_create fragte den Rat

Die siegreiche Variante (17/20 Punkte): „Bezahlt werden ohne Word – 14 Tage kostenlos“

Mein eigener Entwurf landete auf Platz 2; die Mitglieder bewerteten alle drei anonym.

Hinter den Kulissen

kirat_create Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_CREATE · MODUS: VARIANTEN · AUFWAND: STANDARD · $0.03

Briefing: Schlagzeile für die Preisseite eines kleinen Rechnungstools für Freiberufler (19 USD pro Monat, 14 Tage kostenlose Testphase). Zielgruppe: Freiberufler, die Rechnungen derzeit in Word oder Excel schreiben. Ziel: Die Testphase soll risikofrei und lohnend wirken. Format: eine Schlagzeile, auf Englisch.

Kriterien: max. 8 Wörter · konkret, keine Superlative · nennt Zeitersparnis oder Bezahltwerden · keine Ausrufezeichen

Ergebnis des Rates

  1. 1 „Bezahlt werden ohne Word – 14 Tage kostenlos“ gpt-5.6 · 17/20 Punkte (9 + 8) Spricht Word-Nutzer direkt an, stellt das Bezahltwerden in den Mittelpunkt und macht die risikofreie Testphase konkret.
  2. 2 „Rechnungen in Minuten senden. Pünktlich bezahlt werden.“ claude · 17/20 Punkte (8 + 9) Der eigene Entwurf des Orchestrators.
  3. 3 „Word und Excel ersetzen. Tage schneller bezahlt werden.“ gemini-3.6-flash · 14/20 Punkte (7 + 7) Die direkte Ansprache des aktuellen manuellen Workflows bietet einen unmittelbaren Kontrast und rahmt die Testphase als schnelles, risikofreies Upgrade des Cashflows, ohne generischen Hype zu verwenden.

Lassen Sie Kirat Schlagzeilen-Varianten für unsere Landingpage für Möbelgeschäfte auf WooCommerce schreiben. Max. 10 Wörter, kein Fachjargon.

kirat_create fragte den Rat

Die siegreiche Variante (18/20 Punkte): „Verlieren Sie Möbelkäufer an einen langsamen, frustrierenden WooCommerce-Shop?“

Mein eigener Entwurf landete auf Platz 3; die Mitglieder bewerteten alle drei anonym.

Hinter den Kulissen

kirat_create Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_CREATE · MODUS: VARIANTEN · AUFWAND: STANDARD · $0.02

Briefing: Schlagzeile für die Landingpage einer kleinen Digitalagentur über Shop-Neuaufbauten für Möbelhändler, die WooCommerce betreiben. Zielgruppe: Inhaber mittelgroßer Möbelgeschäfte ohne eigene Entwickler. Ziel: einen kostenlosen Shop-Check buchen. Format: eine Schlagzeile, deutscher Markt, aber auf Englisch schreiben.

Kriterien: max. 10 Wörter · benennt den Schmerz des Lesers, nicht die Agentur · kein Fachjargon wie „headless“ oder „omnichannel“ · keine Superlative

Ergebnis des Rates

  1. 1 „Verlieren Sie Möbelkäufer an einen langsamen, frustrierenden WooCommerce-Shop?“ gemini-3.6-flash · 18/20 Punkte (8 + 10) Zielt direkt auf die Hauptfrustration des Inhabers – verlorene Verkäufe durch schlechte Shop-Performance –, ohne Tech-Jargon oder selbstbeweihräuchernde Agentursprache zu verwenden.
  2. 2 „Schickt Ihr WooCommerce-Shop Möbelkäufer weg?“ gpt-5.6 · 17/20 Punkte (9 + 8) Benennt den Kernschmerz direkt und spricht Möbelhändler ohne Fachjargon an.
  3. 3 „Weniger Shop-Notfälle, mehr Zeit für Ihre Möbel.“ claude · 11/20 Punkte (7 + 4) Der eigene Entwurf des Orchestrators.

Lassen Sie Kirat Schlagzeilen-Varianten für die neue Tortenbestellseite der Bäckerei schreiben. Kurz, lokal, nicht wie eine Kette.

kirat_create fragte den Rat

Die siegreiche Variante (19/20 Punkte): „Ihre Festtagstorte, hier gebacken zur Abholung.“

Mein eigener Entwurf landete auf Platz 3; die Mitglieder bewerteten alle drei anonym.

Hinter den Kulissen

kirat_create Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_CREATE · MODUS: VARIANTEN · AUFWAND: STANDARD · $0.02

Briefing: Schlagzeile für die neue Online-Bestellseite der Bäckerei für individuelle Torten. Zielgruppe: lokale Kunden, die bisher telefonisch bestellt haben. Ziel: Die Online-Bestellung soll einfach und persönlich wirken. Format: eine Schlagzeile, deutscher Markt, aber auf Englisch schreiben.

Kriterien: max. 8 Wörter · konkret, keine Superlative · nennt die Abholung oder den Anlass · klingt wie eine lokale Bäckerei, nicht wie eine Kette

Ergebnis des Rates

  1. 1 „Ihre Festtagstorte, hier gebacken zur Abholung.“ gpt-5.6 · 19/20 Punkte (10 + 9) Warm, konkret und persönlich: „hier gebacken“ wirkt lokal, während „zur Abholung“ den Online-Prozess unkompliziert erscheinen lässt.
  2. 2 „Bestellen Sie Ihre individuelle Geburtstagstorte, frisch abholen.“ gemini-3.6-flash · 16/20 Punkte (8 + 8) Die Schlagzeile nennt gezielt den Anlass sowie die Abholung und vermittelt durch das Frischeversprechen lokale Handwerksqualität ohne unpersönliche Klischees.
  3. 3 „Ihre Torte, Ihr Termin. In zwei Minuten bestellt.“ claude · 9/20 Punkte (5 + 4) Der eigene Entwurf des Orchestrators.

Lassen Sie Kirat einen Titel für meinen Vorschlag finden, zuerst die Grenzen der Abrechnung innerhalb des Monolithen zu härten.

kirat_create fragte den Rat

Mein eigener Entwurf gewann (19/20 Punkte): „Erst die Grenzen der Abrechnung härten, später bei Bedarf aufteilen“

Hinter den Kulissen kirat_create Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_CREATE · MODUS: VARIANTEN · AUFWAND: STANDARD · $0,02

Auftrag: Titel für einen internen Engineering-Vorschlag: die Grenzen des Abrechnungsmoduls im Monolithen härten, bevor ein separater Service erwogen wird. Zielgruppe: 8 Engineers und die Führungsebene, die weniger Vorfälle will. Ziel: den Vorschlag gelesen und genehmigt bekommen. Format: ein Titel, auf Englisch.

Kriterien: max. 10 Wörter · benennt die Entscheidung, nicht nur das Thema · keine Buzzwords · verständlich für Nicht-Engineers

Ergebnis des Councils

  1. 1 "Fix billing's boundaries first, split it later if needed" claude · 19/20 Punkte (10 + 9) Der eigene Entwurf des Orchestrators.
  2. 2 "Keep Billing Together, but Isolate It to Prevent Incidents" gpt-5.6 · 16/20 Punkte (9 + 7) Der Titel benennt die Entscheidung, die Abrechnung im Monolithen zu belassen und zugleich ihre Grenzen zu stärken, und verknüpft diese Wahl mit dem gemeinsamen Ziel, weniger Vorfälle zu haben.
  3. 3 "Strengthen Billing Boundaries in Current App Before Splitting Service" gemini-3.6-flash · 13/20 Punkte (7 + 6) Der Titel trifft eine klare Richtungsentscheidung, vermeidet unnötigen Jargon wie „Monolith" für die Führungsebene und adressiert direkt das gemeinsame Ziel der Stabilität.

Lass Kirat einen Titel für unser Methodenpapier über ein LLM als zusätzlichen Screener finden. Präzise, kein Hype.

kirat_create hat das Council gefragt

Die Gewinnervariante (18/20 Punkte): "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews"

Mein eigener Entwurf landete auf Platz 2; die Mitglieder bewerteten alle drei anonym.

Hinter den Kulissen

kirat_create Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_CREATE · MODUS: VARIANTEN · AUFWAND: STANDARD · $0,02

Auftrag: Titel für ein Methodenpapier über die Nutzung eines LLM als zusätzlichen Screener in einem systematischen Review in der Versorgungsforschung. Zielgruppe: Forschende und Gutachter von Fachzeitschriften. Ziel: präzise und zitierfähig, kein Hype. Format: ein Titel, optional mit Untertitel nach einem Doppelpunkt, auf Englisch.

Kriterien: max. 20 Wörter · benennt die Methode und den Kontext · keine Aussagen über die Daten hinaus · keine Hype-Wörter wie „revolutionieren"

Ergebnis des Councils

  1. 1 "Large Language Model–Assisted Study Selection in Health Services Research: A Method for Additional Screening in Systematic Reviews" gpt-5.6 · 18/20 Punkte (9 + 9) Der Titel benennt die Screening-Methode, den Kontext des systematischen Reviews und das Feld der Versorgungsforschung, ohne Leistung oder Nutzen zu implizieren.
  2. 2 "An LLM as additional screener: a prospective comparison in a health services systematic review" claude · 16/20 Punkte (9 + 7) Der eigene Entwurf des Orchestrators.
  3. 3 "Large Language Models as Auxiliary Screeners in Health Services Research Systematic Reviews: A Methodological Evaluation" gemini-3.6-flash · 15/20 Punkte (7 + 8) Der Titel benennt das Anwendungsfeld und die Methodik präzise, vermeidet Reizwörter und wählt einen sachlichen, zitierfähigen Ton für den Kontext einer wissenschaftlichen Publikation.

Schlagzeilen und Titel werden so wiedergegeben, wie sie geschrieben wurden, auf Englisch, wie es die Aufträge verlangten. Die Begründung in Claudes Eintrag ist Kirats eigene Bezeichnung dafür. Auf Deutsch verfasste Begründungen werden hier übersetzt.

Fünf Bildaufträge aus verschiedenen Bereichen. OpenAI und Google erzeugen jeweils ein Bild, und beide Mitglieder bewerten beide Bilder anonym. Wähle eines.

Lass Kirat ein Hero-Bild für die Landingpage meines Rechnungstools erstellen: ein ruhiger Homeoffice-Schreibtisch, kein lesbarer Bildschirm.

kirat_image hat das Council gefragt

Die Jury wählte das Bild von gpt-image-2 (18/20 Punkte). Beide Mitglieder bewerteten beide Bilder anonym.

Hinter den Kulissen

kirat_image Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_IMAGE · MODUS: VARIANTEN · QUERFORMAT · ≈ $0,17

Auftrag: Hero-Bild für die Landingpage eines kleinen Rechnungstools für Freelancer: ein aufgeräumter Homeoffice-Schreibtisch am Morgen mit einem Laptop (Bildschirm abgewandt oder unscharf, keine lesbare Oberfläche), einer Tasse Kaffee und einem Papiernotizbuch. Natürliches Tageslicht, ruhiger dokumentarischer Fotostil, kein Text, keine Logos, keine Gesichter von Menschen.

Kriterien: wirkt wie der Arbeitsplatz eines echten Freelancers, nicht wie ein Stockfoto-Büro · ruhig und aufgeräumt · lässt ruhigen Raum für eine Schlagzeile · kein Text, keine Logos oder lesbaren Bildschirme

Ergebnis des Councils

Image by gpt-image-2: a laptop seen from behind on a wooden desk in a bright room, with a cup of coffee, a closed notebook and a pen, and shelves in the background.

1 gpt-image-2 · 18/20 Punkte (9 + 9)

Image by gemini-3.1-flash-image: a wooden desk by a window with an open laptop showing a blurred screen, a cup of coffee on a saucer, a notebook and a pen.

2 gemini-3.1-flash-image · 13/20 Punkte (6 + 7)

Lass Kirat ein Produktfoto für den Möbelshop erstellen: ein Esstisch aus Eiche mit vier Stühlen in einem echten Wohnzimmer.

kirat_image hat das Council gefragt

Die Jury wählte das Bild von gemini-3.1-flash-image (18/20 Punkte). Beide Mitglieder bewerteten beide Bilder anonym.

Hinter den Kulissen

kirat_image Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_IMAGE · MODUS: VARIANTEN · QUERFORMAT · ≈ $0,17

Auftrag: Produktfoto für einen Möbel-Onlineshop: ein massiver Esstisch aus Eiche mit vier Stühlen in einem hellen, echt wirkenden mitteleuropäischen Wohnzimmer. Natürliches Tageslicht, redaktioneller Einrichtungsstil, kein Text, keine Logos, keine Menschen.

Kriterien: der Tisch ist das klare Motiv · realistische Holzstruktur und -farbe · wirkt wie ein echtes Zuhause, nicht wie ein 3D-Render · kein Text oder Logos

Ergebnis des Councils

Image by gemini-3.1-flash-image: a wooden dining table with four chairs on a rug in a bright living room with plants and a glass door to the garden.

1 gemini-3.1-flash-image · 18/20 Punkte (9 + 9)

Image by gpt-image-2: an oak dining table with four chairs with dark seat cushions in a bright room, with a sofa and a window in the background.

2 gpt-image-2 · 17/20 Punkte (8 + 9)

Lass Kirat ein Hero-Bild für die Tortenbestellseite erstellen: eine Geburtstagstorte in einer Schachtel, abholbereit.

kirat_image hat das Council gefragt

Die Jury wählte das Bild von gpt-image-2 (17/20 Punkte). Beide Mitglieder bewerteten beide Bilder anonym.

Hinter den Kulissen

kirat_image Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_IMAGE · MODUS: VARIANTEN · QUERFORMAT · $0,17

Auftrag: Hero-Bild für die neue Online-Bestellseite einer kleinen lokalen Bäckerei für individuelle Torten: eine fertige Geburtstagstorte auf einer Holzbank in einer hellen, echt wirkenden Familienbäckerei, abholbereit in einer schlichten Papp-Tortenschachtel. Natürliches Tageslicht, dokumentarischer Fotostil, kein Text, keine Logos, keine Gesichter von Menschen.

Kriterien: wirkt wie eine echte lokale Bäckerei, nicht wie eine Kette oder ein Stockfoto · die Torte ist das klare Motiv · lässt ruhigen Raum für eine Schlagzeile · kein Text oder Logos im Bild

Ergebnis des Councils

Image by gpt-image-2: a birthday cake with candles and piped flowers in an open cardboard box on a wooden counter in a bright bakery.

1 gpt-image-2 · 17/20 Punkte (8 + 9)

Image by gemini-3.1-flash-image: a small birthday cake with a “Happy Birthday” topper in an open cardboard box on a bakery counter, with chalkboard menus behind it.

2 gemini-3.1-flash-image · 7/20 Punkte (4 + 3)

Lass Kirat ein Titelbild für unseren Blogbeitrag über das Herauslösen der Abrechnung aus dem Monolithen erstellen. Abstrakt und ruhig.

kirat_image hat das Council gefragt

Die Jury wählte das Bild von gpt-image-2 (16/20 Punkte). Beide Mitglieder bewerteten beide Bilder anonym.

Hinter den Kulissen

kirat_image Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_IMAGE · MODUS: VARIANTEN · QUERFORMAT · ≈ $0,17

Auftrag: Titelbild für einen internen Engineering-Blogbeitrag über das Herauslösen eines Abrechnungsmoduls aus einem Monolithen: eine abstrakte, ruhige Illustration eines klar abgegrenzten Blocks, der sich von einem dichten Cluster miteinander verbundener Blöcke abhebt. Flacher Stil, gedämpfte Farben, kein Text, keine Logos.

Kriterien: die Idee einer klaren Grenze ist auf einen Blick erkennbar · ruhig, nicht dramatisch · funktioniert in kleiner Größe · kein Text oder Logos

Ergebnis des Councils

Image by gpt-image-2: a dense cluster of grey and green cubes joined by lines, and one separate green cube inside a dashed outline, linked by a dashed line.

1 gpt-image-2 · 16/20 Punkte (9 + 7)

Image by gemini-3.1-flash-image: a small screen-like box on the left, linked by thin lines to a dense, tangled cluster of blocks.

2 gemini-3.1-flash-image · 10/20 Punkte (6 + 4)

Lass Kirat ein Titelbild für meinen Konferenzvortrag über KI-unterstütztes Screening erstellen. Seriös, keine Roboter.

kirat_image hat das Council gefragt

Die Jury wählte das Bild von gpt-image-2 (18/20 Punkte). Beide Mitglieder bewerteten beide Bilder anonym.

Hinter den Kulissen

kirat_image Was Claude an Kirat sendet

AUFGEZEICHNET 2026-10-13 · KIRAT_IMAGE · MODUS: VARIANTEN · QUERFORMAT · ≈ $0,17

Auftrag: Titelbild für einen Konferenzvortrag über KI-unterstütztes Screening in systematischen Reviews: ein ordentlicher Stapel gedruckter Forschungsabstracts auf einem Schreibtisch, teilweise in zwei Ablagen sortiert, weiches Tageslicht, dokumentarischer Fotostil. Kein lesbarer Text, keine Logos, keine Gesichter von Menschen.

Kriterien: seriös und wissenschaftlich, kein Hype · keine Roboter oder leuchtenden Gehirne · die Sortieridee ist sichtbar · kein lesbarer Text oder Logos

Ergebnis des Councils

Image by gpt-image-2: a large stack of printed abstracts on a wooden desk next to two black trays of sorted papers, a pen and a notebook.

1 gpt-image-2 · 18/20 Punkte (9 + 9)

Image by gemini-3.1-flash-image: stacks of printed papers and labelled sorting trays on a wooden desk in an office, with a person working at a desk in the background.

2 gemini-3.1-flash-image · 9/20 Punkte (5 + 4)

KI-generierte Bilder, verkleinert und ansonsten unbearbeitet. Mit ≈ gekennzeichnete Kosten stammen aus Läufen, die parallel liefen: die eigenen Bildkosten jedes Laufs plus ein gleicher Anteil an den Bewertungsaufrufen. Die Rangfolge ist eine Vorauswahl, und die endgültige Wahl liegt bei dir. Auf Deutsch verfasste Bewertungen werden hier übersetzt.

02 — Das Problem

Ein Modell, ein blinder Fleck.

Selbstprüfung schmeichelt

Ein Modell, das seine eigene Arbeit prüft, findet sich selbst überzeugend. Ein zweiter Durchgang desselben Modells ist keine unabhängige Prüfung.

Mehr Runden sind nicht die Lösung

Kirat begrenzt die Debatte im Code auf zwei Runden, nicht per Prompt. Ein Modell kann sich nicht am Limit vorbeireden. Gibt es danach immer noch keine Mehrheit, wird dir das gesagt.

Verschiedene Familien scheitern unterschiedlich

Kirat stellt Claude, ChatGPT und Gemini dieselbe Frage und zeigt dir die Spaltung — einschließlich dessen, wer widersprochen hat und warum.

03 — So funktioniert es

Einmal fragen. Drei Positionen und eine Abstimmung erhalten.

Schritt 1

Du fragst in Claude

In einfacher Sprache, wie immer: Frag das Kirat-Council: Shopify oder WooCommerce für meinen Shop? Gib auch deine eigene Position ab. Claude ruft Kirat für dich auf.

Schritt 2

Drei unabhängige Positionen

ChatGPT und Gemini antworten jeweils, ohne die Antwort des anderen zu sehen. Claude nimmt seine eigene Position als drittes Mitglied ein.

Schritt 3

Eine Abstimmung, mit erhaltener Gegenstimme

Wenn zwei von drei übereinstimmen, ist das die Mehrheitsmeinung. Du siehst jede Position mit ihren Gründen und wer widersprochen hat. Ohne Mehrheit sagt Kirat das, und die Entscheidung liegt bei dir.

Kirat prüft außerdem Code (jeder Befund wird von der anderen Modellfamilie geprüft), ordnet Ideen, kritisiert deine Texte und vergleicht Bilder. Die Wiedergabe oben zeigt all das.

Kein Programmieren nötig. Du installierst eine Claude-Erweiterung und erstellst einen API-Schlüssel bei OpenAI und einen bei Google; die Installationsschritte stehen in den Details unten.

Die neun Tools und ein aufgezeichneter Beispielaufruf →

04 — Preise

Ein Kauf für Claude Desktop und Claude Code.

Kein Abo, keine Sitzplätze, kein Konto bei uns. Prüfe, wo Kirat läuft, bevor du kaufst:

Wo Kirat läuft

Funktioniert in

  • Claude-Desktop-Chats unter macOS und Windows
  • Claude Code in einem Terminal, in VS Code oder im Code-Tab von Claude Desktop
  • Claude-Code-Cloud-Sitzungen, nach einer einmaligen Einrichtung pro Cloud-Umgebung Mit Einschränkungen: als Netzwerk-Secrets gespeicherte Schlüssel bleiben unlesbar (bei Team- und Enterprise-Plänen muss ein Admin sie möglicherweise hinzufügen), Schlüssel in Umgebungsvariablen sind für alle lesbar, die die Umgebung nutzen, und das Tagesbudget zählt pro Sitzung.

Funktioniert nicht in

  • Chat im Browser (claude.ai) oder in den mobilen Claude-Apps
  • Cowork-Aufgaben, die in der Cloud laufen
  • Einigen Unternehmensumgebungen: Proxys, die sich mit deinem Windows-Konto anmelden (NTLM/Kerberos), und Organisationen, die Desktop-Erweiterungen auf eine Allowlist beschränken Frage zuerst dein IT-Team.

Wo es läuft, vollständig · Alle Cloud-Einschränkungen

Desktop-Erweiterung + Claude-Code-Plugin

Kirat

$99

$99 Einführungspreis — erste 50 Käufer

Danach $149. Einmaliger Kauf. Ein ZIP-Download mit beiden Formaten. Du brauchst außerdem einen OpenAI- und einen Gemini-API-Schlüssel: Was du fragst, geht an beide Anbieter, und sie rechnen pro Nutzung mit dir ab.

  • 01Claude-Desktop-Erweiterung und Claude-Code-Plugin in einem Download
  • 02Einrichtungsskript für Claude-Code-Cloud-Sitzungen
  • 03Alle neun Tools: Abstimmung, Code-Review, Ideen-Ranking, Textkritik, Bildvergleich und mehr
  • 04Kostenkontrolle: ein Tagesbudget (standardmäßig $5), das Aufrufe zurückhält, die es überschreiten könnten. Best effort, also setze auch bei den Anbietern Limits
  • 05Lizenz für eine Person, auf deinen eigenen Geräten und Cloud-Umgebungen
  • 06Kompatibilitätsupdates, wenn möglich — kostenlos, aber ohne Garantie Läuft in Claude Desktop (macOS/Windows) und Claude Code; Claude-Code-Cloud-Sitzungen mit einer einmaligen Einrichtung – nicht im Browser- oder Mobil-Chat. Wo es läuft · Cloud-Limits

Blueprint

49 $

Nur Dokumente – zum Bauen oder Anpassen eines eigenen Council-Servers mit einem Coding-Agenten. Nicht nötig, um Kirat zu nutzen.

  • 01Die Spezifikation: strukturierte Anforderungen an die Tools
  • 02Die Architekturentscheidungen, mit der Begründung für jede einzelne
  • 03Die Abnahmeprüfliste, gegen die ein Agent sich selbst verifizieren kann
  • 04Die Benchmark-Daten hinter den Zahlen auf dieser Seite

Kein Code, keine installierbare Erweiterung.

Einmaliger Kauf · Zahlung über Lemon Squeezy (Merchant of Record), MwSt. wird beim Checkout abgewickelt · Rückerstattungen: siehe AGB

Die API-Nutzung wird direkt an OpenAI und Google über deine Konten abgerechnet – laut unseren Messungen 0,02–0,15 $ pro Council-Entscheidung.

Kirat ist nichts für dich, wenn …

  • —du Claude nur als Chat im Browser oder auf dem Handy nutzt. Kirat läuft in Claude Desktop (macOS/Windows) und Claude Code sowie in Claude-Code-Cloud-Sitzungen mit einer einmaligen Einrichtung – nicht in diesen Chats.
  • —du einen gehosteten Dienst oder irgendeine Form von Support brauchst.
  • —du keine API-Konten und Abrechnungen bei zwei Anbietern willst.
  • —du nur eine Handvoll Entscheidungen pro Monat triffst und Antworten gern von Hand in getrennten Chats vergleichst.
  • —du eine Antwort willst, die sicher klingt. Die Aufgabe eines Councils ist, dir die Spaltung zu zeigen, und manchmal ist die Spaltung die Antwort.
  • —deine Daten nicht an OpenAI oder Google gehen dürfen. Alles, was du Kirat gibst, geht an beide, über deine Konten und zu deren Bedingungen.

05 — Fragen

Bevor du kaufst.

Worin unterscheidet sich das von llm-council oder PAL MCP?

Schau dir beide zuerst an. llm-council ist eine Open-Source-Web-App; ihr Autor beschreibt sie als bewusst ohne Support. PAL MCP ist ein kostenloser Open-Source-MCP-Server, den du über das Terminal installierst; er unterstützt viele Anbieter und hat ein eigenes Konsens-Tool. Prüfe ihren aktuellen Stand. Wenn einer davon abdeckt, was du brauchst, nutze ihn.

Kirats Unterschied ist das Gesamtpaket: Es installiert sich über Claude Desktops eigenen Erweiterungsdialog mit deinen Schlüsseln im sicheren Speicher des Betriebssystems und bringt einen Budget-Wächter mit Tagesobergrenze, eine Begrenzung auf zwei Runden, einen Domain-Tie-Break, Hintergrund-Tickets, Fehlerbehandlung, 345 Tests, englische Ergebnisfelder und eine Bedienung in einfacher Sprache mit.

Vollständige Antwort →

Muss ich Entwickler sein?

Nein. Wenn du eine Claude-Erweiterung installieren und zwei API-Schlüssel anlegen kannst, kannst du Kirat nutzen. Du fragst Claude in einfacher Sprache – Frag den Kirat-Council: Postgres oder SQLite? Gib auch deine eigene Position an. – und Claude ruft die Tools auf.

Was brauche ich?

Claude Desktop unter macOS oder Windows. Es bringt sein eigenes Node mit, du installierst also nichts weiter. Oder Claude Code mit Node.js 20 oder neuer. Für Claude-Code-Cloud-Sitzungen eine einmalige Einrichtung deiner Cloud-Umgebung (siehe unten).

Dazu einen OpenAI-API-Schlüssel und einen Google-Gemini-API-Schlüssel, beide mit aktivierter Abrechnung. Kirat läuft auch mit einem Schlüssel: Der Council hat dann ein externes Mitglied, und jedes Ergebnis nennt den fehlenden Schlüssel.

Was kostet der Betrieb, und was verhindert eine ausufernde Rechnung?

Du zahlst OpenAI und Google direkt für das, was du nutzt. Laut unseren Messungen kostet eine Council-Entscheidung $0.02–$0.15, je nach Aufwandsstufe und Eingabegröße, und dauert 8 Sekunden bis 3 Minuten. Die Bilderzeugung kostet etwa $0.05–$0.20 pro Aufruf.

Der Budget-Wächter reserviert vor jedem Aufruf die Worst-Case-Kosten und blockiert Aufrufe, die dein Tagesbudget überschreiten könnten – standardmäßig 5 $ pro UTC-Tag, anpassbar. Er arbeitet nach bestem Bemühen, setze also auch bei den Anbietern Ausgabenlimits. kirat_status zeigt Budget und Ausgaben an und kostet nichts.

Vollständige Antwort →

Wohin gehen meine Daten und Schlüssel?

Deine Daten: Alles, was du Kirat gibst (Fragen, Kontext, Code, Bilder), geht direkt an OpenAI und Google, über deine Konten und zu deren Bedingungen – von deinem Computer aus oder in Claude-Code-Cloud-Sitzungen aus deiner eigenen Cloud-Umgebung über den Netzwerk-Proxy von Anthropic für diese Umgebung. Es gibt keinen Kirat-Server, kein Konto bei uns und keine Telemetrie. Wir sehen deine Schlüssel oder deine Daten nie.

Deine Schlüssel: Du gibst sie in Claudes eigenem Installations- oder Einstellungsdialog ein. Claude Desktop speichert sie im sicheren Speicher deines Betriebssystems (macOS Keychain, Windows Credential Manager). Claude Code speichert sie im macOS Keychain; unter Windows und Linux in ~/.claude/.credentials.json, nur für deinen Benutzer lesbar. Wir empfehlen ein separates Anbieter-Projekt mit einem Ausgabenlimit.

In Claude-Code-Cloud-Sitzungen: Kirat läuft in deiner Cloud-Umgebung. Du hinterlegst die Schlüssel dort als Netzwerk-Secrets: Anthropics Proxy fügt sie auf dem Weg nach draußen zu Kirats Anfragen hinzu, sodass niemand in einer Sitzung sie lesen kann, nicht einmal Claude. Bei Team- und Enterprise-Plänen muss sie je nach deiner Rolle möglicherweise ein Organisations-Admin hinzufügen. Als Fallback können die Schlüssel Umgebungsvariablen dieser Umgebung sein, lesbar für alle, die sie nutzen.

Auf deinem Computer: Kirat hält einen Ordner .kirat in deinem Home-Verzeichnis mit dem Tageskostenzähler, dem Kostenprotokoll, den letzten 20 Ergebnissen (sie enthalten deine Fragen und Antworten), dem Protokoll delegierter Entscheidungen und erzeugter Bilder. Du kannst ihn jederzeit löschen. Alle Kirat-Sitzungen auf dem Computer teilen ihn, Desktop und Code.

Vollständige Antwort →

Wie funktioniert Kirat in Claude-Code-Cloud-Sitzungen, und was sind die Limits?

Cloud-Sitzungen – Cloud-Sitzungen im Code-Tab, Claude Code im Web oder in der Mobil-App – laufen auf Anthropics Servern in einer Cloud-Umgebung. Die Erweiterung auf deinem Computer erreicht sie nicht. Stattdessen richtest du die Cloud-Umgebung einmal ein:

  • füge den Block aus dem Download (cloud/setup-script.txt) oben in das Setup-Skript der Umgebung ein;
  • füge deine beiden Schlüssel hinzu – als Netzwerk-Secrets für api.openai.com und generativelanguage.googleapis.com (bei Team- und Enterprise-Plänen muss sie möglicherweise ein Admin hinzufügen; die Anleitung im Download enthält die Details); andernfalls als Umgebungsvariablen, idealerweise benannt KIRAT_OPENAI_API_KEY und KIRAT_GEMINI_API_KEY, die nicht mit den eigenen OPENAI_API_KEY eines Projekts kollidieren (Kirat akzeptiert auch OPENAI_API_KEY und GEMINI_API_KEY);
  • Netzwerkzugriff: Ist er auf Full, gibt es nichts zu ändern; andernfalls stelle ihn auf Custom (in neueren Apps: Limited) mit der Standardliste des Paketmanagers, plus dem Kirat-Download-Host (bei Schlüsseln in Umgebungsvariablen auch api.openai.com).

Das Skript lädt genau deine Version von Kirat herunter, verifiziert ihre SHA-256-Prüfsumme und installiert sie. Es ist eine einmalige Einrichtung, kein Ein-Klick-Vorgang. Wir haben es in einem Cloud-Container getestet.

Die Limits: Schlüssel in Umgebungsvariablen sind für alle lesbar, die die Umgebung nutzen (Netzwerk-Secrets halten sie unlesbar). Jede Cloud-Sitzung startet frisch, daher zählt Kirats Tagesbudget pro Sitzung – setze Ausgabenlimits bei OpenAI und Google; in der Cloud sind sie deine tatsächliche Obergrenze. Hintergrundjobs und aktuelle Ergebnisse enden mit der Sitzung. Der Netzwerkzugriff der Umgebung muss den Kirat-Download-Host erlauben und api.openai.com ebenfalls, wenn deine Schlüssel Umgebungsvariablen sind (Gemini ist durch die Standardliste abgedeckt). Wenn die Einrichtung fehlschlägt, startet die Sitzung trotzdem, nur ohne Kirat – und der fehlgeschlagene Zustand kann für neue Sitzungen zwischengespeichert bleiben, bis du das Setup-Skript bearbeitest (jede Änderung bewirkt, dass neue Sitzungen es erneut ausführen).

Die Download-Adresse im Setup-Skript ist Teil deines Kaufs, wie die ZIP; veröffentliche sie nicht. Die Lizenz deckt deine eigenen Cloud-Umgebungen ab. Eine Cloud-Umgebung, die mit anderen geteilt wird, braucht eine Lizenz pro Person.

Vollständige Antwort →

Welche Modelle nutzt es? Was, wenn ein Anbieter eines einstellt?

Standardmäßig gpt-5.6 von OpenAI und gemini-3.6-flash von Google, mit Claude als drittem Wähler.

Modellnamen und Preise sind Einstellungen. Wenn ein Anbieter ein Modell einstellt, gibst du den neuen Namen und seine beiden Preise ein. Kein Update nötig.

Claude Desktop sagt, die Erweiterung sei nicht von Anthropic verifiziert. Ist das ein Problem?

Diese Warnung ist zu erwarten. Claude Desktop zeigt sie für Erweiterungen an, die aus einer Datei installiert wurden, und Kirat wird aus einer Datei installiert – es ist nicht von Anthropic verifiziert oder signiert.

Wie funktionieren Updates?

Installiere in Claude Desktop die neue .mcpb genauso wie die erste. Deine Schlüssel und Einstellungen bleiben erhalten.

Kompatibilitätsupdates sind, wenn möglich, kostenlos, aber es gibt keine Garantie. Größere neue Versionen können separat verkauft werden.

Bekomme ich Support?

Nein. Kirat kommt ohne Support, Installationshilfe oder Beratung. Zahlung und Belege werden von Lemon Squeezy abgewickelt. Wenn Kirat in einer unterstützten Umgebung nicht läuft, bekommst du dein Geld zurück; siehe AGB.

Was erlaubt die Lizenz?

Eine Person, auf beliebig vielen deiner eigenen Geräte und in deinen eigenen Cloud-Umgebungen. Eine Cloud-Umgebung, die mit anderen geteilt wird, braucht eine Lizenz pro Person. Kein Weiterverkauf und keine Weitergabe. Kirat ist proprietäre Software, kein Open Source.

Die Nutzung dessen, was der Council produziert, in deiner eigenen Arbeit, auch kommerziell, ist in Ordnung. Die vollständigen Bedingungen stehen in den AGB.

Wofür ist der Blueprint? Brauche ich ihn?

Du brauchst ihn nicht, um Kirat zu nutzen. Der Blueprint ist für Leute, die mit einem Coding-Agenten ihren eigenen Council-Server bauen oder anpassen wollen.

Er besteht nur aus Dokumenten – kein Code, keine installierbare Erweiterung: die Spezifikation (strukturierte Anforderungen an die Tools), die Architekturentscheidungen mit der Begründung für jede einzelne, die Abnahmeprüfliste, gegen die ein Agent sich selbst verifizieren kann, und die Benchmark-Daten hinter den Zahlen auf dieser Seite. Es gibt keinen Paketpreis.

06 — Details

Die Details, fürs Protokoll.

Installation, überall wo Kirat läuft und die Cloud-Limits, die neun Tools und die Belege hinter den Zahlen. Öffne, was du brauchst.

Kirat installieren und deine API-Schlüssel verbinden

Kirat ist kein Dienst, für den du dich anmeldest. Es läuft auf deinem Computer (oder in deiner eigenen Claude-Code-Cloud-Umgebung), innerhalb von Claude, mit deinen eigenen API-Schlüsseln. Es gibt keinen Kirat-Server und kein Konto bei uns. Alles, was du Kirat gibst, geht direkt an OpenAI und Google, über deine Konten – von deinem Computer aus oder in Claude-Code-Cloud-Sitzungen aus deiner eigenen Cloud-Umgebung über den Netzwerk-Proxy von Anthropic für diese Umgebung. Wir sehen deine Schlüssel oder deine Fragen nie.

Kirat gerade gekauft? Folge der Schritt-für-Schritt-Einrichtungsanleitung: zuerst, welches Claude du nutzt, dann nur die Schritte dafür.

Schritt 1 · der langsame Teil

Zwei API-Schlüssel

Einen OpenAI-API-Schlüssel und einen Google-Gemini-API-Schlüssel, beide mit aktivierter Abrechnung. Was hier Zeit kostet, sind die Anmelde- und Abrechnungsformulare der Anbieter. Ein separates Anbieter-Projekt mit einem Ausgabenlimit ist eine gute Idee.

Minimale Berechtigungen (optional): Bei OpenAI reicht ein eingeschränkter Schlüssel mit „List models“ auf Read und „Model capabilities“ auf Request, alles andere auf None. Ein Gemini-Schlüssel aus Google AI Studio ist bereits auf die Gemini API beschränkt; beschränke einen Schlüssel aus der Google Cloud Console auf die Generative Language API.

Hast du schon beide Schlüssel? Weiter zu Schritt 2.

Schritt 2

Installieren

Claude Desktop: Entpacke den Download. Öffne Einstellungen → Erweiterungen → Erweiterte Einstellungen → Erweiterung installieren… und wähle die Datei .mcpb. Gib beide Schlüssel im Dialog ein. Desktop bringt sein eigenes Node mit, es ist also nichts weiter zu installieren.

Claude Code: Entpacke den Download und verschiebe den entpackten Ordner kirat in dein Home-Verzeichnis, sodass ~/kirat/claude-code existiert. Führe dann die folgenden Befehle aus. Benötigt Node.js 20 oder neuer.

Claude-Code-Cloud-Sitzungen: eine einmalige Einrichtung deiner Cloud-Umgebung, mit Limits – siehe unten.

Schritt 3

Fragen

Prüfe die Installation: Nutze die Kirat-Erweiterung und rufe kirat_status auf. Es prüft auch beide API-Schlüssel bei OpenAI und Google, kostenlos.

Stelle dann eine echte Frage: Frag den Kirat-Council: Postgres oder SQLite? Gib auch deine eigene Position an. Oder starte von einer Vorlage: in Claude Desktop über die +-Schaltfläche im Nachrichtenfeld, in Claude Code mit dem Plugin als /kirat:decide, /kirat:review, /kirat:critique oder /kirat:brainstorm. In Claude-Code-Cloud-Sitzungen heißen sie /mcp__kirat__decide, /mcp__kirat__review, /mcp__kirat__critique und /mcp__kirat__brainstorm.

# in Claude Code, once ~/kirat/claude-code exists
/plugin marketplace add ~/kirat/claude-code
/plugin install kirat@kirat
# enter both keys when asked; to change them later:
/plugin configure kirat@kirat

Claude Desktop warnt, dass die Erweiterung nicht von Anthropic verifiziert ist. Diese Warnung ist bei jeder aus einer Datei installierten Erweiterung zu erwarten — siehe die FAQ.

Wo es läuft, vollständig, mit den Cloud-Grenzen Die neun Tools und ein aufgezeichneter Beispielaufruf

Du fragst in einfacher Sprache. Claude führt den Aufruf aus:

// a real call and a real answer — nothing staged
kirat_vote({
  question: "Cap the coupled effort default, or leave it at maximum?",
  options: ["cap at high", "decouple", "leave as is"],
  ownPosition: { position: "cap at high", reasoning: "…", confidence: 72 }
})
→ outcome:       "completed"
  decision:      "cap at high"
  decisionPath:  "unanimous"
  rounds:        1
  votes:         openai 94, gemini 92,
                 claude 72
  cost:          $0.021

Weitere Ergebnisse: needs_human (keine Mehrheit — du entscheidest), domain_decision, limited, budget_exhausted. Konfidenzwerte sind die Selbsteinschätzung jedes Modells.

Abb. 6.3 — Teileliste

Neun Tools, die Claude aufruft

7 mit API-Kosten · 2 ohne

Pos.ToolWas es tutAPI-Kosten
01kirat_voteEntscheidung per Abstimmung: Jedes Mitglied bezieht Stellung, dann entscheidet eine Zweidrittelmehrheit, der Domänenverantwortliche oder needs_human.API-Kosten
02kirat_reviewCode-Review. Jeder Befund wird von der anderen Modellfamilie verifiziert.API-Kosten
03kirat_createDeinen Entwurf kritisieren, ein Mitglied einen Entwurf erstellen lassen oder kurze Varianten bewerten.API-Kosten
04kirat_brainstormDivergente Ideen in drei Spuren — im Rahmen der Vorgabe, benachbart, regelbrechend — anonym bewertet.API-Kosten
05kirat_decideDelegierte Entscheidung für umkehrbare Arbeitsentscheidungen, mit Veto und einem Tageslimit.API-Kosten
06kirat_askGenau ein Mitglied fragen. Kein Rat.API-Kosten
07kirat_imageBilderzeugung durch beide Anbieter, bewertet von einer anonymen Jury.API-Kosten
08kirat_resultHintergrundjobs und aktuelle Ergebnisse abrufen.keine
09kirat_statusBudget, Ausgaben, verfügbare Mitglieder, Einstellungen, Prüfung des kostenlosen Schlüssels.keine

„API-Kosten“ bedeutet, dass das Tool OpenAI und Google mit deinen eigenen Schlüsseln aufruft und du diese Anbieter direkt bezahlst. Die obige Wiedergabe zeigt, was jeder Lauf gekostet hat. Kirat selbst berechnet nichts pro Nutzung: Du kaufst es einmal. kirat_image und Bildeingabe funktionieren mit Dateien auf deinem Computer, daher eignen sie sich am besten für Claude Code.

Belege: aufgezeichnete Entscheidungen, gemessene Kosten, dokumentierte Fehler