Files
Jarvis-Ai/docs/CHATGPT_HANDOFF.md
T

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.
  • Desktop-MVP auf feat/desktop-ui begonnen: PySide6, gemeinsamer CLI-/GUI- Runtime-Builder, Qt-freier Controller und ruhiges Drei-Spalten-Grundgerüst vorhanden.

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: 94 bestanden; zusätzlich Runtime-Adapter, Qt-freier Controller, Secretmaskierung sowie neuer und bestehender CLI-Parserpfad 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 Arbeitsbranch: feat/desktop-ui
  • stabiler Ausgangsstand: main bei d3e85f2
  • 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
  • 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

Auf feat/desktop-ui als Nächstes Freigabedialog mit drei Ergebnissen, Qt-Worker-Abbruch, Sitzungsbedienung und bereinigte Statusanzeige gezielt testen. 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.