The ask_user_choice MCP tool blocks the CLI process (short-polling ChoiceAnswers) until the user answers, after which the same ChatStreamingAsync invocation continues. isUserChoice was set true when the choice was raised but never reset, so both steering gates (the tool-boundary kill and the turn-end check, each guarded by !isUserChoice) stayed blocked for the rest of the run. A message thrown in after answering was not drained at the next boundary; it lingered in the queue and only arrived at chain end as a Close() leftover — the user saw it "come in only at the very end" instead of in between. Reset isUserChoice (and choiceToolCallId) as soon as the choice tool's result comes back, before the steering check, so a message injected during the choice pause takes effect at the next boundary just like without a preceding choice. As a side effect the stop reason and error handling after an answered choice are now correct (end_turn / real errors surfaced) instead of staying awaiting_user_choice. CLI-specific: the API path finalizes the chain on awaiting_user_choice, so it is unaffected. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
// gott
Self-hosted AI-Coding-Agent mit Anthropic Claude API als Haupt-Provider (inkl. Claude CLI-Integration) sowie OpenAI-kompatiblen Providern (Nvidia, Pollinations, Google Gemini, OpenAI). Stellt eine Web-UI bereit, über die man in Sessions mit konfigurierbaren Agenten chatten kann. Die Agenten haben Tool-Zugriff (Dateien lesen/schreiben/bearbeiten, Shell-Befehle ausführen, Web-/Code-Suche, Todos, Memory) auf ein definiertes Workspace-Verzeichnis.
Features
- Multi-Agent-System – Bis zu 4 Agenten pro Session: Worker, Vorbereiter (Preparer), Reviewer, Finalizer
- Vorbereiter-Agent – Optionaler Preparer, der User-Anfragen analysiert, Vorarbeit leistet und aufbereitete Prompts an den Worker weitergibt
- Multi-Agent Review – Optionaler Review-Agent, der die Arbeit des Worker-Agents prüft und Feedback gibt
- Finalizer-Agent – Optionaler Agent, der nach dem Review abschließende Arbeiten durchführt (z.B. Git-Commit, Deployment)
- Interaktive Rückfragen –
ask_user_choice-Tool: Agent stellt dem User klickbare Auswahlmöglichkeiten - Plan-Modus – Read-only-Modus zum Analysieren und Planen ohne Änderungen (Toggle im Chat)
- Web-Search – Integrierte Web-Suche mit Quellenangaben (URLs + Titel) in Chat und geteilten Nachrichten
- Multi-Provider – Anthropic Claude (Haupt-Provider, inkl. Claude CLI), Nvidia (g4f.space), Pollinations (kostenlos), Google Gemini (kostenloser Free Tier), OpenAI
- 19 Tools –
read_file,write_file,edit_file,list_files,delete_file,execute,background_execute,glob,grep,todo_write,memory_read,memory_write,memory_list,memory_search,remote_execute,send_to_session,ask_user_choice,github_code_search,serper_web_search - Streaming – Echtzeit-Antworten via Server-Sent Events (SSE)
- Stop-Button – Laufende Requests zuverlässig abbrechen (inkl. laufender Shell-Befehle)
- Skill-System – Wiederverwendbare Prompt-Bausteine, zuordenbar pro Agent
- Memory – Persistentes Gedächtnis pro Agent (Dateisystem-basiert)
- Workspace-Browser – Integrierter Datei-Explorer mit Editor
- Telegram-Integration – Bots als eigenständige Entität, mehrere Sessions pro Bot, Public-Bots
- Cronjobs – Zeitgesteuerte Prompts mit Cron-Expressions
- Bildgenerierung – Krea AI Integration für Bildgenerierung
- Semantische Suche – Lokale Sentence-Embeddings (all-MiniLM-L6-v2 ONNX) für
memory_searchüber vergangene Nachrichten und Memory-Dateien - Auto-Context – Automatischer semantischer Kontext aus früheren Gesprächen + Memory wird vor jedem Request in den System-Prompt injiziert und im Chat als aufklappbare Box sichtbar gemacht
- Remote-Verbindungen – WebSocket-basierte Remote-Clients für Windows (PowerShell,
remote.ps1) und Linux/macOS (Bash + embedded Python,remote.sh); AI-Agent kann Befehle auf entfernten Rechnern ausführen, Tool-Description ist OS-aware - API-Key-Verwaltung – Admin-UI zum Verwalten von API-Keys (Anthropic, OpenAI, Google, Stripe) inkl. Multi-Provider Key-Check, API-Key-Scanner (GitHub Code Search, GitHub Issues/PRs, HuggingFace Hub, Google/Serper), GitHub Events Echtzeit-Scanner, passive Usage-Aktualisierung bei jeder Chat-Nachricht, Usage-Badge im Chat mit Key-Switch-Modal (pro Agent)
- Claude CLI – Alternativer Streaming-Weg über die Claude Code CLI (OAuth-basiert, kein API-Key nötig); auch als Fallback für Sub-Agents (Preparer/Review/Finalizer) ohne zugewiesenen Key
- Datenbank-Explorer – Admin-UI zum direkten Inspizieren der SQLite-Datenbank
- MCP-Server-Integration – Interne API für externe MCP-Server (Remote-Execute, Ask-User-Choice, Memory-CRUD)
- Nachrichten teilen – Einzelne Nachrichten per öffentlichem Link teilen
- Archivierung – Chat-Verläufe archivieren und durchsuchen
- OpenClaw Import – Chatverlauf aus OpenClaw-Instanzen importieren
- Benutzerverwaltung – Multi-User mit Admin-Rollen, Impersonate, Login-Links
- Servereinstellungen – Admin-UI für
appsettings.Production.json - Desktop-Client – WPF + WebView2 Windows-App
- Dark Theme – CSS-Variables basiertes Theming
Tech-Stack
| Bereich | Technologie |
|---|---|
| Backend | .NET 10 Minimal API, C# |
| Datenbank | SQLite + Dapper |
| AI | Anthropic Claude API (+ Claude CLI) + OpenAI-kompatible APIs (Nvidia, Pollinations, Gemini, OpenAI) |
| Embeddings | Microsoft.ML.OnnxRuntime + all-MiniLM-L6-v2 (Sentence-Embeddings) |
| Frontend | Vanilla JS SPA (kein Framework), CSS Variables |
| Mathe | KaTeX (LaTeX-Rendering) |
| Bilder | SixLabors.ImageSharp |
| Cron | Cronos |
| Desktop | WPF + WebView2 (optional) |
Voraussetzungen
- .NET 10 SDK
- Anthropic API Key (console.anthropic.com) – wird über Admin-UI verwaltet
- Optional: Gemini API Key (aistudio.google.com) – kostenlos, kein Billing nötig
- Optional: ONNX-Modell
all-MiniLM-L6-v2für semantische Suche (data/models/all-MiniLM-L6-v2/) - Linux/macOS/Windows (Produktiv: Linux empfohlen)
Konfiguration
Beim ersten Start wird appsettings.json mit Standardwerten verwendet. Für eigene Einstellungen eine appsettings.Production.json im Build/Linux/publish/-Verzeichnis anlegen (oder über die Admin-UI verwalten):
{
"Port": 19000
}
| Setting | Beschreibung | Default |
|---|---|---|
Port |
Server-Port (erfordert Neustart) | 19000 |
MaxIterations |
Max Tool-Loop Iterationen pro Chat | 100 |
MaxHistory |
Max Messages in Chat-History | 220 |
ReminderInterval |
System-Prompt-Reminder alle N Messages | 30 |
ExecuteTimeout |
Timeout für Shell-Befehle in Sekunden | 180 |
PayloadLogging |
API-Payloads in Konsole loggen | false |
PayloadLoggingGzip |
Payload-Logs als .gz komprimieren | false |
KreaToken |
Krea AI API Token (optional) | – |
KreaApiKey |
API-Key für Krea-Endpoints ohne User-Auth (optional) | – |
GeminiApiKey |
Google Gemini API Key (kostenlos via aistudio.google.com) | – |
Hinweis:
AnthropicTokenwird über die API-Key-Verwaltung im Admin-Bereich verwaltet (DB-Tabelleapi_keys), nicht mehr überappsettings.json. Bestehende Tokens werden beim ersten Start automatisch migriert.
Hinweis: Die
appsettings.Production.jsonwird nicht beimdotnet publishmitkopiert. Sie lebt ausschließlich imBuild/Linux/publish/-Verzeichnis und kann über die Admin-UI (#/server-settings) verwaltet werden.
Starten
dotnet run
Die Web-UI ist dann unter http://localhost:19000 erreichbar.
Beim ersten Start wird automatisch ein Admin-Account erstellt:
- Benutzername:
admin - Passwort:
admin
Deployment (Linux)
Empfohlen als systemd-Service hinter einem Reverse Proxy (Nginx, Caddy):
# deploy.sh (Beispiel)
#!/bin/bash
set -e
cd /app/gott
systemctl stop gott
dotnet publish -c Release -o publish
systemctl start gott
Beispiel systemd-Unit (/etc/systemd/system/gott.service):
[Unit]
Description=Gott
After=network.target
[Service]
Type=exec
WorkingDirectory=/app/gott
ExecStart=/app/gott/Build/Linux/publish/gott
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Projektstruktur
gott/
├── Program.cs # Startup, DI, Middleware, Routing
├── appsettings.json # Standard-Konfiguration
├── Models/ # Records (reine Daten)
├── Services/ # Business-Logic (Singletons)
├── Endpoints/ # HTTP API (Minimal API)
├── Middleware/ # Auth-Middleware
├── Templates/ # Vorlagen (IDENTITY.md, SOUL.md, USER.md)
├── wwwroot/ # Frontend (Vanilla JS SPA)
│ ├── js/ # App, Router, API, Chat, UI-Module (modular aufgeteilt), Pages
│ └── css/ # Styles (theme.css = CSS Variables)
├── WindowsApp/ # WPF + WebView2 Desktop Client
└── Build/ # Build-Output + Laufzeit-Daten
├── Linux/
│ ├── bin/
│ ├── obj/
│ └── publish/
└── Windows/
├── bin/
├── obj/
└── publish/
└── data/
├── gott.db # SQLite Datenbank
├── agents/{id}/ # Memory-Dateien pro Agent
├── skills/{slug}/ # Skill-Dateien
└── images/ # Krea-generierte Bilder
Ausführliche Dokumentation: ARCHITECTURE.md · Kurzreferenz: ARCHITECTURE_QUICK.md
Lizenz
Proprietär – Alle Rechte vorbehalten.
