Bitte mit Admin-Secret anmelden
| Provider | Label | API Key | Status | Erstellt | Aktionen |
|---|---|---|---|---|---|
|
🔑
Lade… |
|||||
| Provider | Calls | Input Tokens | Output Tokens |
|---|---|---|---|
|
Keine Daten |
|||
| Provider | Model | Input | Output | Status |
|---|---|---|---|---|
|
Lade… |
||||
Klicke "Discover" um verfügbare Modelle bei allen Providern abzufragen
| User | Provider | Model | In/Out | Kosten | Dauer | Status | Zeitpunkt |
|---|---|---|---|---|---|---|---|
|
Keine Calls |
|||||||
| Modell | Provider | Status | Failures | Nächster Re-Check | Letzter Fehler | Aktionen |
|---|---|---|---|---|---|---|
|
✅
Alle Modelle gesund |
||||||
| User | Status | Guthaben | Aufgeladen | Verbraucht | LLM Calls | Aktionen |
|---|---|---|---|---|---|---|
|
Lade... |
||||||
Stand: 26. März 2026 — Diese Seite
dokumentiert alle Systeme:
Strang 5 (Install & Setup), Strang 6 (Updates & Migrationen) und Strang 6b (Marketplace).
install.shZweck: Ein neuer User kopiert eine einzige Zeile ins Terminal. Das Script erledigt alles — still, ohne Fragen.
Was das Script tut:
~/cb_lightGET /api/releases/latest/download)npm install und npx tsc ausconfig.yaml (Setup-Marker)http://localhost:3577/setupWo liegt das Script? cb_hub/public/install.sh — wird vom Hub unter
/install.sh ausgeliefert.
setup.htmlZweck: Browser-basierter Setup nach der Installation. Null Terminal-Eingaben nötig.
Flow:
Hub-API Calls:
GET /api/invite/:code — Validiert den Invite-CodePOST /api/accept — Erstellt Account, bekommt Secret zurückWas passiert auf CB Light:
config.yaml wird geschrieben (hub.url, hub.secret, owner.*)profiles/ angelegtDateien:
cb_light/src/gateway/setup.html, Routes in web.ts:
/setup, /api/setup/check, /api/setup/complete
GitHub Actions → Hub
Zweck: Bei jedem Git-Tag wird automatisch ein Tarball gebaut und zum Hub hochgeladen.
Flow:
Hub-Endpoints:
POST /api/releases/upload — CI/CD lädt Tarball hoch (Basic Auth)GET /api/releases/latest — Aktuelle Version + SHA256GET /api/releases/latest/download — Tarball-Download (für Install & Updates)
Dateien:
cb_light/.github/workflows/release.yml, cb_hub/src/routes/api.ts
update.tsZweck: End-User können Updates über die UI installieren, ohne Git oder Terminal.
Update-Flow (Tarball-basiert):
PROTECTED Directories (werden nie überschrieben):
profiles/
data/
logs/
sessions/
backups/
config.yaml
node_modules/
.env
UI: Update-Banner erscheint automatisch alle 5 Minuten oben im UI wenn ein Update verfügbar ist. Update-Panel unter Admin → Software Update.
Dual-Mode: Hub-Tarball für End-User, Git-Checkout für Developer.
API:
GET /api/update/status, POST /api/update/check,
POST /api/update/apply, POST /api/update/rollback
Automatisch: Wenn npm install oder npx tsc
fehlschlagen, wird der Code-Snapshot automatisch wiederhergestellt.
Manuell: Rollback-Button im Update-Panel oder
POST /api/update/rollback.
Wie es funktioniert:
backups/pre-update-code/
kopiertnpx tsc rebuildmigrations.tsZweck: Bei Breaking Changes an config.yaml oder Datenstrukturen
werden automatisch Migrationen ausgeführt.
Mechanismus (A+B Ansatz):
up() Funktion_data_version Feld in
config.yaml merkt sich die aktuelle Version
Wann laufen Migrationen?
config.yaml nach
backups/migrations/
UI: Migration-Status im Update-Panel: aktuelle Daten-Version + ausstehende Migrationen.
API:
GET /api/update/migrations
marketplace.tsZweck: Zentraler Katalog für Extensions, Skills und Tools. Admins publizieren Packages auf dem Hub, CB Light Instanzen können diese durchsuchen und installieren.
Datenmodell (PostgreSQL):
marketplace_packages — Metadaten (slug, type, name, icon, author, tags,
featured, published)marketplace_versions — Versionen (version, changelog, min_core, size_bytes,
sha256, downloads)marketplace_downloads — Download-Log (wer, wann, welche Version)Dateispeicher:
Publish-Flow (Desktop App Publisher):
Install-Flow (CB Light Instanz):
Admin-Kuratierung (Hub Dashboard → Marketplace Tab):
Dateien:
cb_hub/src/routes/marketplace.ts,
cb_hub/db/migrate_004_marketplace.sql,
cb_light/src/gateway/web.ts (Proxy + Install),
cb_light/src/gateway/ui/panels/all-panels.html (UI)
| Methode | Endpoint | Projekt | Beschreibung |
|---|---|---|---|
| GET | /install.sh | Hub | Install-Script ausliefern |
| GET | /api/releases/latest | Hub | Aktuelle Version + SHA256 |
| GET | /api/releases/latest/download | Hub | Tarball herunterladen |
| POST | /api/releases/upload | Hub | Tarball hochladen (CI/CD) |
| GET | /api/invite/:code | Hub | Invite-Code validieren |
| POST | /api/accept | Hub | Account erstellen (Invite) |
| POST | /api/machines/register | Hub | Zweitinstallation Token einlösen |
| GET | /setup | Light | Setup-Wizard servieren |
| GET | /api/setup/check | Light | Setup nötig? (config.yaml prüfen) |
| POST | /api/setup/complete | Light | Setup abschließen |
| GET | /api/update/status | Light | Update-Status abfragen |
| POST | /api/update/check | Light | Auf Updates prüfen |
| POST | /api/update/apply | Light | Update installieren |
| POST | /api/update/rollback | Light | Rollback durchführen |
| GET | /api/update/migrations | Light | Migration-Status |
| GET | /api/marketplace | Hub | Packages auflisten — Auth erforderlich (?type=, ?search=, ?admin=true) |
| GET | /api/marketplace/extensions | Hub | Nur Extensions auflisten (Alias für ?type=extension) |
| GET | /api/marketplace/:slug | Hub | Package-Details + alle Versionen |
| GET | /api/marketplace/:slug/:ver/download | Hub | Tarball herunterladen (Bearer Auth) |
| POST | /api/marketplace/publish | Hub | Package veröffentlichen (Deploy Secret, multipart/form-data) |
| PUT | /api/marketplace/:slug | Hub | Metadaten aktualisieren (Admin) |
| DEL | /api/marketplace/:slug/:ver | Hub | Version löschen (Admin) |
| GET | /api/marketplace | Light | Proxy → Hub (+ lokale Install-Status) |
| POST | /api/marketplace/install | Light | Package herunterladen + installieren |
So bringst du einen neuen User von Null auf eine laufende CB Light Instanz.
Alle Schritte werden hier im Hub-Dashboard durchgeführt.
Gehe zu 🔑 User-Verwaltung → + Neuer User
johndoe)→ System erzeugt automatisch einen 64-Zeichen Secret Key
In der User-Tabelle: Klick auf den Secret Token um ihn anzuzeigen, dann 📋 zum Kopieren.
Gehe zu 💰 Wallets → 💳 Button beim neuen User → Betrag eingeben.
Ohne Guthaben kann der User keine LLM-Calls machen (402 Payment Required).
Gehe zu 🔑 User-Verwaltung → 📨 Einladungen → + Neue Einladung
E-Mail eingeben → System erzeugt einen Invite-Code (einmalig, zeitlich begrenzt).
Im Ergebnis-Dialog: 📋 Befehl kopieren — enthält den kompletten Install-Befehl mit Code.
Sende dem neuen User zwei Dinge:
| INSTALL | CLIDE_INVITE_CODE=<code> curl -fsSL https://api.cblight.de/install.sh | bash |
| SECRET | Der 64-Zeichen Secret Key aus Schritt 2 |
Tipp: Am besten über einen sicheren Kanal (Signal, persönlich, etc.)
Der User führt den Install-Befehl aus. Das Script:
localhost:3577/setup)Im Setup-Wizard gibt der User ein:
https://api.cblight.de→ CB Light verbindet sich zum Hub, Heartbeat startet, User erscheint als ● Online
✅ Quick-Check — Ist alles bereit?
| ☐ | User in User-Verwaltung angelegt? |
| ☐ | Secret Key kopiert und sicher aufbewahrt? |
| ☐ | Wallet mit Guthaben aufgeladen? |
| ☐ | Einladung erstellt und Install-Befehl kopiert? |
| ☐ | Mindestens ein LLM Provider Key aktiv (⚡ LLM Proxy)? |
| ☐ | Install-Befehl + Secret Key an User gesendet? |
Invite-Code vorher unter User-Verwaltung → Invite erzeugen, dann dem User diesen Befehl geben:
Ohne Invite-Code wird der Download verweigert (401). Der Code wird einmalig für den Download benötigt.
cblight://invite?code=HASH). Die
Installation erfolgt per 1-Klick komplett nativ ohne Setup-Skripte oder Terminal.
| VERSION | DATUM | GRÖSSE | CHANGELOG | SHA256 | AKTION |
|---|
| Agent | E-Mail-Adresse | Owner | Status | Ungelesen | Zuletzt aktiv | Registriert |
|---|---|---|---|---|---|---|
|
Lade... |
||||||
E-Mail-Adresse Schema:
{agentslug}.{ownerusername}@cblight.de
Beispiel: klara.heiko@cblight.de
Slug-Regeln: lowercase a–z, 0–9, Bindestrich, max 20 Zeichen, kein Punkt.
CB Light API-Aufrufe:
Zentrale Error-Reporter Ticket-Ansicht
| Workspace | Owner | Team | Dateien | Erstellt | Aktionen |
|---|---|---|---|---|---|
|
Lade... |
|||||
Alles was ein Entwickler oder Administrator wissen muss, um das CB Hub + CB Light Ökosystem
zu verstehen, zu betreiben, zu warten und weiterzuentwickeln. Stand: 27. März 2026.
Das System besteht aus zwei Komponenten:
| CB Hub | Zentraler Server — API-Gateway, User-Management, LLM-Proxy, Token-Bank (Wallets), Marketplace (Package-Katalog + Downloads) |
| CB Light (Clide) | Lokale Instanzen — laufen auf den Rechnern der User, verbinden sich zum Hub |
Kommunikation: CB Light → Hub via HTTPS (api.cblight.de). Auth:
Bearer Token (Owner Secret).
LLM-Proxy-Flow: CB Light → Hub → Anthropic/OpenAI/Google → Hub → CB Light (SSE Streaming)
| Repo | URL | Beschreibung |
|---|---|---|
cb_hub |
github.com/AtariCoder76/cb_hub | Hub-Server: API, Dashboard GUI, DB-Schema, Dockerfile, Deploy-Workflow |
cb_light |
github.com/AtariCoder76/cb_light | CB Light: Lokaler AI-Agent, Gateway UI, Toolchains |
Hub-Struktur:
| Provider | Hetzner Cloud |
| IP | 178.104.0.225 |
| OS | Ubuntu 24.04 LTS |
| Docker | v29.3.0 + Compose v5.1.0 |
| Domain | api.cblight.de |
| TLS | Automatisch via Caddy (Let's Encrypt) |
| SSH | ssh root@178.104.0.225 |
Docker-Container:
| Container | Image | Port | Funktion |
|---|---|---|---|
cb-hub-caddy |
caddy:2-alpine | 80, 443 | Reverse Proxy, TLS |
cb-hub-app |
node:22-alpine (custom) | 4400 (intern) | Express API + GUI |
cb-hub-postgres |
postgres:16-alpine | 5433 (intern) | Datenbank |
Verzeichnisse auf dem Server:
Automatisch bei Push auf main:
Deploy-Datei: .github/workflows/deploy.yml
GitHub Secrets benötigt:
SERVER_IP — 178.104.0.225DEPLOY_SSH_KEY — SSH Private Key für root-ZugangManuell deployen (Notfall):
| Tabelle | Zweck | Wichtige Felder |
|---|---|---|
owners |
User-Accounts | username, secret (SHA256), role (admin/user), status |
wallets |
Guthaben pro User | owner_id, balance (DECIMAL 12,4) |
ledger |
Transaktions-Journal | type (topup/usage/refund), amount, description |
llm_usage |
LLM-Call-Log | model, input/output_tokens, cost_usd, duration_ms |
provider_keys |
API-Keys (Anthropic, etc.) | provider, api_key, enabled |
invites |
Einladungs-Links | hash, status (pending/accepted/expired) |
machines |
Lokale Client-Instanzen | owner_id, machine_id, version, os, agent_count, last_seen |
machine_tokens |
Zweit-Installation Tokens | token, owner_id, expires_at, used |
trust |
Trust-Beziehungen | owner_a, owner_b |
releases |
CB Light Versionen | version, filename, sha256, changelog |
Schema-Datei: db/init.sql
Migrationen: db/migrate_*.sql — werden beim Deploy automatisch
ausgeführt
DB-Zugang (notfall):
Auth-Modell: Bearer Token (Owner Secret)
config.yaml → hub.secretAuthorization: Bearer <secret>Rollen:
admin |
Voller Zugriff auf Dashboard, User-Verwaltung, Wallets, Provider Keys |
user |
Eigene Wallet abfragen, LLM-Calls machen, Heartbeat senden |
Middleware-Kette:
authMiddleware — prüft Bearer Token, setzt req.owneradminMiddleware — prüft req.owner.role === 'admin'Dashboard-Login: Admin gibt Secret Key im Login-Overlay ein → wird in
localStorage gespeichert → alle fetch()-Calls nutzen adminFetch()
Wrapper der Header mitsendet.
Self-Registration: Deaktiviert. Nur Admin kann User über Dashboard anlegen.
Basis-URL: https://api.cblight.de
| Method | Endpoint | Auth | Beschreibung |
|---|---|---|---|
| GET | /health | — | Health Check |
| GET | /api/releases/latest | — | Neueste Version |
| GET | /api/releases/download | — | Tarball herunterladen |
| POST | /api/releases/upload | Deploy-Secret | Release hochladen (CI) |
| GET | /api/releases/electron/latest-mac.yml | — | electron-updater Metadaten (YAML) |
| GET | /api/releases/electron/:filename | — | Electron Update-Datei (ZIP) |
| User-Endpoints (Bearer Token) | |||
| POST | /api/llm/chat | Bearer | LLM-Proxy (+ Wallet-Check) |
| GET | /api/llm/wallet | Bearer | Eigene Wallet-Daten |
| PUT | /api/heartbeat | Bearer | Instanz Heartbeat (OS, Version, Count) |
| GET | /api/machines | Bearer | Übersicht verbundener Maschinen |
| POST | /api/machines/tokens | Bearer | Token für Zweit-Installation generieren |
| POST | /api/machines/register | Token | Neue Maschine verknüpfen (via Token) |
| GET | /api/network | Bearer | Netzwerk-Übersicht |
| Admin-Endpoints (Bearer + Admin-Rolle) | |||
| GET | /api/admin/dashboard | Admin | Dashboard-Daten (inkl. verbundener Maschinen) |
| POST | /api/admin/users | Admin | User anlegen |
| PUT | /api/admin/users/:id | Admin | User bearbeiten |
| DEL | /api/admin/users/:id | Admin | User löschen |
| GET | /api/admin/wallets | Admin | Alle Wallets |
| POST | /api/admin/wallets/:id/topup | Admin | Guthaben aufladen |
| GET | /api/llm/providers | Admin | Provider Keys auflisten |
| GET | /api/llm/usage | Admin | LLM-Usage-Statistiken |
| GET | /api/llm/discover | Bearer | Model Discovery — alle Provider-Modelle mit Tier + Pricing |
| GET | /api/llm/discover/pricing | Bearer | Pricing-Lookup für ein einzelnes Model |
Unterstützte Provider: Anthropic ✅ | OpenAI ✅ | Google ✅
Datei: src/routes/llm.ts
📡 Request-Flow:
POST /api/llm/chat mit Model + Messagesprovider-Feld oder Auto-Detect aus Model-Name
provider_keys Tabelle📨 API-Definition — POST /api/llm/chat
🧮 Kosten-Tracking:
MODEL_PRICING Tabelle (pro 1M Tokens)usage Feld der Responsemessage_delta Event | OpenAI:
stream_options.include_usage | Google: usageMetadata aus letztem
Chunk
💰 Preistabelle ($/1M Tokens):
| Provider | Model | Input | Output |
|---|---|---|---|
| Anthropic | claude-opus-4 | $15.00 | $75.00 |
| Anthropic | claude-opus-4.6 | $5.00 | $25.00 |
| Anthropic | claude-sonnet-4 | $3.00 | $15.00 |
| Anthropic | claude-3.5-haiku | $0.80 | $4.00 |
| OpenAI | gpt-5.2 | $3.00 | $12.00 |
| OpenAI | gpt-4o | $2.50 | $10.00 |
| OpenAI | gpt-4o-mini | $0.15 | $0.60 |
| OpenAI | gpt-4.1 | $2.00 | $8.00 |
| OpenAI | gpt-4.1-mini | $0.40 | $1.60 |
| OpenAI | gpt-4.1-nano | $0.10 | $0.40 |
| OpenAI | o1 / o3 / o3-mini / o4-mini | $15–$1.10 | $60–$4.40 |
| gemini-3-flash-preview | $0.10 | $0.40 | |
| gemini-2.5-pro | $1.25 | $10.00 | |
| gemini-2.5-flash | $0.15 | $0.60 | |
| gemini-2.0-flash | $0.10 | $0.40 |
Quelle: MODEL_PRICING in
llm.ts. Neue Modelle werden auch dynamisch über GET /api/llm/discover
erkannt.
🔧 Provider-Detection (Auto):
claude-* → Anthropicgpt-*, o1-*, o3-*, o4-* → OpenAIgemini-* → Google🔍 Model Discovery (NEU):
GET /api/llm/discover — Fragt alle enabled Provider-APIs nach verfügbaren
Modellen abMODEL_PRICING + Prefix-MatchingModelRegistry — synchrones API-Format🔒 Filter- und Exclusion-Regeln:
ft:), ältere Modelle (gpt-3.*,
davinci) ebenfalls
gemini-* Modelle werden eingeschlossenTarballs auf dem Server: /opt/cb-hub/releases/
Backups (Cron: täglich 03:00):
pg_dump → gzip → /opt/cb-hub/backups/hub_YYYY-MM-DD.sql.gzMonitoring (Cron: alle 5 Min):
curl /health — wenn fehlschlägt: Auto-Restart versuch/opt/cb-hub/backups/monitor.logRestore aus Backup:
Voraussetzungen: Node.js ≥ 22, Docker (für lokale DB)
Neue Migration erstellen:
Neuen API-Endpoint hinzufügen:
src/routes/api.ts oder llm.ts hinzufügenauthMiddleware und ggf. adminMiddleware als Route-Handler
einhängenpublic/index.html erweitern (fetch → adminFetch())npx tsc --noEmit für Type-Checkgit push → automatischer Deploy| Aufgabe | Befehl |
|---|---|
| Logs anzeigen | ssh root@178.104.0.225 'cd /opt/cb-hub && docker compose logs hub --tail 50' |
| Container neustarten | ssh ... 'cd /opt/cb-hub && docker compose restart hub' |
| DB-Shell | ssh ... 'docker exec -it cb-hub-postgres psql -U cbhub -d cbhub' |
| Caddy-Config ändern | ssh ... 'vi /opt/cb-hub/Caddyfile && cd /opt/cb-hub && docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile' |
| User zum Admin machen | UPDATE owners SET role='admin' WHERE username='...'; |
| Backup manuell | ssh ... '/opt/cb-hub/backup.sh' |
| Disk-Usage | ssh ... 'df -h && docker system df' |
Umgebungsvariablen (/opt/cb-hub/.env):
POSTGRES_PASSWORD |
DB-Passwort |
RESEND_API_KEY |
E-Mail-Service (Invite-Mails) |
DEPLOY_SECRET |
CI Release-Upload-Authentifizierung |
Lade Marketplace...