[{"data":1,"prerenderedAt":1078},["ShallowReactive",2],{"/de-de/blog/ai-agents-for-migrating-rate-limiting-system":3,"navigation-de-de":295,"banner-de-de":726,"footer-de-de":734,"blog-post-authors-de-de-Sam Wiskow":975,"blog-related-posts-de-de-ai-agents-for-migrating-rate-limiting-system":990,"blog-promotions-de-de":1015,"next-steps-de-de":1068},{"id":4,"title":5,"authors":6,"body":8,"category":274,"date":275,"description":276,"extension":277,"externalUrl":278,"faq":278,"featured":279,"heroImage":280,"meta":281,"navigation":279,"path":282,"seo":283,"slug":287,"stem":288,"tags":289,"template":293,"updatedDate":278,"__hash__":294},"blogPosts/de-de/blog/ai-agents-for-migrating-rate-limiting-system.md","Wie ein GitLab-Team das Rate-Limiting mit KI-Agenten migrierte",[7],"Sam Wiskow",{"type":9,"value":10,"toc":265},"minimark",[11,15,25,30,42,55,58,64,71,74,78,93,103,106,109,113,116,119,122,125,128,137,140,143,150,155,158,169,172,179,182,187,194,198,204,207,210,215,218,225,229,236,243,262],[12,13,14],"p",{},"Ein kleines Team bei GitLab hat in den vergangenen Wochen ein Experiment durchgeführt: Lässt sich ein Teil unseres gewachsenen Rate-Limiting-Systems mit KI-Agenten migrieren, ohne dabei Abstriche bei der Sicherheit zu machen?",[12,16,17,18,24],{},"Kurze Antwort: ja. KI-Agenten funktionieren. Sie können allerdings auch offenlegen, wo die eigenen Arbeitsweisen Schwächen haben. Wichtiger als die Agenten waren das Team, der Ablauf und die Beobachtbarkeit. Im Folgenden beschreiben wir, wie wir die Arbeit mit GitLab, der ",[19,20,23],"a",{"href":21,"rel":22},"https://about.gitlab.com/de-de/gitlab-duo-agent-platform/",[],"GitLab Duo Agent Platform"," und weiteren Werkzeugen strukturiert haben: was funktioniert hat, worin der Ablauf besteht und wo er Lücken hatte – und wie sich das Vorgehen übertragen lässt.",[26,27,29],"h2",{"id":28},"aufbau","Aufbau",[12,31,32,33,37,38,41],{},"Bei GitLab laufen seit Jahren zwei Rate-Limiting-Pfade in der Produktion: ein anwendungsseitiger ",[34,35,36],"code",{},"Gitlab::ApplicationRateLimiter"," mit 121 Schlüsseln und ein separates System auf Rack-Ebene. Ziel war es, beide auf einer einzigen Implementierung in ",[34,39,40],{},"labkit-ruby"," zusammenzuführen – beobachtbar, testbar und überall gleich betrieben. Jede Anfrage an den Monolithen berührt dieses System, weshalb seine Fehlerzustände sichtbar und umkehrbar sein müssen.",[12,43,44,45,50,51,54],{},"Das Team bestand aus drei GitLab-Mitarbeitenden und einer Handvoll ",[19,46,49],{"href":47,"rel":48},"https://about.gitlab.com/de-de/topics/agentic-ai/",[],"KI-Agenten",". Max Woolf, Staff Backend Engineer im API-Platform-Team, übernahm die Monolith-Seite und führte die meisten Rollouts durch. Bob Van Landuyt, der im Bereich Scalability arbeitet, betreute das Gem und prägte die Architektur. Ich verantwortete den Scope und schrieb einen Teil des frühen ",[34,52,53],{},"labkit","-Codes. Ein paar weitere Engineers kamen zeitweise dazu, um Kontext aufzunehmen sowie Code und Reviews beizusteuern.",[12,56,57],{},"Die Agenten lasen Kontext ein, entwarfen Spezifikationen, setzten abgegrenzte Änderungen um, schrieben Tests und prüften Merge Requests vor. GitLab Duo Code Review hielt die Codequalität in den Merge Requests hoch. Die Menschen verantworteten Scope, Architektur, Rollout und finale Review.",[12,59,60,61,63],{},"Wir folgten einem strikten Ablauf: Epic lesen, Spezifikation schreiben, die Spezifikation einer adversarialen Review unterziehen, erst nach dem Ausräumen der Blocker implementieren, mit belegbaren Nachweisen verifizieren, den Merge Request einer adversarialen Review unterziehen, an die menschliche Review eskalieren, mergen. Bei der adversarialen Review wird die Arbeit bewusst auf Schwachstellen abgeklopft; sie war auf zwei Auflösungsrunden begrenzt, bevor ein Mensch eingreifen musste. Über das gesamte Projekt hinweg lieferten wir 14 nummerierte Spezifikationen und etwas mehr als 30 Merge Requests in ",[34,62,40],{}," aus. In der Praxis lief der Ablauf je nach Person enger oder lockerer. Bob durchlief oft mehrere Spezifikations- und Review-Zyklen für sich, bevor ein gemeinsames Artefakt entstand.",[12,65,66],{},[67,68],"img",{"alt":69,"src":70},"Diagramm des Ablaufs","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783518190/iejv72y7iz9i9rczcfbr.png",[12,72,73],{},"Dieser Ablauf klingt nach viel. Bei gewachsenem Code ist es ein Ablauf, dessen Ausführung ich einem Agenten zutraue.",[26,75,77],{"id":76},"was-funktioniert-hat","Was funktioniert hat",[12,79,80,81,84,85,88,89,92],{},"Kohorte 1 war der Test mit dem höchsten Einsatz: fünf stark frequentierte Schlüssel, darunter ",[34,82,83],{},"pipelines_create",", ",[34,86,87],{},"notes_create"," und ",[34,90,91],{},"user_sign_in",". Wir rollten sie am 4. Mai 2026 in Stufen von 1 % über 10 % auf 50 % aus, am 5. Mai 2026 dann auf 100 %. Bobs laufender Kommentar von diesem Tag ist das Betriebsmodell im Kleinen:",[12,94,95],{},[96,97,98,99,102],"em",{},"„Alle Rollouts abgeschlossen. Bislang stimmen sämtliche Rate Limits aus dem ",[34,100,101],{},"applimiter"," und der labkit-Implementierung überein. Ich vermute allerdings, dass das nur daran liegt, dass dort nicht viel Traffic anfällt. Ich schaue jetzt, ob ich Traffic erzeugen kann, der das Limit überschreitet.“",[12,104,105],{},"So sieht ein guter Rollout aus, und es ist genau die Art von Urteilsvermögen, die kein Agent für einen übernehmen sollte. Dass das neue System mit dem alten übereinstimmt, ist noch kein Erfolg. Es kann schlicht bedeuten, dass nichts ausgelöst hat.",[12,107,108],{},"Kohorte 2 fasste die nächsten 95 Aufrufstellen (83 im Monolithen und 12 in der Enterprise Edition, EE) unter einem einzigen Feature-Flag-Paar zusammen. Ohne diese Konsolidierung hätte der Rollout rund 95 einzelne Flag-Umschaltungen und etwa 190 YAML-Änderungen bedeutet. Bei dieser Art mechanischer Massenänderungen quer durch eine Codebasis sind Agenten sehr stark. Menschen sind darin sehr schwach.",[26,110,112],{"id":111},"lücken-im-ablauf","Lücken im Ablauf",[12,114,115],{},"Der Ablauf übersah einige Dinge.",[12,117,118],{},"Der erste Punkt betraf den Shadow-Mode, bei dem die neue Logik nur mitläuft, ohne bereits durchzugreifen. Kohorte 2 lief seit Tagen in diesem Modus und stimmte dabei mit der alten Implementierung überein. Die Umstellung von Beobachten auf Erzwingen hätte unspektakulär verlaufen sollen. Es gab einen kleinen Haken.",[12,120,121],{},"Der neue Adapter ließ auf einem nicht authentifizierten Codepfad stillschweigend einen Identifier fallen. Drei String-Werte wurden in zwei primitive Slots gepresst, wobei der falsche Wert den Identifier überschrieb. Ein sehr kleiner Teil der Nutzenden sah für kurze Zeit einen generischen Fehler.",[12,123,124],{},"Der Shadow-Vergleich hatte diesen Schlüssel tatsächlich als abweichend markiert. Wir hatten unser Label-Set nur nicht so aufgebaut, dass es eine strukturelle Kollision von einer normalen Abweichung unterscheidet, sodass das Signal im Dashboard liegen blieb, während wir auf 100 % hochfuhren.",[12,126,127],{},"Wir schalteten das Enforcement-Flag sofort ab. Bob brachte das strukturelle Problem in einem Satz auf den Punkt:",[12,129,130],{},[96,131,132,133,136],{},"„Ich denke, wir sollten das verbessern, sobald wir dieses Durcheinander aufgeräumt haben, und den ",[34,134,135],{},"ApplicationLimiter"," nur noch mit benannten Merkmalen aufrufen – keine Array-Scopes mehr.“",[12,138,139],{},"Der unmittelbare Fix ging zwei Tage später live. Die strukturelle Bereinigung steht auf der Liste für den nächsten Durchgang.",[12,141,142],{},"Der Fehler durchlief jeden Schritt des Ablaufs: Spezifikation, adversariale Review, Implementierung, GitLab Duo Code Review, schrittweiser Rollout. Der Ablauf erkannte ihn und erkannte ihn zugleich nicht. Die Lehre lautete nicht „Agenten sind gefährlich“. Sie lautete: Wir hatten Beobachtbarkeit – aber keine, die zwischen den Fehlerzuständen unterschied, auf die es ankam.",[12,144,145,146,149],{},"Am 15. Mai ließ Max ein Audit gegen ",[34,147,148],{},"master"," laufen, meldete sich bei mir in Slack und eröffnete Kohorte 6:",[12,151,152],{},[96,153,154],{},"„Ich habe der Migration eine Kohorte 6 hinzugefügt: Kleinkram, der übersehen wurde.“",[12,156,157],{},"Geplant hatten wir fünf Kohorten. Gebraucht haben wir sechs.",[12,159,160,161,164,165,168],{},"Die Diagnose folgte wenige Tage später: Claude hatte eine Handvoll EE-spezifischer Rate Limits übersehen – ",[34,162,163],{},"notification_emails",", einige EE-Registry-Einträge, drei Webhook-Schlüssel, drei ",[34,166,167],{},"partner_*","-Schlüssel im Sekundenbruchteil-Bereich und ein paar verwaiste Adapter-Zeilen. 17 von 121 Schlüsseln waren an den früheren Kohorten vorbeigelaufen. Jeder hatte einen Grund, warum er in keine davon sauber passte. Keiner hatte einen Grund, unsichtbar zu sein.",[12,170,171],{},"Wir hatten weder die Agenten noch uns selbst dazu angehalten, laufend gegen das vollständige Schlüssel-Inventar zu zählen.",[12,173,174,175,178],{},"Ein weiterer Punkt war Redis. Der Dienst ",[34,176,177],{},"redis-cluster-ratelimiting"," läuft als Cluster mit vier Shards. Bobs Einschätzung zu Beginn war ehrlich: „Es gibt Spielraum, aber nicht genug, um die Auslastung vollständig zu verdoppeln.“",[12,180,181],{},"Anfang Mai kehrte die Einschränkung zurück, auf die wir schon früher gestoßen waren:",[12,183,184],{},[96,185,186],{},"„Der Engpass, auf den wir vorher gestoßen sind und der für dieses Projekt nicht neu war, ist ein echter Engpass. Das heißt, wir brauchen eine Infrastruktur-Änderung, um ihn zu umgehen.“",[12,188,189,190,193],{},"Wir erhöhten ",[34,191,192],{},"maxclients"," schrittweise und stoppten bei 75.000 Verbindungen statt bei 100.000, sobald klar war, dass weitere Verbindungen die CPU der Primaries in die Sättigung treiben würden. Ein Primary pro Shard, ein Kern für die Befehlsausführung. Kein vertikaler Hebel, der sich noch ziehen ließ.",[26,195,197],{"id":196},"was-die-agenten-tatsächlich-verändert-haben","Was die Agenten tatsächlich verändert haben",[12,199,200],{},[67,201],{"alt":202,"src":203},"Diagramm des durch die Agenten verschobenen Engpasses","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783518190/bzyemaewofxyq9ikxxcb.png",[12,205,206],{},"Sie verschoben den Engpass. Da die Agenten innerhalb eines engen Ablaufs Spezifikationen entwarfen und implementierten, war die Codegenerierung nicht länger der langsame Teil. Zum langsamen Teil wurden nun die Review-Kapazität, das Urteilsvermögen beim Rollout und die Aufmerksamkeit der Betreibenden. Das ist ein deutlich angenehmeres Problem, es bindet aber nach wie vor menschliche Kapazität.",[12,208,209],{},"Angenehm war es nicht immer. Mitten im Projekt schrieb Max:",[12,211,212],{},[96,213,214],{},"„Durchwachsen – ich habe mich mit einem Agenten im Kreis gedreht. Einer dieser Momente nach dem Muster ‚das hätte ich selbst schneller hinbekommen‘, was ärgerlich war.“",[12,216,217],{},"Einige Wochen zuvor hatte er das Projekt als „definitiv eine meiner steileren Lernkurven bei GitLab“ bezeichnet. Die Arbeit mit Agenten ist eine Fähigkeit, und der Preis dafür, sie aufzubauen, sind Tage, an denen allein mehr Fortschritt möglich gewesen wäre.",[12,219,220,221,224],{},"Die zweite Verschiebung bestand darin, ehrlich zu sein, was „fertig“ eigentlich bedeutet. Bobs Notiz am Ende von Kohorte 1 – ",[96,222,223],{},"„ein Feature-Flag pro Rate Limit ist überzogen, das sollten wir bei den nächsten Migrationen nicht mehr machen“"," – ist ein kleines Beispiel für die Art von Urteilsvermögen, die kein Agent für einen übernimmt. Sie generieren bereitwillig 95 Flag-Umschaltungen, wenn man sie darum bittet. Das menschliche Urteil bestand darin, es nicht zu tun.",[26,226,228],{"id":227},"stand-heute","Stand heute",[12,230,231,232,235],{},"Mitte Juni stehen alle sechs Kohorten bei 100 %. Sämtliche 121 Schlüssel im ",[34,233,234],{},"ApplicationRateLimiter"," laufen über das neue Framework, ein Audit bestätigte, dass der alte Pfad auf nahezu null zurückgegangen ist, und wir haben einen Schutzmechanismus ergänzt, damit künftig kein Rate Limit das System stillschweigend umgehen kann.",[12,237,238,239,242],{},"Damit ist die Migration auf Anwendungsebene abgeschlossen. Als Nächstes folgt ",[34,240,241],{},"RackAttack",", die Schicht mit dem höheren Volumen bei rund 4 Milliarden Anfragen pro Tag. Die zugehörige Shadow-and-Enforce-Middleware ist in Entwicklung; der erste Merge Request ist freigegeben und für den Merge eingereiht.",[12,244,245,246,249,250,255,256,261],{},"Wer das nachbauen möchte, kann die ",[19,247,23],{"href":21,"rel":248},[]," zum Schreiben der Spezifikationen einsetzen, Duo Developer zum Umsetzen der Issues und ",[19,251,254],{"href":252,"rel":253},"https://docs.gitlab.com/user/gitlab_duo/code_review/",[],"Duo Code Review"," als Unterstützung beim Mergen der Merge Requests. Das ist aber der einfache Teil. Die eigentliche Frage lautet: Gibt es einen Bob? Jemanden, der das neue System bei 1 % bewusst zu brechen versucht, bevor er es bei 50 % laufen lässt. Und gibt es einen Max? Jemanden, der ein Audit anstößt, wenn alle anderen die Migration für erledigt halten. Der Ablauf ist wichtig, die Menschen sind es mehr. Wer das am eigenen gewachsenen Code ausprobieren möchte, kann ",[19,257,260],{"href":258,"rel":259},"https://about.gitlab.com/de-de/free-trial/",[],"noch heute damit starten",".",[12,263,264],{},"KI-Agenten funktionieren. Ebenso funktioniert es, die Art zu verändern, wie wir an ihrer Seite arbeiten.",{"title":266,"searchDepth":267,"depth":267,"links":268},"",2,[269,270,271,272,273],{"id":28,"depth":267,"text":29},{"id":76,"depth":267,"text":77},{"id":111,"depth":267,"text":112},{"id":196,"depth":267,"text":197},{"id":227,"depth":267,"text":228},"ai","2026-07-08","Ein dreiköpfiges Team migrierte GitLabs Rate-Limiting mit der Duo Agent Platform. Was funktionierte und was der Ablauf übersah.","md",null,true,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773075582/yiosxfhwk8rfkulrtchv.png",{},"/de-de/blog/ai-agents-for-migrating-rate-limiting-system",{"title":5,"description":284,"config":285},"Ein dreiköpfiges Team migrierte GitLabs Rate-Limiting mit der Duo Agent Platform. Was funktionierte, was der Ablauf übersah und wie Sie es umsetzen können.",{"noIndex":286},false,"ai-agents-for-migrating-rate-limiting-system","de-de/blog/ai-agents-for-migrating-rate-limiting-system",[290,291,292],"AI","features","tutorial","BlogPost","0EZUqbED-Pm-8Mn-PARXl2B4mbiDF0za2nHd10-jh3A",{"logo":296,"freeTrial":301,"sales":306,"login":311,"items":316,"search":644,"minimal":678,"duo":696,"switchNav":705,"pricingDeployment":716},{"config":297},{"href":298,"dataGaName":299,"dataGaLocation":300},"/de-de/","gitlab logo","header",{"text":302,"config":303},"Kostenlose Testversion anfordern",{"href":304,"dataGaName":305,"dataGaLocation":300},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":307,"config":308},"Demo anfordern",{"href":309,"dataGaName":310,"dataGaLocation":300},"/de-de/sales/?contact-topic=request-demo","sales",{"text":312,"config":313},"Anmelden",{"href":314,"dataGaName":315,"dataGaLocation":300},"https://gitlab.com/users/sign_in/","sign in",[317,345,447,452,566,622],{"text":318,"config":319,"menu":321},"Plattform",{"dataNavLevelOne":320},"platform",{"type":322,"columns":323},"cards",[324,330,337],{"title":318,"description":325,"link":326},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":327,"config":328},"Die Plattform erkunden",{"href":329,"dataGaName":320,"dataGaLocation":300},"/de-de/platform/",{"title":23,"description":331,"link":332},"Agentische KI für den gesamten Software-Lebenszyklus",{"text":333,"config":334},"Lerne GitLab Duo kennen",{"href":335,"dataGaName":336,"dataGaLocation":300},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":338,"description":339,"link":340},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":341,"config":342},"Mehr erfahren",{"href":343,"dataGaName":344,"dataGaLocation":300},"/de-de/why-gitlab/","why gitlab",{"text":346,"left":279,"config":347,"menu":349},"Produkt",{"dataNavLevelOne":348},"solutions",{"type":350,"link":351,"columns":355,"feature":426},"lists",{"text":352,"config":353},"Alle Lösungen anzeigen",{"href":354,"dataGaName":348,"dataGaLocation":300},"/de-de/solutions/",[356,381,404],{"title":357,"description":358,"link":359,"items":364},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":360},{"icon":361,"href":362,"dataGaName":363,"dataGaLocation":300},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[365,369,372,377],{"text":366,"config":367},"CI/CD",{"href":368,"dataGaLocation":300,"dataGaName":366},"/de-de/solutions/continuous-integration/",{"text":23,"config":370},{"href":335,"dataGaLocation":300,"dataGaName":371},"gitlab duo agent platform - product menu",{"text":373,"config":374},"Quellcodeverwaltung",{"href":375,"dataGaLocation":300,"dataGaName":376},"/de-de/solutions/source-code-management/","Source Code Management",{"text":378,"config":379},"Automatische Softwarebereitstellung",{"href":362,"dataGaLocation":300,"dataGaName":380},"Automated software delivery",{"title":382,"description":383,"link":384,"items":389},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":385},{"href":386,"dataGaName":387,"dataGaLocation":300,"icon":388},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[390,394,399],{"text":391,"config":392},"Anwendungssicherheitstests",{"href":386,"dataGaName":393,"dataGaLocation":300},"Application security testing",{"text":395,"config":396},"Schutz der Software-Lieferkette",{"href":397,"dataGaLocation":300,"dataGaName":398},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":400,"config":401},"Software-Compliance",{"href":402,"dataGaName":403,"dataGaLocation":300},"/de-de/solutions/software-compliance/","software compliance",{"title":405,"link":406,"items":411},"Messung",{"config":407},{"icon":408,"href":409,"dataGaName":410,"dataGaLocation":300},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[412,416,421],{"text":413,"config":414},"Sichtbarkeit und Messung",{"href":409,"dataGaLocation":300,"dataGaName":415},"Visibility and Measurement",{"text":417,"config":418},"Wertstrommanagement",{"href":419,"dataGaLocation":300,"dataGaName":420},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":422,"config":423},"Analysen und Einblicke",{"href":424,"dataGaLocation":300,"dataGaName":425},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":427,"type":350,"items":428},"GitLab für",[429,435,441],{"text":430,"config":431},"Enterprise",{"icon":432,"href":433,"dataGaLocation":300,"dataGaName":434},"Building","/de-de/enterprise/","enterprise",{"text":436,"config":437},"Kleinunternehmen",{"icon":438,"href":439,"dataGaLocation":300,"dataGaName":440},"Work","/de-de/small-business/","small business",{"text":442,"config":443},"Öffentlicher Sektor",{"icon":444,"href":445,"dataGaLocation":300,"dataGaName":446},"Organization","/de-de/solutions/public-sector/","public sector",{"text":448,"config":449},"Preise",{"href":450,"dataGaName":451,"dataGaLocation":300,"dataNavLevelOne":451},"/de-de/pricing/","pricing",{"text":453,"config":454,"menu":456},"Ressourcen",{"dataNavLevelOne":455},"resources",{"type":350,"link":457,"columns":461,"feature":555},{"text":458,"config":459},"Alle Ressourcen anzeigen",{"href":460,"dataGaName":455,"dataGaLocation":300},"/de-de/resources/",[462,495,522],{"title":463,"items":464},"Erste Schritte",[465,470,475,480,485,490],{"text":466,"config":467},"Installieren",{"href":468,"dataGaName":469,"dataGaLocation":300},"/de-de/install/","install",{"text":471,"config":472},"Kurzanleitungen",{"href":473,"dataGaName":474,"dataGaLocation":300},"/de-de/get-started/","quick setup checklists",{"text":476,"config":477},"Lernen",{"href":478,"dataGaLocation":300,"dataGaName":479},"https://university.gitlab.com/","learn",{"text":481,"config":482},"Produktdokumentation",{"href":483,"dataGaName":484,"dataGaLocation":300},"https://docs.gitlab.com/","product documentation",{"text":486,"config":487},"Best-Practice-Videos",{"href":488,"dataGaName":489,"dataGaLocation":300},"/de-de/getting-started-videos/","best practice videos",{"text":491,"config":492},"Integrationen",{"href":493,"dataGaName":494,"dataGaLocation":300},"/de-de/integrations/","integrations",{"title":496,"items":497},"Entdecken",[498,503,508,513,517],{"text":499,"config":500},"Kundenerfolge",{"href":501,"dataGaName":502,"dataGaLocation":300},"/de-de/customers/","customer success stories",{"text":504,"config":505},"Blog",{"href":506,"dataGaName":507,"dataGaLocation":300},"/de-de/blog/","blog",{"text":509,"config":510},"Demo-Hub",{"href":511,"dataGaName":512,"dataGaLocation":300},"/de-de/demo-hub/","demo hub",{"text":514,"config":515},"The Source",{"href":516,"dataGaName":507,"dataGaLocation":300},"/de-de/the-source/",{"text":518,"config":519},"Remote",{"href":520,"dataGaName":521,"dataGaLocation":300},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":523,"items":524},"Vernetzen",[525,530,535,540,545,550],{"text":526,"config":527},"GitLab-Services",{"href":528,"dataGaName":529,"dataGaLocation":300},"/de-de/services/","services",{"text":531,"config":532},"Beitragen",{"href":533,"dataGaName":534,"dataGaLocation":300},"https://contributors.gitlab.com","contribute",{"text":536,"config":537},"Community",{"href":538,"dataGaName":539,"dataGaLocation":300},"/community/","community",{"text":541,"config":542},"Forum",{"href":543,"dataGaName":544,"dataGaLocation":300},"https://forum.gitlab.com/","forum",{"text":546,"config":547},"Veranstaltungen",{"href":548,"dataGaName":549,"dataGaLocation":300},"/events/","events",{"text":551,"config":552},"Partner",{"href":553,"dataGaName":554,"dataGaLocation":300},"/de-de/partners/","partners",{"config":556,"title":559,"text":560,"link":561},{"background":557,"textColor":558},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Neues bei GitLab","Über die neuesten Funktionen und Verbesserungen auf dem Laufenden bleiben.",{"text":562,"config":563},"Aktuelle Nachrichten",{"href":564,"dataGaName":565,"dataGaLocation":300},"/de-de/whats-new/","whats new",{"text":567,"config":568,"menu":570},"Unternehmen",{"dataNavLevelOne":569},"company",{"type":350,"columns":571},[572],{"items":573},[574,579,585,587,592,597,602,607,612,617],{"text":575,"config":576},"Über",{"href":577,"dataGaName":578,"dataGaLocation":300},"/de-de/company/","about",{"text":580,"config":581,"footerGa":584},"Karriere",{"href":582,"dataGaName":583,"dataGaLocation":300},"/jobs/","jobs",{"dataGaName":583},{"text":546,"config":586},{"href":548,"dataGaName":549,"dataGaLocation":300},{"text":588,"config":589},"Geschäftsführung",{"href":590,"dataGaName":591,"dataGaLocation":300},"/company/team/e-group/","leadership",{"text":593,"config":594},"Handbuch",{"href":595,"dataGaName":596,"dataGaLocation":300},"https://handbook.gitlab.com/","handbook",{"text":598,"config":599},"Investor Relations",{"href":600,"dataGaName":601,"dataGaLocation":300},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":603,"config":604},"Trust Center",{"href":605,"dataGaName":606,"dataGaLocation":300},"/de-de/security/","trust center",{"text":608,"config":609},"AI Transparency Center",{"href":610,"dataGaName":611,"dataGaLocation":300},"/de-de/ai-transparency-center/","ai transparency center",{"text":613,"config":614},"Newsletter",{"href":615,"dataGaName":616,"dataGaLocation":300},"/company/contact/#contact-forms","newsletter",{"text":618,"config":619},"Presse",{"href":620,"dataGaName":621,"dataGaLocation":300},"/press/","press",{"text":623,"config":624,"menu":625},"Kontakt",{"dataNavLevelOne":569},{"type":350,"columns":626},[627],{"items":628},[629,634,639],{"text":630,"config":631},"Vertrieb kontaktieren",{"href":632,"dataGaName":633,"dataGaLocation":300},"/de-de/sales/","talk to sales",{"text":635,"config":636},"Support-Portal",{"href":637,"dataGaName":638,"dataGaLocation":300},"https://support.gitlab.com/hc/en-us","support portal",{"text":640,"config":641},"Kundenportal",{"href":642,"dataGaName":643,"dataGaLocation":300},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":645,"login":646,"suggestions":653},"Schließen",{"text":647,"link":648},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":649,"config":650},"gitlab.com",{"href":314,"dataGaName":651,"dataGaLocation":652},"search login","search",{"text":654,"default":655},"Vorschläge",[656,658,663,665,670,675],{"text":23,"config":657},{"href":335,"dataGaName":23,"dataGaLocation":652},{"text":659,"config":660},"Codevorschläge (KI)",{"href":661,"dataGaName":662,"dataGaLocation":652},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":366,"config":664},{"href":368,"dataGaName":366,"dataGaLocation":652},{"text":666,"config":667},"GitLab auf AWS",{"href":668,"dataGaName":669,"dataGaLocation":652},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":671,"config":672},"GitLab auf Google Cloud",{"href":673,"dataGaName":674,"dataGaLocation":652},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":338,"config":676},{"href":343,"dataGaName":677,"dataGaLocation":652},"Why GitLab?",{"freeTrial":679,"mobileIcon":684,"desktopIcon":689,"secondaryButton":692},{"text":680,"config":681},"Kostenlos testen",{"href":682,"dataGaName":305,"dataGaLocation":683},"https://gitlab.com/-/trials/new/","nav",{"altText":685,"config":686},"GitLab-Symbol",{"src":687,"dataGaName":688,"dataGaLocation":683},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":685,"config":690},{"src":691,"dataGaName":688,"dataGaLocation":683},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":463,"config":693},{"href":694,"dataGaName":695,"dataGaLocation":683},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":697,"mobileIcon":701,"desktopIcon":703},{"text":698,"config":699},"Mehr über GitLab Duo erfahren",{"href":335,"dataGaName":700,"dataGaLocation":683},"gitlab duo",{"altText":685,"config":702},{"src":687,"dataGaName":688,"dataGaLocation":683},{"altText":685,"config":704},{"src":691,"dataGaName":688,"dataGaLocation":683},{"button":706,"mobileIcon":711,"desktopIcon":713},{"text":707,"config":708},"/Option",{"href":709,"dataGaName":710,"dataGaLocation":683},"#contact","switch",{"altText":685,"config":712},{"src":687,"dataGaName":688,"dataGaLocation":683},{"altText":685,"config":714},{"src":715,"dataGaName":688,"dataGaLocation":683},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":717,"mobileIcon":722,"desktopIcon":724},{"text":718,"config":719},"Zurück zur Preisübersicht",{"href":450,"dataGaName":720,"dataGaLocation":683,"icon":721},"back to pricing","GoBack",{"altText":685,"config":723},{"src":687,"dataGaName":688,"dataGaLocation":683},{"altText":685,"config":725},{"src":691,"dataGaName":688,"dataGaLocation":683},{"title":727,"button":728,"config":732},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":341,"config":729},{"href":730,"dataGaName":731,"dataGaLocation":300},"/de-de/gitlab-orbit/","orbit",{"layout":733,"disabled":286},"release",{"data":735},{"text":736,"source":737,"edit":743,"contribute":748,"config":753,"items":758,"minimal":964},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":738,"config":739},"Quelltext der Seite anzeigen",{"href":740,"dataGaName":741,"dataGaLocation":742},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":744,"config":745},"Diese Seite bearbeiten",{"href":746,"dataGaName":747,"dataGaLocation":742},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":749,"config":750},"Beteilige dich",{"href":751,"dataGaName":752,"dataGaLocation":742},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":754,"facebook":755,"youtube":756,"linkedin":757},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[759,804,857,899,931],{"title":448,"links":760,"subMenu":775},[761,765,770],{"text":762,"config":763},"Tarife anzeigen",{"href":450,"dataGaName":764,"dataGaLocation":742},"view plans",{"text":766,"config":767},"Vorteile von Premium",{"href":768,"dataGaName":769,"dataGaLocation":742},"/de-de/pricing/premium/","why premium",{"text":771,"config":772},"Vorteile von Ultimate",{"href":773,"dataGaName":774,"dataGaLocation":742},"/de-de/pricing/ultimate/","why ultimate",[776],{"title":623,"links":777},[778,780,782,784,789,794,799],{"text":630,"config":779},{"href":632,"dataGaName":310,"dataGaLocation":742},{"text":635,"config":781},{"href":637,"dataGaName":638,"dataGaLocation":742},{"text":640,"config":783},{"href":642,"dataGaName":643,"dataGaLocation":742},{"text":785,"config":786},"Status",{"href":787,"dataGaName":788,"dataGaLocation":742},"https://status.gitlab.com/","status",{"text":790,"config":791},"Nutzungsbedingungen",{"href":792,"dataGaName":793,"dataGaLocation":742},"/terms/","terms of use",{"text":795,"config":796},"Datenschutzerklärung",{"href":797,"dataGaName":798,"dataGaLocation":742},"/de-de/privacy/","privacy statement",{"text":800,"config":801},"Cookie-Einstellungen",{"dataGaName":802,"dataGaLocation":742,"id":803,"isOneTrustButton":279},"cookie preferences","ot-sdk-btn",{"title":346,"links":805,"subMenu":814},[806,810],{"text":807,"config":808},"DevSecOps-Plattform",{"href":329,"dataGaName":809,"dataGaLocation":742},"devsecops platform",{"text":811,"config":812},"KI-unterstützte Entwicklung",{"href":335,"dataGaName":813,"dataGaLocation":742},"ai-assisted development",[815],{"title":816,"links":817},"Themen",[818,822,827,832,837,842,847,852],{"text":366,"config":819},{"href":820,"dataGaName":821,"dataGaLocation":742},"/de-de/topics/ci-cd/","cicd",{"text":823,"config":824},"GitOps",{"href":825,"dataGaName":826,"dataGaLocation":742},"/de-de/topics/gitops/","gitops",{"text":828,"config":829},"DevOps",{"href":830,"dataGaName":831,"dataGaLocation":742},"/de-de/topics/devops/","devops",{"text":833,"config":834},"Versionskontrolle",{"href":835,"dataGaName":836,"dataGaLocation":742},"/de-de/topics/version-control/","version control",{"text":838,"config":839},"DevSecOps",{"href":840,"dataGaName":841,"dataGaLocation":742},"/de-de/topics/devsecops/","devsecops",{"text":843,"config":844},"Cloud-nativ",{"href":845,"dataGaName":846,"dataGaLocation":742},"/de-de/topics/cloud-native/","cloud native",{"text":848,"config":849},"KI für das Programmieren",{"href":850,"dataGaName":851,"dataGaLocation":742},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":853,"config":854},"Agentische KI",{"href":855,"dataGaName":856,"dataGaLocation":742},"/de-de/topics/agentic-ai/","agentic ai",{"title":858,"links":859},"Lösungen",[860,863,865,870,874,877,880,883,885,887,889,894],{"text":391,"config":861},{"href":386,"dataGaName":862,"dataGaLocation":742},"Application Security Testing",{"text":378,"config":864},{"href":362,"dataGaName":363,"dataGaLocation":742},{"text":866,"config":867},"Agile Entwicklung",{"href":868,"dataGaName":869,"dataGaLocation":742},"/de-de/solutions/agile-delivery/","agile delivery",{"text":871,"config":872},"SCM",{"href":375,"dataGaName":873,"dataGaLocation":742},"source code management",{"text":366,"config":875},{"href":368,"dataGaName":876,"dataGaLocation":742},"continuous integration & delivery",{"text":417,"config":878},{"href":419,"dataGaName":879,"dataGaLocation":742},"value stream management",{"text":823,"config":881},{"href":882,"dataGaName":826,"dataGaLocation":742},"/de-de/solutions/gitops/",{"text":430,"config":884},{"href":433,"dataGaName":434,"dataGaLocation":742},{"text":436,"config":886},{"href":439,"dataGaName":440,"dataGaLocation":742},{"text":442,"config":888},{"href":445,"dataGaName":446,"dataGaLocation":742},{"text":890,"config":891},"Bildungswesen",{"href":892,"dataGaName":893,"dataGaLocation":742},"/de-de/solutions/education/","education",{"text":895,"config":896},"Finanzdienstleistungen",{"href":897,"dataGaName":898,"dataGaLocation":742},"/de-de/solutions/finance/","financial services",{"title":453,"links":900},[901,903,905,907,910,912,915,917,919,921,923,925,927,929],{"text":466,"config":902},{"href":468,"dataGaName":469,"dataGaLocation":742},{"text":471,"config":904},{"href":473,"dataGaName":474,"dataGaLocation":742},{"text":476,"config":906},{"href":478,"dataGaName":479,"dataGaLocation":742},{"text":481,"config":908},{"href":483,"dataGaName":909,"dataGaLocation":742},"docs",{"text":504,"config":911},{"href":506,"dataGaName":507,"dataGaLocation":742},{"text":913,"config":914},"Neuerungen",{"href":564,"dataGaName":565,"dataGaLocation":742},{"text":499,"config":916},{"href":501,"dataGaName":502,"dataGaLocation":742},{"text":518,"config":918},{"href":520,"dataGaName":521,"dataGaLocation":742},{"text":526,"config":920},{"href":528,"dataGaName":529,"dataGaLocation":742},{"text":531,"config":922},{"href":533,"dataGaName":534,"dataGaLocation":742},{"text":536,"config":924},{"href":538,"dataGaName":539,"dataGaLocation":742},{"text":541,"config":926},{"href":543,"dataGaName":544,"dataGaLocation":742},{"text":546,"config":928},{"href":548,"dataGaName":549,"dataGaLocation":742},{"text":551,"config":930},{"href":553,"dataGaName":554,"dataGaLocation":742},{"title":567,"links":932},[933,935,937,939,941,943,948,953,955,957,959],{"text":575,"config":934},{"href":577,"dataGaName":569,"dataGaLocation":742},{"text":580,"config":936},{"href":582,"dataGaName":583,"dataGaLocation":742},{"text":588,"config":938},{"href":590,"dataGaName":591,"dataGaLocation":742},{"text":593,"config":940},{"href":595,"dataGaName":596,"dataGaLocation":742},{"text":598,"config":942},{"href":600,"dataGaName":601,"dataGaLocation":742},{"text":944,"config":945},"Nachhaltigkeit",{"href":946,"dataGaName":947,"dataGaLocation":742},"/sustainability/","Sustainability",{"text":949,"config":950},"Vielfalt, Inklusion und Zugehörigkeit",{"href":951,"dataGaName":952,"dataGaLocation":742},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":603,"config":954},{"href":605,"dataGaName":606,"dataGaLocation":742},{"text":613,"config":956},{"href":615,"dataGaName":616,"dataGaLocation":742},{"text":618,"config":958},{"href":620,"dataGaName":621,"dataGaLocation":742},{"text":960,"config":961},"Transparenzerklärung zu moderner Sklaverei",{"href":962,"dataGaName":963,"dataGaLocation":742},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":965},[966,969,972],{"text":967,"config":968},"Terms",{"href":792,"dataGaName":793,"dataGaLocation":742},{"text":970,"config":971},"Cookies",{"dataGaName":802,"dataGaLocation":742,"id":803,"isOneTrustButton":279},{"text":973,"config":974},"Datenschutz",{"href":797,"dataGaName":798,"dataGaLocation":742},[976],{"id":977,"title":7,"body":278,"config":978,"content":980,"description":278,"extension":984,"meta":985,"navigation":279,"path":986,"seo":987,"stem":988,"__hash__":989},"blogAuthors/en-us/blog/authors/sam-wiskow.yml",{"template":979},"BlogAuthor",{"name":7,"config":981},{"headshot":982,"ctfId":983},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659433/Blog/Author%20Headshots/swiskow-headshot.jpg","swiskow","yml",{},"/en-us/blog/authors/sam-wiskow",{},"en-us/blog/authors/sam-wiskow","TR52XmFI8G3xfSF6pTXW6r_bf0Bd5tf82MmM7VjjKfM",[991,999,1007],{"title":992,"description":993,"heroImage":994,"category":274,"date":995,"authors":996,"slug":998,"externalUrl":278},"Wie ich einen Demo-Generator mit Duo Agent Platform baute","So sahen Demos nicht immer aus. Ein Rückblick auf ihre Entwicklung, plus ein Tutorial zum Bau einer eigenen Demo und eines eigenen Agenten.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-08-13",[997],"Itzik Gan Baruch","agentic-click-through-demo",{"title":1000,"description":1001,"heroImage":1002,"category":274,"date":1003,"authors":1004,"slug":1006,"externalUrl":278},"Governance für agentische KI, MCPs und KI-Code-Assistenten","KI-Agenten schreiben, pushen und deployen, ohne dass jeder Schritt geprüft wird. Ein praktisches Framework für Zugriff, Berechtigungen und Audit-Trails.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785337625/ifzlc2hyzaxhzmjgyymh.png","2026-07-31",[1005],"Julie Griffin","govern-agentic-ai-mcps-code-assistants",{"title":1008,"description":1009,"heroImage":1010,"category":274,"date":1011,"authors":1012,"slug":1014,"externalUrl":278},"Claude Opus 5 auf GitLab: Reasoning für die anspruchsvollsten Aufgaben","Anthropics Claude Opus 5 ist jetzt auf der GitLab Duo Agent Platform verfügbar und bringt tieferes Reasoning für die anspruchsvollsten Aufgaben.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-07-27",[1013],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"promotions":1016},[1017,1030,1042,1054],{"id":1018,"categories":1019,"header":1020,"text":1021,"button":1022,"image":1027},"ai-modernization",[274],"Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":1023,"config":1024},"Ermittle deinen KI-Reifegrad",{"href":1025,"dataGaName":1026,"dataGaLocation":507},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":1028},{"src":1029},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1031,"categories":1032,"header":1034,"text":1021,"button":1035,"image":1039},"devops-modernization",[1033,841],"product","Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":1036,"config":1037},"Ermittle deinen DevOps-Reifegrad",{"href":1038,"dataGaName":1026,"dataGaLocation":507},"/de-de/assessments/devops-modernization-assessment/",{"config":1040},{"src":1041},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1043,"categories":1044,"header":1046,"text":1021,"button":1047,"image":1051},"security-modernization",[1045],"security","Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":1048,"config":1049},"Ermittle deinen Sicherheitsreifegrad",{"href":1050,"dataGaName":1026,"dataGaLocation":507},"/de-de/assessments/security-modernization-assessment/",{"config":1052},{"src":1053},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1055,"paths":1056,"header":1059,"text":1060,"button":1061,"image":1066},"github-azure-migration",[1057,1058],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Ist dein Team bereit für den Umzug von GitHub nach Azure?","GitHub stellt bereits auf Azure um. Finde heraus, was das für dich bedeutet.",{"text":1062,"config":1063},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":1064,"dataGaName":1065,"dataGaLocation":507},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1067},{"src":1041},{"header":1069,"blurb":1070,"button":1071,"secondaryButton":1076},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":1072,"config":1073},"Kostenlosen Test starten",{"href":1074,"dataGaName":305,"dataGaLocation":1075},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":630,"config":1077},{"href":632,"dataGaName":310,"dataGaLocation":1075},1786803739110]