[{"data":1,"prerenderedAt":1225},["ShallowReactive",2],{"/blog/agentic-click-through-demo":3,"navigation-en-us":442,"banner-en-us":868,"footer-en-us":878,"blog-post-authors-en-us-Itzik Gan Baruch":1123,"blog-related-posts-en-us-agentic-click-through-demo":1138,"blog-promotions-en-us":1163,"next-steps-en-us":1215},{"id":4,"title":5,"authors":6,"body":8,"category":420,"date":421,"description":422,"extension":423,"externalUrl":424,"faq":424,"featured":425,"heroImage":426,"meta":427,"navigation":428,"path":429,"seo":430,"slug":433,"stem":434,"tags":435,"template":440,"updatedDate":424,"__hash__":441},"blogPosts/en-us/blog/agentic-click-through-demo.md","How I built a demo generator with GitLab Duo Agent Platform",[7],"Itzik Gan Baruch",{"type":9,"value":10,"toc":404},"minimark",[11,15,24,30,76,88,92,95,98,107,114,117,120,140,143,146,149,212,215,218,227,230,238,244,247,254,267,270,277,282,294,297,300,314,317,321,335,338,341,344,353,356,359,362,365,368,377,389,401],[12,13,14],"p",{},"A demo used to take me days to build — screenshots, narration, stitching it together in an external tool, chasing feedback — and every time the feature changed I'd have to start over. A few months ago, I handed most of that to an agent in GitLab Duo Agent Platform.",[12,16,17,23],{},[18,19,22],"a",{"href":20,"rel":21},"https://about.gitlab.com/gitlab-duo-agent-platform/",[],"GitLab Duo Agent Platform"," is built for intelligent orchestration, running agentic workflows across the software development lifecycle, but it's flexible enough to take on repetitive work outside of development, too. When I pointed it at demo generation instead, it worked well enough that I think you should try the same thing with something on your own plate. I created this hands-on tutorial to help you get started. And one more thing: You don't need to be a developer to do this. We've seen an increase in interest from non-engineering roles in using GitLab to run agentic workflows like this one. If that's you, follow along to get started.",[12,25,26],{},[27,28,29],"strong",{},"In this article:",[31,32,33,40,46,52,58,64,70],"ul",{},[34,35,36],"li",{},[18,37,39],{"href":38},"#why-click-through-demos-are-so-effective","Why click-through demos are so effective",[34,41,42],{},[18,43,45],{"href":44},"#the-evolution-from-vms-to-external-demo-tools-to-agents","The evolution: From VMs to external demo tools to agents",[34,47,48],{},[18,49,51],{"href":50},"#the-stages-to-create-a-demo","The stages to create a demo",[34,53,54],{},[18,55,57],{"href":56},"#how-the-demo-generator-works","How the demo generator works",[34,59,60],{},[18,61,63],{"href":62},"#demos-are-now-in-code","Demos are now in code",[34,65,66],{},[18,67,69],{"href":68},"#how-gitlab-duo-agent-platform-made-this-possible","How GitLab Duo Agent Platform made this possible",[34,71,72],{},[18,73,75],{"href":74},"#build-your-first-agent","Build your first agent",[77,78,79],"blockquote",{},[12,80,81,82,87],{},"🎯 Try ",[18,83,85],{"href":20,"rel":84},[],[27,86,22],{}," today!",[89,90,39],"h2",{"id":91},"why-click-through-demos-are-so-effective",[12,93,94],{},"People connect faster when they see a feature in action rather than read about it. But live demos are hard: You need product access and enough familiarity to navigate confidently.",[12,96,97],{},"A click-through demo solves that. You take real actions yourself, guided by a short narrative at each step. Unlike video, it puts you in control of the pace. And unlike live access, which requires a real environment, it's just a link: free to share, reusable, and consistent every time.",[12,99,100,101,106],{},"Explore examples in the ",[18,102,105],{"href":103,"rel":104},"https://dap-demo-hub-dac14a.gitlab.io/",[],"GitLab Demo Hub",".",[12,108,109],{},[110,111],"img",{"alt":112,"src":113,"title":112},"A click-through demo, guiding the user step by step through a real product flow","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783421764/x0oyszct1nuhzg7sxv0z.png",[89,115,45],{"id":116},"the-evolution-from-vms-to-external-demo-tools-to-agents",[12,118,119],{},"Demos haven't always looked like this. Looking back over my career, here's how they have evolved:",[31,121,122,128,134],{},[34,123,124,127],{},[27,125,126],{},"VMs (2000s)",": Shipped virtual machines pre-loaded with the product and demo content, later centralized on ESX servers.",[34,129,130,133],{},[27,131,132],{},"External tools (SaaS era)",": Moved to vendor platforms with built-in analytics, but still manual to build and tied to their infrastructure.",[34,135,136,139],{},[27,137,138],{},"Agentic (now)",": Agents can generate demos from a prompt, deployed on the same project that creates them, no vendor dependency.",[12,141,142],{},"Each layer made demos more accessible; the agentic layer is what makes them sustainable.",[89,144,51],{"id":145},"the-stages-to-create-a-demo",[12,147,148],{},"Creating a click-through demo involves these stages:",[150,151,152,158,164,170,176,182,188,194,200,206],"ol",{},[34,153,154,157],{},[27,155,156],{},"Learn the feature",": Read docs, dig through issues and Slack, sync with product managers and engineers to really understand what you're showing, and mainly understand the problem it solves and the customer impact and value.",[34,159,160,163],{},[27,161,162],{},"Build the story",": Build a real-world scenario that shows the customer impact — what problem this solves for them in their day-to-day work, and why it matters.",[34,165,166,169],{},[27,167,168],{},"Set up the environment",": Create a project and generate realistic demo data that supports the story; for example, seeded vulnerabilities for a security dashboard, or data for meaningful charts.",[34,171,172,175],{},[27,173,174],{},"Capture the content",": Take screenshots or record clips of the actual flow.",[34,177,178,181],{},[27,179,180],{},"Write the narrative",": Craft content that guides someone through each step, based on the story and customer scenario you defined in Step 2.",[34,183,184,187],{},[27,185,186],{},"Build the demo",": Work in an external tool to stitch everything together into a clickable walkthrough, add links to related assets, and define the call to action for each step.",[34,189,190,193],{},[27,191,192],{},"Review with stakeholders",": Share a draft, collect feedback, iterate.",[34,195,196,199],{},[27,197,198],{},"Incorporate edits",": Update the narrative, reorder steps, regenerate as needed.",[34,201,202,205],{},[27,203,204],{},"Publish",": Push to GitLab Docs, Demo Hub, and any other target location.",[34,207,208,211],{},[27,209,210],{},"Announce",": Share internally on Slack, embed in blog posts, post on social.",[12,213,214],{},"Together, these steps can take days, and the moment something changes in the product, you have to start over from Step 3.",[12,216,217],{},"An agent can help with almost all of these steps: reading docs, scanning issues, pulling context from Slack, populating demo data in the project, and pulling out what matters most. It can't fully replace the human who decides what to create and reviews the results before they ship, but it can do a remarkable amount of the groundwork.",[12,219,220,221,226],{},"In ",[18,222,225],{"href":223,"rel":224},"https://gitlab.com/gitlab-da/projects/click-through-demo-generator-v-2",[],"the agentic tool I built",", the Click-Through Demo Generator, I focused on automating Steps 1, 2, 5, 6, and 9: the ones with clear inputs, predictable outputs, and previously fully manual execution. The other steps can also be handled by specialized agents.",[89,228,57],{"id":229},"how-the-demo-generator-works",[12,231,232,233,237],{},"The agent works like this: Drop screenshots into a folder in the project, optionally with a ",[234,235,236],"code",{},"context.md"," for background on the feature, and trigger the workflow from an issue comment. The agent reorders and renames the screenshots, writes the narration, builds the demo with a built-in branded template, and opens a merge request. Review it, and once you merge it, the demo auto-publishes to GitLab Pages. If something needs to change, ask the agent to update it.",[12,239,240],{},[110,241],{"alt":242,"src":243,"title":242},"The issue comment that triggers the Click-Through Demo Generator, and the agent's response with the merge request link","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783431076/etfiomoplfb4soaeevig.png",[12,245,246],{},"Under the hood, a Custom Flow gets triggered. The agent calls a custom tool I built to assemble the demo into an HTML template, overlaying each screenshot with its narration message box, and comments the merge request link back on the issue. A skill guides its writing so the narration follows GitLab's marketing messaging, focused on customer outcomes rather than our own features.",[12,248,249,250,253],{},"Here's the actual instruction text from that skill's ",[234,251,252],{},"SKILL.md"," that the agent reads and follows every time it writes narration:",[77,255,256,262],{},[12,257,258],{},[259,260,261],"em",{},"\"Great narration sells an outcome, not a UI tour. Someone who clicks through should understand what problem the product solves, why this approach is better, and what they could now do, without reading any docs.",[12,263,264],{},[259,265,266],{},"Structure every demo as three acts: Open on the customer's pain, show the product solving it step by step, and close by naming the value they walk away with.\"",[12,268,269],{},"For demos in more languages, we just need to add a localization skill to the project, and every demo gets automatically localized from then on.",[12,271,272],{},[110,273],{"alt":274,"src":275,"title":276},"The demo gallery","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783431133/ljn4kvbwvdxpaafhzgvi.png","The demo gallery: where demos are reviewed and staged before going to production",[278,279,281],"h3",{"id":280},"publishing-with-a-skill","Publishing with a skill",[12,283,284,285,289,290,293],{},"Publishing to the ",[18,286,288],{"href":103,"rel":287},[],"Demo Hub",", our production demo portal, is just as hands-off as publishing the demo itself. When a demo is ready to ship, you tag it as ",[27,291,292],{},"production"," in the development gallery. That's the cue for the agent to run a skill in this project that reaches into the Demo Hub project and does the rest: It writes a short description, stamps it with today's date, tags it as new, and opens a merge request adding the demo as a card. Merging that MR, and putting the demo live, is still a human's call.",[89,295,63],{"id":296},"demos-are-now-in-code",[12,298,299],{},"A click-through demo is really just a set of files: HTML, screenshots, and config, which makes it a great fit to live in a repo. The demo is no longer trapped in a separate tool that only a few people know how to use. It lives in a GitLab project, which means it can be:",[31,301,302,305,308,311],{},[34,303,304],{},"Reviewed in merge requests",[34,306,307],{},"Improved by teammates",[34,309,310],{},"Versioned over time",[34,312,313],{},"Updated by agents, not just humans",[12,315,316],{},"The demo becomes a team asset, not a one-person task. That's a big deal. More teammates can now create demos, review them, improve them, and publish them, without needing any special tool knowledge. If you can open an issue and approve an MR, you can use this workflow.",[278,318,320],{"id":319},"want-to-try-it-yourself","Want to try it yourself?",[12,322,323,324,328,329,334],{},"Fork the ",[18,325,327],{"href":223,"rel":326},[],"Click-Through Demo Generator"," project and read the README for the full setup. Custom Flows aren't copied over when you fork a project, so you'll also need to enable the ",[18,330,333],{"href":331,"rel":332},"https://gitlab.com/gitlab-da/projects/click-through-demo-generator-v-2/-/automate/flows/1010005/",[],"Generate click-through demo flow"," (you'll need to be logged in to GitLab to view it) in your forked project. From there, the README walks you through everything else.",[89,336,69],{"id":337},"how-gitlab-duo-agent-platform-made-this-possible",[12,339,340],{},"This project would have been significantly harder without GitLab Duo Agent Platform.",[12,342,343],{},"GitLab Duo Agent Platform gave me the missing infrastructure: a Custom Flow that triggers from an issue comment, a container image I define with exactly the runtime and dependencies it needs, and built-in tools to work with GitLab directly, like opening merge requests and commenting on issues. The merge request is where I review the demo before merging it and letting the agent publish it to the Demo Hub.",[12,345,346,347,352],{},"In platform terms, this is agentic automation — the ",[18,348,351],{"href":349,"rel":350},"https://docs.gitlab.com/user/duo_agent_platform/flows/custom/",[],"Custom Flow"," orchestrating the agent's behavior while GitLab’s built-in tools let it work with issues, project files, merge requests, and GitLab Pages without requiring separate integrations.",[12,354,355],{},"Custom Flows let you define your own multi-step workflow and extend the agent with custom tools, like the tool I built to assemble screenshots and narration into the demo's HTML template. You implement that capability yourself, and it runs as part of the flow, on GitLab's compute.",[12,357,358],{},"Everything happens inside GitLab: the request, the review, the output, the deployment. That's what makes the workflow faster, clearer, and easier to hand off.",[89,360,75],{"id":361},"build-your-first-agent",[12,363,364],{},"Zoom out from my own workflow for a second and focus on what happens when repetitive work gets handed to an agent with access to your GitLab data. For a team lead, that's fewer cycles spent producing collateral and more spent reviewing and deciding. The same shift shows up anywhere a team has a repeatable, well-scoped task sitting on top of GitLab context.",[12,366,367],{},"Start small and simple. The demo generator is just one example of the pattern, but you don't need to write code or use a Custom Flow to get started. Start with a single agent, give it one clear job, and see what it can do before reaching for anything more complex.",[12,369,370,371,376],{},"In this quick tutorial, you'll build your first agent, one that helps you plan your work and saves you time. Don't have access to GitLab Duo Agent Platform? You can ",[18,372,375],{"href":373,"rel":374},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial",[],"start a free trial"," to follow along. Two tasks, about 10 minutes total:",[12,378,379,382,383,388],{},[27,380,381],{},"Task 1: Create a custom agent."," In the GitLab UI, ",[18,384,387],{"href":385,"rel":386},"https://docs.gitlab.com/user/duo_agent_platform/agents/custom/#create-an-agent",[],"create a custom agent"," called \"Daily Planner.\" Tell it what priority means to you — for example, issues blocking a teammate, anything due this week, or \"treat anything with the customer label as top priority regardless of due date.\" Have it look at your assigned issues and merge requests, apply those rules, and tell you what to tackle first, what's blocking others, and what can wait.",[12,390,391,394,395,400],{},[27,392,393],{},"Task 2: Enable it and review."," ",[18,396,399],{"href":397,"rel":398},"https://docs.gitlab.com/user/duo_agent_platform/agents/custom/#enable-an-agent",[],"Enable the agent"," in your project, then open GitLab Duo Agentic Chat, select it, and ask it to plan your day. It has built-in access to GitLab, so it pulls your actual assigned issues and MRs itself. Compare its plan to what you'd have figured out yourself, and adjust the agent's instructions until the plan is genuinely useful.",[12,402,403],{},"Congratulations, you just built your first agent, and it's already making your day a little easier. This is where it gets fun: Start thinking about what else you'd hand it, another decision you're tired of making yourself. Keep going, and that single-purpose agent turns into the assistant that runs your whole workflow.",{"title":405,"searchDepth":406,"depth":406,"links":407},"",2,[408,409,410,411,415,418,419],{"id":91,"depth":406,"text":39},{"id":116,"depth":406,"text":45},{"id":145,"depth":406,"text":51},{"id":229,"depth":406,"text":57,"children":412},[413],{"id":280,"depth":414,"text":281},3,{"id":296,"depth":406,"text":63,"children":416},[417],{"id":319,"depth":414,"text":320},{"id":337,"depth":406,"text":69},{"id":361,"depth":406,"text":75},"ai","2026-08-13","Demos haven't always looked like this. Looking back over my career, here's how they have evolved. Follow the tutorial to build your own demo and agent.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png",{},true,"/en-us/blog/agentic-click-through-demo",{"noIndex":425,"title":5,"description":431,"ogImage":432},"Demos haven't always looked like this. Looking back over my career, here's how they have evolved.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752678395/impw8no5tbskr6k2afgu.jpg","agentic-click-through-demo","en-us/blog/agentic-click-through-demo",[436,437,438,439],"AI","product","features","tutorial","BlogPost","re9NKWWjLflrTNCuxeJCuf6yQE452MeTeIisG8I1wwU",{"logo":443,"freeTrial":448,"sales":453,"login":458,"items":463,"search":788,"minimal":819,"duo":838,"switchNav":847,"pricingDeployment":858},{"config":444},{"href":445,"dataGaName":446,"dataGaLocation":447},"/","gitlab logo","header",{"text":449,"config":450},"Get free trial",{"href":451,"dataGaName":452,"dataGaLocation":447},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":454,"config":455},"Request a demo",{"href":456,"dataGaName":457,"dataGaLocation":447},"/sales/?contact-topic=request-demo","sales",{"text":459,"config":460},"Sign in",{"href":461,"dataGaName":462,"dataGaLocation":447},"https://gitlab.com/users/sign_in/","sign in",[464,492,592,597,710,766],{"text":465,"config":466,"menu":468},"Platform",{"dataNavLevelOne":467},"platform",{"type":469,"columns":470},"cards",[471,477,484],{"title":465,"description":472,"link":473},"The intelligent orchestration platform for DevSecOps",{"text":474,"config":475},"Explore our Platform",{"href":476,"dataGaName":467,"dataGaLocation":447},"/platform/",{"title":22,"description":478,"link":479},"Agentic AI for the entire software lifecycle",{"text":480,"config":481},"Meet GitLab Duo",{"href":482,"dataGaName":483,"dataGaLocation":447},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":485,"description":486,"link":487},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":488,"config":489},"Learn more",{"href":490,"dataGaName":491,"dataGaLocation":447},"/why-gitlab/","why gitlab",{"text":493,"left":428,"config":494,"menu":496},"Product",{"dataNavLevelOne":495},"solutions",{"type":497,"link":498,"columns":502,"feature":571},"lists",{"text":499,"config":500},"View all Solutions",{"href":501,"dataGaName":495,"dataGaLocation":447},"/solutions/",[503,527,550],{"title":504,"description":505,"link":506,"items":511},"Automation","CI/CD and automation to accelerate deployment",{"config":507},{"icon":508,"href":509,"dataGaName":510,"dataGaLocation":447},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[512,516,519,523],{"text":513,"config":514},"CI/CD",{"href":515,"dataGaLocation":447,"dataGaName":513},"/solutions/continuous-integration/",{"text":22,"config":517},{"href":482,"dataGaLocation":447,"dataGaName":518},"gitlab duo agent platform - product menu",{"text":520,"config":521},"Source Code Management",{"href":522,"dataGaLocation":447,"dataGaName":520},"/solutions/source-code-management/",{"text":524,"config":525},"Automated Software Delivery",{"href":509,"dataGaLocation":447,"dataGaName":526},"Automated software delivery",{"title":528,"description":529,"link":530,"items":535},"Security","Deliver code faster without compromising security",{"config":531},{"href":532,"dataGaName":533,"dataGaLocation":447,"icon":534},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[536,540,545],{"text":537,"config":538},"Application Security Testing",{"href":532,"dataGaName":539,"dataGaLocation":447},"Application security testing",{"text":541,"config":542},"Software Supply Chain Security",{"href":543,"dataGaLocation":447,"dataGaName":544},"/solutions/supply-chain/","Software supply chain security",{"text":546,"config":547},"Software Compliance",{"href":548,"dataGaName":549,"dataGaLocation":447},"/solutions/software-compliance/","software compliance",{"title":551,"link":552,"items":557},"Measurement",{"config":553},{"icon":554,"href":555,"dataGaName":556,"dataGaLocation":447},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[558,562,566],{"text":559,"config":560},"Visibility & Measurement",{"href":555,"dataGaLocation":447,"dataGaName":561},"Visibility and Measurement",{"text":563,"config":564},"Value Stream Management",{"href":565,"dataGaLocation":447,"dataGaName":563},"/solutions/value-stream-management/",{"text":567,"config":568},"Analytics & Insights",{"href":569,"dataGaLocation":447,"dataGaName":570},"/solutions/analytics-and-insights/","Analytics and insights",{"title":572,"type":497,"items":573},"GitLab for",[574,580,586],{"text":575,"config":576},"Enterprise",{"icon":577,"href":578,"dataGaLocation":447,"dataGaName":579},"Building","/enterprise/","enterprise",{"text":581,"config":582},"Small Business",{"icon":583,"href":584,"dataGaLocation":447,"dataGaName":585},"Work","/small-business/","small business",{"text":587,"config":588},"Public Sector",{"icon":589,"href":590,"dataGaLocation":447,"dataGaName":591},"Organization","/solutions/public-sector/","public sector",{"text":593,"config":594},"Pricing",{"href":595,"dataGaName":596,"dataGaLocation":447,"dataNavLevelOne":596},"/pricing/","pricing",{"text":598,"config":599,"menu":601},"Resources",{"dataNavLevelOne":600},"resources",{"type":497,"link":602,"columns":606,"feature":699},{"text":603,"config":604},"View all resources",{"href":605,"dataGaName":600,"dataGaLocation":447},"/resources/",[607,640,666],{"title":608,"items":609},"Getting started",[610,615,620,625,630,635],{"text":611,"config":612},"Install",{"href":613,"dataGaName":614,"dataGaLocation":447},"/install/","install",{"text":616,"config":617},"Quick start guides",{"href":618,"dataGaName":619,"dataGaLocation":447},"/get-started/","quick setup checklists",{"text":621,"config":622},"Learn",{"href":623,"dataGaLocation":447,"dataGaName":624},"https://university.gitlab.com/","learn",{"text":626,"config":627},"Product documentation",{"href":628,"dataGaName":629,"dataGaLocation":447},"https://docs.gitlab.com/","product documentation",{"text":631,"config":632},"Best practice videos",{"href":633,"dataGaName":634,"dataGaLocation":447},"/getting-started-videos/","best practice videos",{"text":636,"config":637},"Integrations",{"href":638,"dataGaName":639,"dataGaLocation":447},"/integrations/","integrations",{"title":641,"items":642},"Discover",[643,648,653,657,661],{"text":644,"config":645},"Customer success stories",{"href":646,"dataGaName":647,"dataGaLocation":447},"/customers/","customer success stories",{"text":649,"config":650},"Blog",{"href":651,"dataGaName":652,"dataGaLocation":447},"/blog/","blog",{"text":288,"config":654},{"href":655,"dataGaName":656,"dataGaLocation":447},"/demo-hub/","demo hub",{"text":658,"config":659},"The Source",{"href":660,"dataGaName":652,"dataGaLocation":447},"/the-source/",{"text":662,"config":663},"Remote",{"href":664,"dataGaName":665,"dataGaLocation":447},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":667,"items":668},"Connect",[669,674,679,684,689,694],{"text":670,"config":671},"GitLab Services",{"href":672,"dataGaName":673,"dataGaLocation":447},"/services/","services",{"text":675,"config":676},"Contribute",{"href":677,"dataGaName":678,"dataGaLocation":447},"https://contributors.gitlab.com","contribute",{"text":680,"config":681},"Community",{"href":682,"dataGaName":683,"dataGaLocation":447},"/community/","community",{"text":685,"config":686},"Forum",{"href":687,"dataGaName":688,"dataGaLocation":447},"https://forum.gitlab.com/","forum",{"text":690,"config":691},"Events",{"href":692,"dataGaName":693,"dataGaLocation":447},"/events/","events",{"text":695,"config":696},"Partners",{"href":697,"dataGaName":698,"dataGaLocation":447},"/partners/","partners",{"config":700,"title":703,"text":704,"link":705},{"background":701,"textColor":702},"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":706,"config":707},"Read the latest",{"href":708,"dataGaName":709,"dataGaLocation":447},"/whats-new/","whats new",{"text":711,"config":712,"menu":714},"Company",{"dataNavLevelOne":713},"company",{"type":497,"columns":715},[716],{"items":717},[718,723,729,731,736,741,746,751,756,761],{"text":719,"config":720},"About",{"href":721,"dataGaName":722,"dataGaLocation":447},"/company/","about",{"text":724,"config":725,"footerGa":728},"Jobs",{"href":726,"dataGaName":727,"dataGaLocation":447},"/jobs/","jobs",{"dataGaName":727},{"text":690,"config":730},{"href":692,"dataGaName":693,"dataGaLocation":447},{"text":732,"config":733},"Leadership",{"href":734,"dataGaName":735,"dataGaLocation":447},"/company/team/e-group/","leadership",{"text":737,"config":738},"Handbook",{"href":739,"dataGaName":740,"dataGaLocation":447},"https://handbook.gitlab.com/","handbook",{"text":742,"config":743},"Investor relations",{"href":744,"dataGaName":745,"dataGaLocation":447},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":747,"config":748},"Trust Center",{"href":749,"dataGaName":750,"dataGaLocation":447},"/security/","trust center",{"text":752,"config":753},"AI Transparency Center",{"href":754,"dataGaName":755,"dataGaLocation":447},"/ai-transparency-center/","ai transparency center",{"text":757,"config":758},"Newsletter",{"href":759,"dataGaName":760,"dataGaLocation":447},"/company/contact/#contact-forms","newsletter",{"text":762,"config":763},"Press",{"href":764,"dataGaName":765,"dataGaLocation":447},"/press/","press",{"text":767,"config":768,"menu":769},"Contact us",{"dataNavLevelOne":713},{"type":497,"columns":770},[771],{"items":772},[773,778,783],{"text":774,"config":775},"Talk to sales",{"href":776,"dataGaName":777,"dataGaLocation":447},"/sales/","talk to sales",{"text":779,"config":780},"Support portal",{"href":781,"dataGaName":782,"dataGaLocation":447},"https://support.gitlab.com/hc/en-us","support portal",{"text":784,"config":785},"Customer portal",{"href":786,"dataGaName":787,"dataGaLocation":447},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":789,"login":790,"suggestions":797},"Close",{"text":791,"link":792},"To search repositories and projects, login to",{"text":793,"config":794},"gitlab.com",{"href":461,"dataGaName":795,"dataGaLocation":796},"search login","search",{"text":798,"default":799},"Suggestions",[800,802,806,808,812,816],{"text":22,"config":801},{"href":482,"dataGaName":22,"dataGaLocation":796},{"text":803,"config":804},"Code Suggestions (AI)",{"href":805,"dataGaName":803,"dataGaLocation":796},"/solutions/code-suggestions/",{"text":513,"config":807},{"href":515,"dataGaName":513,"dataGaLocation":796},{"text":809,"config":810},"GitLab on AWS",{"href":811,"dataGaName":809,"dataGaLocation":796},"/partners/technology-partners/aws/",{"text":813,"config":814},"GitLab on Google Cloud",{"href":815,"dataGaName":813,"dataGaLocation":796},"/partners/technology-partners/google-cloud-platform/",{"text":817,"config":818},"Why GitLab?",{"href":490,"dataGaName":817,"dataGaLocation":796},{"freeTrial":820,"mobileIcon":825,"desktopIcon":830,"secondaryButton":833},{"text":821,"config":822},"Start free trial",{"href":823,"dataGaName":452,"dataGaLocation":824},"https://gitlab.com/-/trials/new/","nav",{"altText":826,"config":827},"Gitlab Icon",{"src":828,"dataGaName":829,"dataGaLocation":824},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":826,"config":831},{"src":832,"dataGaName":829,"dataGaLocation":824},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":834,"config":835},"Get Started",{"href":836,"dataGaName":837,"dataGaLocation":824},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":839,"mobileIcon":843,"desktopIcon":845},{"text":840,"config":841},"Learn more about GitLab Duo",{"href":482,"dataGaName":842,"dataGaLocation":824},"gitlab duo",{"altText":826,"config":844},{"src":828,"dataGaName":829,"dataGaLocation":824},{"altText":826,"config":846},{"src":832,"dataGaName":829,"dataGaLocation":824},{"button":848,"mobileIcon":853,"desktopIcon":855},{"text":849,"config":850},"/switch",{"href":851,"dataGaName":852,"dataGaLocation":824},"#contact","switch",{"altText":826,"config":854},{"src":828,"dataGaName":829,"dataGaLocation":824},{"altText":826,"config":856},{"src":857,"dataGaName":829,"dataGaLocation":824},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":859,"mobileIcon":864,"desktopIcon":866},{"text":860,"config":861},"Back to pricing",{"href":595,"dataGaName":862,"dataGaLocation":824,"icon":863},"back to pricing","GoBack",{"altText":826,"config":865},{"src":828,"dataGaName":829,"dataGaLocation":824},{"altText":826,"config":867},{"src":832,"dataGaName":829,"dataGaLocation":824},{"title":869,"titleMobile":870,"button":871,"config":876},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":488,"config":872},{"href":873,"dataGaName":874,"dataGaLocation":875},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":877,"disabled":425},"release",{"data":879},{"text":880,"source":881,"edit":887,"contribute":892,"config":897,"items":902,"minimal":1112},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":882,"config":883},"View page source",{"href":884,"dataGaName":885,"dataGaLocation":886},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":888,"config":889},"Edit this page",{"href":890,"dataGaName":891,"dataGaLocation":886},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":893,"config":894},"Please contribute",{"href":895,"dataGaName":896,"dataGaLocation":886},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":898,"facebook":899,"youtube":900,"linkedin":901},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[903,950,1004,1048,1080],{"title":593,"links":904,"subMenu":919},[905,909,914],{"text":906,"config":907},"View plans",{"href":595,"dataGaName":908,"dataGaLocation":886},"view plans",{"text":910,"config":911},"Why Premium?",{"href":912,"dataGaName":913,"dataGaLocation":886},"/pricing/premium/","why premium",{"text":915,"config":916},"Why Ultimate?",{"href":917,"dataGaName":918,"dataGaLocation":886},"/pricing/ultimate/","why ultimate",[920],{"title":921,"links":922},"Contact Us",[923,926,928,930,935,940,945],{"text":924,"config":925},"Contact sales",{"href":776,"dataGaName":457,"dataGaLocation":886},{"text":779,"config":927},{"href":781,"dataGaName":782,"dataGaLocation":886},{"text":784,"config":929},{"href":786,"dataGaName":787,"dataGaLocation":886},{"text":931,"config":932},"Status",{"href":933,"dataGaName":934,"dataGaLocation":886},"https://status.gitlab.com/","status",{"text":936,"config":937},"Terms of use",{"href":938,"dataGaName":939,"dataGaLocation":886},"/terms/","terms of use",{"text":941,"config":942},"Privacy statement",{"href":943,"dataGaName":944,"dataGaLocation":886},"/privacy/","privacy statement",{"text":946,"config":947},"Cookie preferences",{"dataGaName":948,"dataGaLocation":886,"id":949,"isOneTrustButton":428},"cookie preferences","ot-sdk-btn",{"title":493,"links":951,"subMenu":960},[952,956],{"text":953,"config":954},"DevSecOps platform",{"href":476,"dataGaName":955,"dataGaLocation":886},"devsecops platform",{"text":957,"config":958},"AI-Assisted Development",{"href":482,"dataGaName":959,"dataGaLocation":886},"ai-assisted development",[961],{"title":962,"links":963},"Topics",[964,969,974,979,984,989,994,999],{"text":965,"config":966},"CICD",{"href":967,"dataGaName":968,"dataGaLocation":886},"/topics/ci-cd/","cicd",{"text":970,"config":971},"GitOps",{"href":972,"dataGaName":973,"dataGaLocation":886},"/topics/gitops/","gitops",{"text":975,"config":976},"DevOps",{"href":977,"dataGaName":978,"dataGaLocation":886},"/topics/devops/","devops",{"text":980,"config":981},"Version Control",{"href":982,"dataGaName":983,"dataGaLocation":886},"/topics/version-control/","version control",{"text":985,"config":986},"DevSecOps",{"href":987,"dataGaName":988,"dataGaLocation":886},"/topics/devsecops/","devsecops",{"text":990,"config":991},"Cloud Native",{"href":992,"dataGaName":993,"dataGaLocation":886},"/topics/cloud-native/","cloud native",{"text":995,"config":996},"AI for Coding",{"href":997,"dataGaName":998,"dataGaLocation":886},"/topics/devops/ai-for-coding/","ai for coding",{"text":1000,"config":1001},"Agentic AI",{"href":1002,"dataGaName":1003,"dataGaLocation":886},"/topics/agentic-ai/","agentic ai",{"title":1005,"links":1006},"Solutions",[1007,1009,1011,1016,1020,1023,1027,1030,1032,1035,1038,1043],{"text":537,"config":1008},{"href":532,"dataGaName":537,"dataGaLocation":886},{"text":526,"config":1010},{"href":509,"dataGaName":510,"dataGaLocation":886},{"text":1012,"config":1013},"Agile development",{"href":1014,"dataGaName":1015,"dataGaLocation":886},"/solutions/agile-delivery/","agile delivery",{"text":1017,"config":1018},"SCM",{"href":522,"dataGaName":1019,"dataGaLocation":886},"source code management",{"text":965,"config":1021},{"href":515,"dataGaName":1022,"dataGaLocation":886},"continuous integration & delivery",{"text":1024,"config":1025},"Value stream management",{"href":565,"dataGaName":1026,"dataGaLocation":886},"value stream management",{"text":970,"config":1028},{"href":1029,"dataGaName":973,"dataGaLocation":886},"/solutions/gitops/",{"text":575,"config":1031},{"href":578,"dataGaName":579,"dataGaLocation":886},{"text":1033,"config":1034},"Small business",{"href":584,"dataGaName":585,"dataGaLocation":886},{"text":1036,"config":1037},"Public sector",{"href":590,"dataGaName":591,"dataGaLocation":886},{"text":1039,"config":1040},"Education",{"href":1041,"dataGaName":1042,"dataGaLocation":886},"/solutions/education/","education",{"text":1044,"config":1045},"Financial services",{"href":1046,"dataGaName":1047,"dataGaLocation":886},"/solutions/finance/","financial services",{"title":598,"links":1049},[1050,1052,1054,1056,1059,1061,1064,1066,1068,1070,1072,1074,1076,1078],{"text":611,"config":1051},{"href":613,"dataGaName":614,"dataGaLocation":886},{"text":616,"config":1053},{"href":618,"dataGaName":619,"dataGaLocation":886},{"text":621,"config":1055},{"href":623,"dataGaName":624,"dataGaLocation":886},{"text":626,"config":1057},{"href":628,"dataGaName":1058,"dataGaLocation":886},"docs",{"text":649,"config":1060},{"href":651,"dataGaName":652,"dataGaLocation":886},{"text":1062,"config":1063},"What's new",{"href":708,"dataGaName":709,"dataGaLocation":886},{"text":644,"config":1065},{"href":646,"dataGaName":647,"dataGaLocation":886},{"text":662,"config":1067},{"href":664,"dataGaName":665,"dataGaLocation":886},{"text":670,"config":1069},{"href":672,"dataGaName":673,"dataGaLocation":886},{"text":675,"config":1071},{"href":677,"dataGaName":678,"dataGaLocation":886},{"text":680,"config":1073},{"href":682,"dataGaName":683,"dataGaLocation":886},{"text":685,"config":1075},{"href":687,"dataGaName":688,"dataGaLocation":886},{"text":690,"config":1077},{"href":692,"dataGaName":693,"dataGaLocation":886},{"text":695,"config":1079},{"href":697,"dataGaName":698,"dataGaLocation":886},{"title":711,"links":1081},[1082,1084,1086,1088,1090,1092,1096,1101,1103,1105,1107],{"text":719,"config":1083},{"href":721,"dataGaName":713,"dataGaLocation":886},{"text":724,"config":1085},{"href":726,"dataGaName":727,"dataGaLocation":886},{"text":732,"config":1087},{"href":734,"dataGaName":735,"dataGaLocation":886},{"text":737,"config":1089},{"href":739,"dataGaName":740,"dataGaLocation":886},{"text":742,"config":1091},{"href":744,"dataGaName":745,"dataGaLocation":886},{"text":1093,"config":1094},"Sustainability",{"href":1095,"dataGaName":1093,"dataGaLocation":886},"/sustainability/",{"text":1097,"config":1098},"Diversity, inclusion and belonging (DIB)",{"href":1099,"dataGaName":1100,"dataGaLocation":886},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":747,"config":1102},{"href":749,"dataGaName":750,"dataGaLocation":886},{"text":757,"config":1104},{"href":759,"dataGaName":760,"dataGaLocation":886},{"text":762,"config":1106},{"href":764,"dataGaName":765,"dataGaLocation":886},{"text":1108,"config":1109},"Modern Slavery Transparency Statement",{"href":1110,"dataGaName":1111,"dataGaLocation":886},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1113},[1114,1117,1120],{"text":1115,"config":1116},"Terms",{"href":938,"dataGaName":939,"dataGaLocation":886},{"text":1118,"config":1119},"Cookies",{"dataGaName":948,"dataGaLocation":886,"id":949,"isOneTrustButton":428},{"text":1121,"config":1122},"Privacy",{"href":943,"dataGaName":944,"dataGaLocation":886},[1124],{"id":1125,"title":7,"body":424,"config":1126,"content":1128,"description":424,"extension":1132,"meta":1133,"navigation":428,"path":1134,"seo":1135,"stem":1136,"__hash__":1137},"blogAuthors/en-us/blog/authors/itzik-gan-baruch.yml",{"template":1127},"BlogAuthor",{"name":7,"config":1129},{"headshot":1130,"ctfId":1131},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658921/Blog/Author%20Headshots/iganbaruch-headshot.jpg","iganbaruch","yml",{},"/en-us/blog/authors/itzik-gan-baruch",{},"en-us/blog/authors/itzik-gan-baruch","bz9VMiTQ1ixvnoxUFk0jiUcnLG3oQsymgXNCqyRqfsk",[1139,1147,1155],{"title":1140,"description":1141,"heroImage":1142,"category":420,"date":1143,"authors":1144,"slug":1146,"externalUrl":424},"How to govern agentic AI, MCPs, and AI code assistants","AI agents can write, push, and deploy without human review at each step. Learn a practical framework for controlling access, permissions, and audit trails.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1785337625/ifzlc2hyzaxhzmjgyymh.png","2026-07-31",[1145],"Julie Griffin","govern-agentic-ai-mcps-code-assistants",{"title":1148,"description":1149,"heroImage":1150,"category":420,"date":1151,"authors":1152,"slug":1154,"externalUrl":424},"Claude Opus 5 on GitLab: Reasoning built for the hard tasks","Anthropic’s Claude Opus 5 is now available on GitLab Duo Agent Platform, delivering deeper reasoning without sacrificing speed.","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",[1153],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"title":1156,"description":1157,"heroImage":1158,"category":420,"date":1159,"authors":1160,"slug":1162,"externalUrl":424},"Modernize Java with Cursor and GitLab","This tutorial starts with a focused tests fix, introduces quality gates, and implements code changes with development lifecycle context, tests, and review evidence.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1776457632/llddiylsgwuze0u1rjks.png","2026-07-22",[1161],"Michael Friedrich","modernize-java-with-cursor-and-gitlab",{"promotions":1164},[1165,1178,1189,1201],{"id":1166,"categories":1167,"header":1168,"text":1169,"button":1170,"image":1175},"ai-modernization",[420],"Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1171,"config":1172},"Get your AI maturity score",{"href":1173,"dataGaName":1174,"dataGaLocation":652},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1176},{"src":1177},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1179,"categories":1180,"header":1181,"text":1169,"button":1182,"image":1186},"devops-modernization",[437,988],"Are you just managing tools or shipping innovation?",{"text":1183,"config":1184},"Get your DevOps maturity score",{"href":1185,"dataGaName":1174,"dataGaLocation":652},"/assessments/devops-modernization-assessment/",{"config":1187},{"src":1188},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1190,"categories":1191,"header":1193,"text":1169,"button":1194,"image":1198},"security-modernization",[1192],"security","Are you trading speed for security?",{"text":1195,"config":1196},"Get your security maturity score",{"href":1197,"dataGaName":1174,"dataGaLocation":652},"/assessments/security-modernization-assessment/",{"config":1199},{"src":1200},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1202,"paths":1203,"header":1206,"text":1207,"button":1208,"image":1213},"github-azure-migration",[1204,1205],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":1209,"config":1210},"See how GitLab compares to GitHub",{"href":1211,"dataGaName":1212,"dataGaLocation":652},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1214},{"src":1188},{"header":1216,"blurb":1217,"button":1218,"secondaryButton":1223},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1219,"config":1220},"Get your free trial",{"href":1221,"dataGaName":452,"dataGaLocation":1222},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":924,"config":1224},{"href":776,"dataGaName":457,"dataGaLocation":1222},1786675692133]