Coding9 发布 Shopware 6 的 AI 智能体 Lotse:聊天管理商店,写入需人工批准
Coding9GmbH/coding9-lotse
Coding9 推出面向 Shopware 6 的 AI 智能体 Lotse,可通过聊天修改 Einkaufswelten、价格、文案与 SEO,AI 仅读取,写入须经用户批准。它支持 Claude API 密钥或 ChatGPT 订阅(Codex)两种接入方式,凭据以 AES-256-GCM 加密存储,并提供 Docker 部署与 46 秒演示视频。
Der KI-Lotse für Shopware 6. Du gibst den Kurs vor – Lotse bringt deinen Shop sicher hin.
Einkaufswelten, Preise, Texte & SEO per Chat. Die KI liest nur, geschrieben wird erst nach deiner Freigabe.
Demo

46 Sekunden: Preise per Chat, Vergleich prüfen, Seite als Entwurf – Klick öffnet das Video
Screenshots
| Arbeitsfläche mit Shop-Check | Kontext wählen | KI-Zugriff je Bereich |
|---|---|---|
![]() |
![]() |
![]() |
Screenshots aus dem Demo-Shop (Dockware). Das Video zeigt einen Beispiel-Entwurf mit fiktiver Marke und eigenen Illustrationen.
Schnellstart (Docker)
docker run -d --name lotse --restart unless-stopped \ -p 127.0.0.1:3333:3333 -v lotse-data:/data \ --read-only --tmpfs /tmp:size=256m,mode=1777 --tmpfs /app/.next/cache:size=64m,uid=1000,gid=1000 \ --cap-drop ALL --security-opt no-new-privileges:true \ --pids-limit 512 --memory 2g --cpus 2 \ ghcr.io/coding9gmbh/lotse:latest
latestgibt es erst, wenn der Release-Lauf der Pipeline manuell von einem Tag aus gestartet wurde (siehe Releases & Image). Gibt es das Image noch nicht, baust du es mitmake upaus dem Quellcode.
Dann http://localhost:3333 öffnen und unter Einstellungen:
- KI verbinden – wahlweise
- Claude: Anthropic-API-Schlüssel (console.anthropic.com, Abrechnung nach Verbrauch), oder
- ChatGPT-Abo (Codex): „Mit ChatGPT anmelden“ → Link öffnen, angezeigten Code eingeben. Funktioniert auch im Container, ohne API-Kosten (es gelten die Limits deines Abos).
- Shop verbinden – im Shopware-Admin unter Einstellungen → System → Integrationen eine Integration anlegen und Shop-URL, Zugangs-ID und Schlüssel eintragen.
- Mit dem Styleguide-Onboarding starten, damit Lotse Ton und Farben deines Shops trifft.
Alles (App, KI-Laufzeit, SQLite-Datenbank) steckt im Image; Daten, verschlüsselte Zugangsdaten und Verlauf liegen im Volume lotse-data und überstehen Updates.
Shop auf demselben Rechner? Im Container ist
localhostder Container selbst – nutzehttp://host.docker.internal:<port>.
Aus dem Quellcode / Entwicklung
make env # .env aus .env.example (optional – alles geht auch in der Oberfläche) make up # Image bauen und starten → http://localhost:3333 make demo # zusätzlich Demo-Shop (dockware) → http://localhost:8888 make logs # Logs · make down stoppen · make backup Daten sichern make help # alle Befehle
Mit dem Demo-Shop in Lotse eintragen: Shop-URL http://shopware, öffentliche URL http://localhost:8888, Benutzer admin / shopware.
Ohne Docker: npm install && npm run dev (Node ≥ 22.13) → http://localhost:3333. Vor jedem Commit: npm run check (Typecheck, ESLint, Tests).
Sicherheit – damit kein Shop plötzlich down geht
| Schutz | Wie |
|---|---|
| KI ohne Schreibrechte | Das Modell bekommt nur ReadOnlyShopware mit Freigabeliste; Kunden-, Bestell-, Zahlungs- und Zugangsdaten sind fest gesperrt, jeder Lesezugriff wird protokolliert. |
| Freigabe vor jedem Schreiben | Änderungen erscheinen als Alt→Neu-Vergleich; erst „Anwenden“ schreibt. Audit-Log + Rückgängig. |
| Shop wird geschont | Schreibzugriffe gedrosselt (LOTSE_WRITE_CONCURRENCY, Standard 2), max. 300 Einträge je Änderungsset, Timeouts (LOTSE_SHOP_TIMEOUT_MS), Backoff bei 429/503. |
| Lokal & gehärtet | Port nur auf 127.0.0.1, Host-/Origin-Prüfung, Container als Nicht-Root, read-only, ohne Capabilities, mit Ressourcen-Limits. |
| Zugangsdaten | AES-256-GCM-verschlüsselt im Volume, gehen nie an die KI. |
| Codex (ChatGPT-Abo) | Eigene Codex-Werkzeuge (Shell, Dateien, Web, Bilder, Plugins …) abgeschaltet, Dateizugriff per Berechtigungsprofil komplett gesperrt, keine Rückfragen nach mehr Rechten; Shop-Tools nur über einen lokalen MCP-Endpunkt mit Zufalls-Token je Chat. Taucht trotzdem ein gesperrtes Werkzeug auf, bricht Lotse die Runde ab. |
| Serverbetrieb | LOTSE_PASSWORD (Login) + ALLOWED_HOSTS setzen, HTTPS per Reverse-Proxy. |
Für Live-Shops: eigene Integration mit eingeschränkter Rolle statt Admin-Login, neue Abläufe zuerst im Staging testen. Details: SECURITY.md.
Warum kein Claude-Abo? Anthropic erlaubt Drittprodukten auf Basis des Claude Agent SDK ohne vorherige Freigabe keinen claude.ai-Login und keine Abo-Kontingente (Agent-SDK-Dokumentation). Lotse nutzt Claude deshalb nur mit API-Schlüssel – und ignoriert bewusst eine eventuell vorhandene Claude-Code-Anmeldung auf dem Rechner.
Konfiguration
Alle Variablen mit Erklärung in .env.example. In der Oberfläche gesetzte Werte haben Vorrang.
| Variable | Zweck |
|---|---|
AI_PROVIDER |
claude (Standard) oder codex (ChatGPT-Abo) |
ANTHROPIC_API_KEY |
KI-Zugang Claude (API-Schlüssel) |
CODEX_MODEL |
optionales Codex-Modell (leer = Standard des Abos) |
SHOPWARE_URL, SHOPWARE_CLIENT_ID, SHOPWARE_CLIENT_SECRET |
Shop-Zugang (Integration) |
SHOPWARE_PUBLIC_URL |
Shop-Adresse aus Sicht des Browsers, falls abweichend |
SHOP_PLATFORM |
verbundene Plattform: shopware (Standard), shopify, magento (Magento 2) oder openmage (Magento 1 mit dem Modul aus integrations/openmage/); Variablen SHOPIFY_*, MAGENTO_*, OPENMAGE_* siehe src/lib/platforms.ts |
AI_MODEL |
z. B. sonnet oder opus |
LOTSE_PASSWORD, ALLOWED_HOSTS |
Zugangsschutz für Serverbetrieb |
LOTSE_WRITE_CONCURRENCY, LOTSE_SHOP_TIMEOUT_MS |
Shop-Schonung |
OPENAI_API_KEY, IMAGE_MODEL |
optionale Bild-KI |
Releases & Image
Ein Tag vX.Y.Z veröffentlicht das Image automatisch (.github/workflows/docker.yml); außerdem lässt es sich von Hand starten: GitHub → Actions → Docker-Image → Run workflow. Push auf main und Pull Requests führen nur Typecheck, Lint, Tests, Build und Smoke-Test aus, veröffentlichen aber kein Image.
- Tag
vX.Y.Z(oder manueller Lauf von diesem Tag): veröffentlichtghcr.io/coding9gmbh/lotsealsX.Y.Z,X.Yundlatest. - Manueller Lauf von
main: veröffentlichtedgeund ein Tag mit dem Kurz-Hash des Commits.
Gebaut wird für amd64 und arm64, mit SBOM und Provenance. latest gibt es erst nach dem ersten Release-Tag; vorher bleibt nur der Bau aus dem Quellcode (siehe unten). Neue GHCR-Pakete sind zunächst privat und müssen einmalig in den Paket-Einstellungen auf Public gestellt werden.
Konzept: AI-first Verwaltung
Chat statt Formulare. Du schreibst, was passieren soll („Ändere das Layout von Produkt XY“, „Senke alle Preise um 20 %“, „FAQ bei allen Produkten“). Der Agent versteht → fragt gezielt zurück (klickbare Antworten) → recherchiert (nur lesen) → zeigt Vorschau bzw. Alt→Neu-Vergleich → du gibst frei → der Server schreibt (Audit-Log, Rückgängig).
Sicherheitsmodell: Die KI hat ausschließlich Lesezugriff (ReadOnlyShopware, kein create/update/upload). Schreiben passiert nur im Executor (src/server/changes.ts) nach Klick auf „Anwenden“; jede Anwendung wird im Audit-Log (SQLite, data/aicb.db) protokolliert und ist per „Rückgängig“ umkehrbar. Hochgeladene Bild-Anhänge und KI-erzeugte Bilder liegen bis zur Freigabe lokal in data/staging/ und kommen erst mit einem freigegebenen Änderungsset in den Shop.
Funktionen
- Chat-Start mit Beispielen, Rückfragen mit Antwort-Buttons, Verlauf. Optionaler Kontext (Kategorie/Produkt wählen) mit Direktlinks ins Admin/Storefront.
- Massenänderungen (Preise, Streichpreise, Bestand, Aktiv, Texte, SEO) mit serverseitig gerechneten Preisregeln, Warnungen (z. B. −99 %), Zeilen-Auswahl, Audit-Log und Rückgängig.
- Produktindividuelle Blöcke (FAQ): gemeinsames PDP-Layout mit Block
pdp-faq, Inhalt je Produkt im JSON-Zusatzfeldaicb_blocks(mit FAQPage-Schema). - Styleguide-Onboarding: Die KI analysiert Theme-Konfiguration, Storefront-CSS, Logo und echte Texte → gespeichert in der Datenbank. Wirkt auf Texte, Farben, Vorschau und die CSS-Variablen (
--sg-*) in Custom-HTML. - Einkaufswelten-Know-how: Agent kennt Sections/Blöcke/Slots, liest bestehende Layouts (
get_cms_page) und bezieht vorhandene Inhalte ein. - Custom-HTML/CSS/JS als
html-Element (Blockcustom-html, CSS automatisch gescoped). - Verlauf: Alle Chats inkl. Entwurf/Freigaben liegen in der Datenbank und lassen sich im UI wieder öffnen.
- UI im Coding9-CI (Dunkel
#2E2E38, Grün, Koralle, Creme; Satoshi/Inter via Fontshare/Google Fonts).
Shop-Plattformen
Lotse verbindet sich mit Shopware 6 (Standard), Shopify, Magento 2 und OpenMage (Magento 1); die Plattform wird in den Einstellungen unter „Shop verbinden“ gewählt (oder per SHOP_PLATFORM). Was welche Plattform kann, zeigt die Fähigkeitsmatrix in docs/platform.md.
OpenMage hat keine brauchbare Schnittstelle für CMS-Seiten/-Blöcke, darum liegt im Repository das Modul Lotse_Connector (integrations/openmage/) mit token-gesicherter JSON-API unter /lotse-api/v1. Installation in Kurzform (Details, Sicherheit und Endpunkte in integrations/openmage/README.md):
- Modul in die OpenMage-Installation legen: Dateien aus
integrations/openmage/kopieren bzw. das Zip aus./package.shentpacken, permodman link, oder per Composer (Typmagento-module). - Cache leeren, im Admin unter System → Konfiguration → Lotse → API die Schnittstelle aktivieren und ein API-Token erzeugen (alternativ
php shell/lotse.php --generate-token). - In Lotse unter „Shop verbinden“ OpenMage wählen, Shop-URL und Token eintragen (oder
OPENMAGE_URL,OPENMAGE_TOKEN, optionalOPENMAGE_STORE_CODE).
Das Modul kennt keine Routen für Kunden, Bestellungen, Zahlungen oder Benutzer – diese Daten erreichen Lotse gar nicht.
Produktseite
Die Produktseite von Lotse liegt auf coding9.de/produkte/lotse und wird mit der CODING-9-Website gepflegt.
Aufbau
Next.js 16 (App Router) · React 19 · TypeScript (strict) · SQLite (node:sqlite) · Claude Agent SDK oder OpenAI Codex SDK (ChatGPT-Abo).
src/
├── proxy.ts Host-/Origin-Prüfung, optionaler Login, Storefront-Pfade → /shop
├── app/
│ ├── page.tsx Arbeitsfläche (Chat, Kontext, Vorschau)
│ ├── settings/ Einstellungen: Shop, KI, Bild-KI, KI-Zugriff, Protokolle
│ ├── api/**/route.ts REST + Chat-Stream (NDJSON)
│ ├── shop/ Storefront-Proxy für die Live-Vorschau
│ └── staged/ vorgemerkte Bilder (vor Freigabe nur lokal)
├── components/ UI nach Bereichen (shell = Navigation, chat, context, preview, dialogs, settings, ui), CSS Modules
├── hooks/ useChatStream, useAttachments
├── lib/
│ ├── protocol.ts Vertrag Server ↔ Oberfläche (REST-Typen, Chat-Ereignisse)
│ └── chat-state.ts ein Reducer für Live-Stream und Wiederherstellung eines Chats
└── server/ nur serverseitig (`server-only`)
├── agent.ts Chat-Runde: Claude Agent SDK (In-Process-MCP), Streaming des Entwurfs
├── agent-codex.ts Chat-Runde mit Codex (ChatGPT-Abo); Shop-Tools über /api/mcp/<chat> (Token je Chat)
├── codex.ts Codex-Anmeldung (Gerätecode), gesperrte Konfiguration ohne Shell/Dateien/Web
├── platform/ Plattform-Schicht: Adapter-Vertrag + Shopware, Shopify, Magento 2, OpenMage, siehe docs/platform.md
├── tools.ts Kern-Tools + Zusammenbau je Plattform (lesen frei, schreiben nur über Änderungssets)
├── policy.ts Schutzschicht: Freigabeliste, gesperrte Daten, Zugriffsprotokoll
├── changes.ts Executor: einziger schreibender Code (gedrosselt, Audit, Rückgängig)
├── shopware.ts Admin-API-Client (Timeouts, Backoff) + ReadOnlyShopware für die KI
├── cms.ts / patterns.ts Block-Katalog, Spec → `cms_page`, HTML-Vorschau
└── db.ts / settings.ts SQLite, verschlüsselte Zugangsdaten
prompts/ System-Prompt als versioniertes Markdown: common/ (alle Plattformen) + shopware/, shopify/, magento/, openmage/
integrations/openmage/ OpenMage-Modul Lotse_Connector (JSON-API, openapi.yaml, Tests, package.sh)
tests/ alle Tests (node:test), Struktur wie src/
└── support/ Fake-Shops (Shopify, OpenMage) samt Tests und Live-Prüfskripte
Neue Blocktypen: in BLOCKS (src/server/cms.ts) ergänzen (+ Vorschau-Renderer) – der Agent bekommt den Katalog automatisch.
Neue Shop-Plattform: Vertrag, Konventionen und Checkliste in docs/platform.md.
Haftungsausschluss
Lotse wird ohne Gewährleistung bereitgestellt, die Nutzung erfolgt auf eigene Verantwortung. KI-Ergebnisse können falsch sein und müssen vor der Freigabe geprüft werden; neue Abläufe zuerst im Staging-Shop testen und vorher ein Backup anlegen. Für die Übermittlung von Shop-Inhalten an den KI-Anbieter bist du als Betreiber verantwortlich. Alle Hinweise: DISCLAIMER.md.
Lizenz
MIT © CODING 9 GmbH
来源:GitHub · github.com


