Vibe-Coding mit JetBrain Junie

Im Bereich der Softwareentwicklung existieren Phasen erhöhter Produktivität und Kreativität, oft als "Flow" bezeichnet. Dieser Zustand, charakterisiert durch nahtlose Problemlösung und effiziente Code-Erstellung, stellt einen wertvollen Aspekt des Entwicklungsprozesses dar. Aufbauend auf diesem Konzept des "Flow" hat sich im Entwicklerjargon gerade der Begriff "Vibe Coding" etabliert. Dieser beschreibt den Zustand, in dem nicht nur die reine Produktivität, sondern auch das positive Gefühl und die Freude am Programmieren im Vordergrund stehen. Der "Vibe" wird jedoch häufig durch repetitive Aufgaben, zeitaufwendige Debugging-Prozesse, Abhängigkeiten von Continuous Integration (CI)-Pipelines oder die Notwendigkeit der Einarbeitung in spezifische Entwicklungsumgebungen unterbrochen. Diese Unterbrechungen können als "Vibe-Killer" identifiziert werden, da sie den kreativen Fluss und das positive Erlebnis beeinträchtigen. Hier soll es jetzt aber nicht um Buzz-Words gehen sondern darum, dass ich den gerade frischen Coding Assistenten von JetBrains getestet habe.

Der Entwickleralltag ist geprägt von Phasen hoher Kreativität ('Flow'), wird aber oft durch 'Vibe-Killer' wie repetitive Aufgaben, langwieriges Debugging oder notwendige Updates unterbrochen. Besonders ungeliebte Aufgaben wie Abhängigkeits-Updates, CI-Anpassungen oder Bugfixing bleiben oft liegen, wenn keine unmittelbare Notwendigkeit besteht – genau hier fehlt der 'Flow'. Doch was, wenn ein Tool helfen könnte, diese 'Vibe-Killer' zu eliminieren?

Ein paar meiner Anwendungsfälle der letzten Tage

Die theoretischen Überlegungen zur Rolle von Assistenten wie JetBrains Junie bei der Bewahrung des "Coding Vibe" lassen sich durch konkrete Anwendungsfälle aus der jüngsten Praxis untermauern. Diese Beispiele illustrieren, wie Junie bei Aufgaben unterstützte, die andernfalls potenziell aufgeschoben worden wären:

Ein Anwendungsfall betraf die notwendige Migration des Frontends des Wormatia Livetickers von Vue 2 auf Vue 3. Eine solche Aktualisierung, die zwar technisch erforderlich ist, aber möglicherweise nicht die höchste Priorität im Tagesgeschäft genießt, wurde an Junie delegiert. Der Assistent übernahm die Portierung der einzelnen Komponenten und die Aktualisierung der erforderlichen npm-Pakete, wodurch eine Aufgabe effizient bearbeitet wurde, die manuell einen erheblichen Zeitaufwand bedeutet hätte und bei der die initiale Motivation möglicherweise gering gewesen wäre.

Ein weiteres Beispiel entstammt dem Kontext eines Magento SAP Connectors. Hier bestand die Aufgabe darin, den Connector basierend auf den Daten einer OData Response anzupassen und spezifische Entitäten zu modifizieren. Dem Assistenten wurden die relevanten Daten bereitgestellt, woraufhin Junie die erforderliche Programmierung vornahm. Bemerkenswert war hierbei die iterative Arbeitsweise: Junie erstellte nicht nur den Code, sondern legte auch die zugehörigen Tests an, führte diese aus und korrigierte auftretende Fehler autonom, bis die Implementierung den Anforderungen entsprach. Diese Art von Aufgabe, die oft als reine Fleißarbeit betrachtet wird, wurde in der Vergangenheit gelegentlich an Junior-Entwickler oder Praktikanten delegiert.

Zusätzlich wurde Junie zur Optimierung verschiedener Aspekte des Tools n98-magerun2 eingesetzt. Dies umfasste ein breites Spektrum an Aufgaben, von der Anpassung von Symfony Kommandos bis zur Überarbeitung von GitHub Actions. Die Fähigkeit des Assistenten, mit unterschiedlichen Technologien wie PHP, Javascript, YAML, Go Code und Python umzugehen, zeigte sich hierbei als besonders wertvoll. Junie konnte somit diverse Optimierungen über verschiedene Codebasen und Konfigurationsdateien hinweg durchführen.

Diese Beispiele demonstrieren, dass ein Assistent wie Junie in der Lage ist, eine Vielzahl von Aufgaben zu übernehmen, die im Entwicklungsalltag als weniger attraktiv empfunden werden können.

JetBrains Junie

JetBrains Junie repräsentiert einen fortschrittlichen Coding-Assistenten, der darauf ausgelegt ist, Entwickler bei einer Vielzahl von Aufgaben direkt in ihrer gewohnten Entwicklungsumgebung zu unterstützen. Die Integration erfolgt nahtlos über den JetBrains Marketplace, von wo aus Junie als Plugin in kompatible JetBrains IDEs wie PhpStorm, Webstorm oder IntelliJ installiert werden kann.

Slogan von JetBrains: Junie Your smart coding agent

Die Bedienung und Konfiguration von Junie sind auf eine intuitive Interaktion ausgelegt. Nach der Installation fügt sich das Tool in die Benutzeroberfläche der IDE ein und bietet Funktionen zur Code-Analyse, Vorschläge für Modifikationen und die Ausführung von Befehlen. Ein zentraler Aspekt der Konfiguration ist die Verwendung der guidelines.mmd-Datei. Diese Datei, typischerweise im .junie Verzeichnis des Projekts abgelegt, dient dazu, Junie spezifische Anweisungen und Kontextinformationen über das Projekt und den bevorzugten Workflow zu vermitteln. Durch die Definition von Richtlinien in dieser Datei kann Junie lernen, wie beispielsweise Befehle in einer spezifischen Docker-Umgebung (wie ddev) ausgeführt werden müssen oder welche Coding-Standards einzuhalten sind. Diese Anpassungsfähigkeit ermöglicht es Junie, sich an die individuellen Anforderungen und Gegebenheiten unterschiedlicher Projekte und Entwicklungsumgebungen anzupassen und somit effektiver zu assistieren.

Wie arbeitet man mit dem Coding Assistenten?

Die Nutzung von JetBrains Junie beginnt mit der einfachen Installation als Plugin über den JetBrains Marketplace, verfügbar für gängige IDEs wie PhpStorm, Webstorm, Pycharm oder IntelliJ. Nach der Installation ist der Assistent bequem in der rechten Sidebar der IDE zugänglich.

Die Interaktion mit Junie erfolgt über einen einfachen Prompt. Zu Beginn wird man begrüßt und erhält die Aufforderung, eine guidelines.md-Datei anzulegen. Diese Datei, die auf Wunsch auch vom Assistenten selbst erstellt werden kann, ist zentral für die Konfiguration. In ihr können detaillierte Projektvorgaben und Wünsche formuliert werden. Man definiert beispielsweise, welche Coding Standards der Assistent einhalten soll, welche Aktionen er vermeiden soll, wie die Anwendung erstellt und getestet werden kann. Besonders nützlich ist die Möglichkeit, Beispiele für Terminal-Befehle zu hinterlegen, die Junie bei Bedarf direkt in der Entwicklungsumgebung ausführen kann.

Nach dem Abschicken des Prompts beginnt Junie mit dem sogenannten Reasoning, bei dem ein detaillierter Plan zur Lösung der gestellten Aufgabe erstellt wird. Dieser Plan wird transparent in der IDE angezeigt, und man kann den Fortschritt verfolgen, während Junie die einzelnen Schritte abarbeitet. Dabei ist der Assistent dynamisch: Sollte während der Ausführung erkannt werden, dass weitere Aufgaben oder Anpassungen notwendig sind, wird der Plan entsprechend erweitert und aktualisiert.

1. Prompt. 2. Plan 3. Kommandos 4. Ergebnis

Die Benutzeroberfläche während der Ausführung ist zweigeteilt: Auf der linken Seite sieht man den aktuellen Plan und dessen Fortschritt, während auf der rechten Seite die ausgeführten Befehle und die vorgenommenen Dateiänderungen detailliert dargestellt werden. Diese Transparenz ermöglicht es, jederzeit nachzuvollziehen, was Junie gerade tut. Soll ein Befehl ausgeführt werden, der potenziell Auswirkungen auf das System hat, wie beispielsweise ein Terminal-Befehl wie ddev start oder vendor/bin/phpunit <pfad zum test>, hält der Assistent an und wartet auf eine explizite Bestätigung durch den Benutzer. Für häufig genutzte oder als sicher eingestufte Befehle besteht jedoch die Möglichkeit, diese auf eine Liste zu setzen und für den Assistenten als "sicher" zu markieren, sodass keine manuelle Bestätigung mehr erforderlich ist.

Wichtige Ereignisse oder Ergebnisse werden durch Benachrichtigungen in der IDE kommuniziert. Im Idealfall kann man sogar parallel an anderen Aufgaben arbeiten, während Junie im Hintergrund die zugewiesene Aufgabe bearbeitet. Ist der Assistent mit einem Schritt oder der gesamten Aufgabe fertig, kann man ihm unmittelbar weitere Anweisungen geben. Alle bisherigen Aufgaben und Interaktionen werden in einer übersichtlichen Historie gespeichert, die jederzeit wieder geöffnet werden kann, um frühere Schritte oder Ergebnisse einzusehen. Jede Aufgabe kann als “angenommen” oder “abgelehnt” markiert werden. Wird die Aufgabe abgelehnt, dann macht Julie alle gemachten Änderungen wieder rückgängig.

Der Entwickler-Alltag und die Gesellschaft verändern sich

Meine Erfahrung mit Junie im Rahmen dieser spezifischen Debugging-Aufgabe war bisher überaus positiv. Allerdings waren meine Credits relativ schnell aufgebraucht. Leider habe ich auch keine Übersicht zum aktuellen Verbrauch gefunden. Das wird aber sicherlich bald als Funktion nachgerüstet werden.

Es wird deutlich, dass Junie über die Funktionalität eines intelligenten Editors hinausgeht; es agiert als Agent, der Aufgaben planen und ausführen kann. Für Entwickler wird sich der Alltag immer mehr Ändern. Entwickler die nicht in super speziellen Themenbereichen tätig sind wie z.B. der Kernel-Entwicklung, sollten sich dringend mit solchen Assistenten beschäftigen um nicht irgendwann arbeitslos zu sein. Gerade einfache Dinge kann so ein Assistent jetzt schon viel schneller erledigen. Hier stellt sich wiedermal die Frage, wie die Ausbildung in klassischen Software-Entwicklungsberufen in Uukunft aussehen wird. Wie kann ein junger Einsteiger die tiefgreifenden Kenntnisse erlangen die man braucht um komplizierte Aufgaben einem Assistenten zu beschreiben oder auch Fehler zu erkennen?

Diese Thematik geht weit über die reine IT hinaus und wirft tiefgründige Gesellschaftsfragen auf, auf die es bisher keine zufriedenstellende Antworten gibt. Man wird sehen wohin das führt. In den USA hat die KI bereits jetzt für tiefgreifende Umbrüche und einen Job-Abbau im IT Bereich geführt. Das positive für mich ist, dass viele sehr arrogant auftretende Software-Entwickler jetzt wieder etwas mehr Leisten müssen und nicht mehr gefüllte Obstkorb im Büro oder Home-Office im Vordergrund stehen wird. Zumindest hoffe ich das.
Wer jetzt als Entwickler sich zurücklehnt und sich darauf ausruht, dass die KI noch nicht alle Aufgabenstellungen selbst lösen kann, dem sei gesagt: Die KI wird immer besser werden und mehr und mehr übernehmen! Stellt euch darauf ein, dass ihr mit der KI arbeitet und diese als Kollegen seht. Nehmt die Veränderung positiv an. Aufhalten lässt sich hier nichts mehr. Egal ob ihr das gut oder schlecht findet.

Update 22.05.2025

Es gibt doch eine Anzeige der genutzten Credits, die ich scheinbar übersehen habe.
In der Toolbar finde sich ein Button über den man die Infos sehen kann.

Und den Brave Mode hatte ich vergessen zu erwähnen. In diesem Modul, werden alle Befehle im Terminal oder auch Tests ohne Nachfragen ausgeführt. Hier gibt man die Kontrolle komplett an die KI ab.
Den Modus kann man direkt im Prompt-Fenster über eine Checkbox aktivieren.