[{"data":1,"prerenderedAt":1083},["ShallowReactive",2],{"/en-us/blog/categories/ai":3,"navigation-en-us":21,"banner-en-us":442,"footer-en-us":451,"ai-category-page-total-items-en-us":693,"ai-category-page-featured-en-us":694,"ai-category-page-6-en-us":1023},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":11,"description":6,"extension":13,"meta":14,"navigation":15,"path":16,"seo":17,"slug":6,"stem":19,"testContent":6,"type":6,"__hash__":20},"blogCategories/en-us/blog/categories/ai.yml","Ai",null,{"template":8,"slug":9,"hide":10},"BlogCategory","ai",false,{"name":12},"AI","yml",{},true,"/en-us/blog/categories/ai",{"title":12,"description":18},"Browse articles related to AI on the GitLab Blog","en-us/blog/categories/ai","_mFb27wDITdukqW8E71tDTq_ZG9tW2x2RtwML1HudjI",{"logo":22,"freeTrial":27,"sales":32,"login":37,"items":42,"search":362,"minimal":393,"duo":412,"switchNav":421,"pricingDeployment":432},{"config":23},{"href":24,"dataGaName":25,"dataGaLocation":26},"/","gitlab logo","header",{"text":28,"config":29},"Get free trial",{"href":30,"dataGaName":31,"dataGaLocation":26},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":33,"config":34},"Talk to sales",{"href":35,"dataGaName":36,"dataGaLocation":26},"/sales/","sales",{"text":38,"config":39},"Sign in",{"href":40,"dataGaName":41,"dataGaLocation":26},"https://gitlab.com/users/sign_in/","sign in",[43,72,172,177,281,342],{"text":44,"config":45,"menu":47},"Platform",{"dataNavLevelOne":46},"platform",{"type":48,"columns":49},"cards",[50,56,64],{"title":44,"description":51,"link":52},"The intelligent orchestration platform for DevSecOps",{"text":53,"config":54},"Explore our Platform",{"href":55,"dataGaName":46,"dataGaLocation":26},"/platform/",{"title":57,"description":58,"link":59},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":60,"config":61},"Meet GitLab Duo",{"href":62,"dataGaName":63,"dataGaLocation":26},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":65,"description":66,"link":67},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":68,"config":69},"Learn more",{"href":70,"dataGaName":71,"dataGaLocation":26},"/why-gitlab/","why gitlab",{"text":73,"left":15,"config":74,"menu":76},"Product",{"dataNavLevelOne":75},"solutions",{"type":77,"link":78,"columns":82,"feature":151},"lists",{"text":79,"config":80},"View all Solutions",{"href":81,"dataGaName":75,"dataGaLocation":26},"/solutions/",[83,107,130],{"title":84,"description":85,"link":86,"items":91},"Automation","CI/CD and automation to accelerate deployment",{"config":87},{"icon":88,"href":89,"dataGaName":90,"dataGaLocation":26},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[92,96,99,103],{"text":93,"config":94},"CI/CD",{"href":95,"dataGaLocation":26,"dataGaName":93},"/solutions/continuous-integration/",{"text":57,"config":97},{"href":62,"dataGaLocation":26,"dataGaName":98},"gitlab duo agent platform - product menu",{"text":100,"config":101},"Source Code Management",{"href":102,"dataGaLocation":26,"dataGaName":100},"/solutions/source-code-management/",{"text":104,"config":105},"Automated Software Delivery",{"href":89,"dataGaLocation":26,"dataGaName":106},"Automated software delivery",{"title":108,"description":109,"link":110,"items":115},"Security","Deliver code faster without compromising security",{"config":111},{"href":112,"dataGaName":113,"dataGaLocation":26,"icon":114},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[116,120,125],{"text":117,"config":118},"Application Security Testing",{"href":112,"dataGaName":119,"dataGaLocation":26},"Application security testing",{"text":121,"config":122},"Software Supply Chain Security",{"href":123,"dataGaLocation":26,"dataGaName":124},"/solutions/supply-chain/","Software supply chain security",{"text":126,"config":127},"Software Compliance",{"href":128,"dataGaName":129,"dataGaLocation":26},"/solutions/software-compliance/","software compliance",{"title":131,"link":132,"items":137},"Measurement",{"config":133},{"icon":134,"href":135,"dataGaName":136,"dataGaLocation":26},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[138,142,146],{"text":139,"config":140},"Visibility & Measurement",{"href":135,"dataGaLocation":26,"dataGaName":141},"Visibility and Measurement",{"text":143,"config":144},"Value Stream Management",{"href":145,"dataGaLocation":26,"dataGaName":143},"/solutions/value-stream-management/",{"text":147,"config":148},"Analytics & Insights",{"href":149,"dataGaLocation":26,"dataGaName":150},"/solutions/analytics-and-insights/","Analytics and insights",{"title":152,"type":77,"items":153},"GitLab for",[154,160,166],{"text":155,"config":156},"Enterprise",{"icon":157,"href":158,"dataGaLocation":26,"dataGaName":159},"Building","/enterprise/","enterprise",{"text":161,"config":162},"Small Business",{"icon":163,"href":164,"dataGaLocation":26,"dataGaName":165},"Work","/small-business/","small business",{"text":167,"config":168},"Public Sector",{"icon":169,"href":170,"dataGaLocation":26,"dataGaName":171},"Organization","/solutions/public-sector/","public sector",{"text":173,"config":174},"Pricing",{"href":175,"dataGaName":176,"dataGaLocation":26,"dataNavLevelOne":176},"/pricing/","pricing",{"text":178,"config":179,"menu":181},"Resources",{"dataNavLevelOne":180},"resources",{"type":77,"link":182,"columns":186,"feature":270},{"text":183,"config":184},"View all resources",{"href":185,"dataGaName":180,"dataGaLocation":26},"/resources/",[187,220,242],{"title":188,"items":189},"Getting started",[190,195,200,205,210,215],{"text":191,"config":192},"Install",{"href":193,"dataGaName":194,"dataGaLocation":26},"/install/","install",{"text":196,"config":197},"Quick start guides",{"href":198,"dataGaName":199,"dataGaLocation":26},"/get-started/","quick setup checklists",{"text":201,"config":202},"Learn",{"href":203,"dataGaLocation":26,"dataGaName":204},"https://university.gitlab.com/","learn",{"text":206,"config":207},"Product documentation",{"href":208,"dataGaName":209,"dataGaLocation":26},"https://docs.gitlab.com/","product documentation",{"text":211,"config":212},"Best practice videos",{"href":213,"dataGaName":214,"dataGaLocation":26},"/getting-started-videos/","best practice videos",{"text":216,"config":217},"Integrations",{"href":218,"dataGaName":219,"dataGaLocation":26},"/integrations/","integrations",{"title":221,"items":222},"Discover",[223,228,233,237],{"text":224,"config":225},"Customer success stories",{"href":226,"dataGaName":227,"dataGaLocation":26},"/customers/","customer success stories",{"text":229,"config":230},"Blog",{"href":231,"dataGaName":232,"dataGaLocation":26},"/blog/","blog",{"text":234,"config":235},"The Source",{"href":236,"dataGaName":232,"dataGaLocation":26},"/the-source/",{"text":238,"config":239},"Remote",{"href":240,"dataGaName":241,"dataGaLocation":26},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":243,"items":244},"Connect",[245,250,255,260,265],{"text":246,"config":247},"GitLab Services",{"href":248,"dataGaName":249,"dataGaLocation":26},"/services/","services",{"text":251,"config":252},"Community",{"href":253,"dataGaName":254,"dataGaLocation":26},"/community/","community",{"text":256,"config":257},"Forum",{"href":258,"dataGaName":259,"dataGaLocation":26},"https://forum.gitlab.com/","forum",{"text":261,"config":262},"Events",{"href":263,"dataGaName":264,"dataGaLocation":26},"/events/","events",{"text":266,"config":267},"Partners",{"href":268,"dataGaName":269,"dataGaLocation":26},"/partners/","partners",{"config":271,"title":274,"text":275,"link":276},{"background":272,"textColor":273},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":277,"config":278},"Read the latest",{"href":279,"dataGaName":280,"dataGaLocation":26},"/whats-new/","whats new",{"text":282,"config":283,"menu":285},"Company",{"dataNavLevelOne":284},"company",{"type":77,"columns":286},[287],{"items":288},[289,294,300,302,307,312,317,322,327,332,337],{"text":290,"config":291},"About",{"href":292,"dataGaName":293,"dataGaLocation":26},"/company/","about",{"text":295,"config":296,"footerGa":299},"Jobs",{"href":297,"dataGaName":298,"dataGaLocation":26},"/jobs/","jobs",{"dataGaName":298},{"text":261,"config":301},{"href":263,"dataGaName":264,"dataGaLocation":26},{"text":303,"config":304},"Leadership",{"href":305,"dataGaName":306,"dataGaLocation":26},"/company/team/e-group/","leadership",{"text":308,"config":309},"Team",{"href":310,"dataGaName":311,"dataGaLocation":26},"/company/team/","team",{"text":313,"config":314},"Handbook",{"href":315,"dataGaName":316,"dataGaLocation":26},"https://handbook.gitlab.com/","handbook",{"text":318,"config":319},"Investor relations",{"href":320,"dataGaName":321,"dataGaLocation":26},"https://ir.gitlab.com/","investor relations",{"text":323,"config":324},"Trust Center",{"href":325,"dataGaName":326,"dataGaLocation":26},"/security/","trust center",{"text":328,"config":329},"AI Transparency Center",{"href":330,"dataGaName":331,"dataGaLocation":26},"/ai-transparency-center/","ai transparency center",{"text":333,"config":334},"Newsletter",{"href":335,"dataGaName":336,"dataGaLocation":26},"/company/contact/#contact-forms","newsletter",{"text":338,"config":339},"Press",{"href":340,"dataGaName":341,"dataGaLocation":26},"/press/","press",{"text":343,"config":344,"menu":345},"Contact us",{"dataNavLevelOne":284},{"type":77,"columns":346},[347],{"items":348},[349,352,357],{"text":33,"config":350},{"href":35,"dataGaName":351,"dataGaLocation":26},"talk to sales",{"text":353,"config":354},"Support portal",{"href":355,"dataGaName":356,"dataGaLocation":26},"https://support.gitlab.com","support portal",{"text":358,"config":359},"Customer portal",{"href":360,"dataGaName":361,"dataGaLocation":26},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":363,"login":364,"suggestions":371},"Close",{"text":365,"link":366},"To search repositories and projects, login to",{"text":367,"config":368},"gitlab.com",{"href":40,"dataGaName":369,"dataGaLocation":370},"search login","search",{"text":372,"default":373},"Suggestions",[374,376,380,382,386,390],{"text":57,"config":375},{"href":62,"dataGaName":57,"dataGaLocation":370},{"text":377,"config":378},"Code Suggestions (AI)",{"href":379,"dataGaName":377,"dataGaLocation":370},"/solutions/code-suggestions/",{"text":93,"config":381},{"href":95,"dataGaName":93,"dataGaLocation":370},{"text":383,"config":384},"GitLab on AWS",{"href":385,"dataGaName":383,"dataGaLocation":370},"/partners/technology-partners/aws/",{"text":387,"config":388},"GitLab on Google Cloud",{"href":389,"dataGaName":387,"dataGaLocation":370},"/partners/technology-partners/google-cloud-platform/",{"text":391,"config":392},"Why GitLab?",{"href":70,"dataGaName":391,"dataGaLocation":370},{"freeTrial":394,"mobileIcon":399,"desktopIcon":404,"secondaryButton":407},{"text":395,"config":396},"Start free trial",{"href":397,"dataGaName":31,"dataGaLocation":398},"https://gitlab.com/-/trials/new/","nav",{"altText":400,"config":401},"Gitlab Icon",{"src":402,"dataGaName":403,"dataGaLocation":398},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":400,"config":405},{"src":406,"dataGaName":403,"dataGaLocation":398},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":408,"config":409},"Get Started",{"href":410,"dataGaName":411,"dataGaLocation":398},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":413,"mobileIcon":417,"desktopIcon":419},{"text":414,"config":415},"Learn more about GitLab Duo",{"href":62,"dataGaName":416,"dataGaLocation":398},"gitlab duo",{"altText":400,"config":418},{"src":402,"dataGaName":403,"dataGaLocation":398},{"altText":400,"config":420},{"src":406,"dataGaName":403,"dataGaLocation":398},{"button":422,"mobileIcon":427,"desktopIcon":429},{"text":423,"config":424},"/switch",{"href":425,"dataGaName":426,"dataGaLocation":398},"#contact","switch",{"altText":400,"config":428},{"src":402,"dataGaName":403,"dataGaLocation":398},{"altText":400,"config":430},{"src":431,"dataGaName":403,"dataGaLocation":398},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":433,"mobileIcon":438,"desktopIcon":440},{"text":434,"config":435},"Back to pricing",{"href":175,"dataGaName":436,"dataGaLocation":398,"icon":437},"back to pricing","GoBack",{"altText":400,"config":439},{"src":402,"dataGaName":403,"dataGaLocation":398},{"altText":400,"config":441},{"src":406,"dataGaName":403,"dataGaLocation":398},{"title":443,"button":444,"config":449},"See how agentic AI transforms software delivery",{"text":445,"config":446},"Sign up for GitLab Transcend on June 10",{"href":447,"dataGaName":448,"dataGaLocation":26},"/events/transcend/virtual/","transcend event",{"layout":450,"disabled":10},"release",{"data":452},{"text":453,"source":454,"edit":460,"contribute":465,"config":470,"items":475,"minimal":682},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":455,"config":456},"View page source",{"href":457,"dataGaName":458,"dataGaLocation":459},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":461,"config":462},"Edit this page",{"href":463,"dataGaName":464,"dataGaLocation":459},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":466,"config":467},"Please contribute",{"href":468,"dataGaName":469,"dataGaLocation":459},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":471,"facebook":472,"youtube":473,"linkedin":474},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[476,523,577,621,648],{"title":173,"links":477,"subMenu":492},[478,482,487],{"text":479,"config":480},"View plans",{"href":175,"dataGaName":481,"dataGaLocation":459},"view plans",{"text":483,"config":484},"Why Premium?",{"href":485,"dataGaName":486,"dataGaLocation":459},"/pricing/premium/","why premium",{"text":488,"config":489},"Why Ultimate?",{"href":490,"dataGaName":491,"dataGaLocation":459},"/pricing/ultimate/","why ultimate",[493],{"title":494,"links":495},"Contact Us",[496,499,501,503,508,513,518],{"text":497,"config":498},"Contact sales",{"href":35,"dataGaName":36,"dataGaLocation":459},{"text":353,"config":500},{"href":355,"dataGaName":356,"dataGaLocation":459},{"text":358,"config":502},{"href":360,"dataGaName":361,"dataGaLocation":459},{"text":504,"config":505},"Status",{"href":506,"dataGaName":507,"dataGaLocation":459},"https://status.gitlab.com/","status",{"text":509,"config":510},"Terms of use",{"href":511,"dataGaName":512,"dataGaLocation":459},"/terms/","terms of use",{"text":514,"config":515},"Privacy statement",{"href":516,"dataGaName":517,"dataGaLocation":459},"/privacy/","privacy statement",{"text":519,"config":520},"Cookie preferences",{"dataGaName":521,"dataGaLocation":459,"id":522,"isOneTrustButton":15},"cookie preferences","ot-sdk-btn",{"title":73,"links":524,"subMenu":533},[525,529],{"text":526,"config":527},"DevSecOps platform",{"href":55,"dataGaName":528,"dataGaLocation":459},"devsecops platform",{"text":530,"config":531},"AI-Assisted Development",{"href":62,"dataGaName":532,"dataGaLocation":459},"ai-assisted development",[534],{"title":535,"links":536},"Topics",[537,542,547,552,557,562,567,572],{"text":538,"config":539},"CICD",{"href":540,"dataGaName":541,"dataGaLocation":459},"/topics/ci-cd/","cicd",{"text":543,"config":544},"GitOps",{"href":545,"dataGaName":546,"dataGaLocation":459},"/topics/gitops/","gitops",{"text":548,"config":549},"DevOps",{"href":550,"dataGaName":551,"dataGaLocation":459},"/topics/devops/","devops",{"text":553,"config":554},"Version Control",{"href":555,"dataGaName":556,"dataGaLocation":459},"/topics/version-control/","version control",{"text":558,"config":559},"DevSecOps",{"href":560,"dataGaName":561,"dataGaLocation":459},"/topics/devsecops/","devsecops",{"text":563,"config":564},"Cloud Native",{"href":565,"dataGaName":566,"dataGaLocation":459},"/topics/cloud-native/","cloud native",{"text":568,"config":569},"AI for Coding",{"href":570,"dataGaName":571,"dataGaLocation":459},"/topics/devops/ai-for-coding/","ai for coding",{"text":573,"config":574},"Agentic AI",{"href":575,"dataGaName":576,"dataGaLocation":459},"/topics/agentic-ai/","agentic ai",{"title":578,"links":579},"Solutions",[580,582,584,589,593,596,600,603,605,608,611,616],{"text":117,"config":581},{"href":112,"dataGaName":117,"dataGaLocation":459},{"text":106,"config":583},{"href":89,"dataGaName":90,"dataGaLocation":459},{"text":585,"config":586},"Agile development",{"href":587,"dataGaName":588,"dataGaLocation":459},"/solutions/agile-delivery/","agile delivery",{"text":590,"config":591},"SCM",{"href":102,"dataGaName":592,"dataGaLocation":459},"source code management",{"text":538,"config":594},{"href":95,"dataGaName":595,"dataGaLocation":459},"continuous integration & delivery",{"text":597,"config":598},"Value stream management",{"href":145,"dataGaName":599,"dataGaLocation":459},"value stream management",{"text":543,"config":601},{"href":602,"dataGaName":546,"dataGaLocation":459},"/solutions/gitops/",{"text":155,"config":604},{"href":158,"dataGaName":159,"dataGaLocation":459},{"text":606,"config":607},"Small business",{"href":164,"dataGaName":165,"dataGaLocation":459},{"text":609,"config":610},"Public sector",{"href":170,"dataGaName":171,"dataGaLocation":459},{"text":612,"config":613},"Education",{"href":614,"dataGaName":615,"dataGaLocation":459},"/solutions/education/","education",{"text":617,"config":618},"Financial services",{"href":619,"dataGaName":620,"dataGaLocation":459},"/solutions/finance/","financial services",{"title":178,"links":622},[623,625,627,629,632,634,636,638,640,642,644,646],{"text":191,"config":624},{"href":193,"dataGaName":194,"dataGaLocation":459},{"text":196,"config":626},{"href":198,"dataGaName":199,"dataGaLocation":459},{"text":201,"config":628},{"href":203,"dataGaName":204,"dataGaLocation":459},{"text":206,"config":630},{"href":208,"dataGaName":631,"dataGaLocation":459},"docs",{"text":229,"config":633},{"href":231,"dataGaName":232,"dataGaLocation":459},{"text":224,"config":635},{"href":226,"dataGaName":227,"dataGaLocation":459},{"text":238,"config":637},{"href":240,"dataGaName":241,"dataGaLocation":459},{"text":246,"config":639},{"href":248,"dataGaName":249,"dataGaLocation":459},{"text":251,"config":641},{"href":253,"dataGaName":254,"dataGaLocation":459},{"text":256,"config":643},{"href":258,"dataGaName":259,"dataGaLocation":459},{"text":261,"config":645},{"href":263,"dataGaName":264,"dataGaLocation":459},{"text":266,"config":647},{"href":268,"dataGaName":269,"dataGaLocation":459},{"title":282,"links":649},[650,652,654,656,658,660,662,666,671,673,675,677],{"text":290,"config":651},{"href":292,"dataGaName":284,"dataGaLocation":459},{"text":295,"config":653},{"href":297,"dataGaName":298,"dataGaLocation":459},{"text":303,"config":655},{"href":305,"dataGaName":306,"dataGaLocation":459},{"text":308,"config":657},{"href":310,"dataGaName":311,"dataGaLocation":459},{"text":313,"config":659},{"href":315,"dataGaName":316,"dataGaLocation":459},{"text":318,"config":661},{"href":320,"dataGaName":321,"dataGaLocation":459},{"text":663,"config":664},"Sustainability",{"href":665,"dataGaName":663,"dataGaLocation":459},"/sustainability/",{"text":667,"config":668},"Diversity, inclusion and belonging (DIB)",{"href":669,"dataGaName":670,"dataGaLocation":459},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":323,"config":672},{"href":325,"dataGaName":326,"dataGaLocation":459},{"text":333,"config":674},{"href":335,"dataGaName":336,"dataGaLocation":459},{"text":338,"config":676},{"href":340,"dataGaName":341,"dataGaLocation":459},{"text":678,"config":679},"Modern Slavery Transparency Statement",{"href":680,"dataGaName":681,"dataGaLocation":459},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":683},[684,687,690],{"text":685,"config":686},"Terms",{"href":511,"dataGaName":512,"dataGaLocation":459},{"text":688,"config":689},"Cookies",{"dataGaName":521,"dataGaLocation":459,"id":522,"isOneTrustButton":15},{"text":691,"config":692},"Privacy",{"href":516,"dataGaName":517,"dataGaLocation":459},149,{"id":695,"title":696,"authors":697,"body":699,"category":9,"date":1006,"description":1007,"extension":1008,"externalUrl":6,"featured":10,"heroImage":1009,"meta":1010,"navigation":15,"path":1011,"seo":1012,"slug":1015,"stem":1016,"tags":1017,"template":1021,"updatedDate":6,"__hash__":1022},"blogPosts/en-us/blog/automate-deployment-with-duo-agent-platform.md","Automate deployment processes using a custom agent in GitLab Duo Agent Platform",[698],"Cesar Saavedra",{"type":700,"value":701,"toc":991},"minimark",[702,706,713,716,728,731,736,739,744,764,773,776,780,791,794,797,801,808,843,854,858,872,883,903,907,919,922,931,935,948,962,966,969,972,976,979],[703,704,705],"p",{},"Every engineering organization has those tasks: complex, repetitive, and time-consuming, but absolutely critical to get right. Onboarding a new microservice into an established GitOps deployment workflow is a perfect example. It involves generating bespoke manifests, updating delivery pipelines, configuring image automation, and making sure every piece references the right namespaces, ports, and hostnames. If you miss a step, the deployment breaks. Do it manually and you can lose hours, sometimes a whole day, to a setup that follows the same pattern every time.",[703,707,708,709,712],{},"This is an example of the kind of work AI agents were built for. With ",[710,711,57],"a",{"href":62},", you can create a custom agent that understands your specific application, your specific GitOps workflow, and your specific conventions, and then performs that complex onboarding for you. Better still, the agent itself, along with all the artifacts it generates, is versioned, managed, and governed by GitLab, so you get the speed of automation without giving up enterprise control.",[703,714,715],{},"In this tutorial, you'll learn how to build one of these custom agents from scratch, from generating the system prompt to seeing the new microservice running on a Kubernetes cluster. You can follow along with the content below.",[717,718,721,722],"figure",{"className":719},[720],"video_container","\n  ",[723,724],"iframe",{"src":725,"frameBorder":726,"allowFullScreen":727},"https://www.youtube.com/embed/PpfT40mqr4A?si=CcgUwQr090FYCT3-","0","true",[729,730],"br",{},[732,733,735],"h2",{"id":734},"use-case-onboarding-a-microservice-for-tanukibank","Use case: Onboarding a microservice for TanukiBank",[703,737,738],{},"To make this concrete, we'll work with a fictitious bank called TanukiBank. The bank's web application offers checking accounts, savings accounts, home loans, mortgage and auto loan calculators, and a Pay & Transfer page. The Pay & Transfer page has a Quick Transfer panel, with a goal to allow users to transfer money from one account to another. This panel currently is not implemented so nothing happens when clicking the Transfer button because its underlying microservice doesn't exist yet. Our job is to build that microservice and onboard it into TanukiBank's existing GitOps workflow using a custom agent.",[740,741,743],"h3",{"id":742},"the-application-and-the-gitops-process","The application and the GitOps process",[703,745,746,751,752,755,756,759,760,763],{},[710,747,750],{"href":748,"rel":749},"https://gitlab.com/gitlab-da/projects/tanukibank",[],"TanukiBank's code lives in a GitLab group"," with a ",[753,754,249],"code",{}," subgroup that holds each microservice (home mortgage calculator, auto loan calculator, and so on), plus two top-level projects, ",[753,757,758],{},"Tanuki Bank - Delivery"," and ",[753,761,762],{},"Flux Config",", that handle the deployment to a Kubernetes cluster.",[703,765,766,767,769,770,772],{},"The GitOps workflow itself works like this: Every microservice has a pipeline that builds a container image and pushes it to its built-in container registry. The Flux Image Automation Controller, running on the Kubernetes cluster, watches those registries for changes and, when it detects one, updates the corresponding manifest in the ",[753,768,758],{}," project. That triggers a delivery pipeline which builds and signs a new container image and stores it in the delivery project's registry. Finally, the Flux CD Controller keeps the running pods in the Kubernetes cluster in sync with the delivery project’s container registry across each environment. All Flux manifests live in the ",[753,771,762],{}," project.",[703,774,775],{},"This is a clean workflow, but onboarding any new microservice means touching all of those moving parts in exactly the right way. So, creating a custom agent to do the onboarding for us would make our lives much easier!",[740,777,779],{"id":778},"generating-the-system-prompt","Generating the system prompt",[703,781,782,783,790],{},"A custom agent is only as good as its system prompt, so rather than writing one from scratch, we let GitLab Duo do the heavy lifting. From the ",[710,784,786,789],{"href":748,"rel":785},[],[753,787,788],{},"tanukibank"," group",", we open GitLab Agentic Chat and ask it to study the group, its subgroups, and their contents, and then draft a system prompt for an agent that can onboard new microservices. We are basically asking Duo to thoroughly understand and learn about the well-established GitOps workflow of this application. That way, Duo can create a system prompt that captures enough detail to automate the onboarding of a new microservice into this application’s GitOps workflow.",[703,792,793],{},"GitLab Duo ingests the files, reads the manifests and config files, examines the Dockerfiles, maps out dependencies, and then produces a thorough system prompt complete with reporting instructions, rules to follow, and recommended tools to enable. We save this output for the next step.",[703,795,796],{},"Something important to note is that the system prompt generated by GitLab Duo is specific to this application’s GitOps workflow at this moment. If, in the future, the GitOps workflow for this application were to change, then this system prompt would need to be re-generated by rerunning this step.",[740,798,800],{"id":799},"creating-the-custom-agent","Creating the custom agent",[703,802,803,804,807],{},"Next, we create a new blank project called ",[753,805,806],{},"application-agents",". This project will manage our custom agents, including who can administer them and where they can run. Follow these steps:",[809,810,811,823,834,837,840],"ol",{},[812,813,814,815,818,819,822],"li",{},"From ",[753,816,817],{},"AI > Agents",", we select the ",[753,820,821],{},"Managed"," tab.",[812,824,825,826,829,830,833],{},"Click on the ",[753,827,828],{},"New agent"," button to create a new agent named ",[753,831,832],{},"TanukiBank Microservice Onboarder",", give it a short description, and make it public.",[812,835,836],{},"We select the tools recommended by GitLab Duo.",[812,838,839],{},"Paste in the generated system prompt.",[812,841,842],{},"Create the agent.",[703,844,845,846,759,848,850,851,853],{},"Once the agent is created, we enable the agent in both projects that drive the GitOps workflow: ",[753,847,758],{},[753,849,762],{},". Opening the Agentic Chat panel in each and confirming that ",[753,852,832],{}," appears in the agent dropdown verifies the setup.",[740,855,857],{"id":856},"creating-a-new-microservice-with-the-developer-flow","Creating a new microservice with the Developer flow",[703,859,860,861,863,864,867,868,871],{},"Before testing the agent, we need an actual microservice to onboard. So, let’s create a new one. We head to the ",[753,862,249],{}," group, create a new project called ",[753,865,866],{},"intra-account-transfers",", and put the GitLab Duo Agent Platform's ",[753,869,870],{},"Developer"," foundational flow to work.",[703,873,874,875,878,879,882],{},"We open a new issue in the project and in its description, we list a series of specifications for the microservice. We then click the ",[753,876,877],{},"Generate MR with Duo"," button, which launches the Developer flow. The agent reads the spec, implements the microservice, creates a branch and a merge request, and links the MR back to the issue. After verifying the implementation works locally with a quick ",[753,880,881],{},"curl"," command, we merge the MR. The pipeline runs and pushes the new container images to the project's registry.",[703,884,885,886,889,890,892,893,895,896,899,900,902],{},"At this point, the new microservice exists, but the broader GitOps workflow has no idea about it. The ",[753,887,888],{},"manifests/dev"," directory in the ",[753,891,758],{}," project contains nothing for ",[753,894,866],{},", the delivery pipeline doesn't reference it, and the ",[753,897,898],{},"image-update-automation.yaml"," file in the ",[753,901,762],{}," project has no entries for the new microservice.",[740,904,906],{"id":905},"using-the-custom-agent","Using the custom agent",[703,908,909,910,912,913,915,916,918],{},"After enabling our ",[753,911,832],{}," in the newly created ",[753,914,866],{}," project, we go to ",[753,917,758],{},", open the Agentic Chat panel, select our custom agent from the agent dropdown, and ask it to onboard the new service, providing the service name and hostname.",[703,920,921],{},"The agent gets to work. It locates and reads the new microservice's Dockerfile to determine its port, generates the appropriate manifests, and updates the relevant pipelines. Along the way, it asks for approval before creating commits and merge requests, which we grant.",[703,923,924,925,927,928,930],{},"Then the agent opens two MRs, one in ",[753,926,758],{}," and one in ",[753,929,762],{},", and finishes with a summary of everything it did, including links to the MRs, service details, files created and modified, and recommended next steps.",[740,932,934],{"id":933},"the-results","The results",[703,936,937,938,940,941,943,944,947],{},"We review the changes in both MRs, merge the ",[753,939,762],{}," MR first to update the Flux components, then merge the ",[753,942,758],{}," MR. To verify the deployment, we create a new environment in GitLab named ",[753,945,946],{},"intra-account-transfers-dev"," connected to the Kubernetes cluster, select the appropriate namespace and Flux resource, and save.",[703,949,950,951,954,955,957,958,961],{},"The environment view shows the freshly started pods, and a ",[753,952,953],{},"kubectl"," listing in a terminal confirms three new pods are running. A final ",[753,956,881],{}," against the public hostname ",[753,959,960],{},"itransfers2.ocpgitlab.com"," returns the correct response. The microservice is live, and the onboarding that could potentially consume hours of careful manual work took minutes.",[732,963,965],{"id":964},"benefits","Benefits",[703,967,968],{},"Building a custom agent on top of the GitLab Duo Agent Platform delivers value on multiple fronts. It compresses complex, multi-project setup work into minutes, freeing engineers to focus on higher-value problems. It captures organizational knowledge and context, your specific GitOps conventions, naming patterns, and pipeline structures, into a reusable asset that any authorized team member can invoke.",[703,970,971],{},"Because the agent is defined in a managed project, its access, visibility, and scope are controlled the same way you control any other GitLab resource, which keeps platform teams comfortable. And every artifact the agent creates, every manifest, every commit, every MR, lives in GitLab, fully versioned and auditable. You get the speed of AI automation without sacrificing the governance and traceability your enterprise requires.",[732,973,975],{"id":974},"build-a-custom-agent-today","Build a custom agent today",[703,977,978],{},"Onboarding new services into a mature GitOps workflow is a good example of the kind of task that's complex enough to demand careful attention but repetitive enough to be a drain on engineering time. A custom agent built on the GitLab Duo Agent Platform changes that calculus: It understands your application and organizational context, follows your conventions, and produces consistent, reviewable changes, all while remaining versioned, governed, and secure inside GitLab.",[703,980,981,982,985,986,990],{},"You can ",[710,983,984],{"href":62},"try GitLab Duo Agent Platform"," as part of a free trial of GitLab Ultimate today! Or, if you already have access to GitLab Duo Agent Platform, learn more about it with our ",[710,987,989],{"href":988},"/blog/gitlab-duo-agent-platform-complete-getting-started-guide/","Get Started guide",".",{"title":992,"searchDepth":993,"depth":993,"links":994},"",2,[995,1004,1005],{"id":734,"depth":993,"text":735,"children":996},[997,999,1000,1001,1002,1003],{"id":742,"depth":998,"text":743},3,{"id":778,"depth":998,"text":779},{"id":799,"depth":998,"text":800},{"id":856,"depth":998,"text":857},{"id":905,"depth":998,"text":906},{"id":933,"depth":998,"text":934},{"id":964,"depth":993,"text":965},{"id":974,"depth":993,"text":975},"2026-05-07","Custom AI agents automate complex, repetitive GitOps work in minutes, while remaining versioned, governed, and secured within enterprise guardrails.","md","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773856365/gsx2c0vqlswox3ldmq88.jpg",{},"/en-us/blog/automate-deployment-with-duo-agent-platform",{"config":1013,"title":1014,"description":1007},{"noIndex":10},"Automate deployment processes with GitLab Duo Agent Platform","automate-deployment-with-duo-agent-platform","en-us/blog/automate-deployment-with-duo-agent-platform",[12,1018,1019,1020],"product","features","tutorial","BlogPost","6mX81eSF-cvZq8QXp7M9C4PMCnqEHAQrPBD7qSBUlqo",[1024,1031,1038,1044,1051,1058,1063,1069,1076],{"title":1025,"heroImage":1026,"category":9,"description":1027,"authors":1028,"slug":1030,"externalUrl":6},"Fast and secure AI agent deployment to Google Cloud with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670563/Blog/Hero%20Images/cloudcomputing.jpg","Follow this step-by-step guide, complete with a demo application, to learn how to use agentic AI, along with GitLab's native integrations and CI/CD components.",[1029],"Regnard Raquedan","fast-and-secure-ai-agent-deployment-to-google-cloud-with-gitlab",{"title":1032,"heroImage":1033,"category":9,"description":1034,"authors":1035,"slug":1037,"externalUrl":6},"Accelerate learning with GitLab Duo Agent Platform","Blog/Hero%20Images/Workflow_1800x945.png","Learn how agentic AI helped generate comprehensive gRPC documentation in minutes, not hours.",[1036],"Halil Coban","accelerate-learning-with-gitlab-duo-agent-platform",{"title":1039,"heroImage":1040,"category":9,"description":1041,"authors":1042,"slug":1043,"externalUrl":6},"Enhance application quality with AI-powered test generation","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659604/Blog/Hero%20Images/Screenshot_2024-11-27_at_4.55.28_PM.png","Learn how GitLab Duo with Amazon Q improves the QA process by automatically generating comprehensive unit tests.",[698],"enhance-application-quality-with-ai-powered-test-generation",{"title":1045,"heroImage":1046,"category":9,"description":1047,"authors":1048,"slug":1050,"externalUrl":6},"Speed meets governance: Model Selection comes to GitLab Duo","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669095/Blog/Hero%20Images/gitlabduo.png","Duo Model Selection provides LLM control for each GitLab Duo feature, enabling organizations to adopt AI while meeting strict governance and compliance standards.",[1049],"Susie Bitters","speed-meets-governance-model-selection-comes-to-gitlab-duo",{"title":1052,"heroImage":1053,"category":9,"description":1054,"authors":1055,"slug":1057,"externalUrl":6},"GitLab Duo Agent Platform: What’s next for intelligent DevSecOps","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750687578/esmflevxk5bf3eezjhwk.png","GitLab Duo Agent Platform, a DevSecOps orchestration platform for humans and AI agents, leverages agentic AI for collaboration across the software development lifecycle.",[1056],"Bill Staples","gitlab-duo-agent-platform-what-is-next-for-intelligent-devsecops",{"title":1059,"heroImage":1040,"category":9,"description":1060,"authors":1061,"slug":1062,"externalUrl":6},"Speed up code reviews: Let AI handle the feedback implementation","Discover how GitLab Duo with Amazon Q automates the implementation of code review feedback through AI, transforming a time-consuming manual process into a streamlined workflow.",[698],"speed-up-code-reviews-let-ai-handle-the-feedback-implementation",{"title":1064,"heroImage":1065,"category":9,"description":1066,"authors":1067,"slug":1068,"externalUrl":6},"Accelerate code reviews with GitLab Duo and Amazon Q","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750096976/Blog/Hero%20Images/Blog/Hero%20Images/Screenshot%202024-11-27%20at%204.55.28%E2%80%AFPM_4VVz6DgGBOvbGY8BUmd068_1750096975734.png","Use AI-powered agents to optimize code reviews by automatically analyzing merge requests and providing comprehensive feedback on bugs, readability, and coding standards.",[698],"accelerate-code-reviews-with-gitlab-duo-and-amazon-q",{"title":1070,"heroImage":1071,"category":9,"description":1072,"authors":1073,"slug":1075,"externalUrl":6},"What is a large language model (LLM)?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660057/Blog/Hero%20Images/LLM.jpg","Learn how large language models work, their applications, and their impact on the DevSecOps world.",[1074],"Itzik Gan Baruch","what-is-a-large-language-model-llm",{"title":1077,"heroImage":1078,"category":9,"description":1079,"authors":1080,"slug":1082,"externalUrl":6},"GitLab Duo Chat gets agentic AI makeover  ","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","Our new Duo Chat experience, currently an experimental release, helps developers onboard to projects, understand assignments, implement changes, and more.",[1081],"Torsten Linz","gitlab-duo-chat-gets-agentic-ai-makeover",1778622499817]