Unter der Haube
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.
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.
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.
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.
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.
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.
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.