[{"data":1,"prerenderedAt":1695},["ShallowReactive",2],{"/de-de/blog/accelerate-learning-with-gitlab-duo-agent-platform":3,"navigation-de-de":913,"banner-de-de":1344,"footer-de-de":1353,"blog-post-authors-de-de-Halil Coban":1594,"blog-related-posts-de-de-accelerate-learning-with-gitlab-duo-agent-platform":1609,"blog-promotions-de-de":1634,"next-steps-de-de":1685},{"id":4,"title":5,"authors":6,"body":8,"category":895,"date":896,"description":897,"extension":898,"externalUrl":899,"faq":899,"featured":196,"heroImage":900,"meta":901,"navigation":196,"path":902,"seo":903,"slug":904,"stem":905,"tags":906,"template":911,"updatedDate":899,"__hash__":912},"blogPosts/de-de/blog/accelerate-learning-with-gitlab-duo-agent-platform.md","gRPC-Dokumentation automatisieren mit Duo Agent Platform",[7],"Halil Coban",{"type":9,"value":10,"toc":887},"minimark",[11,22,31,34,45,49,54,57,60,63,66,82,85,89,92,99,105,108,112,115,118,132,135,139,142,753,756,788,791,795,798,801,833,841,850,854,883],[12,13,14,15,21],"p",{},"Die Analyse komplexer Kommunikationsflüsse in modernen Software-Architekturen erfordert systematische Dokumentation. Die manuelle Nachverfolgung von gRPC-Verbindungen zwischen Microservices kann mehrere Stunden Entwicklungszeit pro System beanspruchen – Zeit, die für die eigentliche Entwicklungsarbeit fehlt. ",[16,17,20],"a",{"href":18,"rel":19},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-what-is-next-for-intelligent-devsecops/",[],"GitLab Duo Agent Platform"," automatisiert diese Aufgabe durch kontextbasierte Codeanalyse und erstellt detaillierte Architekturdiagramme mit vollständiger Payload-Spezifikation.",[12,23,24,25,30],{},"Die ",[16,26,29],{"href":27,"rel":28},"https://about.gitlab.com/gitlab-duo-agent-platform/",[],"Duo Agent Platform"," reduziert mehrere Stunden Codeanalyse auf wenige Minuten durch automatisierte Analyse, kontinuierliche menschliche Kontrolle und systematische Dokumentationserstellung. Die folgende Demonstration zeigt die Erstellung einer vollständigen gRPC-Dokumentation für ein Golang-Projekt.",[12,32,33],{},"Das folgende Video dokumentiert den vollständigen Workflow:",[35,36,37],"div",{},[38,39],"iframe",{"src":40,"frameBorder":41,"allow":42,"style":43,"title":44},"https://player.vimeo.com/video/1098569263?badge=0&autopause=0&player_id=0&app_id=58479","0","autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share","position:absolute;top:0;left:0;width:100%;height:100%;","AI Agent Generates Complete gRPC Documentation in Minutes | GitLab Duo Agent Platform Demo",[46,47],"script",{"src":48},"https://player.vimeo.com/api/player.js",[50,51,53],"h2",{"id":52},"aufgabenstellung-grpc-kommunikationsflüsse-analysieren","Aufgabenstellung: gRPC-Kommunikationsflüsse analysieren",[12,55,56],{},"Das Beispielprojekt \"Duo Workflow Executor\" kommuniziert mit einem gRPC-Server über bidirektionale Streaming-Verbindungen. Die Dokumentationsaufgabe umfasst die Darstellung des vollständigen Kommunikationsflusses mit empfangenen Payloads, ausgeführten Aktionen und zurückgesendeten Responses.",[12,58,59],{},"Die Implementierung erfolgt in VS Code mit installierter GitLab Workflow Extension. Der spezifische Prompt für die Duo Agent Platform definiert die Anforderungen präzise:",[12,61,62],{},"\"Can you prepare a mermaid diagram that shows the gRPC connection between duo-workflow-service and this project. It should show what this project receives in gRPC payload, and what actions it executes based on the payload, and what it sends back. Study internal/services/runner/runner.go, especially the Run method, and write the mermaid output to a grpc.md file.\"",[12,64,65],{},"Die Duo Agent Platform analysiert die Anforderung und erstellt einen systematischen Ausführungsplan. Der Agent führt automatisch folgende Schritte aus:",[67,68,69,73,76,79],"ul",{},[70,71,72],"li",{},"Durchsuchen relevanter Go-Dateien im Projekt",[70,74,75],{},"Lesen der spezifizierten Datei runner.go",[70,77,78],{},"Identifizierung zusätzlicher Dateien für notwendigen Kontext",[70,80,81],{},"Analyse der Codebase-Struktur zur Erfassung der gRPC-Implementierung",[12,83,84],{},"Diese kontextbasierte Analyse unterscheidet Agenten-Systeme mit vollständigem Projektverständnis von einfachen Code-Generierungs-Tools. Die Duo Agent Platform erfasst die Beziehungen zwischen verschiedenen Komponenten des Projekts und berücksichtigt diese bei der Dokumentationserstellung.",[50,86,88],{"id":87},"kollaborative-verfeinerung","Kollaborative Verfeinerung",[12,90,91],{},"Die Duo Agent Platform ist darauf ausgelegt, bei kritischen Momenten der Aufgabenausführung menschliche Rückmeldung einzuholen. Im vorliegenden Beispiel pausiert der Agent zur Klärung des gewünschten Detailgrads.",[12,93,94,98],{},[95,96,97],"strong",{},"Agent:"," \"Should I include error handling details in the diagram?\"",[12,100,101,104],{},[95,102,103],{},"Antwort:"," \"Don't focus on error handling. Include all actions. Focus on gRPC payload.\"",[12,106,107],{},"Dieser iterative Verfeinerungs-Prozess stellt sicher, dass die Dokumentation die spezifischen Anforderungen erfüllt. Der Agent arbeitet kollaborativ mit dem Entwickler zusammen, anstatt Annahmen über die gewünschte Ausgabe zu treffen.",[50,109,111],{"id":110},"ausführung-und-ergebnisse","Ausführung und Ergebnisse",[12,113,114],{},"Nach der Klärung finalisiert die Duo Agent Platform den Ausführungsplan und fordert Bestätigung vor der Ausführung an. Der Plan kann zu diesem Zeitpunkt noch angepasst werden.",[12,116,117],{},"Der Agent führt anschließend die Aufgaben sequenziell aus und liefert Fortschrittsmeldungen in Echtzeit. Innerhalb weniger Minuten werden folgende Ergebnisse erstellt:",[67,119,120,123,126,129],{},[70,121,122],{},"Analyse aller relevanten Dateien im Projekt",[70,124,125],{},"Erstellung detaillierter Dokumentation mit vollständigem Mermaid-Diagramm",[70,127,128],{},"Speicherung in der angeforderten Datei grpc.md",[70,130,131],{},"Integration wertvoller Kontextinformationen zu ausgehenden Payloads und Verbindungsverwaltung",[12,133,134],{},"Die resultierende Dokumentation ist nicht nur ein grundlegendes Diagramm, sondern eine detaillierte, präzise und unmittelbar verwendbare Architekturübersicht.",[50,136,138],{"id":137},"analyse-der-ausgabe","Analyse der Ausgabe",[12,140,141],{},"Das folgende Mermaid-Diagramm zeigt den vollständigen gRPC-Kommunikationsfluss, den die Duo Agent Platform erstellt hat:",[143,144,149],"pre",{"className":145,"code":146,"language":147,"meta":148,"style":148},"language-mermaid shiki shiki-themes github-light","sequenceDiagram\nparticipant DWS as duo-workflow-service\nparticipant DWE as duo-workflow-executor\nparticipant Runner as ExecutionRunner\nparticipant ActionExecutor as Action Executor\nparticipant FileSystem as File System/Commands\n\n\nNote over DWS, DWE: gRPC Bidirectional Streaming (ExecuteWorkflow)\n\n%% Connection Establishment\nDWE->>DWS: gRPC Connection with Headers\nNote over DWE, DWS: Headers: authorization (Bearer token)\u003Cbr/>x-gitlab-authentication-type: oidc\u003Cbr/>x-gitlab-realm, x-gitlab-global-user-id\u003Cbr/>x-gitlab-oauth-token, x-gitlab-base-url\u003Cbr/>x-gitlab-instance-id, x-request-id\u003Cbr/>x-gitlab-namespace-id, x-gitlab-project-id\n\n\n%% Workflow Start Request\nDWE->>DWS: ClientEvent{StartWorkflowRequest}\nNote over DWE, DWS: StartWorkflowRequest:\u003Cbr/>- ClientVersion\u003Cbr/>- WorkflowDefinition\u003Cbr/>- Goal\u003Cbr/>- WorkflowID\u003Cbr/>- WorkflowMetadata\u003Cbr/>- ClientCapabilities[]\n\n\n%% Action Processing Loop\nloop Action Processing\n    DWS->>DWE: Action Message\n    Note over DWS, DWE: Action Types:\u003Cbr/>- Action_RunCommand {program, flags[], arguments[]}\u003Cbr/>- Action_RunGitCommand {command, arguments[], repositoryUrl}\u003Cbr/>- Action_RunReadFile {filepath}\u003Cbr/>- Action_RunWriteFile {filepath, contents}\u003Cbr/>- Action_RunEditFile {filepath, oldString, newString}\u003Cbr/>- Action_RunHTTPRequest {method, path, body}\u003Cbr/>- Action_ListDirectory {directory}\u003Cbr/>- Action_FindFiles {namePattern}\u003Cbr/>- Action_Grep {searchDirectory, pattern, caseInsensitive}\u003Cbr/>- Action_NewCheckpoint {}\u003Cbr/>- Action_RunMCPTool {}\n\n\n    DWE->>Runner: Receive Action\n    Runner->>Runner: processWorkflowActions()\n    Runner->>ActionExecutor: executeAction(ctx, action)\n    \n    alt Action_RunCommand\n        ActionExecutor->>FileSystem: Execute Shell Command\n        Note over ActionExecutor, FileSystem: Executes: program + flags + arguments\u003Cbr/>in basePath directory\n        FileSystem-->>ActionExecutor: Command Output + Exit Code\n    \n    else Action_RunReadFile\n        ActionExecutor->>FileSystem: Read File\n        Note over ActionExecutor, FileSystem: Check gitignore rules\u003Cbr/>Read file contents\n        FileSystem-->>ActionExecutor: File Contents\n    \n    else Action_RunWriteFile\n        ActionExecutor->>FileSystem: Write File\n        Note over ActionExecutor, FileSystem: Check gitignore rules\u003Cbr/>Create/overwrite file\n        FileSystem-->>ActionExecutor: Success/Error Message\n    \n    else Action_RunEditFile\n        ActionExecutor->>FileSystem: Edit File\n        Note over ActionExecutor, FileSystem: Read → Replace oldString with newString → Write\u003Cbr/>Check gitignore rules\n        FileSystem-->>ActionExecutor: Edit Result Message\n    \n    else Action_RunGitCommand\n        ActionExecutor->>FileSystem: Execute Git Command \n        Note over ActionExecutor, FileSystem: Git operations with authentication\u003Cbr/>Uses provided git config\n        FileSystem-->>ActionExecutor: Git Command Output\n    \n    else Action_RunHTTPRequest\n        ActionExecutor->>DWS: HTTP Request to GitLab API\n        Note over ActionExecutor, DWS: Method: GET/POST/PUT/DELETE\u003Cbr/>Path: API endpoint\u003Cbr/>Body: Request payload\u003Cbr/>Headers: Authorization\n        DWS-->>ActionExecutor: HTTP Response\n    \n    else Action_ListDirectory\n        ActionExecutor->>FileSystem: List Directory Contents\n        Note over ActionExecutor, FileSystem: Respect gitignore rules\n        FileSystem-->>ActionExecutor: Directory Listing\n    \n    else Action_FindFiles\n        ActionExecutor->>FileSystem: Find Files by Pattern\n        Note over ActionExecutor, FileSystem: Recursive search with name pattern\u003Cbr/>Respect gitignore rules\n        FileSystem-->>ActionExecutor: File Paths List\n    \n    else Action_Grep\n        ActionExecutor->>FileSystem: Search Text Pattern\n        Note over ActionExecutor, FileSystem: Recursive text search\u003Cbr/>Case sensitive/insensitive option\n        FileSystem-->>ActionExecutor: Search Results\n    \n    else Action_NewCheckpoint/Action_RunMCPTool\n        ActionExecutor->>ActionExecutor: No-op Action\n        Note over ActionExecutor: Returns empty success result\n    end\n\n\n    ActionExecutor-->>Runner: Action Result (string)\n    \n    alt Result Size Check\n        Runner->>Runner: Check if result > 4MB\n        Note over Runner: If result exceeds MaxMessageSize (4MB)\u003Cbr/>Replace with error message about size limit\n    end\n\n\n    Runner->>DWE: ActionResponse\n    DWE->>DWS: ClientEvent{ActionResponse}\n    Note over DWE, DWS: ActionResponse:\u003Cbr/>- RequestID (matches Action.RequestID)\u003Cbr/>- Response (execution result string)\nend\n\n\n%% Workflow Completion\nDWE->>DWS: CloseSend()\nNote over DWE, DWS: Signal end of workflow execution\n\n\n%% Analytics and Cleanup\nRunner->>Runner: Send Analytics Event (Finish)\nDWE->>DWE: Token Revocation (if enabled)\nDWE->>DWS: Close gRPC Connection\n","mermaid","",[150,151,152,161,167,173,179,185,191,198,203,209,214,220,226,232,237,242,248,254,260,265,270,276,282,288,294,299,304,310,316,322,328,334,340,346,352,357,363,369,375,381,386,392,398,404,410,415,421,427,433,439,444,450,456,462,468,473,479,485,491,497,502,508,514,520,526,531,537,543,549,555,560,566,572,578,584,589,595,601,607,613,618,623,629,634,640,646,652,657,662,667,673,679,685,691,696,701,707,713,719,724,729,735,741,747],"code",{"__ignoreMap":148},[153,154,157],"span",{"class":155,"line":156},"line",1,[153,158,160],{"class":159},"sgsFI","sequenceDiagram\n",[153,162,164],{"class":155,"line":163},2,[153,165,166],{"class":159},"participant DWS as duo-workflow-service\n",[153,168,170],{"class":155,"line":169},3,[153,171,172],{"class":159},"participant DWE as duo-workflow-executor\n",[153,174,176],{"class":155,"line":175},4,[153,177,178],{"class":159},"participant Runner as ExecutionRunner\n",[153,180,182],{"class":155,"line":181},5,[153,183,184],{"class":159},"participant ActionExecutor as Action Executor\n",[153,186,188],{"class":155,"line":187},6,[153,189,190],{"class":159},"participant FileSystem as File System/Commands\n",[153,192,194],{"class":155,"line":193},7,[153,195,197],{"emptyLinePlaceholder":196},true,"\n",[153,199,201],{"class":155,"line":200},8,[153,202,197],{"emptyLinePlaceholder":196},[153,204,206],{"class":155,"line":205},9,[153,207,208],{"class":159},"Note over DWS, DWE: gRPC Bidirectional Streaming (ExecuteWorkflow)\n",[153,210,212],{"class":155,"line":211},10,[153,213,197],{"emptyLinePlaceholder":196},[153,215,217],{"class":155,"line":216},11,[153,218,219],{"class":159},"%% Connection Establishment\n",[153,221,223],{"class":155,"line":222},12,[153,224,225],{"class":159},"DWE->>DWS: gRPC Connection with Headers\n",[153,227,229],{"class":155,"line":228},13,[153,230,231],{"class":159},"Note over DWE, DWS: Headers: authorization (Bearer token)\u003Cbr/>x-gitlab-authentication-type: oidc\u003Cbr/>x-gitlab-realm, x-gitlab-global-user-id\u003Cbr/>x-gitlab-oauth-token, x-gitlab-base-url\u003Cbr/>x-gitlab-instance-id, x-request-id\u003Cbr/>x-gitlab-namespace-id, x-gitlab-project-id\n",[153,233,235],{"class":155,"line":234},14,[153,236,197],{"emptyLinePlaceholder":196},[153,238,240],{"class":155,"line":239},15,[153,241,197],{"emptyLinePlaceholder":196},[153,243,245],{"class":155,"line":244},16,[153,246,247],{"class":159},"%% Workflow Start Request\n",[153,249,251],{"class":155,"line":250},17,[153,252,253],{"class":159},"DWE->>DWS: ClientEvent{StartWorkflowRequest}\n",[153,255,257],{"class":155,"line":256},18,[153,258,259],{"class":159},"Note over DWE, DWS: StartWorkflowRequest:\u003Cbr/>- ClientVersion\u003Cbr/>- WorkflowDefinition\u003Cbr/>- Goal\u003Cbr/>- WorkflowID\u003Cbr/>- WorkflowMetadata\u003Cbr/>- ClientCapabilities[]\n",[153,261,263],{"class":155,"line":262},19,[153,264,197],{"emptyLinePlaceholder":196},[153,266,268],{"class":155,"line":267},20,[153,269,197],{"emptyLinePlaceholder":196},[153,271,273],{"class":155,"line":272},21,[153,274,275],{"class":159},"%% Action Processing Loop\n",[153,277,279],{"class":155,"line":278},22,[153,280,281],{"class":159},"loop Action Processing\n",[153,283,285],{"class":155,"line":284},23,[153,286,287],{"class":159},"    DWS->>DWE: Action Message\n",[153,289,291],{"class":155,"line":290},24,[153,292,293],{"class":159},"    Note over DWS, DWE: Action Types:\u003Cbr/>- Action_RunCommand {program, flags[], arguments[]}\u003Cbr/>- Action_RunGitCommand {command, arguments[], repositoryUrl}\u003Cbr/>- Action_RunReadFile {filepath}\u003Cbr/>- Action_RunWriteFile {filepath, contents}\u003Cbr/>- Action_RunEditFile {filepath, oldString, newString}\u003Cbr/>- Action_RunHTTPRequest {method, path, body}\u003Cbr/>- Action_ListDirectory {directory}\u003Cbr/>- Action_FindFiles {namePattern}\u003Cbr/>- Action_Grep {searchDirectory, pattern, caseInsensitive}\u003Cbr/>- Action_NewCheckpoint {}\u003Cbr/>- Action_RunMCPTool {}\n",[153,295,297],{"class":155,"line":296},25,[153,298,197],{"emptyLinePlaceholder":196},[153,300,302],{"class":155,"line":301},26,[153,303,197],{"emptyLinePlaceholder":196},[153,305,307],{"class":155,"line":306},27,[153,308,309],{"class":159},"    DWE->>Runner: Receive Action\n",[153,311,313],{"class":155,"line":312},28,[153,314,315],{"class":159},"    Runner->>Runner: processWorkflowActions()\n",[153,317,319],{"class":155,"line":318},29,[153,320,321],{"class":159},"    Runner->>ActionExecutor: executeAction(ctx, action)\n",[153,323,325],{"class":155,"line":324},30,[153,326,327],{"class":159},"    \n",[153,329,331],{"class":155,"line":330},31,[153,332,333],{"class":159},"    alt Action_RunCommand\n",[153,335,337],{"class":155,"line":336},32,[153,338,339],{"class":159},"        ActionExecutor->>FileSystem: Execute Shell Command\n",[153,341,343],{"class":155,"line":342},33,[153,344,345],{"class":159},"        Note over ActionExecutor, FileSystem: Executes: program + flags + arguments\u003Cbr/>in basePath directory\n",[153,347,349],{"class":155,"line":348},34,[153,350,351],{"class":159},"        FileSystem-->>ActionExecutor: Command Output + Exit Code\n",[153,353,355],{"class":155,"line":354},35,[153,356,327],{"class":159},[153,358,360],{"class":155,"line":359},36,[153,361,362],{"class":159},"    else Action_RunReadFile\n",[153,364,366],{"class":155,"line":365},37,[153,367,368],{"class":159},"        ActionExecutor->>FileSystem: Read File\n",[153,370,372],{"class":155,"line":371},38,[153,373,374],{"class":159},"        Note over ActionExecutor, FileSystem: Check gitignore rules\u003Cbr/>Read file contents\n",[153,376,378],{"class":155,"line":377},39,[153,379,380],{"class":159},"        FileSystem-->>ActionExecutor: File Contents\n",[153,382,384],{"class":155,"line":383},40,[153,385,327],{"class":159},[153,387,389],{"class":155,"line":388},41,[153,390,391],{"class":159},"    else Action_RunWriteFile\n",[153,393,395],{"class":155,"line":394},42,[153,396,397],{"class":159},"        ActionExecutor->>FileSystem: Write File\n",[153,399,401],{"class":155,"line":400},43,[153,402,403],{"class":159},"        Note over ActionExecutor, FileSystem: Check gitignore rules\u003Cbr/>Create/overwrite file\n",[153,405,407],{"class":155,"line":406},44,[153,408,409],{"class":159},"        FileSystem-->>ActionExecutor: Success/Error Message\n",[153,411,413],{"class":155,"line":412},45,[153,414,327],{"class":159},[153,416,418],{"class":155,"line":417},46,[153,419,420],{"class":159},"    else Action_RunEditFile\n",[153,422,424],{"class":155,"line":423},47,[153,425,426],{"class":159},"        ActionExecutor->>FileSystem: Edit File\n",[153,428,430],{"class":155,"line":429},48,[153,431,432],{"class":159},"        Note over ActionExecutor, FileSystem: Read → Replace oldString with newString → Write\u003Cbr/>Check gitignore rules\n",[153,434,436],{"class":155,"line":435},49,[153,437,438],{"class":159},"        FileSystem-->>ActionExecutor: Edit Result Message\n",[153,440,442],{"class":155,"line":441},50,[153,443,327],{"class":159},[153,445,447],{"class":155,"line":446},51,[153,448,449],{"class":159},"    else Action_RunGitCommand\n",[153,451,453],{"class":155,"line":452},52,[153,454,455],{"class":159},"        ActionExecutor->>FileSystem: Execute Git Command \n",[153,457,459],{"class":155,"line":458},53,[153,460,461],{"class":159},"        Note over ActionExecutor, FileSystem: Git operations with authentication\u003Cbr/>Uses provided git config\n",[153,463,465],{"class":155,"line":464},54,[153,466,467],{"class":159},"        FileSystem-->>ActionExecutor: Git Command Output\n",[153,469,471],{"class":155,"line":470},55,[153,472,327],{"class":159},[153,474,476],{"class":155,"line":475},56,[153,477,478],{"class":159},"    else Action_RunHTTPRequest\n",[153,480,482],{"class":155,"line":481},57,[153,483,484],{"class":159},"        ActionExecutor->>DWS: HTTP Request to GitLab API\n",[153,486,488],{"class":155,"line":487},58,[153,489,490],{"class":159},"        Note over ActionExecutor, DWS: Method: GET/POST/PUT/DELETE\u003Cbr/>Path: API endpoint\u003Cbr/>Body: Request payload\u003Cbr/>Headers: Authorization\n",[153,492,494],{"class":155,"line":493},59,[153,495,496],{"class":159},"        DWS-->>ActionExecutor: HTTP Response\n",[153,498,500],{"class":155,"line":499},60,[153,501,327],{"class":159},[153,503,505],{"class":155,"line":504},61,[153,506,507],{"class":159},"    else Action_ListDirectory\n",[153,509,511],{"class":155,"line":510},62,[153,512,513],{"class":159},"        ActionExecutor->>FileSystem: List Directory Contents\n",[153,515,517],{"class":155,"line":516},63,[153,518,519],{"class":159},"        Note over ActionExecutor, FileSystem: Respect gitignore rules\n",[153,521,523],{"class":155,"line":522},64,[153,524,525],{"class":159},"        FileSystem-->>ActionExecutor: Directory Listing\n",[153,527,529],{"class":155,"line":528},65,[153,530,327],{"class":159},[153,532,534],{"class":155,"line":533},66,[153,535,536],{"class":159},"    else Action_FindFiles\n",[153,538,540],{"class":155,"line":539},67,[153,541,542],{"class":159},"        ActionExecutor->>FileSystem: Find Files by Pattern\n",[153,544,546],{"class":155,"line":545},68,[153,547,548],{"class":159},"        Note over ActionExecutor, FileSystem: Recursive search with name pattern\u003Cbr/>Respect gitignore rules\n",[153,550,552],{"class":155,"line":551},69,[153,553,554],{"class":159},"        FileSystem-->>ActionExecutor: File Paths List\n",[153,556,558],{"class":155,"line":557},70,[153,559,327],{"class":159},[153,561,563],{"class":155,"line":562},71,[153,564,565],{"class":159},"    else Action_Grep\n",[153,567,569],{"class":155,"line":568},72,[153,570,571],{"class":159},"        ActionExecutor->>FileSystem: Search Text Pattern\n",[153,573,575],{"class":155,"line":574},73,[153,576,577],{"class":159},"        Note over ActionExecutor, FileSystem: Recursive text search\u003Cbr/>Case sensitive/insensitive option\n",[153,579,581],{"class":155,"line":580},74,[153,582,583],{"class":159},"        FileSystem-->>ActionExecutor: Search Results\n",[153,585,587],{"class":155,"line":586},75,[153,588,327],{"class":159},[153,590,592],{"class":155,"line":591},76,[153,593,594],{"class":159},"    else Action_NewCheckpoint/Action_RunMCPTool\n",[153,596,598],{"class":155,"line":597},77,[153,599,600],{"class":159},"        ActionExecutor->>ActionExecutor: No-op Action\n",[153,602,604],{"class":155,"line":603},78,[153,605,606],{"class":159},"        Note over ActionExecutor: Returns empty success result\n",[153,608,610],{"class":155,"line":609},79,[153,611,612],{"class":159},"    end\n",[153,614,616],{"class":155,"line":615},80,[153,617,197],{"emptyLinePlaceholder":196},[153,619,621],{"class":155,"line":620},81,[153,622,197],{"emptyLinePlaceholder":196},[153,624,626],{"class":155,"line":625},82,[153,627,628],{"class":159},"    ActionExecutor-->>Runner: Action Result (string)\n",[153,630,632],{"class":155,"line":631},83,[153,633,327],{"class":159},[153,635,637],{"class":155,"line":636},84,[153,638,639],{"class":159},"    alt Result Size Check\n",[153,641,643],{"class":155,"line":642},85,[153,644,645],{"class":159},"        Runner->>Runner: Check if result > 4MB\n",[153,647,649],{"class":155,"line":648},86,[153,650,651],{"class":159},"        Note over Runner: If result exceeds MaxMessageSize (4MB)\u003Cbr/>Replace with error message about size limit\n",[153,653,655],{"class":155,"line":654},87,[153,656,612],{"class":159},[153,658,660],{"class":155,"line":659},88,[153,661,197],{"emptyLinePlaceholder":196},[153,663,665],{"class":155,"line":664},89,[153,666,197],{"emptyLinePlaceholder":196},[153,668,670],{"class":155,"line":669},90,[153,671,672],{"class":159},"    Runner->>DWE: ActionResponse\n",[153,674,676],{"class":155,"line":675},91,[153,677,678],{"class":159},"    DWE->>DWS: ClientEvent{ActionResponse}\n",[153,680,682],{"class":155,"line":681},92,[153,683,684],{"class":159},"    Note over DWE, DWS: ActionResponse:\u003Cbr/>- RequestID (matches Action.RequestID)\u003Cbr/>- Response (execution result string)\n",[153,686,688],{"class":155,"line":687},93,[153,689,690],{"class":159},"end\n",[153,692,694],{"class":155,"line":693},94,[153,695,197],{"emptyLinePlaceholder":196},[153,697,699],{"class":155,"line":698},95,[153,700,197],{"emptyLinePlaceholder":196},[153,702,704],{"class":155,"line":703},96,[153,705,706],{"class":159},"%% Workflow Completion\n",[153,708,710],{"class":155,"line":709},97,[153,711,712],{"class":159},"DWE->>DWS: CloseSend()\n",[153,714,716],{"class":155,"line":715},98,[153,717,718],{"class":159},"Note over DWE, DWS: Signal end of workflow execution\n",[153,720,722],{"class":155,"line":721},99,[153,723,197],{"emptyLinePlaceholder":196},[153,725,727],{"class":155,"line":726},100,[153,728,197],{"emptyLinePlaceholder":196},[153,730,732],{"class":155,"line":731},101,[153,733,734],{"class":159},"%% Analytics and Cleanup\n",[153,736,738],{"class":155,"line":737},102,[153,739,740],{"class":159},"Runner->>Runner: Send Analytics Event (Finish)\n",[153,742,744],{"class":155,"line":743},103,[153,745,746],{"class":159},"DWE->>DWE: Token Revocation (if enabled)\n",[153,748,750],{"class":155,"line":749},104,[153,751,752],{"class":159},"DWE->>DWS: Close gRPC Connection\n",[12,754,755],{},"Das Diagramm zeigt mehrere wichtige Architektur-Aspekte, deren manuelle Erfassung erhebliche Zeit erfordern würde:",[67,757,758,764,770,776,782],{},[70,759,760,763],{},[95,761,762],{},"Bidirektionale Kommunikation:"," Der Workflow Executor initiiert Requests und antwortet auf Service-Aktionen.",[70,765,766,769],{},[95,767,768],{},"Strukturierte Payload-Definitionen:"," Jeder Aktionstyp definiert spezifische Parameter und erwartete Responses.",[70,771,772,775],{},[95,773,774],{},"Multiple Integrationspunkte:"," Der Executor interagiert mit lokalem Filesystem, Git-Repositories und GitLab-APIs.",[70,777,778,781],{},[95,779,780],{},"Vollständiger Aktionssatz:"," Neun verschiedene Aktionstypen decken Dateioperationen, HTTP-Requests und Git-Kommandos ab.",[70,783,784,787],{},[95,785,786],{},"Lebenszyklus-Verwaltung:"," Klare Muster für Verbindungsaufbau, Ausführung und Token-Widerruf.",[12,789,790],{},"Der Agent integriert automatisch die detaillierten Payload-Strukturen für jeden Aktionstyp in das Diagramm. Dieser Detailgrad transformiert eine Übersicht auf hohem Level in eine unmittelbar verwendbare technische Dokumentation für Entwickler-Teams.",[50,792,794],{"id":793},"systematische-anwendungsfälle","Systematische Anwendungsfälle",[12,796,797],{},"Der Agent-Workflow folgt einem systematischen Ansatz: Kontexterfassung durch Analyse relevanter Dateien, kollaborative Verfeinerung durch gezielte Rückfragen, Erstellung eines Ausführungsplans zur Bestätigung, schrittweise Ausführung mit Fortschrittsmeldungen. Diese Transparenz entspricht den Anforderungen an nachvollziehbare Automatisierung in Entwicklungsteams.",[12,799,800],{},"Das demonstrierte Vorgehen kann auf weitere DevSecOps-Aufgaben übertragen werden:",[67,802,803,809,815,821,827],{},[70,804,805,808],{},[95,806,807],{},"Code Reviews:"," Agenten analysieren Merge Requests mit vollständigem Projekt-Kontext",[70,810,811,814],{},[95,812,813],{},"Testing:"," Generierung umfassender Test-Suites basierend auf tatsächlichen Nutzungsmustern",[70,816,817,820],{},[95,818,819],{},"Debugging:"," Nachverfolgung von Problemen über multiple Services und Komponenten",[70,822,823,826],{},[95,824,825],{},"Security Scanning:"," Identifizierung von Schwachstellen unter Berücksichtigung der spezifischen Architektur",[70,828,829,832],{},[95,830,831],{},"CI/CD-Optimierung:"," Verbesserung der Pipeline-Performance basierend auf historischen Daten",[12,834,835,836,840],{},"Die GitLab Duo Agent Platform tritt demnächst in die öffentliche Beta-Phase ein. ",[16,837,839],{"href":27,"rel":838},[],"Registrierung für die Warteliste"," möglich.",[12,842,843,844,849],{},"Weitere Updates zum Stand der Entwicklung werden im ",[16,845,848],{"href":846,"rel":847},"https://about.gitlab.com/blog/",[],"GitLab Blog"," sowie über die Social-Media-Kanäle veröffentlicht. Die Roadmap umfasst spezialisierte Agenten, Custom Workflows und Community-Extensions.",[50,851,853],{"id":852},"weitere-informationen","Weitere Informationen",[67,855,856,863,869,876],{},[70,857,858],{},[16,859,862],{"href":860,"rel":861},"https://about.gitlab.com/blog/agentic-ai-guides-and-resources/",[],"Agentic AI Guides und Ressourcen",[70,864,865],{},[16,866,868],{"href":18,"rel":867},[],"GitLab Duo Agent Platform: Die Zukunft intelligenter DevSecOps",[70,870,871],{},[16,872,875],{"href":873,"rel":874},"https://about.gitlab.com/topics/agentic-ai/",[],"Was ist Agentic AI?",[70,877,878],{},[16,879,882],{"href":880,"rel":881},"https://about.gitlab.com/the-source/ai/from-vibe-coding-to-agentic-ai-a-roadmap-for-technical-leaders/",[],"Von Vibe Coding zu Agentic AI: Roadmap für technische Führungskräfte",[884,885,886],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":148,"searchDepth":163,"depth":163,"links":888},[889,890,891,892,893,894],{"id":52,"depth":163,"text":53},{"id":87,"depth":163,"text":88},{"id":110,"depth":163,"text":111},{"id":137,"depth":163,"text":138},{"id":793,"depth":163,"text":794},{"id":852,"depth":163,"text":853},"ai","2025-10-10","GitLab Duo Agent Platform erstellt automatisiert detaillierte gRPC-Architekturdiagramme mit vollständigen Payload-Strukturen – in Minuten statt Stunden.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/Blog/Hero%20Images/Workflow_1800x945",{},"/de-de/blog/accelerate-learning-with-gitlab-duo-agent-platform",{"title":5,"description":897},"accelerate-learning-with-gitlab-duo-agent-platform","de-de/blog/accelerate-learning-with-gitlab-duo-agent-platform",[907,908,909,910],"AI","tutorial","product","security","BlogPost","k5BoXr8ylr3VdxmVsjSLLeqiGSF5OXtbSD5JEVapbQk",{"logo":914,"freeTrial":919,"sales":924,"login":929,"items":934,"search":1262,"minimal":1296,"duo":1314,"switchNav":1323,"pricingDeployment":1334},{"config":915},{"href":916,"dataGaName":917,"dataGaLocation":918},"/de-de/","gitlab logo","header",{"text":920,"config":921},"Kostenlose Testversion anfordern",{"href":922,"dataGaName":923,"dataGaLocation":918},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de&glm_content=default-saas-trial/","free trial",{"text":925,"config":926},"Demo anfordern",{"href":927,"dataGaName":928,"dataGaLocation":918},"/de-de/sales/?contact-topic=request-demo","sales",{"text":930,"config":931},"Anmelden",{"href":932,"dataGaName":933,"dataGaLocation":918},"https://gitlab.com/users/sign_in/","sign in",[935,963,1065,1070,1184,1240],{"text":936,"config":937,"menu":939},"Plattform",{"dataNavLevelOne":938},"platform",{"type":940,"columns":941},"cards",[942,948,955],{"title":936,"description":943,"link":944},"Die intelligente Orchestrierungsplattform für DevSecOps",{"text":945,"config":946},"Die Plattform erkunden",{"href":947,"dataGaName":938,"dataGaLocation":918},"/de-de/platform/",{"title":20,"description":949,"link":950},"Agentische KI für den gesamten Software-Lebenszyklus",{"text":951,"config":952},"Lerne GitLab Duo kennen",{"href":953,"dataGaName":954,"dataGaLocation":918},"/de-de/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":956,"description":957,"link":958},"Warum GitLab?","Erfahre, warum sich Unternehmen für GitLab entscheiden",{"text":959,"config":960},"Mehr erfahren",{"href":961,"dataGaName":962,"dataGaLocation":918},"/de-de/why-gitlab/","why gitlab",{"text":964,"left":196,"config":965,"menu":967},"Produkt",{"dataNavLevelOne":966},"solutions",{"type":968,"link":969,"columns":973,"feature":1044},"lists",{"text":970,"config":971},"Alle Lösungen anzeigen",{"href":972,"dataGaName":966,"dataGaLocation":918},"/de-de/solutions/",[974,999,1022],{"title":975,"description":976,"link":977,"items":982},"Automatisierung","CI/CD und Automatisierung zur Beschleunigung der Bereitstellung",{"config":978},{"icon":979,"href":980,"dataGaName":981,"dataGaLocation":918},"AutomatedCodeAlt","/de-de/solutions/delivery-automation/","automated software delivery",[983,987,990,995],{"text":984,"config":985},"CI/CD",{"href":986,"dataGaLocation":918,"dataGaName":984},"/de-de/solutions/continuous-integration/",{"text":20,"config":988},{"href":953,"dataGaLocation":918,"dataGaName":989},"gitlab duo agent platform - product menu",{"text":991,"config":992},"Quellcodeverwaltung",{"href":993,"dataGaLocation":918,"dataGaName":994},"/de-de/solutions/source-code-management/","Source Code Management",{"text":996,"config":997},"Automatische Softwarebereitstellung",{"href":980,"dataGaLocation":918,"dataGaName":998},"Automated software delivery",{"title":1000,"description":1001,"link":1002,"items":1007},"Sicherheit","Entwickle Code schneller ohne Abstriche bei der Sicherheit",{"config":1003},{"href":1004,"dataGaName":1005,"dataGaLocation":918,"icon":1006},"/de-de/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1008,1012,1017],{"text":1009,"config":1010},"Anwendungssicherheitstests",{"href":1004,"dataGaName":1011,"dataGaLocation":918},"Application security testing",{"text":1013,"config":1014},"Schutz der Software-Lieferkette",{"href":1015,"dataGaLocation":918,"dataGaName":1016},"/de-de/solutions/supply-chain/","Software supply chain security",{"text":1018,"config":1019},"Software-Compliance",{"href":1020,"dataGaName":1021,"dataGaLocation":918},"/de-de/solutions/software-compliance/","software compliance",{"title":1023,"link":1024,"items":1029},"Messung",{"config":1025},{"icon":1026,"href":1027,"dataGaName":1028,"dataGaLocation":918},"DigitalTransformation","/de-de/solutions/visibility-measurement/","visibility and measurement",[1030,1034,1039],{"text":1031,"config":1032},"Sichtbarkeit und Messung",{"href":1027,"dataGaLocation":918,"dataGaName":1033},"Visibility and Measurement",{"text":1035,"config":1036},"Wertstrommanagement",{"href":1037,"dataGaLocation":918,"dataGaName":1038},"/de-de/solutions/value-stream-management/","Value Stream Management",{"text":1040,"config":1041},"Analysen und Einblicke",{"href":1042,"dataGaLocation":918,"dataGaName":1043},"/de-de/solutions/analytics-and-insights/","Analytics and insights",{"title":1045,"type":968,"items":1046},"GitLab für",[1047,1053,1059],{"text":1048,"config":1049},"Enterprise",{"icon":1050,"href":1051,"dataGaLocation":918,"dataGaName":1052},"Building","/de-de/enterprise/","enterprise",{"text":1054,"config":1055},"Kleinunternehmen",{"icon":1056,"href":1057,"dataGaLocation":918,"dataGaName":1058},"Work","/de-de/small-business/","small business",{"text":1060,"config":1061},"Öffentlicher Sektor",{"icon":1062,"href":1063,"dataGaLocation":918,"dataGaName":1064},"Organization","/de-de/solutions/public-sector/","public sector",{"text":1066,"config":1067},"Preise",{"href":1068,"dataGaName":1069,"dataGaLocation":918,"dataNavLevelOne":1069},"/de-de/pricing/","pricing",{"text":1071,"config":1072,"menu":1074},"Ressourcen",{"dataNavLevelOne":1073},"resources",{"type":968,"link":1075,"columns":1079,"feature":1173},{"text":1076,"config":1077},"Alle Ressourcen anzeigen",{"href":1078,"dataGaName":1073,"dataGaLocation":918},"/de-de/resources/",[1080,1113,1140],{"title":1081,"items":1082},"Erste Schritte",[1083,1088,1093,1098,1103,1108],{"text":1084,"config":1085},"Installieren",{"href":1086,"dataGaName":1087,"dataGaLocation":918},"/de-de/install/","install",{"text":1089,"config":1090},"Kurzanleitungen",{"href":1091,"dataGaName":1092,"dataGaLocation":918},"/de-de/get-started/","quick setup checklists",{"text":1094,"config":1095},"Lernen",{"href":1096,"dataGaLocation":918,"dataGaName":1097},"https://university.gitlab.com/","learn",{"text":1099,"config":1100},"Produktdokumentation",{"href":1101,"dataGaName":1102,"dataGaLocation":918},"https://docs.gitlab.com/","product documentation",{"text":1104,"config":1105},"Best-Practice-Videos",{"href":1106,"dataGaName":1107,"dataGaLocation":918},"/de-de/getting-started-videos/","best practice videos",{"text":1109,"config":1110},"Integrationen",{"href":1111,"dataGaName":1112,"dataGaLocation":918},"/de-de/integrations/","integrations",{"title":1114,"items":1115},"Entdecken",[1116,1121,1126,1131,1135],{"text":1117,"config":1118},"Kundenerfolge",{"href":1119,"dataGaName":1120,"dataGaLocation":918},"/de-de/customers/","customer success stories",{"text":1122,"config":1123},"Blog",{"href":1124,"dataGaName":1125,"dataGaLocation":918},"/de-de/blog/","blog",{"text":1127,"config":1128},"Demo-Hub",{"href":1129,"dataGaName":1130,"dataGaLocation":918},"/de-de/demo-hub/","demo hub",{"text":1132,"config":1133},"The Source",{"href":1134,"dataGaName":1125,"dataGaLocation":918},"/de-de/the-source/",{"text":1136,"config":1137},"Remote",{"href":1138,"dataGaName":1139,"dataGaLocation":918},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1141,"items":1142},"Vernetzen",[1143,1148,1153,1158,1163,1168],{"text":1144,"config":1145},"GitLab-Services",{"href":1146,"dataGaName":1147,"dataGaLocation":918},"/de-de/services/","services",{"text":1149,"config":1150},"Beitragen",{"href":1151,"dataGaName":1152,"dataGaLocation":918},"https://contributors.gitlab.com","contribute",{"text":1154,"config":1155},"Community",{"href":1156,"dataGaName":1157,"dataGaLocation":918},"/community/","community",{"text":1159,"config":1160},"Forum",{"href":1161,"dataGaName":1162,"dataGaLocation":918},"https://forum.gitlab.com/","forum",{"text":1164,"config":1165},"Veranstaltungen",{"href":1166,"dataGaName":1167,"dataGaLocation":918},"/events/","events",{"text":1169,"config":1170},"Partner",{"href":1171,"dataGaName":1172,"dataGaLocation":918},"/de-de/partners/","partners",{"config":1174,"title":1177,"text":1178,"link":1179},{"background":1175,"textColor":1176},"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":1180,"config":1181},"Aktuelle Nachrichten",{"href":1182,"dataGaName":1183,"dataGaLocation":918},"/de-de/whats-new/","whats new",{"text":1185,"config":1186,"menu":1188},"Unternehmen",{"dataNavLevelOne":1187},"company",{"type":968,"columns":1189},[1190],{"items":1191},[1192,1197,1203,1205,1210,1215,1220,1225,1230,1235],{"text":1193,"config":1194},"Über",{"href":1195,"dataGaName":1196,"dataGaLocation":918},"/de-de/company/","about",{"text":1198,"config":1199,"footerGa":1202},"Karriere",{"href":1200,"dataGaName":1201,"dataGaLocation":918},"/jobs/","jobs",{"dataGaName":1201},{"text":1164,"config":1204},{"href":1166,"dataGaName":1167,"dataGaLocation":918},{"text":1206,"config":1207},"Geschäftsführung",{"href":1208,"dataGaName":1209,"dataGaLocation":918},"/company/team/e-group/","leadership",{"text":1211,"config":1212},"Handbuch",{"href":1213,"dataGaName":1214,"dataGaLocation":918},"https://handbook.gitlab.com/","handbook",{"text":1216,"config":1217},"Investor Relations",{"href":1218,"dataGaName":1219,"dataGaLocation":918},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1221,"config":1222},"Trust Center",{"href":1223,"dataGaName":1224,"dataGaLocation":918},"/de-de/security/","trust center",{"text":1226,"config":1227},"AI Transparency Center",{"href":1228,"dataGaName":1229,"dataGaLocation":918},"/de-de/ai-transparency-center/","ai transparency center",{"text":1231,"config":1232},"Newsletter",{"href":1233,"dataGaName":1234,"dataGaLocation":918},"/company/contact/#contact-forms","newsletter",{"text":1236,"config":1237},"Presse",{"href":1238,"dataGaName":1239,"dataGaLocation":918},"/press/","press",{"text":1241,"config":1242,"menu":1243},"Kontakt",{"dataNavLevelOne":1187},{"type":968,"columns":1244},[1245],{"items":1246},[1247,1252,1257],{"text":1248,"config":1249},"Vertrieb kontaktieren",{"href":1250,"dataGaName":1251,"dataGaLocation":918},"/de-de/sales/","talk to sales",{"text":1253,"config":1254},"Support-Portal",{"href":1255,"dataGaName":1256,"dataGaLocation":918},"https://support.gitlab.com/hc/en-us","support portal",{"text":1258,"config":1259},"Kundenportal",{"href":1260,"dataGaName":1261,"dataGaLocation":918},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1263,"login":1264,"suggestions":1271},"Schließen",{"text":1265,"link":1266},"Um Repositorys und Projekte zu durchsuchen, melde dich an bei",{"text":1267,"config":1268},"gitlab.com",{"href":932,"dataGaName":1269,"dataGaLocation":1270},"search login","search",{"text":1272,"default":1273},"Vorschläge",[1274,1276,1281,1283,1288,1293],{"text":20,"config":1275},{"href":953,"dataGaName":20,"dataGaLocation":1270},{"text":1277,"config":1278},"Codevorschläge (KI)",{"href":1279,"dataGaName":1280,"dataGaLocation":1270},"/de-de/solutions/code-suggestions/","Code Suggestions (AI)",{"text":984,"config":1282},{"href":986,"dataGaName":984,"dataGaLocation":1270},{"text":1284,"config":1285},"GitLab auf AWS",{"href":1286,"dataGaName":1287,"dataGaLocation":1270},"/de-de/partners/technology-partners/aws/","GitLab on AWS",{"text":1289,"config":1290},"GitLab auf Google Cloud",{"href":1291,"dataGaName":1292,"dataGaLocation":1270},"/de-de/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":956,"config":1294},{"href":961,"dataGaName":1295,"dataGaLocation":1270},"Why GitLab?",{"freeTrial":1297,"mobileIcon":1302,"desktopIcon":1307,"secondaryButton":1310},{"text":1298,"config":1299},"Kostenlos testen",{"href":1300,"dataGaName":923,"dataGaLocation":1301},"https://gitlab.com/-/trials/new/","nav",{"altText":1303,"config":1304},"GitLab-Symbol",{"src":1305,"dataGaName":1306,"dataGaLocation":1301},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1303,"config":1308},{"src":1309,"dataGaName":1306,"dataGaLocation":1301},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1081,"config":1311},{"href":1312,"dataGaName":1313,"dataGaLocation":1301},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/de-de/get-started/","get started",{"freeTrial":1315,"mobileIcon":1319,"desktopIcon":1321},{"text":1316,"config":1317},"Mehr über GitLab Duo erfahren",{"href":953,"dataGaName":1318,"dataGaLocation":1301},"gitlab duo",{"altText":1303,"config":1320},{"src":1305,"dataGaName":1306,"dataGaLocation":1301},{"altText":1303,"config":1322},{"src":1309,"dataGaName":1306,"dataGaLocation":1301},{"button":1324,"mobileIcon":1329,"desktopIcon":1331},{"text":1325,"config":1326},"/Option",{"href":1327,"dataGaName":1328,"dataGaLocation":1301},"#contact","switch",{"altText":1303,"config":1330},{"src":1305,"dataGaName":1306,"dataGaLocation":1301},{"altText":1303,"config":1332},{"src":1333,"dataGaName":1306,"dataGaLocation":1301},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1335,"mobileIcon":1340,"desktopIcon":1342},{"text":1336,"config":1337},"Zurück zur Preisübersicht",{"href":1068,"dataGaName":1338,"dataGaLocation":1301,"icon":1339},"back to pricing","GoBack",{"altText":1303,"config":1341},{"src":1305,"dataGaName":1306,"dataGaLocation":1301},{"altText":1303,"config":1343},{"src":1309,"dataGaName":1306,"dataGaLocation":1301},{"title":1345,"button":1346,"config":1350},"GitLab Orbit ist da: die Kontextebene für KI-Agenten",{"text":959,"config":1347},{"href":1348,"dataGaName":1349,"dataGaLocation":918},"/de-de/gitlab-orbit/","orbit",{"layout":1351,"disabled":1352},"release",false,{"data":1354},{"text":1355,"source":1356,"edit":1362,"contribute":1367,"config":1372,"items":1377,"minimal":1583},"Git ist eine Marke von Software Freedom Conservancy und unsere Verwendung von „GitLab“ erfolgt unter Lizenz.",{"text":1357,"config":1358},"Quelltext der Seite anzeigen",{"href":1359,"dataGaName":1360,"dataGaLocation":1361},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1363,"config":1364},"Diese Seite bearbeiten",{"href":1365,"dataGaName":1366,"dataGaLocation":1361},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1368,"config":1369},"Beteilige dich",{"href":1370,"dataGaName":1371,"dataGaLocation":1361},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1373,"facebook":1374,"youtube":1375,"linkedin":1376},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1378,1423,1476,1518,1550],{"title":1066,"links":1379,"subMenu":1394},[1380,1384,1389],{"text":1381,"config":1382},"Tarife anzeigen",{"href":1068,"dataGaName":1383,"dataGaLocation":1361},"view plans",{"text":1385,"config":1386},"Vorteile von Premium",{"href":1387,"dataGaName":1388,"dataGaLocation":1361},"/de-de/pricing/premium/","why premium",{"text":1390,"config":1391},"Vorteile von Ultimate",{"href":1392,"dataGaName":1393,"dataGaLocation":1361},"/de-de/pricing/ultimate/","why ultimate",[1395],{"title":1241,"links":1396},[1397,1399,1401,1403,1408,1413,1418],{"text":1248,"config":1398},{"href":1250,"dataGaName":928,"dataGaLocation":1361},{"text":1253,"config":1400},{"href":1255,"dataGaName":1256,"dataGaLocation":1361},{"text":1258,"config":1402},{"href":1260,"dataGaName":1261,"dataGaLocation":1361},{"text":1404,"config":1405},"Status",{"href":1406,"dataGaName":1407,"dataGaLocation":1361},"https://status.gitlab.com/","status",{"text":1409,"config":1410},"Nutzungsbedingungen",{"href":1411,"dataGaName":1412,"dataGaLocation":1361},"/terms/","terms of use",{"text":1414,"config":1415},"Datenschutzerklärung",{"href":1416,"dataGaName":1417,"dataGaLocation":1361},"/de-de/privacy/","privacy statement",{"text":1419,"config":1420},"Cookie-Einstellungen",{"dataGaName":1421,"dataGaLocation":1361,"id":1422,"isOneTrustButton":196},"cookie preferences","ot-sdk-btn",{"title":964,"links":1424,"subMenu":1433},[1425,1429],{"text":1426,"config":1427},"DevSecOps-Plattform",{"href":947,"dataGaName":1428,"dataGaLocation":1361},"devsecops platform",{"text":1430,"config":1431},"KI-unterstützte Entwicklung",{"href":953,"dataGaName":1432,"dataGaLocation":1361},"ai-assisted development",[1434],{"title":1435,"links":1436},"Themen",[1437,1441,1446,1451,1456,1461,1466,1471],{"text":984,"config":1438},{"href":1439,"dataGaName":1440,"dataGaLocation":1361},"/de-de/topics/ci-cd/","cicd",{"text":1442,"config":1443},"GitOps",{"href":1444,"dataGaName":1445,"dataGaLocation":1361},"/de-de/topics/gitops/","gitops",{"text":1447,"config":1448},"DevOps",{"href":1449,"dataGaName":1450,"dataGaLocation":1361},"/de-de/topics/devops/","devops",{"text":1452,"config":1453},"Versionskontrolle",{"href":1454,"dataGaName":1455,"dataGaLocation":1361},"/de-de/topics/version-control/","version control",{"text":1457,"config":1458},"DevSecOps",{"href":1459,"dataGaName":1460,"dataGaLocation":1361},"/de-de/topics/devsecops/","devsecops",{"text":1462,"config":1463},"Cloud-nativ",{"href":1464,"dataGaName":1465,"dataGaLocation":1361},"/de-de/topics/cloud-native/","cloud native",{"text":1467,"config":1468},"KI für das Programmieren",{"href":1469,"dataGaName":1470,"dataGaLocation":1361},"/de-de/topics/devops/ai-for-coding/","ai for coding",{"text":1472,"config":1473},"Agentische KI",{"href":1474,"dataGaName":1475,"dataGaLocation":1361},"/de-de/topics/agentic-ai/","agentic ai",{"title":1477,"links":1478},"Lösungen",[1479,1482,1484,1489,1493,1496,1499,1502,1504,1506,1508,1513],{"text":1009,"config":1480},{"href":1004,"dataGaName":1481,"dataGaLocation":1361},"Application Security Testing",{"text":996,"config":1483},{"href":980,"dataGaName":981,"dataGaLocation":1361},{"text":1485,"config":1486},"Agile Entwicklung",{"href":1487,"dataGaName":1488,"dataGaLocation":1361},"/de-de/solutions/agile-delivery/","agile delivery",{"text":1490,"config":1491},"SCM",{"href":993,"dataGaName":1492,"dataGaLocation":1361},"source code management",{"text":984,"config":1494},{"href":986,"dataGaName":1495,"dataGaLocation":1361},"continuous integration & delivery",{"text":1035,"config":1497},{"href":1037,"dataGaName":1498,"dataGaLocation":1361},"value stream management",{"text":1442,"config":1500},{"href":1501,"dataGaName":1445,"dataGaLocation":1361},"/de-de/solutions/gitops/",{"text":1048,"config":1503},{"href":1051,"dataGaName":1052,"dataGaLocation":1361},{"text":1054,"config":1505},{"href":1057,"dataGaName":1058,"dataGaLocation":1361},{"text":1060,"config":1507},{"href":1063,"dataGaName":1064,"dataGaLocation":1361},{"text":1509,"config":1510},"Bildungswesen",{"href":1511,"dataGaName":1512,"dataGaLocation":1361},"/de-de/solutions/education/","education",{"text":1514,"config":1515},"Finanzdienstleistungen",{"href":1516,"dataGaName":1517,"dataGaLocation":1361},"/de-de/solutions/finance/","financial services",{"title":1071,"links":1519},[1520,1522,1524,1526,1529,1531,1534,1536,1538,1540,1542,1544,1546,1548],{"text":1084,"config":1521},{"href":1086,"dataGaName":1087,"dataGaLocation":1361},{"text":1089,"config":1523},{"href":1091,"dataGaName":1092,"dataGaLocation":1361},{"text":1094,"config":1525},{"href":1096,"dataGaName":1097,"dataGaLocation":1361},{"text":1099,"config":1527},{"href":1101,"dataGaName":1528,"dataGaLocation":1361},"docs",{"text":1122,"config":1530},{"href":1124,"dataGaName":1125,"dataGaLocation":1361},{"text":1532,"config":1533},"Neuerungen",{"href":1182,"dataGaName":1183,"dataGaLocation":1361},{"text":1117,"config":1535},{"href":1119,"dataGaName":1120,"dataGaLocation":1361},{"text":1136,"config":1537},{"href":1138,"dataGaName":1139,"dataGaLocation":1361},{"text":1144,"config":1539},{"href":1146,"dataGaName":1147,"dataGaLocation":1361},{"text":1149,"config":1541},{"href":1151,"dataGaName":1152,"dataGaLocation":1361},{"text":1154,"config":1543},{"href":1156,"dataGaName":1157,"dataGaLocation":1361},{"text":1159,"config":1545},{"href":1161,"dataGaName":1162,"dataGaLocation":1361},{"text":1164,"config":1547},{"href":1166,"dataGaName":1167,"dataGaLocation":1361},{"text":1169,"config":1549},{"href":1171,"dataGaName":1172,"dataGaLocation":1361},{"title":1185,"links":1551},[1552,1554,1556,1558,1560,1562,1567,1572,1574,1576,1578],{"text":1193,"config":1553},{"href":1195,"dataGaName":1187,"dataGaLocation":1361},{"text":1198,"config":1555},{"href":1200,"dataGaName":1201,"dataGaLocation":1361},{"text":1206,"config":1557},{"href":1208,"dataGaName":1209,"dataGaLocation":1361},{"text":1211,"config":1559},{"href":1213,"dataGaName":1214,"dataGaLocation":1361},{"text":1216,"config":1561},{"href":1218,"dataGaName":1219,"dataGaLocation":1361},{"text":1563,"config":1564},"Nachhaltigkeit",{"href":1565,"dataGaName":1566,"dataGaLocation":1361},"/sustainability/","Sustainability",{"text":1568,"config":1569},"Vielfalt, Inklusion und Zugehörigkeit",{"href":1570,"dataGaName":1571,"dataGaLocation":1361},"/de-de/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1221,"config":1573},{"href":1223,"dataGaName":1224,"dataGaLocation":1361},{"text":1231,"config":1575},{"href":1233,"dataGaName":1234,"dataGaLocation":1361},{"text":1236,"config":1577},{"href":1238,"dataGaName":1239,"dataGaLocation":1361},{"text":1579,"config":1580},"Transparenzerklärung zu moderner Sklaverei",{"href":1581,"dataGaName":1582,"dataGaLocation":1361},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1584},[1585,1588,1591],{"text":1586,"config":1587},"Terms",{"href":1411,"dataGaName":1412,"dataGaLocation":1361},{"text":1589,"config":1590},"Cookies",{"dataGaName":1421,"dataGaLocation":1361,"id":1422,"isOneTrustButton":196},{"text":1592,"config":1593},"Datenschutz",{"href":1416,"dataGaName":1417,"dataGaLocation":1361},[1595],{"id":1596,"title":7,"body":899,"config":1597,"content":1600,"description":899,"extension":1603,"meta":1604,"navigation":196,"path":1605,"seo":1606,"stem":1607,"__hash__":1608},"blogAuthors/en-us/blog/authors/halil-coban.yml",{"template":1598,"gitlabHandle":1599},"BlogAuthor","halilcoban",{"name":7,"config":1601},{"headshot":1602},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1751039592/hlxd6cnlgdioobqfvwus.png","yml",{},"/en-us/blog/authors/halil-coban",{},"en-us/blog/authors/halil-coban","XCk-kHFWFcKTRHD7-olqalZoxlaArZ_0zpRqcgazPtA",[1610,1618,1626],{"title":1611,"description":1612,"heroImage":1613,"category":895,"date":1614,"authors":1615,"slug":1617,"externalUrl":899},"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",[1616],"Itzik Gan Baruch","agentic-click-through-demo",{"title":1619,"description":1620,"heroImage":1621,"category":895,"date":1622,"authors":1623,"slug":1625,"externalUrl":899},"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",[1624],"Julie Griffin","govern-agentic-ai-mcps-code-assistants",{"title":1627,"description":1628,"heroImage":1629,"category":895,"date":1630,"authors":1631,"slug":1633,"externalUrl":899},"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",[1632],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"promotions":1635},[1636,1649,1660,1671],{"id":1637,"categories":1638,"header":1639,"text":1640,"button":1641,"image":1646},"ai-modernization",[895],"Hält KI, was uns versprochen wurde?","Das Quiz dauert maximal 5 Minuten.",{"text":1642,"config":1643},"Ermittle deinen KI-Reifegrad",{"href":1644,"dataGaName":1645,"dataGaLocation":1125},"/de-de/assessments/ai-modernization-assessment/","modernization assessment",{"config":1647},{"src":1648},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1650,"categories":1651,"header":1652,"text":1640,"button":1653,"image":1657},"devops-modernization",[909,1460],"Verwaltest du Tool-Chaos oder stellst du Innovationen bereit?",{"text":1654,"config":1655},"Ermittle deinen DevOps-Reifegrad",{"href":1656,"dataGaName":1645,"dataGaLocation":1125},"/de-de/assessments/devops-modernization-assessment/",{"config":1658},{"src":1659},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1661,"categories":1662,"header":1663,"text":1640,"button":1664,"image":1668},"security-modernization",[910],"Tauschst du Schnelligkeit gegen Sicherheit ein?",{"text":1665,"config":1666},"Ermittle deinen Sicherheitsreifegrad",{"href":1667,"dataGaName":1645,"dataGaLocation":1125},"/de-de/assessments/security-modernization-assessment/",{"config":1669},{"src":1670},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1672,"paths":1673,"header":1676,"text":1677,"button":1678,"image":1683},"github-azure-migration",[1674,1675],"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":1679,"config":1680},"Erfahre, wie GitLab im Vergleich zu GitHub abschneidet",{"href":1681,"dataGaName":1682,"dataGaLocation":1125},"/de-de/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1684},{"src":1659},{"header":1686,"blurb":1687,"button":1688,"secondaryButton":1693},"Beginne noch heute, schneller zu entwickeln","Entdecke, was dein Team mit der intelligenten Orchestrierungsplattform für DevSecOps erreichen kann.\n",{"text":1689,"config":1690},"Kostenlosen Test starten",{"href":1691,"dataGaName":923,"dataGaLocation":1692},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/de-de/","feature",{"text":1248,"config":1694},{"href":1250,"dataGaName":928,"dataGaLocation":1692},1786803736350]