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
mainimplementiert, abgenommen und nach Gitea gepusht. uv run javis chatliefert 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\ollamainstalliert. - Genau ein Modell ist installiert:
qwen3:8b, GGUFQ4_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_DIRaußerhalb von Git; der bestätigte Smoke-Test nutzteD:\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-flashundgemini-3.5-flash-litesind stabile GA-Modelle mit Free-Tier-Textnutzung; Standard dieses Pakets wird ausschließlichgemini-3.6-flash. - Sicherer Secret-Provider mit
keyring25.7.0 implementiert; unter Windows wird der Windows Credential Locker verwendet. - Secret-CLI:
javis secrets set gemini,statusunddelete gemini; Setzen verwendet verdeckte Eingabe und kein Befehl gibt den Schlüsselwert aus. - Lokaler Datenschutzrouter klassifiziert jeden späteren Cloudaufruf konservativ
als
allowed,askodernever;neverkann 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-genai2.16.0 mit APIv1, 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.tomlgeladen; Umgebungsvariablen können sie sicher überschreiben. Die Aktivierungsvorlage enthältfree_only = trueund die lokale Billing-Bestätigung, aber niemals einen API-Key. javis configure geminiverlangt 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,/privacyund/statuszeigen ausschließlich bereinigte Modi, Entscheidungen und Zähler. scripts/start-javis.ps1verifiziert das Repository, setzt nur Prozessvariablen, prüft Ollama auf Loopback, startet es bei Bedarf versteckt und wartet begrenzt. Pfade sind per Parameter oderJAVIS_*überschreibbar.- Allgemeine unpersönliche Technikfragen zu RAM/SSD, SQLite, HTTP, Git und
ähnlichen Begriffen werden gezielter
allowed;neverundaskbehalten Vorrang bei Secrets, interner Infrastruktur und persönlichem Kontext. - Gesundheits-, Symptom-, Blutungs-, Verletzungs-, Medikamenten-, Diagnose-,
Behandlungs- und medizinische Notfallfragen sind zwingend lokal
never. /privacytrennt Inhaltsklassifikation, tatsächlichen Provider, Unterdrückung durch Moduslocalund 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_DIRoder 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;
.obsidianniemals 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.MEunter Erhalt des historischen Inhalts zuREADME.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
e6eb995nachorigin/maingepusht. - Branch
feat/core-chatvon 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:8bauß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.mdkompakt 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:
neverkonstruiert keinen Cloudclient,askverlangt 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
nevergesetzt; 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
/sessionslistete 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 localund 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:
mainbei77b510b - 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
mainbestanden - Feature-Branch erfolgreich zu
origin/feat/chat-comfortgepusht - konfliktfreier Merge nach
main:564a3fd - 66 Unit-Tests, Ruff und Strukturprüfung auf dem gemergten
mainbestanden mainerfolgreich zuorigin/maingepusht; Remote-Tracking ist synchron- 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 originverwendet 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,askoderneverzu 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 und auf main erneut geprüft. Nach dem
Push 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.