Files
Jarvis-Ai/docs/CHATGPT_HANDOFF.md

17 KiB

ChatGPT Handoff

Projektziel

Javis ist Pascals langfristiges, lokal-first ausgerichtetes Projekt für einen realistischen persönlichen KI-Assistenten. Geplant sind schrittweise:

  • lokaler Textchat und nachvollziehbarer Sitzungsspeicher
  • Aufgaben, Notizen und ein kontrolliertes Gedächtnis
  • später lesender und danach eng begrenzter Obsidian-Zugriff
  • feste, überprüfbare Werkzeuge statt freier Shell
  • später Sprache, technische Statusabfragen, Mobilzugriff und Living Mind

Nicht Ziel sind ein fiktiver Film-Jarvis, unbegrenzte Autonomie oder ein selbst trainiertes Foundation Model. Hauptsprache für Pascal und Benutzeroberflächen ist Deutsch.

Verbindliche Pfade und Umgebung

  • Repository und Git-Toplevel: D:\Javis-Projekt
  • Branch für stabile Arbeit: main
  • Gitea-Remote: https://git.peli-server.de/Dystroyer8/Jarvis-Ai.git
  • aktiver Obsidian-Vault: D:\Obsidian Vault
  • alte OneDrive-Kopie: am früher vermuteten Pfad nicht vorhanden und niemals verändern
  • kanonischer Handoff: docs/CHATGPT_HANDOFF.md
  • historisches Vollarchiv: docs/archive/handoffs/2026-07-30-full-initial-handoff.md

Gaming-PC:

  • Windows 11 Pro, Build 26200
  • AMD Ryzen 7 9700X, 64 GB DDR5-6000
  • MSI RTX 3060 VENTUS 2X 12G OC
  • ASRock X870 Nova WiFi
  • Projekt auf Samsung 870 QVO 1 TB unter D:

Späterer möglicher Javis-Host:

  • ASUS ROG Strix GL553VD mit Ubuntu 24.04
  • Intel i7-7700HQ, 16 GB RAM, GTX 1050 4 GB
  • 128-GB-SSD plus 1-TB-HDD
  • zeitweise alternativ ATM10-Server; Javis- und ATM10-Modus sollen getrennt sein

Rootserver:

  • Netcup RS 2000 G11, 8 vCores, 16 GiB RAM, ungefähr 512 GB
  • Ubuntu 24.04; Infrastruktur für Gitea, CouchDB, Reverse Proxy, AMP und Gameserver
  • kein lokales Javis-Modell und kein freier Root- oder Shellzugang für Javis

Aktueller technischer Stand

  • Der erste lokale Textchat ist auf main implementiert, abgenommen und nach Gitea gepusht.
  • uv run javis chat liefert echte lokale Antworten und speichert Sitzungen in SQLite.
  • Konfigurationsbeispiel, Sicherheitsdokumente, ADRs und Strukturtest sind vorhanden.
  • Living-Mind-Verzeichnis ist ausschließlich ein inaktiver Vertrag ohne Frontend oder Fantasiedaten.
  • Projektbezogene Codex-Rollen Scout, Architect, Builder, Verifier und Security Reviewer sind konfiguriert; maximal zwei Unteragenten, nur Builder schreibend.
  • Toolchain eingerichtet: uv 0.11.32 und CPython 3.12.13 isoliert unter D:\Javis-Tools; Ruff 0.16.0 in der lokalen .venv.
  • Offizielle VS-Code-Erweiterungen installiert: Python 2026.4.0, Pylance 2026.3.1, Python Environments 1.36.0 und Debugpy 2026.6.0.
  • Windows-PATH und vorhandene Python-Installationen wurden nicht verändert.
  • Ollama 0.32.5 ist portabel unter D:\Javis-Tools\ollama installiert.
  • Genau ein Modell ist installiert: qwen3:8b, GGUF Q4_K_M, 5,2 GB, Apache-2.0.
  • Modelle liegen außerhalb von Git unter D:\Javis-Data\ollama-models.
  • Der lokale Ollama-Dienst bindet nur an 127.0.0.1:11434; PATH, Registry, Autostart und Windows-Dienste blieben unverändert.
  • CLI-Befehle: /new, /sessions, /load <NR|ID>, /search <Text>, /rename <Titel>, /clear, /provider, /privacy, /status, /help, /exit.
  • Sitzungsdaten liegen über JAVIS_DATA_DIR außerhalb von Git; der bestätigte Smoke-Test nutzte D:\Javis-Data\runtime\core-chat-smoke.
  • Kein Obsidian-, Laptop- oder Rootserverzugriff wurde implementiert.
  • Keine Tool-, Sprach-, Mobil- oder Living-Mind-Funktion ist implementiert.
  • Offizielle Gemini-Prüfung abgeschlossen: gemini-3.6-flash und gemini-3.5-flash-lite sind stabile GA-Modelle mit Free-Tier-Textnutzung; Standard dieses Pakets wird ausschließlich gemini-3.6-flash.
  • Sicherer Secret-Provider mit keyring 25.7.0 implementiert; unter Windows wird der Windows Credential Locker verwendet.
  • Secret-CLI: javis secrets set gemini, status und delete gemini; Setzen verwendet verdeckte Eingabe und kein Befehl gibt den Schlüsselwert aus.
  • Lokaler Datenschutzrouter klassifiziert jeden späteren Cloudaufruf konservativ als allowed, ask oder never; never kann auch durch einen ausdrücklichen Cloudwunsch nicht überstimmt werden.
  • Nullkosten-Vorgaben und lokale Schutzgrenzen sind zentral konfiguriert: Gemini standardmäßig deaktiviert, free_only = true, keine bestätigte Billing-Freiheit ohne Pascals lokale Bestätigung, höchstens ein Retry.
  • Provider-Nutzung wird separat in SQLite ausschließlich als technische Metadaten protokolliert; Prompts, Antworten und Secrets werden dort nicht gespeichert.
  • Isolierter Gemini-Provider nutzt das offizielle google-genai 2.16.0 mit API v1, begrenztem Timeout und maximal einem Retry; 429 wird nicht wiederholt.
  • Fehlender/ungültiger Schlüssel, 429, Netzwerkfehler und ungültige Antworten werden als getrennte, bereinigte Fehler signalisiert.
  • Hybridrouter erzwingt lokal Datenschutz, Freigabe, Billing-Bestätigung, Tages-/Größenlimits und sichtbares Ollama-Fallback vor jedem Cloudaufruf.
  • Ein abgelehnter Schlüssel deaktiviert Gemini für den restlichen CLI-Prozess; alte reine Ollama-Sitzungen bleiben mit dem Hybridprovider ladbar.
  • Nicht geheime Provider-Einstellungen werden aus JAVIS_DATA_DIR\javis.toml geladen; Umgebungsvariablen können sie sicher überschreiben. Die Aktivierungsvorlage enthält free_only = true und die lokale Billing-Bestätigung, aber niemals einen API-Key.
  • javis configure gemini verlangt zwei ausdrückliche Bestätigungen und lässt Gemini bei leerer oder negativer Antwort deaktiviert.
  • Der echte CLI-Chat verwendet nun hybrid/auto; der Key wird erst vor einem zulässigen Cloudaufruf gelesen. /provider, /privacy und /status zeigen ausschließlich bereinigte Modi, Entscheidungen und Zähler.
  • scripts/start-javis.ps1 verifiziert das Repository, setzt nur Prozessvariablen, prüft Ollama auf Loopback, startet es bei Bedarf versteckt und wartet begrenzt. Pfade sind per Parameter oder JAVIS_* überschreibbar.
  • Allgemeine unpersönliche Technikfragen zu RAM/SSD, SQLite, HTTP, Git und ähnlichen Begriffen werden gezielter allowed; never und ask behalten Vorrang bei Secrets, interner Infrastruktur und persönlichem Kontext.
  • Gesundheits-, Symptom-, Blutungs-, Verletzungs-, Medikamenten-, Diagnose-, Behandlungs- und medizinische Notfallfragen sind zwingend lokal never.
  • /privacy trennt Inhaltsklassifikation, tatsächlichen Provider, Unterdrückung durch Modus local und technischen Provider-Fallback.
  • Ollama, Gemini, Hybridrouter, Chatservice und CLI streamen sichtbare Antwortteile. Verdeckte Gedanken werden nicht angefordert oder ausgegeben; Terminal-Markdown wird lesbar bereinigt. Strg+C verwirft Teilantworten atomar und kehrt zum Chat zurück.

Aktuelle Architektur

  • modularer Monolith, bevorzugt Python
  • plattformunabhängige Pfade und zentrale Konfiguration
  • Modell-Provider als kleine austauschbare Schnittstelle
  • Ollama-Provider akzeptiert nur lokale HTTP-Loopback-Adressen
  • SQLite-Sitzungsspeicher mit atomaren Benutzer-/Assistentenpaaren, neutralem Starttitel, lokaler sicherer Titelerzeugung und zuletzt genutztem Provider
  • Streaming wird erst nach vollständigem Abschluss atomar gespeichert; bei Abbruch bleibt weder die Benutzerfrage noch eine unvollständige Antwort im Verlauf.
  • Laufzeitdaten außerhalb von Git über JAVIS_DATA_DIR oder sicheren Plattformstandard
  • Hybridprovider bevorzugt Gemini für cloudgeeignete Inhalte und verwendet Ollama bei Datenschutz, Ablehnung, Offline-, Quota- und Providerfehlern
  • strikter Nullkostenmodus ohne Billing-Aktivierung oder kostenpflichtigen Fallback; lokales Modell bleibt Offline-, Datenschutz-, Ausfall- und Quota-Fallback
  • Secret-Werte außerhalb von Code, Git, Prompts und Logs
  • Modell erhält niemals Passwörter, Tokens oder private Schlüssel
  • keine freie Shell; spätere Tools benötigen feste Schemas, Allowlists, Timeouts und Freigaben
  • Obsidian zunächst nur lesend; .obsidian niemals verändern
  • Obsidian-Wikilinks nur bei echter inhaltlicher Beziehung, niemals nur für Graphoptik

Seit der letzten Übergabe erledigt

  • Projekt- und Vault-Pfade erneut bestätigt.
  • Sicheres, plattformunabhängiges Grundgerüst erstellt.
  • READ.ME unter Erhalt des historischen Inhalts zu README.md überführt.
  • Architektur, Sicherheit, Bedrohungsmodell, Berechtigungen und Roadmap dokumentiert.
  • Tokenbewusster Arbeitsablauf festgelegt: gezielte Reads, kurze Ergebnisse, keine unnötigen Agenten oder Plugins.
  • Werkzeugempfehlung auf uv, Microsoft Python/Pylance/Python Environments und Ruff begrenzt.
  • Langer Handoff einmalig unverändert archiviert und durch diese kompakte aktuelle Zusammenfassung ersetzt.
  • Handoff-Verdichtung als Commit e6eb995 nach origin/main gepusht.
  • Branch feat/core-chat von diesem Stand erstellt.
  • uv, CPython 3.12, lokale .venv, Ruff, Lockfile und offizielle VS-Code-Python-Erweiterungen eingerichtet.
  • Ollama und llama.cpp anhand offizieller Quellen verglichen; Ollama als einfachere erste Windows-Laufzeit gewählt.
  • Ollama-Archiv gegen die offizielle SHA-256-Prüfsumme verifiziert und portabel installiert.
  • qwen3:8b außerhalb des Repositories geladen und mit zwei echten deutschen Modellantworten auf der RTX 3060 geprüft.
  • Chatkern, Ollama-Provider, zentrale Konfiguration, SQLite-Speicher und CLI implementiert.
  • 13 Unit-Tests für Konfiguration, Speicher, Verlauf, Providervertrag und CLI ergänzt.
  • Echten CLI-Chat ausgeführt und dieselbe Sitzung in einem neuen Prozess geladen, aufgelistet und erfolgreich mit einer weiteren Modellantwort fortgesetzt.
  • Obsidian, Ubuntu-Laptop und Rootserver blieben unverändert.
  • Aktuelle offizielle Gemini-Modelle, Free-Tier-Preise, dynamische Quoten, Auth-Keys, GA-SDK, Fehlercodes und Datenschutzbedingungen geprüft und unter docs/GEMINI_PROVIDER.md kompakt dokumentiert.
  • Betriebssystemgebundenen Secret-Provider und isolierte Fake-Backend-Tests ergänzt.
  • Datenschutzrouter, minimale Cloud-Kontextauswahl, strikte Nullkosten-Defaults, lokale Tages-/Größenlimits und metadatenbasiertes Provider-Audit ergänzt.
  • Offiziellen Gemini-SDK-Client isoliert angebunden und ausschließlich mit Test-Doubles gegen Erfolg, Key-, Quota-, Netzwerk- und Antwortfehler geprüft.
  • Hybridrouting und Audit mit Test-Doubles integriert: never konstruiert keinen Cloudclient, ask verlangt Freigabe, 429/Netzwerk/Keyfehler fallen lokal zurück.
  • Lokalen TOML-Loader und sicheren Erzeuger ergänzt; vorhandene Konfigurationen werden nicht ungefragt überschrieben und fehlerhafte TOML wird abgelehnt.
  • Hybridprovider in die CLI verdrahtet, sicheren Aktivierungsdialog und bereinigte Provider-/Datenschutz-/Statusbefehle ergänzt.
  • Lesender Ollama-Status prüft nur Loopback-Erreichbarkeit und Modellliste.
  • Sicheres PowerShell-Startskript und kompakte Startdokumentation ergänzt; keine PATH-, Registry-, Autostart-, Dienst- oder Richtlinienänderung.
  • Medizinische Inhalte vor Cloudclient-Erstellung strikt auf never gesetzt; bestehende SQLite-Daten transaktional und wiederholbar um Titel/Provider migriert.
  • Echtes Ollama-/Gemini-Streaming, providerübergreifendes Fallback vor der ersten Ausgabe und sicheren Streaming-Abbruch nach Teilausgabe implementiert.
  • CLI-Streaming mit lesbarer Markdown-Bereinigung und sicherem Strg+C ergänzt.

Aktuelle Tests

Letzter bestätigter Projektstand:

  • Strukturprüfung: bestanden
  • Unit-Test des Paketgerüsts: bestanden
  • TOML-Parsing: bestanden
  • UTF-8- und interne Markdown-Linkprüfung: bestanden
  • Secret-Musterprüfung: keine Treffer
  • Gitignore-Prüfung für lokale Secret-Dateien: bestanden
  • uv-Lock und uv sync --dev: bestanden
  • Python in .venv: 3.12.13
  • Ruff in .venv: 0.16.0
  • Unit-Tests: 91 bestanden; Navigation, Streaming, Migration, Datenschutz, ID-Präfixe, begrenzte Suche und SQL-Sonderzeichen abgedeckt
  • PowerShell-Syntax des Startskripts: erfolgreich geparst
  • Ruff Lint: bestanden
  • Ruff Formatprüfung: bestanden
  • lokaler CLI-Smoke ohne Secretzugriff: bestanden
  • echter Ollama-CLI-Streaming-Smoke mit Neustart/Laden: bestanden
  • echter Gemini-Streaming-Smoke mit öffentlichem Inhalt: bestanden; ein Abschnitt, 20 sichtbare Zeichen, 14 Eingabe- und 4 Ausgabetoken; kein Keywert ausgegeben
  • Obsidian-Vault unverändert: 1 Markdown-, 11 Gesamtdateien, letzter Schreibzeitpunkt weiterhin 30.07.2026 15:42:31
  • Rootserver und Ubuntu-Laptop wurden nicht kontaktiert

Lokaler Modell-Smoke-Test:

  • Ollama-Version/API: 0.32.5, localhost erreichbar
  • Modell: 5.225.388.164 Byte, 8,2B, Q4_K_M, Apache-2.0
  • kalter Aufruf: 36,19 s Wandzeit, davon 17,53 s Laden, ungefähr 7,22 Token/s
  • warmer kurzer Aufruf: 0,56 s Wandzeit, ungefähr 55,51 Token/s
  • GPU-Belegung: 1.418 MiB vorher, 6.842 MiB mit geladenem Modell
  • Ollama meldet 100 % GPU und 5,6 GB Modellbelegung

CLI-/Persistenz-Smoke:

  • neuer CLI-Prozess erzeugte eine Sitzung und erhielt eine echte Modellantwort
  • zweiter CLI-Prozess lud dieselbe UUID und zeigte zwei gespeicherte Nachrichten
  • /sessions listete Provider, Modell und Nachrichtenanzahl korrekt
  • fortgesetzte Frage erhielt die echte lokale Antwort 4

Abnahmestatus:

  • automatisiert durch Codex getestet: Core-Chat, SQLite, CLI und lokales Modell
  • manuell durch Pascal getestet: am 30.07.2026 erfolgreich; CLI-Start, echte deutsche Antworten, Sitzungskontext, /sessions, /exit, Neustart, /load <UUID>, vollständiger Verlauf und Fortsetzung
  • Gemini/Datenschutz/Fallback automatisiert durch Codex getestet: ja
  • Gemini/Datenschutz/Fallback manuell durch Pascal getestet: am 30.07.2026; verdeckte Key-Speicherung ohne Wertausgabe, vollständiger /status, echter Gemini-Erfolg, Cloudzähler, ask-Ablehnung, never, /provider local und Startskript erfolgreich
  • für Merge freigegeben: ja, nach den dokumentierten kleinen Korrekturen
  • für produktive Nutzung freigegeben: nicht separat erklärt; keine Freigabe für spätere Tools, Obsidian oder autonome Aktionen

Git-Stand

  • aktueller und geprüfter Branch: main
  • stabiler Ausgangsstand: main bei 77b510b
  • medizinischer Datenschutz-Fix: 9148193
  • Provider- und CLI-Streaming: 00a5a6c
  • SQLite-Titel und Migration: 112ae6d
  • Sitzungsnavigation: 43c1f76
  • Dokumentation: 328dcd9
  • Chatkomfort-Merge nach main: cbba102
  • 91 Unit-Tests, Ruff und Strukturprüfung auf dem gemergten main bestanden
  • Feature-Branch erfolgreich zu origin/feat/chat-comfort gepusht
  • konfliktfreier Merge nach main: 564a3fd
  • 66 Unit-Tests, Ruff und Strukturprüfung auf dem gemergten main bestanden
  • main erfolgreich bis 3361eae zu origin/main gepusht und synchron verifiziert
  • Secret-Provider: 570e7fa
  • Datenschutz/Nullkosten: 286d96d
  • isolierter Gemini-Provider: f3e1183
  • Hybridrouter: e57186f
  • lokale Konfiguration: ab6ea48
  • CLI-Verdrahtung: af9426e
  • Startskript: 141ff2e
  • Resttests: a0af15a
  • Routing-/Reporting-Korrektur: 7a14fe8
  • Gemini-/Datenschutz-Merge nach main: 564a3fd
  • origin verwendet HTTPS
  • kein Force-Push und keine umgeschriebene Historie

Offene Entscheidungen und Fehler

  • endgültiger Produkt-/Repositoryname bleibt offen
  • Startskript startet Ollama bei Bedarf pro Prozess; kein Autostart oder Dienst
  • Antworten werden gestreamt; Titel, Navigation und Suche sind implementiert
  • genauer späterer Obsidian-Schreibbereich ist nicht freigegeben
  • normaler Secret-Provider ist festgelegt: Betriebssystem-Keyring; eine Klartext-XML wird nicht für API-Schlüssel verwendet
  • Google-Quoten bleiben projektabhängig und müssen in AI Studio geprüft werden; lokale Limits sind nur zusätzliche Schutzgrenzen
  • Gaming-PC zeigt derzeit nur 8 statt 16 logische CPU-Prozessoren; Ursache ungeklärt
  • ASUS-Laptop ist nicht automatisch für dasselbe Modell wie die RTX 3060 geeignet

Bekannte Risiken

  • lokale Modellqualität und Geschwindigkeit unterscheiden sich stark zwischen RTX 3060 und GTX 1050
  • ATM10 und Javis dürfen den ASUS-Laptop nicht gleichzeitig überlasten
  • Secrets können über Logs, Prompts, Screenshots oder Git abfließen
  • Cloudrouting könnte sensible Daten preisgeben; vor jedem Cloudaufruf ist deshalb lokal allowed, ask oder never zu entscheiden und Kontext zu minimieren
  • kostenlose Gemini-Kontingente und Modellnamen können sich ändern
  • Prompt Injection aus später eingelesenen Notizen oder Webseiten
  • unkontrollierter Obsidian-Schreibzugriff könnte Wissen beschädigen
  • Self-hosted LiveSync ist kein Ersatz für ein getestetes Backup
  • unnötige Plugins, Agenten und Cloud-Connectoren erhöhen Rechte-, Wartungs- und Tokenbedarf

Nächster sinnvoller Auftrag

Chatkomfort ist implementiert, gemergt, auf main erneut geprüft und gepusht. Jetzt stoppen und mit Pascal erst später ein einzelnes nächstes Paket festlegen. Medizinische Antwortqualität bleibt ein späteres Sicherheits-/Systemprompt-Thema. Noch keine Obsidian-Integration oder Tools beginnen.

Keinen API-Key in Chat, Git, Obsidian, Logs oder Dokumentation übernehmen.

Nicht Teil dieses Meilensteins: Obsidian-Integration, Serverzugriff, Sprache, Mobile Client oder Living-Mind-Code.