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.
- Desktop-MVP auf
feat/desktop-uibegonnen: PySide6, gemeinsamer CLI-/GUI- Runtime-Builder, Qt-freier Controller und ruhiges Drei-Spalten-Grundgerüst vorhanden. - Sitzungen, Suche, Umbenennen, Markdownanzeige, Qt-Streamingworker, sicherer Abbruch, Modus und bereinigte Statusanzeige sind im Desktopclient verdrahtet.
askunterstütztEinmal erlauben,Lokal beantwortenundAbbrechen;nevererreicht weiterhin keinen Cloudfreigabedialog.- Startwege
uv run javis guiundscripts/start-javis-gui.ps1funktionieren; der GUI-Starter verwendet die sichere Loopback-/Prozesslogik des CLI-Starters.
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 - Tests: 101 bestanden; zusätzlich Qt-Offscreen-Fenster, Dialogzuordnung und sichere Wiederverwendung des Startskripts abgedeckt
uv run javis guiim Offscreen-Modus: erfolgreich, Exitcode 0- echter lokaler GUI-Smoke: erfolgreich; 1 Sitzung, 2 Nachrichten, Provider Ollama
- GUI-Startskript mit prozesslokalem ExecutionPolicy-Bypass: erfolgreich
- manuelle Desktop-Abnahme durch Pascal: noch offen
- 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 Arbeitsbranch:
feat/desktop-ui - stabiler Ausgangsstand:
mainbeid3e85f2 - GUI-Grundgerüst und Kernadapter:
1658e04 - Sitzungen, Streaming, Abbruch und Datenschutz:
cf35148 - 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 mainerfolgreich bis3361eaezuorigin/maingepusht und synchron verifiziertoriginverwendet 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
Auf feat/desktop-ui als Nächstes vollständige Abschlussprüfungen ausführen,
Dokumentation committen und Feature-Branch pushen. Danach für Pascals manuelle
Desktop-Abnahme stoppen; noch nicht nach main mergen.
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.