Anvil CoderAnmelden

Unter der Haube

Wie das System gebaut ist

Anvil Coder besteht aus einem Coordinator, der den Plan hält, und Workern, die je einen Arbeitsschritt ausführen. Dazwischen liegt eine dauerhafte Warteschlange: fällt ein Worker aus, geht kein Schritt verloren. Die Fachlogik kennt weder Datenbank noch Modell noch Warteschlange, deshalb ist jeder Anbieter austauschbar.

Warum hexagonal

Die fachliche Logik spricht ausschliesslich über Ports; die Anbindungen liegen aussen als Adapter. Das klingt nach Lehrbuch und hat einen sehr praktischen Grund: das Sprachmodell ist austauschbar, ohne dass die Fachlogik davon erfährt.

Für dich heisst das: die Abhängigkeit von einem einzelnen Anbieter liegt an einer Stelle, nicht verteilt über die Codebasis.

Die Bausteine

Coordinator
Hält den Ausführungsgraphen, verteilt die Slices und führt die Ergebnisse zusammen. Die einzige Stelle, die den Gesamtplan kennt.
Worker
Nimmt genau einen TaskSlice, führt einen Prompt aus, validiert und committet. Die Bauweise erlaubt beliebig viele nebeneinander.
NATS JetStream
Die dauerhafte Warteschlange dazwischen. Fällt ein Worker aus, wird sein Slice erneut zugestellt, nichts geht verloren.
query-svc
Ein zweiter Betriebsmodus desselben Images für Lesezugriffe. Deine Sicht auf laufende Aufträge überlebt einen Neustart des Coordinators.

Jeder Worker hält seinen Arbeitsbaum im eigenen Pod; skaliert wird über ganze Pods, nicht über Threads. Der Rückstau der Warteschlange steuert die Flotte: ohne wartende Arbeit fährt sie auf null, unter Last kommen Worker dazu.

Womit es gebaut ist

Java 25 und Spring Boot 4 bilden den Fachkern, Angular mit Signals das Cockpit und Astro diesen statisch ausgelieferten Auftritt. PostgreSQL hält Projekte und Konfiguration, MongoDB den append-only Audit-Verlauf, Redis kann den verteilten Laufzustand übernehmen, NATS JetStream ist die Warteschlange. Kubernetes und Flux CD liefern den Dienst aus; Keycloak, nginx, Prometheus, Grafana und Tempo decken Identität, Edge und Observability ab.

Werkzeuge und Schnittstellen

Die Git-Integration läuft über JGit. GitHub wird über die App-Installation deiner Organisation verbunden, GitLab über OAuth 2.0 mit PKCE (heute gitlab.com), Bitbucket Cloud über OAuth 2.0. Die KI-Schicht kapselt Anthropic, die Claude-Kommandozeile und OpenAI-kompatible Anbieter wie OpenAI, Groq, Gemini, Mistral und Ollama hinter einem gemeinsamen Port. Drei optionale, nur lesende MCP-Server liefern dem Agenten Kontext aus YouTrack, GitHub und einem kuratierten Textkorpus, je Organisation isoliert.

Die öffentliche Dokumentation enthält die freigegebenen Konzepte und Anleitungen; interne Betriebs-Runbooks und Zugangsdaten werden nicht veröffentlicht.

Zwei Achsen, die sich kreuzen

Phasen laufen nacheinander und haben Gates: Anforderungen, Architektur, Umsetzung, Abgleich, Test, Verifikation, Dokumentation, Konsistenz. TaskSliceslaufen innerhalb einer Phase parallel.

Diese Trennung ist der Kern: die Reihenfolge bleibt gewahrt, wo sie fachlich zählt, und fällt weg, wo sie nur bremst. Ein Projekt entsteht nicht schneller, weil jemand schneller tippt, sondern weil mehr gleichzeitig entsteht. Wie die Gates arbeiten, steht unterWie es funktioniert.

Was passiert, wenn etwas ausfällt

Ein Slice gilt erst als erledigt, wenn sein Ergebnis committet ist. Fällt ein Worker vorher aus, wird der Slice erneut zugestellt. Bleibt ein Slice unbestätigt liegen, zählt er als Bedarf, und ein Worker wird nachgezogen.

Die Lesezugriffe laufen über einen eigenen Betriebsmodus desselben Images. Ein Neustart des Coordinators nimmt deshalb niemandem die Sicht auf laufende Aufträge.