[{"data":1,"prerenderedAt":2392},["ShallowReactive",2],{"/blog/customizing-gitlab-duo-chat-rules-prompts-workflows":3,"navigation-en-us":1612,"banner-en-us":2037,"footer-en-us":2047,"blog-post-authors-en-us-Itzik Gan Baruch":2292,"blog-related-posts-en-us-customizing-gitlab-duo-chat-rules-prompts-workflows":2307,"blog-promotions-en-us":2330,"next-steps-en-us":2382},{"id":4,"title":5,"authors":6,"body":8,"category":1589,"date":1590,"description":1591,"extension":1592,"externalUrl":1593,"faq":1593,"featured":1594,"heroImage":1595,"meta":1596,"navigation":863,"path":1597,"seo":1598,"slug":1602,"stem":1603,"tags":1604,"template":1609,"updatedDate":1610,"__hash__":1611},"blogPosts/en-us/blog/customizing-gitlab-duo-chat-rules-prompts-workflows.md","Customizing GitLab Duo Agent Platform: Chat rules, prompts, and workflows",[7],"Itzik Gan Baruch",{"type":9,"value":10,"toc":1564},"minimark",[11,24,30,76,90,94,106,109,116,124,129,137,144,155,160,230,234,246,253,258,316,320,358,366,374,387,391,403,406,412,426,432,439,445,452,460,464,484,488,637,641,678,682,708,715,718,725,728,751,758,763,924,929,964,971,978,981,999,1002,1040,1051,1054,1057,1070,1074,1077,1083,1088,1115,1120,1131,1136,1170,1177,1180,1187,1216,1219,1223,1226,1232,1237,1269,1273,1304,1309,1313,1319,1464,1468,1471,1488,1496,1500,1541,1544,1552,1560],[12,13,14],"p",{},[15,16,17,18,23],"em",{},"Welcome to Part 8 of our eight-part guide, ",[19,20,22],"a",{"href":21},"/blog/gitlab-duo-agent-platform-complete-getting-started-guide/","Getting started with GitLab Duo Agent Platform",", where you'll master building and deploying AI agents and workflows within your development lifecycle. Follow tutorials that take you from your first interaction to production-ready automation workflows with full customization.",[12,25,26],{},[27,28,29],"strong",{},"In this article:",[31,32,33,40,46,52,58,64,70],"ul",{},[34,35,36],"li",{},[19,37,39],{"href":38},"#introduction-to-customization","Introduction to customization",[34,41,42],{},[19,43,45],{"href":44},"#custom-rules","Custom rules",[34,47,48],{},[19,49,51],{"href":50},"#agentsmd-for-customizing-agent-behavior","AGENTS.md",[34,53,54],{},[19,55,57],{"href":56},"#custom-review-instructions","Custom review instructions",[34,59,60],{},[19,61,63],{"href":62},"#agent-skills","Agent Skills",[34,65,66],{},[19,67,69],{"href":68},"#mcp-configuration","MCP configuration",[34,71,72],{},[19,73,75],{"href":74},"#custom-agents-and-flows","Custom agents and flows",[77,78,79],"blockquote",{},[12,80,81,82,89],{},"🎯 Try ",[19,83,86],{"href":84,"rel":85},"https://about.gitlab.com/gitlab-duo-agent-platform/",[],[27,87,88],{},"GitLab Duo Agent Platform"," today!",[91,92,39],"h2",{"id":93},"introduction-to-customization",[12,95,96,99,100,105],{},[19,97,88],{"href":84,"rel":98},[]," delivers powerful capabilities right away, and you can unlock even greater value by tailoring it to your team's specific needs. GitLab offers several customization methods across user, workspace, and project levels. For the full matrix of methods and where they apply (Chat, agents, flows, Code Review), see the ",[19,101,104],{"href":102,"rel":103},"https://docs.gitlab.com/user/duo_agent_platform/customize/",[],"Customize GitLab Duo Agent Platform"," overview.",[91,107,45],{"id":108},"custom-rules",[12,110,111,115],{},[19,112,45],{"href":113,"rel":114},"https://docs.gitlab.com/user/duo_agent_platform/customize/custom_rules/",[]," let you set personal preferences and team standards that guide how GitLab Duo Chat, agents, flows, and the GitLab Duo CLI behave — for example, coding style, documentation conventions, or how tests should be written.",[12,117,118,119,123],{},"Custom rules are available on all supported platforms. For the exact list of supported features (Chat, agents, flows, CLI) and version requirements, see the ",[19,120,122],{"href":113,"rel":121},[],"Custom rules documentation",".",[125,126,128],"h3",{"id":127},"user-level-custom-rules","User-level custom rules",[12,130,131,132,123],{},"User-level rules apply to all your projects. They apply in your local environment (editor extensions and GitLab Duo CLI). For details on where they are honored and all supported locations (including environment variables), refer to ",[19,133,136],{"href":134,"rel":135},"https://docs.gitlab.com/user/duo_agent_platform/customize/custom_rules/#create-user-level-custom-rules",[],"Create user-level custom rules",[12,138,139,140,123],{},"For detailed instructions on creating user-level custom rules, see the ",[19,141,143],{"href":134,"rel":142},[],"GitLab documentation",[12,145,146,149,150,154],{},[27,147,148],{},"Create the file"," ",[151,152,153],"code",{},"~/.gitlab/duo/chat-rules.md"," in your home directory.",[12,156,157],{},[27,158,159],{},"Example rules:",[161,162,167],"pre",{"className":163,"code":164,"language":165,"meta":166,"style":166},"language-markdown shiki shiki-themes github-light","- Always use TypeScript for new code, never JavaScript\n- Include JSDoc comments for all functions\n- Use single quotes for strings\n- Follow the existing code style in the repository\n- Write concise explanations, avoid lengthy descriptions\n- Suggest tests for any code changes\n- Use async/await instead of promises\n","markdown","",[151,168,169,182,190,198,206,214,222],{"__ignoreMap":166},[170,171,174,178],"span",{"class":172,"line":173},"line",1,[170,175,177],{"class":176},"sqxcx","-",[170,179,181],{"class":180},"sgsFI"," Always use TypeScript for new code, never JavaScript\n",[170,183,185,187],{"class":172,"line":184},2,[170,186,177],{"class":176},[170,188,189],{"class":180}," Include JSDoc comments for all functions\n",[170,191,193,195],{"class":172,"line":192},3,[170,194,177],{"class":176},[170,196,197],{"class":180}," Use single quotes for strings\n",[170,199,201,203],{"class":172,"line":200},4,[170,202,177],{"class":176},[170,204,205],{"class":180}," Follow the existing code style in the repository\n",[170,207,209,211],{"class":172,"line":208},5,[170,210,177],{"class":176},[170,212,213],{"class":180}," Write concise explanations, avoid lengthy descriptions\n",[170,215,217,219],{"class":172,"line":216},6,[170,218,177],{"class":176},[170,220,221],{"class":180}," Suggest tests for any code changes\n",[170,223,225,227],{"class":172,"line":224},7,[170,226,177],{"class":176},[170,228,229],{"class":180}," Use async/await instead of promises\n",[125,231,233],{"id":232},"project-level-custom-rules","Project-level custom rules",[12,235,236,237,240,241,123],{},"Project rules apply only to a specific project. They override user-level rules for that project. Project rules are defined in ",[151,238,239],{},".gitlab/duo/chat-rules.md"," in your project and are consumed by GitLab Duo Chat, agents, and flows for that project — in IDE extensions, the Duo CLI, and the GitLab platform (GitLab 18.11 and later). For the complete behavior, see ",[19,242,245],{"href":243,"rel":244},"https://docs.gitlab.com/user/duo_agent_platform/customize/custom_rules/#create-workspace-level-custom-rules",[],"Create workspace-level custom rules",[12,247,248,149,250,252],{},[27,249,148],{},[151,251,239],{}," in your project root.",[12,254,255],{},[27,256,257],{},"Example rules for a Vue.js project:",[161,259,261],{"className":163,"code":260,"language":165,"meta":166,"style":166},"- Use Vue 3 Composition API with `\u003Cscript setup>`\n- Always include TypeScript types for props\n- Use scoped styles with SCSS\n- Follow the Slippers UI design system\n- Keep components under 300 lines\n- Use kebab-case for component names\n- Include accessibility attributes (aria-*, role)\n",[151,262,263,274,281,288,295,302,309],{"__ignoreMap":166},[170,264,265,267,270],{"class":172,"line":173},[170,266,177],{"class":176},[170,268,269],{"class":180}," Use Vue 3 Composition API with ",[170,271,273],{"class":272},"sYu0t","`\u003Cscript setup>`\n",[170,275,276,278],{"class":172,"line":184},[170,277,177],{"class":176},[170,279,280],{"class":180}," Always include TypeScript types for props\n",[170,282,283,285],{"class":172,"line":192},[170,284,177],{"class":176},[170,286,287],{"class":180}," Use scoped styles with SCSS\n",[170,289,290,292],{"class":172,"line":200},[170,291,177],{"class":176},[170,293,294],{"class":180}," Follow the Slippers UI design system\n",[170,296,297,299],{"class":172,"line":208},[170,298,177],{"class":176},[170,300,301],{"class":180}," Keep components under 300 lines\n",[170,303,304,306],{"class":172,"line":216},[170,305,177],{"class":176},[170,307,308],{"class":180}," Use kebab-case for component names\n",[170,310,311,313],{"class":172,"line":224},[170,312,177],{"class":176},[170,314,315],{"class":180}," Include accessibility attributes (aria-*, role)\n",[125,317,319],{"id":318},"best-practices-for-custom-rules","Best practices for custom rules",[31,321,322,328,334,340,346,352],{},[34,323,324,327],{},[27,325,326],{},"Be specific",": \"Use single quotes\" is better than \"follow style guide.\"",[34,329,330,333],{},[27,331,332],{},"Prioritize",": List most important rules first.",[34,335,336,339],{},[27,337,338],{},"Team-focused",": Rules should reflect your team's standards, not personal preferences.",[34,341,342,345],{},[27,343,344],{},"Actionable",": Rules should be clear enough for an AI agent to follow.",[34,347,348,351],{},[27,349,350],{},"Maintainable",": Update rules when your standards change.",[34,353,354,357],{},[27,355,356],{},"Avoid conflicts",": Don't contradict your codebase's actual style.",[12,359,360,363,364,123],{},[27,361,362],{},"Tip:"," Use Code Owners to manage who approves changes to ",[151,365,239],{},[12,367,368,369,123],{},"For a detailed use case tutorial for custom rules, see the ",[19,370,373],{"href":371,"rel":372},"https://about.gitlab.com/blog/custom-rules-duo-agentic-chat-deep-dive/",[],"Custom rules in GitLab Duo Agentic Chat for greater developer efficiency deep-dive blog post",[77,375,376],{},[12,377,378,381,382,386],{},[27,379,380],{},"Note:"," Custom rules only apply to new conversations or flows. Existing conversations do not retroactively pick up new or updated rules; see the ",[19,383,122],{"href":384,"rel":385},"https://docs.gitlab.com/user/duo_agent_platform/customize/custom_rules/#create-custom-rules",[]," for details.",[91,388,390],{"id":389},"agentsmd-for-customizing-agent-behavior","AGENTS.md for customizing agent behavior",[12,392,393,397,398,123],{},[19,394,51],{"href":395,"rel":396},"https://agents.md/",[]," provides project-specific context — repository structure, architecture documentation, build and test instructions, and directory-specific conventions — that agents use when working in your codebase. Because it follows an industry standard, it also works with non-GitLab AI tools that support the spec, for example, Claude Code as an ",[19,399,402],{"href":400,"rel":401},"https://docs.gitlab.com/user/duo_agent_platform/agents/external/",[],"external agent",[12,404,405],{},"Use AGENTS.md when you need to give agents deeper understanding of your project structure, or when you want the same context to apply across multiple AI tools. Use custom rules when you want to enforce team standards and preferences within GitLab Duo specifically.",[12,407,408,411],{},[27,409,410],{},"User-level"," (applies to all your projects and workspaces):",[31,413,414,420],{},[34,415,416,417],{},"macOS/Linux: ",[151,418,419],{},"~/.gitlab/duo/AGENTS.md",[34,421,422,423],{},"Windows: ",[151,424,425],{},"%APPDATA%\\GitLab\\duo\\AGENTS.md",[12,427,428,431],{},[27,429,430],{},"Workspace-level"," (applies to a specific project):",[31,433,434],{},[34,435,436,437,252],{},"Create ",[151,438,51],{},[12,440,441,444],{},[27,442,443],{},"Subdirectory-level"," (applies to specific directories in monorepos):",[31,446,447],{},[34,448,436,449,451],{},[151,450,51],{}," in subdirectories for context-specific instructions.",[12,453,454,455,123],{},"For how AGENTS.md files are combined and discovered across user, project, and repository subdirectory levels, see ",[19,456,459],{"href":457,"rel":458},"https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/#how-gitlab-duo-uses-agentsmd-files",[],"How GitLab Duo uses AGENTS.md files",[125,461,463],{"id":462},"what-agentsmd-controls","What AGENTS.md controls",[31,465,466,469,472,475,478,481],{},[34,467,468],{},"Agent personality and tone",[34,470,471],{},"Project-specific instructions",[34,473,474],{},"Coding standards and conventions",[34,476,477],{},"Tool usage preferences",[34,479,480],{},"Output formatting requirements",[34,482,483],{},"Repository structure and organization",[125,485,487],{"id":486},"example-agentsmd","Example AGENTS.md",[161,489,491],{"className":163,"code":490,"language":165,"meta":166,"style":166},"# Agent Customization for Our Project\n## General Guidelines\n- Always prioritize code quality over speed\n- Follow our project's architecture patterns\n- Reference existing code examples when suggesting changes\n- Ask for clarification if requirements are ambiguous\n## Code Style\n- Use TypeScript for all new code\n- Follow ESLint configuration in the project\n- Include unit tests for all new functions\n- Use descriptive variable names (no single letters except loops)\n## Documentation\n- Add JSDoc comments to all public functions\n- Update README.md if adding new features\n- Include examples in code comments\n## Security\n- Never suggest hardcoding secrets or API keys\n- Always validate user input\n- Use parameterized queries for database operations\n- Flag potential security issues immediately\n",[151,492,493,499,504,511,518,525,532,537,545,553,561,569,575,583,591,599,605,613,621,629],{"__ignoreMap":166},[170,494,495],{"class":172,"line":173},[170,496,498],{"class":497},"surfw","# Agent Customization for Our Project\n",[170,500,501],{"class":172,"line":184},[170,502,503],{"class":497},"## General Guidelines\n",[170,505,506,508],{"class":172,"line":192},[170,507,177],{"class":176},[170,509,510],{"class":180}," Always prioritize code quality over speed\n",[170,512,513,515],{"class":172,"line":200},[170,514,177],{"class":176},[170,516,517],{"class":180}," Follow our project's architecture patterns\n",[170,519,520,522],{"class":172,"line":208},[170,521,177],{"class":176},[170,523,524],{"class":180}," Reference existing code examples when suggesting changes\n",[170,526,527,529],{"class":172,"line":216},[170,528,177],{"class":176},[170,530,531],{"class":180}," Ask for clarification if requirements are ambiguous\n",[170,533,534],{"class":172,"line":224},[170,535,536],{"class":497},"## Code Style\n",[170,538,540,542],{"class":172,"line":539},8,[170,541,177],{"class":176},[170,543,544],{"class":180}," Use TypeScript for all new code\n",[170,546,548,550],{"class":172,"line":547},9,[170,549,177],{"class":176},[170,551,552],{"class":180}," Follow ESLint configuration in the project\n",[170,554,556,558],{"class":172,"line":555},10,[170,557,177],{"class":176},[170,559,560],{"class":180}," Include unit tests for all new functions\n",[170,562,564,566],{"class":172,"line":563},11,[170,565,177],{"class":176},[170,567,568],{"class":180}," Use descriptive variable names (no single letters except loops)\n",[170,570,572],{"class":172,"line":571},12,[170,573,574],{"class":497},"## Documentation\n",[170,576,578,580],{"class":172,"line":577},13,[170,579,177],{"class":176},[170,581,582],{"class":180}," Add JSDoc comments to all public functions\n",[170,584,586,588],{"class":172,"line":585},14,[170,587,177],{"class":176},[170,589,590],{"class":180}," Update README.md if adding new features\n",[170,592,594,596],{"class":172,"line":593},15,[170,595,177],{"class":176},[170,597,598],{"class":180}," Include examples in code comments\n",[170,600,602],{"class":172,"line":601},16,[170,603,604],{"class":497},"## Security\n",[170,606,608,610],{"class":172,"line":607},17,[170,609,177],{"class":176},[170,611,612],{"class":180}," Never suggest hardcoding secrets or API keys\n",[170,614,616,618],{"class":172,"line":615},18,[170,617,177],{"class":176},[170,619,620],{"class":180}," Always validate user input\n",[170,622,624,626],{"class":172,"line":623},19,[170,625,177],{"class":176},[170,627,628],{"class":180}," Use parameterized queries for database operations\n",[170,630,632,634],{"class":172,"line":631},20,[170,633,177],{"class":176},[170,635,636],{"class":180}," Flag potential security issues immediately\n",[125,638,640],{"id":639},"best-practices-for-agentsmd","Best practices for AGENTS.md",[31,642,643,648,654,660,666,672],{},[34,644,645,647],{},[27,646,326],{},": Include concrete examples from your project.",[34,649,650,653],{},[27,651,652],{},"Keep it concise",": Focus on what's unique to your project.",[34,655,656,659],{},[27,657,658],{},"Version control",": Commit to your repository and track changes.",[34,661,662,665],{},[27,663,664],{},"Team alignment",": Discuss with your team before finalizing.",[34,667,668,671],{},[27,669,670],{},"Update regularly",": Refine as your project evolves.",[34,673,674,677],{},[27,675,676],{},"Document repository structure",": Help agents understand your codebase organization.",[125,679,681],{"id":680},"requirements","Requirements",[31,683,684,687,690,693,696],{},[34,685,686],{},"GitLab 18.8 or later",[34,688,689],{},"For VS Code: GitLab Workflow extension 6.60 or later",[34,691,692],{},"For JetBrains: GitLab plugin 3.26.0 or later",[34,694,695],{},"For GitLab Duo CLI: version 8.47.0 or later",[34,697,698,699,702,703,123],{},"For flows: Update your flow configuration to access the ",[151,700,701],{},"user_rule"," context passed from the executor. See the example in ",[19,704,707],{"href":705,"rel":706},"https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/#prerequisites",[],"Use AGENTS.md with GitLab Duo",[12,709,710,123],{},[19,711,714],{"href":712,"rel":713},"https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/",[],"Learn more about AGENTS.md",[91,716,57],{"id":717},"custom-review-instructions",[12,719,720,724],{},[19,721,57],{"href":722,"rel":723},"https://docs.gitlab.com/user/duo_agent_platform/customize/review_instructions/",[]," provide specific guidelines for GitLab's AI-powered code review. The instructions ensure consistent code review standards, and can be tailored to specific file types in your project.",[12,726,727],{},"Availability depends on how you use it:",[31,729,730,741],{},[34,731,732,740],{},[27,733,734,739],{},[19,735,738],{"href":736,"rel":737},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/",[],"Code Review Flow"," (Agent Platform)"," — available on Free, Premium, and Ultimate tiers on GitLab.com, GitLab Self-Managed, and GitLab Dedicated. No Duo add-on required; uses GitLab Credits.",[34,742,743,750],{},[27,744,745],{},[19,746,749],{"href":747,"rel":748},"https://docs.gitlab.com/user/project/merge_requests/duo_in_merge_requests/",[],"GitLab Duo Code Review"," — requires the GitLab Duo Enterprise add-on on Premium and Ultimate tiers.",[12,752,753,149,755,252],{},[27,754,148],{},[151,756,757],{},".gitlab/duo/mr-review-instructions.yaml",[12,759,760],{},[27,761,762],{},"Example review instructions:",[161,764,768],{"className":765,"code":766,"language":767,"meta":166,"style":166},"language-yaml shiki shiki-themes github-light","instructions:\n  - name: Ruby Style Guide\n    fileFilters:\n      - \"*.rb\"           # Ruby files in the root directory\n      - \"lib/**/*.rb\"    # Ruby files in lib and its subdirectories\n      - \"!spec/**/*.rb\"  # Exclude test files\n    instructions: |\n      1. Ensure all methods have proper documentation\n      2. Follow Ruby style guide conventions\n      3. Prefer symbols over strings for hash keys\n\n  - name: TypeScript Source Files\n    fileFilters:\n      - \"**/*.ts\"        # TypeScript files in any directory\n      - \"!**/*.test.ts\"  # Exclude test files\n    instructions: |\n      1. Ensure proper TypeScript types (avoid 'any')\n      2. Follow naming conventions\n      3. Document complex functions\n\n","yaml",[151,769,770,779,794,801,813,823,833,844,849,854,859,865,876,882,892,901,909,914,919],{"__ignoreMap":166},[170,771,772,776],{"class":172,"line":173},[170,773,775],{"class":774},"shJU0","instructions",[170,777,778],{"class":180},":\n",[170,780,781,784,787,790],{"class":172,"line":184},[170,782,783],{"class":180},"  - ",[170,785,786],{"class":774},"name",[170,788,789],{"class":180},": ",[170,791,793],{"class":792},"sYBdl","Ruby Style Guide\n",[170,795,796,799],{"class":172,"line":192},[170,797,798],{"class":774},"    fileFilters",[170,800,778],{"class":180},[170,802,803,806,809],{"class":172,"line":200},[170,804,805],{"class":180},"      - ",[170,807,808],{"class":792},"\"*.rb\"",[170,810,812],{"class":811},"sAwPA","           # Ruby files in the root directory\n",[170,814,815,817,820],{"class":172,"line":208},[170,816,805],{"class":180},[170,818,819],{"class":792},"\"lib/**/*.rb\"",[170,821,822],{"class":811},"    # Ruby files in lib and its subdirectories\n",[170,824,825,827,830],{"class":172,"line":216},[170,826,805],{"class":180},[170,828,829],{"class":792},"\"!spec/**/*.rb\"",[170,831,832],{"class":811},"  # Exclude test files\n",[170,834,835,838,840],{"class":172,"line":224},[170,836,837],{"class":774},"    instructions",[170,839,789],{"class":180},[170,841,843],{"class":842},"sD7c4","|\n",[170,845,846],{"class":172,"line":539},[170,847,848],{"class":792},"      1. Ensure all methods have proper documentation\n",[170,850,851],{"class":172,"line":547},[170,852,853],{"class":792},"      2. Follow Ruby style guide conventions\n",[170,855,856],{"class":172,"line":555},[170,857,858],{"class":792},"      3. Prefer symbols over strings for hash keys\n",[170,860,861],{"class":172,"line":563},[170,862,864],{"emptyLinePlaceholder":863},true,"\n",[170,866,867,869,871,873],{"class":172,"line":571},[170,868,783],{"class":180},[170,870,786],{"class":774},[170,872,789],{"class":180},[170,874,875],{"class":792},"TypeScript Source Files\n",[170,877,878,880],{"class":172,"line":577},[170,879,798],{"class":774},[170,881,778],{"class":180},[170,883,884,886,889],{"class":172,"line":585},[170,885,805],{"class":180},[170,887,888],{"class":792},"\"**/*.ts\"",[170,890,891],{"class":811},"        # TypeScript files in any directory\n",[170,893,894,896,899],{"class":172,"line":593},[170,895,805],{"class":180},[170,897,898],{"class":792},"\"!**/*.test.ts\"",[170,900,832],{"class":811},[170,902,903,905,907],{"class":172,"line":601},[170,904,837],{"class":774},[170,906,789],{"class":180},[170,908,843],{"class":842},[170,910,911],{"class":172,"line":607},[170,912,913],{"class":792},"      1. Ensure proper TypeScript types (avoid 'any')\n",[170,915,916],{"class":172,"line":615},[170,917,918],{"class":792},"      2. Follow naming conventions\n",[170,920,921],{"class":172,"line":623},[170,922,923],{"class":792},"      3. Document complex functions\n",[12,925,926],{},[27,927,928],{},"Best practices for custom review instructions:",[31,930,931,937,946,952,958],{},[34,932,933,936],{},[27,934,935],{},"Be specific and actionable",": Clear, numbered instructions work best.",[34,938,939,942,943,123],{},[27,940,941],{},"Use glob patterns",": Target specific file types with ",[151,944,945],{},"fileFilters",[34,947,948,951],{},[27,949,950],{},"Focus on important standards",": Prioritize the most critical review points.",[34,953,954,957],{},[27,955,956],{},"Explain the \"why\"",": Help reviewers understand the reasoning.",[34,959,960,963],{},[27,961,962],{},"Test patterns",": Ensure glob patterns match the intended files.",[12,965,966,968,969,123],{},[27,967,362],{}," Use Code Owners to protect changes to ",[151,970,757],{},[12,972,973,974,123],{},"For the full YAML schema, language-specific examples, and how custom instructions are combined with GitLab Duo's built-in review criteria, see the ",[19,975,977],{"href":722,"rel":976},[],"Custom Review Instructions documentation",[91,979,63],{"id":980},"agent-skills",[12,982,983,987,988,993,994,123],{},[19,984,63],{"href":985,"rel":986},"https://docs.gitlab.com/user/duo_agent_platform/customize/agent_skills/",[]," provide specialized knowledge and workflows for specific agentic tasks, based on the ",[19,989,992],{"href":990,"rel":991},"https://agentskills.io/specification/",[],"Agent Skills specification",". Refer to the documentation for ",[19,995,998],{"href":996,"rel":997},"https://docs.gitlab.com/user/duo_agent_platform/customize/agent_skills/#prerequisites",[],"availability and prerequisites",[12,1000,1001],{},"Skills work at two levels:",[31,1003,1004,1017],{},[34,1005,1006,1008,1009,1012,1013,1016],{},[27,1007,430],{}," — works with GitLab Duo Chat, foundational and custom flows (excluding Code Review), VS Code, and GitLab Duo CLI. Create ",[151,1010,1011],{},"SKILL.md"," files under ",[151,1014,1015],{},"skills/\u003Cskill-name>/"," in your repository.",[34,1018,1019,1021,1022,1012,1024,1027,1028,1031,1032,1035,1036,1039],{},[27,1020,410],{}," (experimental) — available exclusively with GitLab Duo CLI (8.83.0 or later). Create ",[151,1023,1011],{},[151,1025,1026],{},"~/.gitlab/duo/skills/\u003Cskill-name>/"," (Linux/macOS) or ",[151,1029,1030],{},"%APPDATA%\\GitLab\\duo\\skills\\\u003Cskill-name>\\"," (Windows). Requires the ",[151,1033,1034],{},"--enable-global-skills"," flag or the ",[151,1037,1038],{},"GITLAB_ENABLE_GLOBAL_SKILLS"," environment variable.",[12,1041,1042,1043,1046,1047,123],{},"For the exact file layout, required frontmatter, supported surfaces, and how to wire skills into flows via the ",[151,1044,1045],{},"workspace_agent_skills"," context, see the ",[19,1048,1050],{"href":985,"rel":1049},[],"Agent Skills documentation",[91,1052,69],{"id":1053},"mcp-configuration",[12,1055,1056],{},"Model Context Protocol (MCP) enables agents to access external systems like Jira, Slack, AWS, and more. This section covers MCP configuration for extending agent capabilities.",[77,1058,1059],{},[12,1060,1061,149,1064,1069],{},[27,1062,1063],{},"🎯 Try it now:",[19,1065,1068],{"href":1066,"rel":1067},"https://gitlab.navattic.com/mcp",[],"Interactive demo of MCP"," - Explore how to use Model Context Protocol.",[125,1071,1073],{"id":1072},"mcp-configuration-for-external-integrations","MCP configuration for external integrations",[12,1075,1076],{},"Model Context Protocol (MCP) enables agents to access external systems like Jira, Slack, AWS, and more.",[12,1078,1079,1082],{},[27,1080,1081],{},"Scope:"," User-level (applies to all workspaces) or Workspace-level (project-specific, overrides user config)",[12,1084,1085],{},[27,1086,1087],{},"Create user configuration:",[31,1089,1090,1098,1106],{},[34,1091,1092,789,1095],{},[27,1093,1094],{},"macOS/Linux",[151,1096,1097],{},"~/.gitlab/duo/mcp.json",[34,1099,1100,789,1103],{},[27,1101,1102],{},"Windows",[151,1104,1105],{},"C:\\Users\\\u003Cusername>\\AppData\\Roaming\\GitLab\\duo\\mcp.json",[34,1107,1108,1111,1112],{},[27,1109,1110],{},"VS Code",": Run command ",[151,1113,1114],{},"GitLab MCP: Open User Settings (JSON)",[12,1116,1117],{},[27,1118,1119],{},"Create workspace configuration:",[31,1121,1122],{},[34,1123,1124,789,1127,1130],{},[27,1125,1126],{},"Create file",[151,1128,1129],{},".gitlab/duo/mcp.json"," in your project root",[12,1132,1133],{},[27,1134,1135],{},"Best practices:",[31,1137,1138,1144,1150,1156,1162],{},[34,1139,1140,1143],{},[27,1141,1142],{},"Security first",": Use MCP servers that require OAuth and not plain-text password tokens.",[34,1145,1146,1149],{},[27,1147,1148],{},"Minimal scope",": Only enable MCP servers you actually use and trust.",[34,1151,1152,1155],{},[27,1153,1154],{},"Test locally",": Verify MCP connections and authorization work before sharing across teams.",[34,1157,1158,1161],{},[27,1159,1160],{},"Document integrations",": Explain what each MCP server provides.",[34,1163,1164,1166,1167,1169],{},[27,1165,658],{},": Store configuration in ",[151,1168,1129],{}," with Code Owners' approval.",[12,1171,1172,1173,123],{},"For detailed setup instructions and configuration examples, see ",[19,1174,1176],{"href":1175},"/blog/duo-agent-platform-with-mcp/","Part 7: Model Context Protocol (MCP) Integration",[91,1178,75],{"id":1179},"custom-agents-and-flows",[12,1181,1182,1183,1186],{},"Custom agents and flows allow you to automate your team's specific workflows. Before diving into customization, it's helpful to understand what they are and how they work. Here are parts of the ",[19,1184,1185],{"href":21},"Getting started with GitLab Duo Agent Platform guide"," that can help.",[31,1188,1189,1198,1207],{},[34,1190,1191,1197],{},[27,1192,1193],{},[19,1194,1196],{"href":1195},"/blog/understanding-agents-foundational-custom-external/","Part 3: Understanding agents"," — Learn about foundational, custom, and external agents, and when to use each type.",[34,1199,1200,1206],{},[27,1201,1202],{},[19,1203,1205],{"href":1204},"/blog/understanding-flows-multi-agent-workflows/","Part 4: Understanding flows"," — Discover how flows orchestrate multiple agents to solve complex problems.",[34,1208,1209,1215],{},[27,1210,1211],{},[19,1212,1214],{"href":1213},"/blog/ai-catalog-discover-and-share-agents/","Part 5: AI Catalog"," — Learn how to discover, create, and share agents and flows across your organization.",[12,1217,1218],{},"Once you understand the basics, this section provides an overview of customization options with links to detailed guides.",[125,1220,1222],{"id":1221},"system-prompts-for-custom-agents","System prompts for custom agents",[12,1224,1225],{},"System prompts define an agent's personality, expertise, and behavior. A well-crafted prompt makes agents more effective and aligned with your team's needs.",[12,1227,1228,1231],{},[27,1229,1230],{},"What are system prompts?"," System prompts are instructions that tell an agent how to behave, what expertise it has, and how to respond to requests. They're the foundation of custom agent behavior.",[12,1233,1234],{},[27,1235,1236],{},"Key elements of a strong system prompt:",[31,1238,1239,1245,1251,1257,1263],{},[34,1240,1241,1244],{},[27,1242,1243],{},"Role definition",": What the agent is and what it does",[34,1246,1247,1250],{},[27,1248,1249],{},"Expertise areas",": Specific domains or technologies",[34,1252,1253,1256],{},[27,1254,1255],{},"Behavior guidelines",": How it should interact and respond",[34,1258,1259,1262],{},[27,1260,1261],{},"Output format",": Structure of responses",[34,1264,1265,1268],{},[27,1266,1267],{},"Constraints",": What it should avoid",[12,1270,1271],{},[27,1272,1135],{},[31,1274,1275,1281,1287,1293,1299],{},[34,1276,1277,1280],{},[27,1278,1279],{},"Be detailed",": More specific prompts produce better results.",[34,1282,1283,1286],{},[27,1284,1285],{},"Use examples",": Show the agent what good output looks like.",[34,1288,1289,1292],{},[27,1290,1291],{},"Define scope",": Clearly state what the agent should and shouldn't do.",[34,1294,1295,1298],{},[27,1296,1297],{},"Test iteratively",": Refine prompts based on agent behavior.",[34,1300,1301,1303],{},[27,1302,658],{},": Track prompt changes in your repository.",[12,1305,1306,1307,123],{},"For detailed guidance on crafting system prompts and creating custom agents, see ",[19,1308,1196],{"href":1195},[91,1310,1312],{"id":1311},"quick-reference-when-to-use-customizations","Quick reference: When to use customizations",[12,1314,1315,1316,105],{},"For a complete comparison of when to use each method, see the ",[19,1317,104],{"href":102,"rel":1318},[],[1320,1321,1322,1338],"table",{},[1323,1324,1325],"thead",{},[1326,1327,1328,1332,1335],"tr",{},[1329,1330,1331],"th",{},"Tool",[1329,1333,1334],{},"Best For",[1329,1336,1337],{},"Location",[1339,1340,1341,1360,1376,1394,1409,1422,1438,1451],"tbody",{},[1326,1342,1343,1349,1352],{},[1344,1345,1346],"td",{},[27,1347,1348],{},"Custom Rules",[1344,1350,1351],{},"Guiding Chat, agents, flows, and CLI (tone, style, behavior) — user-level applies in IDE/CLI; workspace-level also applies in GitLab UI",[1344,1353,1354,1356,1357,1359],{},[151,1355,153],{}," (user) or ",[151,1358,239],{}," (workspace)",[1326,1361,1362,1366,1369],{},[1344,1363,1364],{},[27,1365,51],{},[1344,1367,1368],{},"Enforcing standards across chat, flows, and other AI tools",[1344,1370,1371,1356,1373,1375],{},[151,1372,419],{},[151,1374,51],{}," (workspace root)",[1326,1377,1378,1382,1385],{},[1344,1379,1380],{},[27,1381,63],{},[1344,1383,1384],{},"Providing shareable, reusable skills and custom commands for agents",[1344,1386,1387,1390,1391],{},[151,1388,1389],{},"skills/\u003Cskill-name>/SKILL.md"," (workspace, VS Code + Duo CLI); user-level via Duo CLI only — see ",[19,1392,63],{"href":985,"rel":1393},[],[1326,1395,1396,1401,1404],{},[1344,1397,1398],{},[27,1399,1400],{},"Custom Review Instructions",[1344,1402,1403],{},"Guiding code review standards for specific file types (Code Review Flow only)",[1344,1405,1406,1408],{},[151,1407,757],{}," (workspace only)",[1326,1410,1411,1416,1419],{},[1344,1412,1413],{},[27,1414,1415],{},"System Prompts",[1344,1417,1418],{},"Customizing individual agent or flow behavior",[1344,1420,1421],{},"AI Catalog when creating an agent or flow",[1326,1423,1424,1429,1432],{},[1344,1425,1426],{},[27,1427,1428],{},"MCP Configuration",[1344,1430,1431],{},"Connecting agents to external tools",[1344,1433,1434,1356,1436,1359],{},[151,1435,1097],{},[151,1437,1129],{},[1326,1439,1440,1445,1448],{},[1344,1441,1442],{},[27,1443,1444],{},"Custom Agents",[1344,1446,1447],{},"Creating specialized agents for team-specific tasks",[1344,1449,1450],{},"AI > Agents or AI Catalog",[1326,1452,1453,1458,1461],{},[1344,1454,1455],{},[27,1456,1457],{},"Custom Flows",[1344,1459,1460],{},"Orchestrating multiple agents in workflows",[1344,1462,1463],{},"AI > Flows or AI Catalog",[91,1465,1467],{"id":1466},"whats-next","What's next?",[12,1469,1470],{},"Congratulations! You've completed the entire GitLab Duo Agent Platform series. You now understand:",[31,1472,1473,1476,1479,1482,1485],{},[34,1474,1475],{},"How to use agents and flows across the entire SDLC, tailored to your use cases",[34,1477,1478],{},"How to discover and share solutions in the AI Catalog",[34,1480,1481],{},"How to monitor and manage your AI workflows",[34,1483,1484],{},"How to extend capabilities with MCP integrations",[34,1486,1487],{},"How to customize every aspect of GitLab Duo Agent Platform for your team",[12,1489,1490,1495],{},[27,1491,1492],{},[19,1493,1494],{"href":21},"Return to complete series overview"," to review all parts and explore specific topics in depth.",[91,1497,1499],{"id":1498},"resources","Resources",[31,1501,1502,1508,1514,1520,1527,1534],{},[34,1503,1504],{},[19,1505,1507],{"href":113,"rel":1506},[],"Custom Rules documentation",[34,1509,1510],{},[19,1511,1513],{"href":712,"rel":1512},[],"AGENTS.md documentation",[34,1515,1516],{},[19,1517,977],{"href":1518,"rel":1519},"https://docs.gitlab.com/user/gitlab_duo/customize_duo/review_instructions/",[],[34,1521,1522],{},[19,1523,1526],{"href":1524,"rel":1525},"https://docs.gitlab.com/user/duo_agent_platform/agents/custom/",[],"Custom Agents documentation",[34,1528,1529],{},[19,1530,1533],{"href":1531,"rel":1532},"https://docs.gitlab.com/user/duo_agent_platform/flows/custom/",[],"Custom Flows documentation",[34,1535,1536],{},[19,1537,1540],{"href":1538,"rel":1539},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_clients/",[],"MCP Clients documentation",[1542,1543],"hr",{},[12,1545,1546,149,1549],{},[27,1547,1548],{},"Previous:",[19,1550,1551],{"href":1175},"Part 7: Model Context Protocol integration",[12,1553,1554,149,1557],{},[27,1555,1556],{},"Back to start:",[19,1558,1559],{"href":21},"Complete series overview",[1561,1562,1563],"style",{},"html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}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);}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .surfw, html code.shiki .surfw{--shiki-default:#005CC5;--shiki-default-font-weight:bold}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":166,"searchDepth":184,"depth":184,"links":1565},[1566,1567,1572,1578,1579,1580,1583,1586,1587,1588],{"id":93,"depth":184,"text":39},{"id":108,"depth":184,"text":45,"children":1568},[1569,1570,1571],{"id":127,"depth":192,"text":128},{"id":232,"depth":192,"text":233},{"id":318,"depth":192,"text":319},{"id":389,"depth":184,"text":390,"children":1573},[1574,1575,1576,1577],{"id":462,"depth":192,"text":463},{"id":486,"depth":192,"text":487},{"id":639,"depth":192,"text":640},{"id":680,"depth":192,"text":681},{"id":717,"depth":184,"text":57},{"id":980,"depth":184,"text":63},{"id":1053,"depth":184,"text":69,"children":1581},[1582],{"id":1072,"depth":192,"text":1073},{"id":1179,"depth":184,"text":75,"children":1584},[1585],{"id":1221,"depth":192,"text":1222},{"id":1311,"depth":184,"text":1312},{"id":1466,"depth":184,"text":1467},{"id":1498,"depth":184,"text":1499},"ai","2026-01-14","Learn how to customize GitLab Duo Agent Platform. Configure chat rules, system prompts, agent tools, agent skills, and flows for your team's needs.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png",{},"/en-us/blog/customizing-gitlab-duo-chat-rules-prompts-workflows",{"noIndex":1594,"title":1599,"description":1600,"ogImage":1601},"How to customize GitLab Duo Agent Platform","Match your team's workflow by configuring chat rules, crafting system prompts, and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1752678395/impw8no5tbskr6k2afgu.jpg","customizing-gitlab-duo-chat-rules-prompts-workflows","en-us/blog/customizing-gitlab-duo-chat-rules-prompts-workflows",[1605,1606,1607,1608],"AI","product","features","tutorial","BlogPost","2026-05-27","Nqb4e-Wj4jiynkyNElFlRRbf62596Ghz4-DJv4EfRjw",{"logo":1613,"freeTrial":1618,"sales":1623,"login":1628,"items":1633,"search":1957,"minimal":1988,"duo":2007,"switchNav":2016,"pricingDeployment":2027},{"config":1614},{"href":1615,"dataGaName":1616,"dataGaLocation":1617},"/","gitlab logo","header",{"text":1619,"config":1620},"Get free trial",{"href":1621,"dataGaName":1622,"dataGaLocation":1617},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":1624,"config":1625},"Request a demo",{"href":1626,"dataGaName":1627,"dataGaLocation":1617},"/sales/?contact-topic=request-demo","sales",{"text":1629,"config":1630},"Sign in",{"href":1631,"dataGaName":1632,"dataGaLocation":1617},"https://gitlab.com/users/sign_in/","sign in",[1634,1662,1762,1767,1879,1935],{"text":1635,"config":1636,"menu":1638},"Platform",{"dataNavLevelOne":1637},"platform",{"type":1639,"columns":1640},"cards",[1641,1647,1654],{"title":1635,"description":1642,"link":1643},"The intelligent orchestration platform for DevSecOps",{"text":1644,"config":1645},"Explore our Platform",{"href":1646,"dataGaName":1637,"dataGaLocation":1617},"/platform/",{"title":88,"description":1648,"link":1649},"Agentic AI for the entire software lifecycle",{"text":1650,"config":1651},"Meet GitLab Duo",{"href":1652,"dataGaName":1653,"dataGaLocation":1617},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1655,"description":1656,"link":1657},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":1658,"config":1659},"Learn more",{"href":1660,"dataGaName":1661,"dataGaLocation":1617},"/why-gitlab/","why gitlab",{"text":1663,"left":863,"config":1664,"menu":1666},"Product",{"dataNavLevelOne":1665},"solutions",{"type":1667,"link":1668,"columns":1672,"feature":1741},"lists",{"text":1669,"config":1670},"View all Solutions",{"href":1671,"dataGaName":1665,"dataGaLocation":1617},"/solutions/",[1673,1697,1720],{"title":1674,"description":1675,"link":1676,"items":1681},"Automation","CI/CD and automation to accelerate deployment",{"config":1677},{"icon":1678,"href":1679,"dataGaName":1680,"dataGaLocation":1617},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[1682,1686,1689,1693],{"text":1683,"config":1684},"CI/CD",{"href":1685,"dataGaLocation":1617,"dataGaName":1683},"/solutions/continuous-integration/",{"text":88,"config":1687},{"href":1652,"dataGaLocation":1617,"dataGaName":1688},"gitlab duo agent platform - product menu",{"text":1690,"config":1691},"Source Code Management",{"href":1692,"dataGaLocation":1617,"dataGaName":1690},"/solutions/source-code-management/",{"text":1694,"config":1695},"Automated Software Delivery",{"href":1679,"dataGaLocation":1617,"dataGaName":1696},"Automated software delivery",{"title":1698,"description":1699,"link":1700,"items":1705},"Security","Deliver code faster without compromising security",{"config":1701},{"href":1702,"dataGaName":1703,"dataGaLocation":1617,"icon":1704},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1706,1710,1715],{"text":1707,"config":1708},"Application Security Testing",{"href":1702,"dataGaName":1709,"dataGaLocation":1617},"Application security testing",{"text":1711,"config":1712},"Software Supply Chain Security",{"href":1713,"dataGaLocation":1617,"dataGaName":1714},"/solutions/supply-chain/","Software supply chain security",{"text":1716,"config":1717},"Software Compliance",{"href":1718,"dataGaName":1719,"dataGaLocation":1617},"/solutions/software-compliance/","software compliance",{"title":1721,"link":1722,"items":1727},"Measurement",{"config":1723},{"icon":1724,"href":1725,"dataGaName":1726,"dataGaLocation":1617},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[1728,1732,1736],{"text":1729,"config":1730},"Visibility & Measurement",{"href":1725,"dataGaLocation":1617,"dataGaName":1731},"Visibility and Measurement",{"text":1733,"config":1734},"Value Stream Management",{"href":1735,"dataGaLocation":1617,"dataGaName":1733},"/solutions/value-stream-management/",{"text":1737,"config":1738},"Analytics & Insights",{"href":1739,"dataGaLocation":1617,"dataGaName":1740},"/solutions/analytics-and-insights/","Analytics and insights",{"title":1742,"type":1667,"items":1743},"GitLab for",[1744,1750,1756],{"text":1745,"config":1746},"Enterprise",{"icon":1747,"href":1748,"dataGaLocation":1617,"dataGaName":1749},"Building","/enterprise/","enterprise",{"text":1751,"config":1752},"Small Business",{"icon":1753,"href":1754,"dataGaLocation":1617,"dataGaName":1755},"Work","/small-business/","small business",{"text":1757,"config":1758},"Public Sector",{"icon":1759,"href":1760,"dataGaLocation":1617,"dataGaName":1761},"Organization","/solutions/public-sector/","public sector",{"text":1763,"config":1764},"Pricing",{"href":1765,"dataGaName":1766,"dataGaLocation":1617,"dataNavLevelOne":1766},"/pricing/","pricing",{"text":1499,"config":1768,"menu":1769},{"dataNavLevelOne":1498},{"type":1667,"link":1770,"columns":1774,"feature":1868},{"text":1771,"config":1772},"View all resources",{"href":1773,"dataGaName":1498,"dataGaLocation":1617},"/resources/",[1775,1808,1835],{"title":1776,"items":1777},"Getting started",[1778,1783,1788,1793,1798,1803],{"text":1779,"config":1780},"Install",{"href":1781,"dataGaName":1782,"dataGaLocation":1617},"/install/","install",{"text":1784,"config":1785},"Quick start guides",{"href":1786,"dataGaName":1787,"dataGaLocation":1617},"/get-started/","quick setup checklists",{"text":1789,"config":1790},"Learn",{"href":1791,"dataGaLocation":1617,"dataGaName":1792},"https://university.gitlab.com/","learn",{"text":1794,"config":1795},"Product documentation",{"href":1796,"dataGaName":1797,"dataGaLocation":1617},"https://docs.gitlab.com/","product documentation",{"text":1799,"config":1800},"Best practice videos",{"href":1801,"dataGaName":1802,"dataGaLocation":1617},"/getting-started-videos/","best practice videos",{"text":1804,"config":1805},"Integrations",{"href":1806,"dataGaName":1807,"dataGaLocation":1617},"/integrations/","integrations",{"title":1809,"items":1810},"Discover",[1811,1816,1821,1826,1830],{"text":1812,"config":1813},"Customer success stories",{"href":1814,"dataGaName":1815,"dataGaLocation":1617},"/customers/","customer success stories",{"text":1817,"config":1818},"Blog",{"href":1819,"dataGaName":1820,"dataGaLocation":1617},"/blog/","blog",{"text":1822,"config":1823},"Demo Hub",{"href":1824,"dataGaName":1825,"dataGaLocation":1617},"/demo-hub/","demo hub",{"text":1827,"config":1828},"The Source",{"href":1829,"dataGaName":1820,"dataGaLocation":1617},"/the-source/",{"text":1831,"config":1832},"Remote",{"href":1833,"dataGaName":1834,"dataGaLocation":1617},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1836,"items":1837},"Connect",[1838,1843,1848,1853,1858,1863],{"text":1839,"config":1840},"GitLab Services",{"href":1841,"dataGaName":1842,"dataGaLocation":1617},"/services/","services",{"text":1844,"config":1845},"Contribute",{"href":1846,"dataGaName":1847,"dataGaLocation":1617},"https://contributors.gitlab.com","contribute",{"text":1849,"config":1850},"Community",{"href":1851,"dataGaName":1852,"dataGaLocation":1617},"/community/","community",{"text":1854,"config":1855},"Forum",{"href":1856,"dataGaName":1857,"dataGaLocation":1617},"https://forum.gitlab.com/","forum",{"text":1859,"config":1860},"Events",{"href":1861,"dataGaName":1862,"dataGaLocation":1617},"/events/","events",{"text":1864,"config":1865},"Partners",{"href":1866,"dataGaName":1867,"dataGaLocation":1617},"/partners/","partners",{"config":1869,"title":1872,"text":1873,"link":1874},{"background":1870,"textColor":1871},"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":1875,"config":1876},"Read the latest",{"href":1877,"dataGaName":1878,"dataGaLocation":1617},"/whats-new/","whats new",{"text":1880,"config":1881,"menu":1883},"Company",{"dataNavLevelOne":1882},"company",{"type":1667,"columns":1884},[1885],{"items":1886},[1887,1892,1898,1900,1905,1910,1915,1920,1925,1930],{"text":1888,"config":1889},"About",{"href":1890,"dataGaName":1891,"dataGaLocation":1617},"/company/","about",{"text":1893,"config":1894,"footerGa":1897},"Jobs",{"href":1895,"dataGaName":1896,"dataGaLocation":1617},"/jobs/","jobs",{"dataGaName":1896},{"text":1859,"config":1899},{"href":1861,"dataGaName":1862,"dataGaLocation":1617},{"text":1901,"config":1902},"Leadership",{"href":1903,"dataGaName":1904,"dataGaLocation":1617},"/company/team/e-group/","leadership",{"text":1906,"config":1907},"Handbook",{"href":1908,"dataGaName":1909,"dataGaLocation":1617},"https://handbook.gitlab.com/","handbook",{"text":1911,"config":1912},"Investor relations",{"href":1913,"dataGaName":1914,"dataGaLocation":1617},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1916,"config":1917},"Trust Center",{"href":1918,"dataGaName":1919,"dataGaLocation":1617},"/security/","trust center",{"text":1921,"config":1922},"AI Transparency Center",{"href":1923,"dataGaName":1924,"dataGaLocation":1617},"/ai-transparency-center/","ai transparency center",{"text":1926,"config":1927},"Newsletter",{"href":1928,"dataGaName":1929,"dataGaLocation":1617},"/company/contact/#contact-forms","newsletter",{"text":1931,"config":1932},"Press",{"href":1933,"dataGaName":1934,"dataGaLocation":1617},"/press/","press",{"text":1936,"config":1937,"menu":1938},"Contact us",{"dataNavLevelOne":1882},{"type":1667,"columns":1939},[1940],{"items":1941},[1942,1947,1952],{"text":1943,"config":1944},"Talk to sales",{"href":1945,"dataGaName":1946,"dataGaLocation":1617},"/sales/","talk to sales",{"text":1948,"config":1949},"Support portal",{"href":1950,"dataGaName":1951,"dataGaLocation":1617},"https://support.gitlab.com/hc/en-us","support portal",{"text":1953,"config":1954},"Customer portal",{"href":1955,"dataGaName":1956,"dataGaLocation":1617},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1958,"login":1959,"suggestions":1966},"Close",{"text":1960,"link":1961},"To search repositories and projects, login to",{"text":1962,"config":1963},"gitlab.com",{"href":1631,"dataGaName":1964,"dataGaLocation":1965},"search login","search",{"text":1967,"default":1968},"Suggestions",[1969,1971,1975,1977,1981,1985],{"text":88,"config":1970},{"href":1652,"dataGaName":88,"dataGaLocation":1965},{"text":1972,"config":1973},"Code Suggestions (AI)",{"href":1974,"dataGaName":1972,"dataGaLocation":1965},"/solutions/code-suggestions/",{"text":1683,"config":1976},{"href":1685,"dataGaName":1683,"dataGaLocation":1965},{"text":1978,"config":1979},"GitLab on AWS",{"href":1980,"dataGaName":1978,"dataGaLocation":1965},"/partners/technology-partners/aws/",{"text":1982,"config":1983},"GitLab on Google Cloud",{"href":1984,"dataGaName":1982,"dataGaLocation":1965},"/partners/technology-partners/google-cloud-platform/",{"text":1986,"config":1987},"Why GitLab?",{"href":1660,"dataGaName":1986,"dataGaLocation":1965},{"freeTrial":1989,"mobileIcon":1994,"desktopIcon":1999,"secondaryButton":2002},{"text":1990,"config":1991},"Start free trial",{"href":1992,"dataGaName":1622,"dataGaLocation":1993},"https://gitlab.com/-/trials/new/","nav",{"altText":1995,"config":1996},"Gitlab Icon",{"src":1997,"dataGaName":1998,"dataGaLocation":1993},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1995,"config":2000},{"src":2001,"dataGaName":1998,"dataGaLocation":1993},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2003,"config":2004},"Get Started",{"href":2005,"dataGaName":2006,"dataGaLocation":1993},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":2008,"mobileIcon":2012,"desktopIcon":2014},{"text":2009,"config":2010},"Learn more about GitLab Duo",{"href":1652,"dataGaName":2011,"dataGaLocation":1993},"gitlab duo",{"altText":1995,"config":2013},{"src":1997,"dataGaName":1998,"dataGaLocation":1993},{"altText":1995,"config":2015},{"src":2001,"dataGaName":1998,"dataGaLocation":1993},{"button":2017,"mobileIcon":2022,"desktopIcon":2024},{"text":2018,"config":2019},"/switch",{"href":2020,"dataGaName":2021,"dataGaLocation":1993},"#contact","switch",{"altText":1995,"config":2023},{"src":1997,"dataGaName":1998,"dataGaLocation":1993},{"altText":1995,"config":2025},{"src":2026,"dataGaName":1998,"dataGaLocation":1993},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2028,"mobileIcon":2033,"desktopIcon":2035},{"text":2029,"config":2030},"Back to pricing",{"href":1765,"dataGaName":2031,"dataGaLocation":1993,"icon":2032},"back to pricing","GoBack",{"altText":1995,"config":2034},{"src":1997,"dataGaName":1998,"dataGaLocation":1993},{"altText":1995,"config":2036},{"src":2001,"dataGaName":1998,"dataGaLocation":1993},{"title":2038,"titleMobile":2039,"button":2040,"config":2045},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":1658,"config":2041},{"href":2042,"dataGaName":2043,"dataGaLocation":2044},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":2046,"disabled":1594},"release",{"data":2048},{"text":2049,"source":2050,"edit":2056,"contribute":2061,"config":2066,"items":2071,"minimal":2281},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":2051,"config":2052},"View page source",{"href":2053,"dataGaName":2054,"dataGaLocation":2055},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2057,"config":2058},"Edit this page",{"href":2059,"dataGaName":2060,"dataGaLocation":2055},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2062,"config":2063},"Please contribute",{"href":2064,"dataGaName":2065,"dataGaLocation":2055},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2067,"facebook":2068,"youtube":2069,"linkedin":2070},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2072,2119,2173,2217,2249],{"title":1763,"links":2073,"subMenu":2088},[2074,2078,2083],{"text":2075,"config":2076},"View plans",{"href":1765,"dataGaName":2077,"dataGaLocation":2055},"view plans",{"text":2079,"config":2080},"Why Premium?",{"href":2081,"dataGaName":2082,"dataGaLocation":2055},"/pricing/premium/","why premium",{"text":2084,"config":2085},"Why Ultimate?",{"href":2086,"dataGaName":2087,"dataGaLocation":2055},"/pricing/ultimate/","why ultimate",[2089],{"title":2090,"links":2091},"Contact Us",[2092,2095,2097,2099,2104,2109,2114],{"text":2093,"config":2094},"Contact sales",{"href":1945,"dataGaName":1627,"dataGaLocation":2055},{"text":1948,"config":2096},{"href":1950,"dataGaName":1951,"dataGaLocation":2055},{"text":1953,"config":2098},{"href":1955,"dataGaName":1956,"dataGaLocation":2055},{"text":2100,"config":2101},"Status",{"href":2102,"dataGaName":2103,"dataGaLocation":2055},"https://status.gitlab.com/","status",{"text":2105,"config":2106},"Terms of use",{"href":2107,"dataGaName":2108,"dataGaLocation":2055},"/terms/","terms of use",{"text":2110,"config":2111},"Privacy statement",{"href":2112,"dataGaName":2113,"dataGaLocation":2055},"/privacy/","privacy statement",{"text":2115,"config":2116},"Cookie preferences",{"dataGaName":2117,"dataGaLocation":2055,"id":2118,"isOneTrustButton":863},"cookie preferences","ot-sdk-btn",{"title":1663,"links":2120,"subMenu":2129},[2121,2125],{"text":2122,"config":2123},"DevSecOps platform",{"href":1646,"dataGaName":2124,"dataGaLocation":2055},"devsecops platform",{"text":2126,"config":2127},"AI-Assisted Development",{"href":1652,"dataGaName":2128,"dataGaLocation":2055},"ai-assisted development",[2130],{"title":2131,"links":2132},"Topics",[2133,2138,2143,2148,2153,2158,2163,2168],{"text":2134,"config":2135},"CICD",{"href":2136,"dataGaName":2137,"dataGaLocation":2055},"/topics/ci-cd/","cicd",{"text":2139,"config":2140},"GitOps",{"href":2141,"dataGaName":2142,"dataGaLocation":2055},"/topics/gitops/","gitops",{"text":2144,"config":2145},"DevOps",{"href":2146,"dataGaName":2147,"dataGaLocation":2055},"/topics/devops/","devops",{"text":2149,"config":2150},"Version Control",{"href":2151,"dataGaName":2152,"dataGaLocation":2055},"/topics/version-control/","version control",{"text":2154,"config":2155},"DevSecOps",{"href":2156,"dataGaName":2157,"dataGaLocation":2055},"/topics/devsecops/","devsecops",{"text":2159,"config":2160},"Cloud Native",{"href":2161,"dataGaName":2162,"dataGaLocation":2055},"/topics/cloud-native/","cloud native",{"text":2164,"config":2165},"AI for Coding",{"href":2166,"dataGaName":2167,"dataGaLocation":2055},"/topics/devops/ai-for-coding/","ai for coding",{"text":2169,"config":2170},"Agentic AI",{"href":2171,"dataGaName":2172,"dataGaLocation":2055},"/topics/agentic-ai/","agentic ai",{"title":2174,"links":2175},"Solutions",[2176,2178,2180,2185,2189,2192,2196,2199,2201,2204,2207,2212],{"text":1707,"config":2177},{"href":1702,"dataGaName":1707,"dataGaLocation":2055},{"text":1696,"config":2179},{"href":1679,"dataGaName":1680,"dataGaLocation":2055},{"text":2181,"config":2182},"Agile development",{"href":2183,"dataGaName":2184,"dataGaLocation":2055},"/solutions/agile-delivery/","agile delivery",{"text":2186,"config":2187},"SCM",{"href":1692,"dataGaName":2188,"dataGaLocation":2055},"source code management",{"text":2134,"config":2190},{"href":1685,"dataGaName":2191,"dataGaLocation":2055},"continuous integration & delivery",{"text":2193,"config":2194},"Value stream management",{"href":1735,"dataGaName":2195,"dataGaLocation":2055},"value stream management",{"text":2139,"config":2197},{"href":2198,"dataGaName":2142,"dataGaLocation":2055},"/solutions/gitops/",{"text":1745,"config":2200},{"href":1748,"dataGaName":1749,"dataGaLocation":2055},{"text":2202,"config":2203},"Small business",{"href":1754,"dataGaName":1755,"dataGaLocation":2055},{"text":2205,"config":2206},"Public sector",{"href":1760,"dataGaName":1761,"dataGaLocation":2055},{"text":2208,"config":2209},"Education",{"href":2210,"dataGaName":2211,"dataGaLocation":2055},"/solutions/education/","education",{"text":2213,"config":2214},"Financial services",{"href":2215,"dataGaName":2216,"dataGaLocation":2055},"/solutions/finance/","financial services",{"title":1499,"links":2218},[2219,2221,2223,2225,2228,2230,2233,2235,2237,2239,2241,2243,2245,2247],{"text":1779,"config":2220},{"href":1781,"dataGaName":1782,"dataGaLocation":2055},{"text":1784,"config":2222},{"href":1786,"dataGaName":1787,"dataGaLocation":2055},{"text":1789,"config":2224},{"href":1791,"dataGaName":1792,"dataGaLocation":2055},{"text":1794,"config":2226},{"href":1796,"dataGaName":2227,"dataGaLocation":2055},"docs",{"text":1817,"config":2229},{"href":1819,"dataGaName":1820,"dataGaLocation":2055},{"text":2231,"config":2232},"What's new",{"href":1877,"dataGaName":1878,"dataGaLocation":2055},{"text":1812,"config":2234},{"href":1814,"dataGaName":1815,"dataGaLocation":2055},{"text":1831,"config":2236},{"href":1833,"dataGaName":1834,"dataGaLocation":2055},{"text":1839,"config":2238},{"href":1841,"dataGaName":1842,"dataGaLocation":2055},{"text":1844,"config":2240},{"href":1846,"dataGaName":1847,"dataGaLocation":2055},{"text":1849,"config":2242},{"href":1851,"dataGaName":1852,"dataGaLocation":2055},{"text":1854,"config":2244},{"href":1856,"dataGaName":1857,"dataGaLocation":2055},{"text":1859,"config":2246},{"href":1861,"dataGaName":1862,"dataGaLocation":2055},{"text":1864,"config":2248},{"href":1866,"dataGaName":1867,"dataGaLocation":2055},{"title":1880,"links":2250},[2251,2253,2255,2257,2259,2261,2265,2270,2272,2274,2276],{"text":1888,"config":2252},{"href":1890,"dataGaName":1882,"dataGaLocation":2055},{"text":1893,"config":2254},{"href":1895,"dataGaName":1896,"dataGaLocation":2055},{"text":1901,"config":2256},{"href":1903,"dataGaName":1904,"dataGaLocation":2055},{"text":1906,"config":2258},{"href":1908,"dataGaName":1909,"dataGaLocation":2055},{"text":1911,"config":2260},{"href":1913,"dataGaName":1914,"dataGaLocation":2055},{"text":2262,"config":2263},"Sustainability",{"href":2264,"dataGaName":2262,"dataGaLocation":2055},"/sustainability/",{"text":2266,"config":2267},"Diversity, inclusion and belonging (DIB)",{"href":2268,"dataGaName":2269,"dataGaLocation":2055},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1916,"config":2271},{"href":1918,"dataGaName":1919,"dataGaLocation":2055},{"text":1926,"config":2273},{"href":1928,"dataGaName":1929,"dataGaLocation":2055},{"text":1931,"config":2275},{"href":1933,"dataGaName":1934,"dataGaLocation":2055},{"text":2277,"config":2278},"Modern Slavery Transparency Statement",{"href":2279,"dataGaName":2280,"dataGaLocation":2055},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2282},[2283,2286,2289],{"text":2284,"config":2285},"Terms",{"href":2107,"dataGaName":2108,"dataGaLocation":2055},{"text":2287,"config":2288},"Cookies",{"dataGaName":2117,"dataGaLocation":2055,"id":2118,"isOneTrustButton":863},{"text":2290,"config":2291},"Privacy",{"href":2112,"dataGaName":2113,"dataGaLocation":2055},[2293],{"id":2294,"title":7,"body":1593,"config":2295,"content":2297,"description":1593,"extension":2301,"meta":2302,"navigation":863,"path":2303,"seo":2304,"stem":2305,"__hash__":2306},"blogAuthors/en-us/blog/authors/itzik-gan-baruch.yml",{"template":2296},"BlogAuthor",{"name":7,"config":2298},{"headshot":2299,"ctfId":2300},"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",[2308,2314,2322],{"title":2309,"description":2310,"heroImage":1595,"category":1589,"date":2311,"authors":2312,"slug":2313,"externalUrl":1593},"How I built a demo generator with GitLab Duo Agent Platform","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.","2026-08-13",[7],"agentic-click-through-demo",{"title":2315,"description":2316,"heroImage":2317,"category":1589,"date":2318,"authors":2319,"slug":2321,"externalUrl":1593},"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",[2320],"Julie Griffin","govern-agentic-ai-mcps-code-assistants",{"title":2323,"description":2324,"heroImage":2325,"category":1589,"date":2326,"authors":2327,"slug":2329,"externalUrl":1593},"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",[2328],"Brittany Lutz","claude-opus-5-on-gitlab-duo-agent-platform",{"promotions":2331},[2332,2345,2356,2368],{"id":2333,"categories":2334,"header":2335,"text":2336,"button":2337,"image":2342},"ai-modernization",[1589],"Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":2338,"config":2339},"Get your AI maturity score",{"href":2340,"dataGaName":2341,"dataGaLocation":1820},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":2343},{"src":2344},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2346,"categories":2347,"header":2348,"text":2336,"button":2349,"image":2353},"devops-modernization",[1606,2157],"Are you just managing tools or shipping innovation?",{"text":2350,"config":2351},"Get your DevOps maturity score",{"href":2352,"dataGaName":2341,"dataGaLocation":1820},"/assessments/devops-modernization-assessment/",{"config":2354},{"src":2355},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2357,"categories":2358,"header":2360,"text":2336,"button":2361,"image":2365},"security-modernization",[2359],"security","Are you trading speed for security?",{"text":2362,"config":2363},"Get your security maturity score",{"href":2364,"dataGaName":2341,"dataGaLocation":1820},"/assessments/security-modernization-assessment/",{"config":2366},{"src":2367},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2369,"paths":2370,"header":2373,"text":2374,"button":2375,"image":2380},"github-azure-migration",[2371,2372],"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":2376,"config":2377},"See how GitLab compares to GitHub",{"href":2378,"dataGaName":2379,"dataGaLocation":1820},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2381},{"src":2355},{"header":2383,"blurb":2384,"button":2385,"secondaryButton":2390},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":2386,"config":2387},"Get your free trial",{"href":2388,"dataGaName":1622,"dataGaLocation":2389},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":2093,"config":2391},{"href":1945,"dataGaName":1627,"dataGaLocation":2389},1786803748300]