VINCI läuft jetzt auf Windows. Ich war nicht dabei.

Ich habe Claude Code gebeten, meine Mac-App auf Windows zu portieren, bin nach Hause gefahren und am nächsten Morgen um 6 Uhr zurückgekommen. Hier ist, was passiert ist.

Eifrige Leser meines Blogs kennen VINCI. Der läuft brav auf Mac, die Windows Version konnte noch fast nichts. Also alle Features portieren.

Ich bin gestern Abend aus dem Büro gegangen, habe Claude Code mit einer Aufgabe gelassen, ihm mein Github Repo genannt, und bin am heute um 6 Uhr wieder reingekommen. Der Build war fertig. 132 Tests grün. NSIS-Installer und Portable EXE lagen im release/-Ordner. 95 MB.

Das ist kein Marketingtext. Das ist mein Dev-Log.

Was VINCI ist, in zwei Sätzen

VINCI ist mein persönlicher KI-Assistent, benannt nach Leonardo da Vinci. Er läuft als native Desktop-App, spricht zurück, kennt meinen Kalender, meine Mails, meinen Obsidian-Vault, mein Smart-Home, und lernt mit jeder Unterhaltung dazu. Die Mac-Version läuft seit Tagen in Produktion mit netten Features. Jetzt sollte sie auch auf Windows laufen.

Warum Windows, wenn du einen Mac hast

Die ehrliche Antwort: weil ich beides habe. Und weil meine Kunden meistens Windows-User sind. Wenn ich VINCI als Konzept irgendwann weitergeben will, muss es auf der Plattform laufen, auf der die meisten Menschen arbeiten.

Die technisch kompliziertere Antwort: Mac und Windows klingen ähnlicher als sie sind, sobald du tief genug reingehst. Pfade. Autostart. Code-Signing. Systemaufrufe. Und noch einiges mehr.

Das sind keine Kleinigkeiten. Das sind architektonische Entscheidungen, die ich vor dem Start treffen musste.

Die Entscheidungen, die nur ich treffen konnte

Claude Code hat sich das Mac-Repo angesehen und mir eine Liste von Fragen gestellt, bevor es losgelegt hat. Das finde ich nach wie vor eine der wichtigsten Eigenschaften eines guten Coding-Agents: er fragt, bevor er annimmt.

Ich habe entschieden: MS Graph statt AppleScript für Mail und Kalender (Outlook + iCloud CalDAV/IMAP statt macOS-nativer Integration), MSAL Public-Client für die Microsoft-Auth, Edge TTS via eigenem Self-Hosted-Proxy statt macOS-System-TTS, und gemma3:4b via Ollama als lokales Modell für Memory-Worker und Knowledge-Graph.

Nach diesen Entscheidungen bin ich gefahren. Claude Code hat den Rest übernommen.

Was über Nacht passiert ist

Ich sage das nicht, um zu beeindrucken. Ich sage das, weil es relevant ist für alle, die ähnliche Portierungen planen: Claude Code hat über 30 Dateien rüberkopiert, angepasst, neu geschrieben oder plattformspezifisch gebrancht.

Der gesamte UI-Layer: Particle-Orb, Icons, das About-Screen mit dem Vitruvian-Man-Avatar, Tasks-View, ChatPanel, MessageBubble, der TTS-Hook. Der gesamte Backend-Layer: Gemini-Integration, Ollama, Obsidian, Knowledge-Graph, Memory, Memory-Worker, Web-Suche via Tavily, Home-Assistant-REST-Modul, Blog-Importer mit WordPress REST und Turndown, Vault-Cleanup-Tools, Alias-Builder, Wikilink-Engine.

Die store.js wurde mit Mac-Defaults und Windows-Specifics gemerged. Die registry.js komplett nach Mac-Pattern refactored. Die ipc.js und preload.js neu geschrieben: alle Mac-Channels exposed, alle Windows-spezifischen Bits behalten.

Das ist kein Copy-Paste. Das ist sorgfältige Portierung.

Ich beobachte das seit Jahren in der täglichen Arbeit als KI-Berater mit EPU und KMU in Österreich: der Unterschied zwischen einem guten und einem schlechten KI-Coding-Ergebnis liegt meistens nicht im Modell, sondern in der Qualität der Aufgabenstellung. Claude Code wusste, was das Mac-Repo bedeutet, weil ich ihm den Kontext mitgegeben habe. CLAUDE.md mit klaren Regeln, eine saubere Codebase als Referenz, und die plattformspezifischen Entscheidungen, die ich vor dem Verlassen des Büros getroffen hatte.

Was mich um 6 Uhr morgens erwartet hat

Der erste Boot hat funktioniert. VINCI hat sich geöffnet, der Gold-Orb in Three.js mit AdditiveBlending hat sich im Fenster gedreht, und Gemini 2.5 Flash hat geantwortet.

Aber es gab Bugs. Drei größere, ein paar kleinere. Das war erwartet. Portierungen ohne Bugs sind kein gutes Zeichen, weil sie bedeuten, dass die Plattformunterschiede nicht wirklich adressiert wurden, sondern ignoriert.

Der Edge-TTS-Bug: Der Self-Hosted-Proxy auf meinem Hetzner-Server hat 401 zurückgegeben, obwohl der API-Key in der UI korrekt eingetragen war. Die Ursache war verblüffend einfach: der API-Key in der Docker-ENV-Variable war ohne Single-Quotes gesetzt, Bash hat $T als leere Variable expandiert, der Server hatte einen 13-Zeichen-Key statt der erwarteten 13 Zeichen. ENV-Quoting ist eine von diesen Kleinigkeiten, die man einmal falsch macht und danach nie vergisst.

Der Audio-Decoder-Bug: Electron-Builds ohne nativen MP3-Codec im <audio>-Tag können data:audio/mpeg-URLs nicht abspielen. Edge TTS liefert standardmäßig 24kHz Mono MP3 (MPEG-2.5-Layer-3). Lösung: statt <audio>-Tag jetzt AudioContext.decodeAudioData, also der Web Audio API eigener MP3-Decoder. Dazu musste die Content-Security-Policy in index.html um media-src 'self' blob: data: https: erweitert werden, weil Electron Blob-URLs sonst als Sicherheitsrisiko blockiert.

Der Vault-Cleanup: Das war der spektakulärste Bug, aber keiner, den Claude Code verursacht hatte. Win-VINCI hatte beim allerersten Boot den falschen Vault-Pfad verwendet: Vinci Knowledge\ statt Vinci Knowledge\VINCI Vault\. Memory-Worker und Blog-Importer hatten brav in den Parent-Ordner geschrieben. 8.565 Dateien. ZIP-Backup nach ~\.vinci-archive\orphan-vault-2026-05-08-0713.zip (4,4 MB), dann gelöscht. Der echte Vault war unangetastet. Multi-Vault-Detection ist jetzt in der Vault-Pfad-Validierung eingebaut, so dass das nie wieder passieren kann.

Der Briefing-Tokenless-Bug: Das Briefing meldete bei jedem Start „keine Mails, keine Termine“, obwohl beides vorhanden war. Die Ursache: der Mac-Original-Scheduler hat tokens: {} an Module übergeben. Auf dem Mac funktioniert das, weil die Module dort über AppleScript laufen und keine expliziten OAuth-Tokens brauchen. Auf Windows fielen alle Module still auf null, und VINCI hat halluziniert, dass nichts da ist. Fix: getTokens() korrekt durchreichen, Errors loggen statt schlucken.

Der PowerShell-Mojibake: Tasks-Migration aus dem .bak-File per PowerShell hatte UTF-8 als Windows-1252 gelesen. Das Ergebnis: für statt für, dreifach kodiert. Reparatur via Original-Bytes aus dem .bak rekonstruiert. Lesson learned: PowerShell braucht explizite UTF-8-Flags, die in der Mac-Welt schlicht kein Thema sind.

Was wirklich interessant ist

Nicht die Bugs. Die waren erwartbar und lösbar. Was mich interessiert: ein System, das ich einer KI mit klaren Vorgaben übergeben habe, hat in einer Nacht eine vollständige Cross-Platform-Portierung einer komplexen Electron-App durchgeführt. Mit plattformspezifischen Branches, gemergten Store-Architekturen, neu geschriebenen IPC-Layern, und 132 portierten Tests.

Die zitierfähige These lautet so: Claude Code als Autopilot funktioniert nicht trotz fehlender menschlicher Aufsicht, sondern weil die Vorabentscheidungen die richtige Grundlage geschaffen haben. Die Qualität des Outputs einer autonomen KI-Session ist proportional zur Qualität der Aufgabenstellung davor. Schlechte Spezifikation, schlechter Build. Gute Spezifikation, guter Build.

VINCI 1.4.0 für Windows läuft. 14 Module geladen, Particle-Orb in Renaissance Gold auf Obsidian Noir, Gemini 2.5 Flash als Chat-Backend, Ollama lokal für Memory und Knowledge-Graph, MS Graph für Outlook und iCloud CalDAV für Apple-Kalender. NSIS-Installer plus Portable EXE, beide rund 95 MB, unsigniert (was beim ersten Start eine SmartScreen-Warnung erzeugt, das ist bekannt und dokumentiert).

Das nächste Mal, wenn mir jemand sagt, KI könne keine komplexen Entwicklungsaufgaben autonom erledigen, zeige ich ihm das Build-Log.

Das Spielkind in mir

…hat dann noch nach einem Bildprompt gefragt. Wie würde Leonardo mein Vinci Projekt wohl darstellen. Resultat war dann mein neues Wallpaper:

Vinci Original

share that. please.

LinkedIn
Facebook
Threads
Telegram
WhatsApp
Email
Alex Januschewsky, KI-Berater und Prompt Rocker
Über den Autor
Alex Januschewsky
KI-Berater & Prompt Rocker // Salzburg, AT

Ich arbeite seit 1989 in Kommunikation und Werbung, heute als KI-Berater unter der Marke Prompt Rocker. Ich baue Dinge selbst: mit Claude Code, n8n, WordPress und Coolify auf Hetzner. Vibe Coding ist für mich kein Begriff, sondern tägliche Praxis. Auf vibecraft.rocks dokumentiere ich, was dabei entsteht.

ship safe.