[{"data":1,"prerenderedAt":1835},["ShallowReactive",2],{"/pt-br/blog/categories/ai":3,"navigation-pt-br":22,"banner-pt-br":448,"footer-pt-br":455,"ai-category-page-total-items-pt-br":708,"ai-category-page-featured-pt-br":709,"ai-category-page-1-pt-br":1834},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":11,"description":6,"extension":13,"meta":14,"navigation":15,"path":16,"seo":17,"slug":6,"stem":20,"testContent":6,"type":6,"__hash__":21},"blogCategories/pt-br/blog/categories/ai.yml","Ai",null,{"template":8,"slug":9,"hide":10},"BlogCategory","ai",false,{"name":12},"IA","yml",{},true,"/pt-br/blog/categories/ai",{"title":18,"description":19},"IA | Blog do GitLab","Navegue por artigos relacionados a IA no Blog do GitLab em português. Veja nossas últimas matérias.","pt-br/blog/categories/ai","_FAUBOzVEPP0V05918jTjtQMAb6_40cQ1SpeR_CO-AU",{"logo":23,"freeTrial":28,"sales":33,"login":38,"items":43,"search":364,"minimal":399,"duo":418,"switchNav":427,"pricingDeployment":438},{"config":24},{"href":25,"dataGaName":26,"dataGaLocation":27},"/pt-br/","gitlab logo","header",{"text":29,"config":30},"Obtenha uma avaliação gratuita",{"href":31,"dataGaName":32,"dataGaLocation":27},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/pt-br&glm_content=default-saas-trial/","free trial",{"text":34,"config":35},"Solicite uma demonstração",{"href":36,"dataGaName":37,"dataGaLocation":27},"/pt-br/sales/?contact-topic=request-demo","sales",{"text":39,"config":40},"Fazer login",{"href":41,"dataGaName":42,"dataGaLocation":27},"https://gitlab.com/users/sign_in/","sign in",[44,120,208,213,288,342],{"text":45,"left":15,"config":46,"menu":48},"Plataforma",{"dataNavLevelOne":47},"platform",{"type":49,"link":50,"columns":54,"feature":109},"lists",{"text":51,"config":52},"Conheça a plataforma",{"href":53,"dataGaName":47,"dataGaLocation":27},"/pt-br/platform/",[55,73,91],{"title":56,"items":57},"Execução e fluxos de trabalho",[58,63,68],{"text":59,"config":60},"CI/CD",{"href":61,"dataGaLocation":27,"dataGaName":62},"/pt-br/solutions/continuous-integration/","ci/cd",{"text":64,"config":65},"Gerenciamento de código-fonte",{"href":66,"dataGaLocation":27,"dataGaName":67},"/pt-br/solutions/source-code-management/","source code management",{"text":69,"config":70},"Entrega ágil",{"href":71,"dataGaLocation":27,"dataGaName":72},"/pt-br/solutions/agile-delivery/","agile delivery",{"title":74,"items":75},"Segurança e governança",[76,81,86],{"text":77,"config":78},"Testes de segurança de aplicações",{"href":79,"dataGaLocation":27,"dataGaName":80},"/pt-br/solutions/application-security-testing/","application security testing",{"text":82,"config":83},"Governança e conformidade",{"href":84,"dataGaLocation":27,"dataGaName":85},"/pt-br/solutions/software-compliance/","governance and compliance",{"text":87,"config":88},"Segurança da cadeia de suprimentos",{"href":89,"dataGaLocation":27,"dataGaName":90},"/pt-br/solutions/supply-chain/","supply chain security",{"title":92,"items":93},"Contexto e IA",[94,99,104],{"text":95,"config":96},"Orquestração agêntica",{"href":97,"dataGaLocation":27,"dataGaName":98},"/pt-br/gitlab-duo-agent-platform/","agentic orchestration",{"text":100,"config":101},"Grafo de contexto",{"href":102,"dataGaLocation":27,"dataGaName":103},"/pt-br/gitlab-orbit/","context graph",{"text":105,"config":106},"Visibilidade e métricas",{"href":107,"dataGaLocation":27,"dataGaName":108},"/pt-br/solutions/visibility-measurement/","visibility and measurement",{"config":110,"title":113,"text":114,"link":115},{"background":111,"textColor":112},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Por que escolher o GitLab?","Uma plataforma única que oferece velocidade e controle em todo o ciclo de vida do seu software.",{"text":116,"config":117},"Saiba mais",{"href":118,"dataGaName":119,"dataGaLocation":27},"/pt-br/why-gitlab/","why gitlab",{"text":121,"left":15,"config":122,"menu":124},"Soluções",{"dataNavLevelOne":123},"solutions",{"type":49,"link":125,"columns":129,"feature":199},{"text":126,"config":127},"Confira todas as soluções",{"href":128,"dataGaName":123,"dataGaLocation":27},"/pt-br/solutions/",[130,148,166],{"title":131,"items":132},"Resultados",[133,138,143],{"text":134,"config":135},"Modernização de DevOps",{"href":136,"dataGaLocation":27,"dataGaName":137},"/pt-br/assessments/devops-modernization-assessment/","devops modernization",{"text":139,"config":140},"Modernização da segurança",{"href":141,"dataGaLocation":27,"dataGaName":142},"/pt-br/assessments/security-modernization-assessment/","security modernization",{"text":144,"config":145},"Modernização da IA",{"href":146,"dataGaLocation":27,"dataGaName":147},"/pt-br/assessments/ai-modernization-assessment/","ai modernization",{"title":149,"items":150},"Por tamanho",[151,156,161],{"text":152,"config":153},"Enterprise",{"href":154,"dataGaLocation":27,"dataGaName":155},"/pt-br/enterprise/","enterprise",{"text":157,"config":158},"Pequenas empresas",{"href":159,"dataGaLocation":27,"dataGaName":160},"/pt-br/small-business/","small business",{"text":162,"config":163},"Start-ups",{"href":164,"dataGaLocation":27,"dataGaName":165},"/pt-br/solutions/startups/","startups",{"title":167,"items":168},"Indústrias",[169,174,179,184,189,194],{"text":170,"config":171},"Serviços financeiros",{"href":172,"dataGaLocation":27,"dataGaName":173},"/pt-br/solutions/finance/","financial services",{"text":175,"config":176},"Setor público",{"href":177,"dataGaLocation":27,"dataGaName":178},"/pt-br/solutions/public-sector/","public sector",{"text":180,"config":181},"Telecomunicações",{"href":182,"dataGaLocation":27,"dataGaName":183},"/pt-br/solutions/telecommunications/","telecommunications",{"text":185,"config":186},"Serviços automotivos",{"href":187,"dataGaLocation":27,"dataGaName":188},"/pt-br/solutions/automotive/","automotive",{"text":190,"config":191},"Educação",{"href":192,"dataGaLocation":27,"dataGaName":193},"/pt-br/solutions/education/","education",{"text":195,"config":196},"Setor aeroespacial",{"href":197,"dataGaLocation":27,"dataGaName":198},"/pt-br/solutions/aerospace/","aerospace",{"config":200,"title":201,"text":202,"link":203},{"background":111,"textColor":112},"GitLab Transcend","Confira nossas inovações mais recentes, anunciadas no último Transcend.",{"text":204,"config":205},"Acesse o blog",{"href":206,"dataGaName":207,"dataGaLocation":27},"/blog/gitlab-transcend-announcements/","gitlab transcend",{"text":209,"config":210},"Preços",{"href":211,"dataGaName":212,"dataGaLocation":27,"dataNavLevelOne":212},"/pt-br/pricing/","pricing",{"text":214,"config":215,"menu":217},"Recursos",{"dataNavLevelOne":216},"resources",{"type":49,"link":218,"columns":222,"feature":279},{"text":219,"config":220},"Confira todos os recursos",{"href":221,"dataGaName":216,"dataGaLocation":27},"/pt-br/resources/",[223,251],{"title":224,"items":225},"Descubra",[226,231,236,241,246],{"text":227,"config":228},"Documentação",{"href":229,"dataGaName":230,"dataGaLocation":27},"https://docs.gitlab.com/","docs",{"text":232,"config":233},"University",{"href":234,"dataGaName":235,"dataGaLocation":27},"https://university.gitlab.com/","university",{"text":237,"config":238},"Demo Series",{"href":239,"dataGaName":240,"dataGaLocation":27},"/pt-br/gitlab-technical-demo-series/","demo series",{"text":242,"config":243},"Demo Hub",{"href":244,"dataGaName":245,"dataGaLocation":27},"/pt-br/demo-hub/","demo hub",{"text":247,"config":248},"Serviços",{"href":249,"dataGaName":250,"dataGaLocation":27},"/pt-br/services/","services",{"title":252,"items":253},"Conecte-se",[254,259,264,269,274],{"text":255,"config":256},"Blog",{"href":257,"dataGaName":258,"dataGaLocation":27},"/blog/","blog",{"text":260,"config":261},"Comunidade",{"href":262,"dataGaName":263,"dataGaLocation":27},"/community/","community",{"text":265,"config":266},"Clientes",{"href":267,"dataGaName":268,"dataGaLocation":27},"/pt-br/customers/","customers",{"text":270,"config":271},"Parceiros",{"href":272,"dataGaName":273,"dataGaLocation":27},"/pt-br/partners/","partners",{"text":275,"config":276},"Eventos",{"href":277,"dataGaName":278,"dataGaLocation":27},"/events/","events",{"config":280,"title":281,"text":282,"link":283},{"background":111,"textColor":112},"Novidades no GitLab","Acompanhe as melhorias e os recursos mais recentes.",{"text":284,"config":285},"Confira as novidades",{"href":286,"dataGaName":287,"dataGaLocation":27},"/pt-br/whats-new/","whats new",{"text":289,"config":290,"menu":292},"Empresa",{"dataNavLevelOne":291},"company",{"type":49,"columns":293},[294],{"items":295},[296,301,307,312,317,322,327,332,337],{"text":297,"config":298},"Sobre",{"href":299,"dataGaName":300,"dataGaLocation":27},"/pt-br/company/","about",{"text":302,"config":303,"footerGa":306},"Vagas",{"href":304,"dataGaName":305,"dataGaLocation":27},"/jobs/","jobs",{"dataGaName":305},{"text":308,"config":309},"Imprensa",{"href":310,"dataGaName":311,"dataGaLocation":27},"/press/","press",{"text":313,"config":314},"Manual",{"href":315,"dataGaName":316,"dataGaLocation":27},"https://handbook.gitlab.com/","handbook",{"text":318,"config":319},"Liderança",{"href":320,"dataGaName":321,"dataGaLocation":27},"/company/team/e-group/","leadership",{"text":323,"config":324},"Relações com investidores",{"href":325,"dataGaName":326,"dataGaLocation":27},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":328,"config":329},"Trust Center",{"href":330,"dataGaName":331,"dataGaLocation":27},"/pt-br/security/","trust center",{"text":333,"config":334},"AI Transparency Center",{"href":335,"dataGaName":336,"dataGaLocation":27},"/pt-br/ai-transparency-center/","ai transparency center",{"text":338,"config":339},"Boletim informativo",{"href":340,"dataGaName":341,"dataGaLocation":27},"/company/contact/#contact-forms","newsletter",{"text":343,"config":344,"menu":345},"Entre em contato",{"dataNavLevelOne":291},{"type":49,"columns":346},[347],{"items":348},[349,354,359],{"text":350,"config":351},"Fale com a equipe de vendas",{"href":352,"dataGaName":353,"dataGaLocation":27},"/pt-br/sales/","talk to sales",{"text":355,"config":356},"Portal de ajuda",{"href":357,"dataGaName":358,"dataGaLocation":27},"https://support.gitlab.com/hc/en-us","support portal",{"text":360,"config":361},"Portal de clientes",{"href":362,"dataGaName":363,"dataGaLocation":27},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":365,"login":366,"suggestions":373},"Fechar",{"text":367,"link":368},"Para pesquisar repositórios e projetos, faça login em",{"text":369,"config":370},"gitlab.com",{"href":41,"dataGaName":371,"dataGaLocation":372},"search login","search",{"text":374,"default":375},"Sugestões",[376,379,384,386,391,396],{"text":377,"config":378},"GitLab Duo Agent Platform",{"href":97,"dataGaName":377,"dataGaLocation":372},{"text":380,"config":381},"Sugestões de código (AI)",{"href":382,"dataGaName":383,"dataGaLocation":372},"/pt-br/solutions/code-suggestions/","Code Suggestions (AI)",{"text":59,"config":385},{"href":61,"dataGaName":59,"dataGaLocation":372},{"text":387,"config":388},"GitLab na AWS",{"href":389,"dataGaName":390,"dataGaLocation":372},"/pt-br/partners/technology-partners/aws/","GitLab on AWS",{"text":392,"config":393},"GitLab no Google Cloud",{"href":394,"dataGaName":395,"dataGaLocation":372},"/pt-br/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":113,"config":397},{"href":118,"dataGaName":398,"dataGaLocation":372},"Why GitLab?",{"freeTrial":400,"mobileIcon":405,"desktopIcon":410,"secondaryButton":413},{"text":401,"config":402},"Iniciar avaliação gratuita",{"href":403,"dataGaName":32,"dataGaLocation":404},"https://gitlab.com/-/trials/new/","nav",{"altText":406,"config":407},"Ícone do GitLab",{"src":408,"dataGaName":409,"dataGaLocation":404},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":406,"config":411},{"src":412,"dataGaName":409,"dataGaLocation":404},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":414,"config":415},"Primeiros passos",{"href":416,"dataGaName":417,"dataGaLocation":404},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/pt-br/get-started/","get started",{"freeTrial":419,"mobileIcon":423,"desktopIcon":425},{"text":420,"config":421},"Saiba mais sobre o GitLab Duo",{"href":97,"dataGaName":422,"dataGaLocation":404},"gitlab duo",{"altText":406,"config":424},{"src":408,"dataGaName":409,"dataGaLocation":404},{"altText":406,"config":426},{"src":412,"dataGaName":409,"dataGaLocation":404},{"button":428,"mobileIcon":433,"desktopIcon":435},{"text":429,"config":430},"/switch",{"href":431,"dataGaName":432,"dataGaLocation":404},"#contact","switch",{"altText":406,"config":434},{"src":408,"dataGaName":409,"dataGaLocation":404},{"altText":406,"config":436},{"src":437,"dataGaName":409,"dataGaLocation":404},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":439,"mobileIcon":444,"desktopIcon":446},{"text":440,"config":441},"Voltar para preços",{"href":211,"dataGaName":442,"dataGaLocation":404,"icon":443},"back to pricing","GoBack",{"altText":406,"config":445},{"src":408,"dataGaName":409,"dataGaLocation":404},{"altText":406,"config":447},{"src":412,"dataGaName":409,"dataGaLocation":404},{"title":449,"button":450,"config":453},"GitLab Orbit chegou: a camada de contexto para agentes de IA.",{"text":116,"config":451},{"href":102,"dataGaName":452,"dataGaLocation":27},"orbit",{"layout":454,"disabled":10},"release",{"data":456},{"text":457,"source":458,"edit":464,"contribute":469,"config":474,"items":479,"minimal":697},"Git é uma marca comercial da Software Freedom Conservancy e nosso uso do nome \"GitLab\" está sob licença",{"text":459,"config":460},"Ver a origem da página",{"href":461,"dataGaName":462,"dataGaLocation":463},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":465,"config":466},"Editar esta página",{"href":467,"dataGaName":468,"dataGaLocation":463},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":470,"config":471},"Contribua",{"href":472,"dataGaName":473,"dataGaLocation":463},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":475,"facebook":476,"youtube":477,"linkedin":478},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[480,526,581,623,664],{"title":209,"links":481,"subMenu":496},[482,486,491],{"text":483,"config":484},"Confira os planos",{"href":211,"dataGaName":485,"dataGaLocation":463},"view plans",{"text":487,"config":488},"Por que escolher o GitLab Premium?",{"href":489,"dataGaName":490,"dataGaLocation":463},"/pt-br/pricing/premium/","why premium",{"text":492,"config":493},"Por que escolher o GitLab Ultimate?",{"href":494,"dataGaName":495,"dataGaLocation":463},"/pt-br/pricing/ultimate/","why ultimate",[497],{"title":498,"links":499},"Entre em contato conosco",[500,502,504,506,511,516,521],{"text":350,"config":501},{"href":352,"dataGaName":37,"dataGaLocation":463},{"text":355,"config":503},{"href":357,"dataGaName":358,"dataGaLocation":463},{"text":360,"config":505},{"href":362,"dataGaName":363,"dataGaLocation":463},{"text":507,"config":508},"Status",{"href":509,"dataGaName":510,"dataGaLocation":463},"https://status.gitlab.com/","status",{"text":512,"config":513},"Termos de uso",{"href":514,"dataGaName":515,"dataGaLocation":463},"/terms/","terms of use",{"text":517,"config":518},"Aviso de privacidade",{"href":519,"dataGaName":520,"dataGaLocation":463},"/pt-br/privacy/","privacy statement",{"text":522,"config":523},"Preferências de cookies",{"dataGaName":524,"dataGaLocation":463,"id":525,"isOneTrustButton":15},"cookie preferences","ot-sdk-btn",{"title":45,"links":527,"subMenu":538},[528,530,532,534,536],{"text":51,"config":529},{"href":53,"dataGaName":47,"dataGaLocation":463},{"text":95,"config":531},{"href":97,"dataGaName":98,"dataGaLocation":463},{"text":59,"config":533},{"href":61,"dataGaName":62,"dataGaLocation":463},{"text":100,"config":535},{"href":102,"dataGaName":103,"dataGaLocation":463},{"text":113,"config":537},{"href":118,"dataGaName":119,"dataGaLocation":463},[539],{"title":540,"links":541},"Tópicos",[542,546,551,556,561,566,571,576],{"text":59,"config":543},{"href":544,"dataGaName":545,"dataGaLocation":463},"/pt-br/topics/ci-cd/","cicd",{"text":547,"config":548},"GitOps",{"href":549,"dataGaName":550,"dataGaLocation":463},"/pt-br/topics/gitops/","gitops",{"text":552,"config":553},"DevOps",{"href":554,"dataGaName":555,"dataGaLocation":463},"/pt-br/topics/devops/","devops",{"text":557,"config":558},"Controle de versão",{"href":559,"dataGaName":560,"dataGaLocation":463},"/pt-br/topics/version-control/","version control",{"text":562,"config":563},"DevSecOps",{"href":564,"dataGaName":565,"dataGaLocation":463},"/pt-br/topics/devsecops/","devsecops",{"text":567,"config":568},"De nuvem nativa",{"href":569,"dataGaName":570,"dataGaLocation":463},"/pt-br/topics/cloud-native/","cloud native",{"text":572,"config":573},"IA para programação",{"href":574,"dataGaName":575,"dataGaLocation":463},"/pt-br/topics/devops/ai-for-coding/","ai for coding",{"text":577,"config":578},"IA agêntica",{"href":579,"dataGaName":580,"dataGaLocation":463},"/pt-br/topics/agentic-ai/","agentic ai",{"title":121,"links":582},[583,585,587,589,591,593,595,597,599,601,603,605,607,610,614,619],{"text":134,"config":584},{"href":136,"dataGaName":137,"dataGaLocation":463},{"text":139,"config":586},{"href":141,"dataGaName":142,"dataGaLocation":463},{"text":144,"config":588},{"href":146,"dataGaName":147,"dataGaLocation":463},{"text":170,"config":590},{"href":172,"dataGaName":173,"dataGaLocation":463},{"text":175,"config":592},{"href":177,"dataGaName":178,"dataGaLocation":463},{"text":180,"config":594},{"href":182,"dataGaName":183,"dataGaLocation":463},{"text":185,"config":596},{"href":187,"dataGaName":188,"dataGaLocation":463},{"text":190,"config":598},{"href":192,"dataGaName":193,"dataGaLocation":463},{"text":195,"config":600},{"href":197,"dataGaName":198,"dataGaLocation":463},{"text":152,"config":602},{"href":154,"dataGaName":155,"dataGaLocation":463},{"text":157,"config":604},{"href":159,"dataGaName":160,"dataGaLocation":463},{"text":162,"config":606},{"href":164,"dataGaName":165,"dataGaLocation":463},{"text":547,"config":608},{"href":609,"dataGaName":550,"dataGaLocation":463},"/pt-br/solutions/gitops/",{"text":611,"config":612},"Análise de composição de software",{"href":89,"dataGaName":613,"dataGaLocation":463},"software composition analysis",{"text":615,"config":616},"Gestão de fluxo de valor do GitLab",{"href":617,"dataGaName":618,"dataGaLocation":463},"/pt-br/solutions/value-stream-management/","value stream management",{"text":620,"config":621},"Todas as soluções",{"href":128,"dataGaName":622,"dataGaLocation":463},"all solutions",{"title":214,"links":624},[625,630,635,637,639,641,643,645,647,649,651,653,655,657,660],{"text":626,"config":627},"Instalação",{"href":628,"dataGaName":629,"dataGaLocation":463},"/pt-br/install/","install",{"text":631,"config":632},"Guias de início rápido",{"href":633,"dataGaName":634,"dataGaLocation":463},"/pt-br/get-started/","quick setup checklists",{"text":227,"config":636},{"href":229,"dataGaName":230,"dataGaLocation":463},{"text":232,"config":638},{"href":234,"dataGaName":235,"dataGaLocation":463},{"text":237,"config":640},{"href":239,"dataGaName":240,"dataGaLocation":463},{"text":242,"config":642},{"href":244,"dataGaName":245,"dataGaLocation":463},{"text":247,"config":644},{"href":249,"dataGaName":250,"dataGaLocation":463},{"text":255,"config":646},{"href":257,"dataGaName":258,"dataGaLocation":463},{"text":260,"config":648},{"href":262,"dataGaName":263,"dataGaLocation":463},{"text":265,"config":650},{"href":267,"dataGaName":268,"dataGaLocation":463},{"text":270,"config":652},{"href":272,"dataGaName":273,"dataGaLocation":463},{"text":275,"config":654},{"href":277,"dataGaName":278,"dataGaLocation":463},{"text":338,"config":656},{"href":340,"dataGaName":341,"dataGaLocation":463},{"text":658,"config":659},"Novidades",{"href":286,"dataGaName":287,"dataGaLocation":463},{"text":661,"config":662},"Todos os recursos",{"href":221,"dataGaName":663,"dataGaLocation":463},"all resources",{"title":289,"links":665},[666,668,670,672,674,676,678,680,682,687,692],{"text":297,"config":667},{"href":299,"dataGaName":291,"dataGaLocation":463},{"text":302,"config":669},{"href":304,"dataGaName":305,"dataGaLocation":463},{"text":308,"config":671},{"href":310,"dataGaName":311,"dataGaLocation":463},{"text":313,"config":673},{"href":315,"dataGaName":316,"dataGaLocation":463},{"text":318,"config":675},{"href":320,"dataGaName":321,"dataGaLocation":463},{"text":323,"config":677},{"href":325,"dataGaName":326,"dataGaLocation":463},{"text":328,"config":679},{"href":330,"dataGaName":331,"dataGaLocation":463},{"text":333,"config":681},{"href":335,"dataGaName":336,"dataGaLocation":463},{"text":683,"config":684},"Sustentabilidade",{"href":685,"dataGaName":686,"dataGaLocation":463},"/sustainability/","Sustainability",{"text":688,"config":689},"Diversidade, inclusão e pertencimento (DIB)",{"href":690,"dataGaName":691,"dataGaLocation":463},"/pt-br/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":693,"config":694},"Declaração de Transparência da Lei da Escravidão Moderna",{"href":695,"dataGaName":696,"dataGaLocation":463},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":698},[699,702,705],{"text":700,"config":701},"Termos",{"href":514,"dataGaName":515,"dataGaLocation":463},{"text":703,"config":704},"Cookies",{"dataGaName":524,"dataGaLocation":463,"id":525,"isOneTrustButton":15},{"text":706,"config":707},"Privacidade",{"href":519,"dataGaName":520,"dataGaLocation":463},1,{"id":710,"title":711,"authors":712,"body":714,"category":9,"date":1818,"description":1819,"extension":1820,"externalUrl":6,"faq":6,"featured":15,"heroImage":1821,"meta":1822,"navigation":15,"path":1823,"seo":1824,"slug":1826,"stem":1827,"tags":1828,"template":1832,"updatedDate":6,"__hash__":1833},"blogPosts/pt-br/blog/claude-code-and-gitlab.md","Claude Code e o GitLab: três fluxos de trabalho que realmente entregam",[713],"Michael Friedrich",{"type":715,"value":716,"toc":1803},"minimark",[717,721,724,727,730,743,748,786,791,794,813,859,862,874,878,885,892,905,918,924,933,1057,1060,1069,1079,1082,1085,1115,1124,1130,1136,1139,1152,1156,1159,1166,1170,1179,1189,1200,1227,1237,1255,1258,1277,1283,1292,1295,1299,1306,1315,1322,1328,1331,1340,1347,1353,1356,1377,1380,1386,1389,1398,1405,1411,1414,1420,1424,1433,1439,1447,1462,1476,1482,1485,1494,1497,1503,1506,1530,1536,1539,1545,1549,1553,1565,1711,1720,1729,1738,1742,1745,1748,1751,1762,1765,1799],[718,719,720],"p",{},"Os desenvolvedores adoram o Claude Code porque utilizá-lo é como programar em dupla com um engenheiro sênior direto no terminal ou na IDE: ele ajuda você a entender código desconhecido, propor correções e estruturar novos recursos rapidamente.",[718,722,723],{},"Contudo, há um padrão que vale observar: quanto melhores ficam as ferramentas de programação com agentes de IA para escrever código, mais o restante do ciclo de vida do software luta para acompanhar o ritmo. O backlog de bugs cresce. As taxas de falha nos pipelines crescem e as vulnerabilidades de segurança se acumulam mais rápido do que os times conseguem classificá-las. Isso mostra que programar e entregar um software não são a mesma coisa, e essa diferença entre os dois é real.",[718,725,726],{},"É neste ponto que o GitLab entra para acelerar tudo o que vem depois do Claude Code no restante do ciclo de vida do software: CI/CD, verificação de segurança, revisão de código e aprovações, tudo em um só lugar, com um fluxo auditável.",[718,728,729],{},"Este tutorial apresenta três cenários nos quais o Claude Code avança rápido na base de código, enquanto o GitLab cuida de tudo o que transforma esse código em uma mudança certificada e entregue:",[731,732,733,737,740],"ul",{},[734,735,736],"li",{},"Corrija um bug em C++ com o Claude Code e deixe que o GitLab CI/CD, a verificação de segurança e o Duo Code Review sigam a partir daí.",[734,738,739],{},"Adicione contexto do GitLab via MCP para que o Claude trabalhe a partir do tíquete real, e não apenas dos arquivos locais.",[734,741,742],{},"Use um agente externo do Claude no Duo Agent Platform para resolver o feedback de revisão de código diretamente na merge request - MR.",[744,745,747],"h2",{"id":746},"pré-requisitos","Pré-requisitos",[749,750,751,760,769,783],"ol",{},[734,752,753,759],{},[754,755,758],"a",{"href":756,"rel":757},"https://code.claude.com/docs/pt/overview",[],"Claude Code"," no terminal, configurado e em execução.",[734,761,762,763,768],{},"Um projeto GitLab com relatos de bugs e issues de proposta de recursos — por exemplo, o ",[754,764,767],{"href":765,"rel":766},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform",[],"projeto Tanuki Iot Platform",".",[734,770,771,772,777,778,768],{},"Para casos de uso específicos: o ",[754,773,776],{"href":774,"rel":775},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/",[],"servidor MCP do GitLab"," e o GitLab Duo Agent Platform com ",[754,779,782],{"href":780,"rel":781},"https://docs.gitlab.com/user/duo_agent_platform/agents/external/",[],"agentes externos",[734,784,785],{},"Para compilar o código: CMake, Make, gcc/clang++ para C++, Maven para Java.",[787,788,790],"h3",{"id":789},"prepare-o-projeto-gitlab","Prepare o projeto GitLab",[718,792,793],{},"Se quiser acompanhar o tutorial, você pode repetir todas as etapas aqui no seu próprio ambiente de desenvolvimento. Para isso:",[731,795,796,803,806],{},[734,797,798,799,802],{},"Importe o ",[754,800,767],{"href":765,"rel":801},[]," para o seu ambiente GitLab, incluindo todos os issues abertos.",[734,804,805],{},"Clone o projeto no seu ambiente local e navegue até ele.",[734,807,808,809,768],{},"Abra um terminal e execute o Claude Code com ",[810,811,812],"code",{},"claude",[814,815,820],"pre",{"className":816,"code":817,"language":818,"meta":819,"style":819},"language-shell shiki shiki-themes github-light","git clone https://gitlab.example.com/examplegroup/tanuki-iot-platform.git\ncd tanuki-iot-platform\n\nclaude\n","shell","",[810,821,822,837,847,853],{"__ignoreMap":819},[823,824,826,830,834],"span",{"class":825,"line":708},"line",[823,827,829],{"class":828},"s7eDp","git",[823,831,833],{"class":832},"sYBdl"," clone",[823,835,836],{"class":832}," https://gitlab.example.com/examplegroup/tanuki-iot-platform.git\n",[823,838,840,844],{"class":825,"line":839},2,[823,841,843],{"class":842},"sYu0t","cd",[823,845,846],{"class":832}," tanuki-iot-platform\n",[823,848,850],{"class":825,"line":849},3,[823,851,852],{"emptyLinePlaceholder":15},"\n",[823,854,856],{"class":825,"line":855},4,[823,857,858],{"class":828},"claude\n",[718,860,861],{},"Faça uma pergunta no prompt para saber mais sobre a finalidade do projeto.",[814,863,867],{"className":864,"code":865,"language":866,"meta":819,"style":819},"language-markdown shiki shiki-themes github-light","Sobre o que é este projeto?\n","markdown",[810,868,869],{"__ignoreMap":819},[823,870,871],{"class":825,"line":708},[823,872,865],{"class":873},"sgsFI",[744,875,877],{"id":876},"comece-a-usar-o-claude-code-com-o-gitlab","Comece a usar o Claude Code com o GitLab",[718,879,880,881,884],{},"No nosso primeiro cenário, precisamos corrigir um sensor de hardware escrito em C++. O coletor Arduino lê métricas da placa Arduino Uno R4 conectada via USB e trava quando o dispositivo ",[810,882,883],{},"/dev/ttyACM0"," não está conectado.",[718,886,887],{},[888,889],"img",{"alt":890,"src":891,"title":890},"Issue do GitLab mostrando o relato de bug do travamento do coletor IoT Arduino","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079018/itfnec4qrlldxfftwnig.png",[718,893,894,895,900,901,904],{},"Depois de ler o relato de bug no ",[754,896,899],{"href":897,"rel":898},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/work_items/4",[],"Issue 4",", inspecione o código no arquivo ",[810,902,903],{},"main.cpp",", por exemplo, usando o vim:",[814,906,908],{"className":816,"code":907,"language":818,"meta":819,"style":819},"vim sensors/arduino-iot-collector/src/main.cpp\n",[810,909,910],{"__ignoreMap":819},[823,911,912,915],{"class":825,"line":708},[823,913,914],{"class":828},"vim",[823,916,917],{"class":832}," sensors/arduino-iot-collector/src/main.cpp\n",[718,919,920],{},[888,921],{"alt":922,"src":923,"title":922},"Código-fonte do Arduino IoT Collector aberto no vim","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079018/mjof3rgdlxjy2trmgehq.png",[718,925,926,927,932],{},"Compile e execute o binário do coletor com o ",[754,928,931],{"href":929,"rel":930},"https://cmake.org/",[],"CMake"," para reproduzir o problema.",[814,934,936],{"className":816,"code":935,"language":818,"meta":819,"style":819},"cmake -S . -B build\ncmake --build build\n\n./build/arduino_iot_collector\nStarting Arduino IoT Collector Application...\nlibc++abi: terminating due to uncaught exception of type std::runtime_error: Failed to initialize Arduino temperature sensor: Arduino port not found: /dev/ttyACM0\n[1]    85289 abort      ./build/arduino_iot_collector\n",[810,937,938,955,964,968,973,991,1051],{"__ignoreMap":819},[823,939,940,943,946,949,952],{"class":825,"line":708},[823,941,942],{"class":828},"cmake",[823,944,945],{"class":842}," -S",[823,947,948],{"class":832}," .",[823,950,951],{"class":842}," -B",[823,953,954],{"class":832}," build\n",[823,956,957,959,962],{"class":825,"line":839},[823,958,942],{"class":828},[823,960,961],{"class":842}," --build",[823,963,954],{"class":832},[823,965,966],{"class":825,"line":849},[823,967,852],{"emptyLinePlaceholder":15},[823,969,970],{"class":825,"line":855},[823,971,972],{"class":828},"./build/arduino_iot_collector\n",[823,974,976,979,982,985,988],{"class":825,"line":975},5,[823,977,978],{"class":828},"Starting",[823,980,981],{"class":832}," Arduino",[823,983,984],{"class":832}," IoT",[823,986,987],{"class":832}," Collector",[823,989,990],{"class":832}," Application...\n",[823,992,994,997,1000,1003,1006,1009,1012,1015,1018,1021,1024,1026,1029,1031,1034,1037,1039,1042,1045,1048],{"class":825,"line":993},6,[823,995,996],{"class":828},"libc++abi:",[823,998,999],{"class":832}," terminating",[823,1001,1002],{"class":832}," due",[823,1004,1005],{"class":832}," to",[823,1007,1008],{"class":832}," uncaught",[823,1010,1011],{"class":832}," exception",[823,1013,1014],{"class":832}," of",[823,1016,1017],{"class":832}," type",[823,1019,1020],{"class":832}," std::runtime_error:",[823,1022,1023],{"class":832}," Failed",[823,1025,1005],{"class":832},[823,1027,1028],{"class":832}," initialize",[823,1030,981],{"class":832},[823,1032,1033],{"class":832}," temperature",[823,1035,1036],{"class":832}," sensor:",[823,1038,981],{"class":832},[823,1040,1041],{"class":832}," port",[823,1043,1044],{"class":832}," not",[823,1046,1047],{"class":832}," found:",[823,1049,1050],{"class":832}," /dev/ttyACM0\n",[823,1052,1054],{"class":825,"line":1053},7,[823,1055,1056],{"class":873},"[1]    85289 abort      ./build/arduino_iot_collector\n",[718,1058,1059],{},"Abra o Claude Code e insira o seguinte pedido:",[814,1061,1063],{"className":864,"code":1062,"language":866,"meta":819,"style":819},"Pode me ajudar a corrigir o sensor do Arduino IoT Collector? Ele está travando.\n",[810,1064,1065],{"__ignoreMap":819},[823,1066,1067],{"class":825,"line":708},[823,1068,1062],{"class":873},[718,1070,1071,1072,1074,1075,1078],{},"O Claude Code pesquisa a base de código (codebase) e identifica o problema no arquivo ",[810,1073,903],{},", que lança uma exceção ",[810,1076,1077],{},"std::runtime_error()",", fazendo a aplicação travar imediatamente. O comportamento esperado é registrar um erro de configuração amigável ao usuário e continuar executando a aplicação normalmente.",[718,1080,1081],{},"Depois de corrigir e compilar o código com sucesso, precisamos criar uma branch do Git, um commit e uma merge request para disparar os pipelines de CI/CD, a verificação de segurança e os fluxos de revisão de código.",[718,1083,1084],{},"Você pode usar diferentes formas de trabalhar com o Git no Claude Code:",[731,1086,1087,1093],{},[734,1088,1089,1090],{},"Usar um prompt: ",[810,1091,1092],{},"Pode me ajudar a criar uma branch do Git, fazer o commit e enviar as alterações?",[734,1094,1095,1096,1099,1100,1103,1104,1107,1108,1111,1112,1114],{},"Executar os comandos do shell: abra o prompt de comando com ",[810,1097,1098],{},"!",", seguido dos comandos ",[810,1101,1102],{},"git checkout -b fix-arduino-sensor",", ",[810,1105,1106],{},"git commit -avm \"...\""," e ",[810,1109,1110],{},"git push",". A saída do ",[810,1113,1110],{}," gera uma URL de criação da merge request. Clique nela para abrir o navegador e preencher o formulário.",[718,1116,1117,1118,1123],{},"Os pipelines de CI/CD são disparados na criação da MR e verificam se o build e os testes estão funcionando. A verificação de segurança garante que nenhuma vulnerabilidade nova seja introduzida. A nova MR dispara automaticamente o ",[754,1119,1122],{"href":1120,"rel":1121},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/code_review/",[],"GitLab Duo Code Review Flow",", que avalia a precisão da correção, de acordo com os guias de estilo de desenvolvimento e as instruções de revisão personalizadas.",[718,1125,1126],{},[888,1127],{"alt":1128,"src":1129,"title":1128},"Instruções personalizadas do GitLab Duo Code Review para C++","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079019/wasta2rqivrvrsjtw1jv.png",[718,1131,1132],{},[888,1133],{"alt":1134,"src":1135,"title":1134},"Comentário com feedback do GitLab Duo Code Review Flow","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079019/r2oalo1xwkpbmeispflo.png",[718,1137,1138],{},"Veja abaixo uma gravação do Claude Code, do GitLab CI/CD e do GitLab Duo Agent Platform em ação:",[1140,1141,1144,1145],"figure",{"className":1142},[1143],"video_container","\n  ",[1146,1147,1151],"iframe",{"src":1148,"frameBorder":1149,"allowFullScreen":1150},"https://www.youtube.com/embed/JH4Sae3eDpw","0","true"," ",[744,1153,1155],{"id":1154},"corrigindo-um-bug-em-c-com-o-gitlab-mcp-no-claude-code","Corrigindo um bug em C++ com o GitLab MCP no Claude Code",[718,1157,1158],{},"No cenário anterior, o Claude Code pesquisou o repositório de código local e fez suposições sobre uma possível correção com base no contexto disponível. No entanto, ele não tinha conhecimento do tíquete do GitLab que descrevia o bug, das discussões para a sua depuração e das soluções propostas para resolver o problema em definitivo. Além disso, ele também não levou em conta o histórico de alterações de código anteriores salvas em merge requests e issues com relatos parecidos, que são parte importante do contexto do ciclo de vida do desenvolvimento de software (SDLC).",[718,1160,1161,1162,1165],{},"Para permitir a utilização desse contexto rico do SDLC do GitLab, podemos integrar o ",[754,1163,776],{"href":774,"rel":1164},[]," para o Claude Code.",[787,1167,1169],{"id":1168},"configure-o-servidor-mcp-do-gitlab","Configure o servidor MCP do GitLab",[718,1171,1172,1173,1178],{},"Confirme que o servidor MCP do GitLab está ",[754,1174,1177],{"href":1175,"rel":1176},"https://docs.gitlab.com/user/gitlab_duo/model_context_protocol/mcp_server/#prerequisites",[],"habilitado"," na instância ou no grupo de nível superior.",[718,1180,1181,1182,1185,1186,768],{},"Abra um novo terminal e adicione o ",[754,1183,776],{"href":774,"rel":1184},[]," ao Claude Code usando o tipo de transporte ",[810,1187,1188],{},"http",[718,1190,1191,1192,1195,1196,1199],{},"Substitua ",[810,1193,1194],{},"gitlab.example.com"," pela sua instância do GitLab ou use ",[810,1197,1198],{},"GitLab.com",":",[814,1201,1203],{"className":816,"code":1202,"language":818,"meta":819,"style":819},"claude mcp add --transport http GitLab https://gitlab.example.com/api/v4/mcp\n",[810,1204,1205],{"__ignoreMap":819},[823,1206,1207,1209,1212,1215,1218,1221,1224],{"class":825,"line":708},[823,1208,812],{"class":828},[823,1210,1211],{"class":832}," mcp",[823,1213,1214],{"class":832}," add",[823,1216,1217],{"class":842}," --transport",[823,1219,1220],{"class":832}," http",[823,1222,1223],{"class":832}," GitLab",[823,1225,1226],{"class":832}," https://gitlab.example.com/api/v4/mcp\n",[718,1228,1229,1230,1232,1233,1236],{},"Execute ",[810,1231,812],{}," em uma nova sessão do terminal e digite ",[810,1234,1235],{},"/mcp"," para autenticar com o servidor MCP do GitLab, usando OAuth na página do navegador que será aberta.",[814,1238,1240],{"className":816,"code":1239,"language":818,"meta":819,"style":819},"claude\n\n/mcp\n",[810,1241,1242,1246,1250],{"__ignoreMap":819},[823,1243,1244],{"class":825,"line":708},[823,1245,858],{"class":828},[823,1247,1248],{"class":825,"line":839},[823,1249,852],{"emptyLinePlaceholder":15},[823,1251,1252],{"class":825,"line":849},[823,1253,1254],{"class":828},"/mcp\n",[718,1256,1257],{},"Para verificar a conexão, pergunte ao Claude:",[814,1259,1261],{"className":864,"code":1260,"language":866,"meta":819,"style":819},"Quais ferramentas MCP do GitLab estão disponíveis para você?\n\nMostre a versão do servidor MCP do GitLab\n",[810,1262,1263,1268,1272],{"__ignoreMap":819},[823,1264,1265],{"class":825,"line":708},[823,1266,1267],{"class":873},"Quais ferramentas MCP do GitLab estão disponíveis para você?\n",[823,1269,1270],{"class":825,"line":839},[823,1271,852],{"emptyLinePlaceholder":15},[823,1273,1274],{"class":825,"line":849},[823,1275,1276],{"class":873},"Mostre a versão do servidor MCP do GitLab\n",[718,1278,1279],{},[888,1280],{"alt":1281,"src":1282,"title":1281},"Claude Code investigando a versão do servidor MCP do GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079019/f2ygt6wuuvxxbpticcgt.png",[718,1284,1285,1286,1291],{},"Ao autenticar o Claude Code com o servidor MCP do GitLab, a conexão passa pelo ",[754,1287,1290],{"href":1288,"rel":1289},"https://datatracker.ietf.org/doc/html/rfc7591",[],"OAuth"," e atua com a sua identidade já existente no GitLab e não com permissões elevadas ou separadas. Na prática, isso significa que o Claude Code só consegue ver projetos, issues (tíquetes), merge requests e outros dados do GitLab que você já tem acesso, seja pela sua conta ou seja pela sua participação em projetos e grupos. Essa é uma importante barreira de proteção: o MCP amplia o contexto dentro da ferramenta de IA, mas não contorna os controles de visibilidade do GitLab nem cria um acesso mais amplo por conta própria.",[718,1293,1294],{},"Uma segunda barreira de proteção é a aprovação do usuário. Nesse fluxo, o Claude Code identifica a ferramenta MCP que quer chamar e pede aprovação antes de seguir adiante, para que os desenvolvedores continuem no controle sempre que um contexto externo é buscado. Em ambientes sensíveis à segurança, também vale reforçar que os times devem ficar atentos aos dados expostos nos prompts e usar o MCP principalmente com conteúdo confiável do GitLab.",[787,1296,1298],{"id":1297},"trabalhe-em-um-issue-de-relato-de-bug","Trabalhe em um issue de relato de bug",[718,1300,1301,1302,1305],{},"Vamos buscar o contexto do tíquete no Claude Code referenciando o ",[754,1303,899],{"href":897,"rel":1304},[]," no prompt. Se você não tiver um tíquete no seu projeto, clone/copie o Issue 4 e ajuste o número no prompt.",[814,1307,1309],{"className":864,"code":1308,"language":866,"meta":819,"style":819},"Pode me ajudar a corrigir o issue 4?\n",[810,1310,1311],{"__ignoreMap":819},[823,1312,1313],{"class":825,"line":708},[823,1314,1308],{"class":873},[718,1316,1317,1318,1321],{},"O Claude Code identifica a necessidade de chamar a ferramenta MCP ",[810,1319,1320],{},"get_issue"," e pede a sua aprovação, sendo que também é possível aprovar o uso futuro automaticamente.",[718,1323,1324],{},[888,1325],{"alt":1326,"src":1327,"title":1326},"Claude Code buscando o contexto do issue com ferramentas MCP","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079021/tj6dpxbemvvgqnbifzjy.png",[718,1329,1330],{},"Depois que o Claude Code buscar o contexto necessário do issue, ele começa a analisar diretamente o código-fonte em C++ do sensor. Depois de criar e verificar uma correção, você pode pedir para criar uma nova branch do Git, um commit e uma MR, caso o Claude Code ainda não o faça automaticamente.",[814,1332,1334],{"className":864,"code":1333,"language":866,"meta":819,"style":819},"Pode criar uma nova branch do Git, fazer o commit das alterações e criar uma nova merge request?\n",[810,1335,1336],{"__ignoreMap":819},[823,1337,1338],{"class":825,"line":708},[823,1339,1333],{"class":873},[718,1341,1342,1343,1346],{},"O Claude Code encontra a ferramenta MCP ",[810,1344,1345],{},"create_merge_request"," e cuida da criação da MR diretamente, sem precisar trocar de contexto para o navegador.",[718,1348,1349],{},[888,1350],{"alt":1351,"src":1352,"title":1351},"Claude Code criou uma MR usando ferramentas MCP, vinculada ao Issue 4","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079021/bo41ti93yonvsy9q2gbw.png",[718,1354,1355],{},"No GitLab, o evento de criação da MR dispara automaticamente vários fluxos de trabalho em paralelo:",[731,1357,1358,1361,1369],{},[734,1359,1360],{},"pipeline de CI/CD para builds e testes automatizados",[734,1362,1363,1364],{},"verificação de segurança com o ",[754,1365,1368],{"href":1366,"rel":1367},"https://docs.gitlab.com/user/application_security/sast/advanced_sast_cpp/",[],"Advanced SAST para C++",[734,1370,1371,1372,1376],{},"um ",[754,1373,1375],{"href":1120,"rel":1374},[],"Code Review Flow"," pelo GitLab Duo Agent Platform",[718,1378,1379],{},"Esses fluxos de trabalho automatizados e agênticos dentro do GitLab aceleram a entrega de software tanto quanto o Claude Code acelera o desenvolvimento com IA para a resolução de issues.",[718,1381,1382],{},[888,1383],{"alt":1384,"src":1385,"title":1384},"Status do pipeline de CI/CD na MR - testes e verificação de segurança","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079022/yd3kzf9yp4usdldovs1a.png",[718,1387,1388],{},"Você pode abrir a Merge Request no navegador ou continuar no terminal e enviar o seguinte prompt ao Claude Code:",[814,1390,1392],{"className":864,"code":1391,"language":866,"meta":819,"style":819},"A Merge Request está sendo executada corretamente?\n",[810,1393,1394],{"__ignoreMap":819},[823,1395,1396],{"class":825,"line":708},[823,1397,1391],{"class":873},[718,1399,1400,1401,1404],{},"Ele vai usar a ferramenta MCP ",[810,1402,1403],{},"get_merge_request_pipelines"," para buscar o status do pipeline da MR, confirmando que está verde e pronto para o merge.",[718,1406,1407],{},[888,1408],{"alt":1409,"src":1410,"title":1409},"Claude Code buscando o status do pipeline da MR usando ferramentas MCP","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079019/s8cwcvc3r5moui2twjpd.png",[718,1412,1413],{},"Veja a gravação para ver como o Claude Code resolve o problema com a ajuda do servidor MCP do GitLab:",[1140,1415,1144,1417],{"className":1416},[1143],[1146,1418,1151],{"src":1419,"frameBorder":1149,"allowFullScreen":1150},"https://www.youtube.com/embed/q8XWnmdIaI0",[744,1421,1423],{"id":1422},"claude-code-como-agente-externo-revisor","Claude Code como agente externo revisor",[718,1425,1426,1427,1432],{},"Neste último cenário, o Claude Code ajudou a implementar um novo recurso com base nos requisitos do ",[754,1428,1431],{"href":1429,"rel":1430},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/work_items/24",[],"Issue 24"," — um servidor de API Spring Boot com backend REST/Websocket. Os pipelines de CI/CD e as verificações de segurança estão OK, mas há feedback de revisão de código esperando na MR.",[718,1434,1435],{},[888,1436],{"alt":1437,"src":1438,"title":1437},"Feedback do GitLab Duo Code Review na MR do servidor de API Spring Boot","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079022/to7zvyrarrvcnyuuzldi.png",[718,1440,1441,1442,1446],{},"Você pode adicionar o Claude Code como parceiro de colaboração em issues, epics e MRs e resolver tarefas em conjunto. Siga a ",[754,1443,1445],{"href":780,"rel":1444},[],"documentação de agentes externos"," para conhecer os pré-requisitos.",[718,1448,1449,1450,1453,1454,1458,1459,768],{},"Ative o ",[810,1451,1452],{},"Claude Agent by GitLab"," no menu do projeto, em ",[1455,1456,1457],"strong",{},"AI > Agents",". Anote o nome da conta de serviço para saber como mencionar ou atribuir o agente depois — ele segue o padrão: ",[810,1460,1461],{},"@ai-\u003Cnome-do-agente>-\u003Cnome-do-grupo-de-nível-superior>",[718,1463,1464,1465,1470,1471,768],{},"Em seguida, abra a MR com o feedback de revisão de código e analise as alterações solicitadas. A captura de tela usa a ",[754,1466,1469],{"href":1467,"rel":1468},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/merge_requests/78",[],"MR 78",", e o GitLab Duo Code Review segue as ",[754,1472,1475],{"href":1473,"rel":1474},"https://docs.gitlab.com/user/duo_agent_platform/customize/review_instructions/?tab=Java",[],"instruções de revisão personalizadas para Java",[718,1477,1478],{},[888,1479],{"alt":1480,"src":1481,"title":1480},"Feedback do GitLab Duo Code Review Flow sobre AllowedOriginPatterns inseguro nos endpoints de API introduzidos na MR","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079039/gvgqmcnijllptvnnyyjc.png",[718,1483,1484],{},"Crie um novo comentário mencionando o Claude Code Agent:",[814,1486,1488],{"className":864,"code":1487,"language":866,"meta":819,"style":819},"@ai-claude-agent-by-gitlab-\u003Cnome-do-grupo-de-nível-superior> Pode me ajudar a resolver o feedback da revisão?\n",[810,1489,1490],{"__ignoreMap":819},[823,1491,1492],{"class":825,"line":708},[823,1493,1487],{"class":873},[718,1495,1496],{},"Essa menção inicia uma nova sessão de agente em segundo plano, configurando o Claude Code Agent, que passa a trabalhar no feedback da revisão. Quando termina, ele segue as instruções para criar um commit no Git e um comentário com um resumo na MR.",[718,1498,1499],{},[888,1500],{"alt":1501,"src":1502,"title":1501},"Feedback do GitLab Duo Code Review resolvido pelo Claude Agent","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079038/pqy8f4xo8n0i7yvkajso.png",[718,1504,1505],{},"Para garantir que o desenvolvimento de software permaneça dentro das diretrizes de proteção da sua organização, seus próximos passos incluem:",[731,1507,1508,1511,1514,1522],{},[734,1509,1510],{},"Resolver o feedback de revisão restante.",[734,1512,1513],{},"Revisar o aviso nos jobs do pipeline de CI/CD.",[734,1515,1516,1517,768],{},"Revisar as possíveis vulnerabilidades de segurança, usando, por exemplo, a ",[754,1518,1521],{"href":1519,"rel":1520},"https://docs.gitlab.com/user/duo_agent_platform/flows/foundational_flows/agentic_sast_vulnerability_resolution/",[],"Resolução de vulnerabilidades SAST",[734,1523,1524,1525,768],{},"Obter a aprovação da merge request de um desenvolvedor elegível, configurado como ",[754,1526,1529],{"href":1527,"rel":1528},"https://docs.gitlab.com/user/project/codeowners/",[],"Code Owner",[718,1531,1532],{},[888,1533],{"alt":1534,"src":1535,"title":1534},"Widgets da merge request mostrando o pipeline de CI/CD, as aprovações exigidas, os achados de segurança e o status do merge","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778079039/uzegwykldauzuxucrpjf.png",[718,1537,1538],{},"Assista a este vídeo para aprender como o Claude Code pode ajudar com revisões como agente externo no GitLab Duo Agent Platform:",[1140,1540,1144,1542],{"className":1541},[1143],[1146,1543,1151],{"src":1544,"frameBorder":1149,"allowFullScreen":1150},"https://www.youtube.com/embed/Tw0wNet1HCc",[744,1546,1548],{"id":1547},"dicas-para-usar-o-claude-code-com-o-gitlab","Dicas para usar o Claude Code com o GitLab",[787,1550,1552],{"id":1551},"instruções-personalizadas","Instruções personalizadas",[718,1554,1555,1556,1559,1560,1199],{},"É possível instruir os agentes a compilar e testar o código antes dos commits, manter as alterações mínimas ou entender melhor a arquitetura do projeto usando uma entrada no ",[810,1557,1558],{},"AGENTS.md",". O Tanuki IoT Platform usa o ",[754,1561,1564],{"href":1562,"rel":1563},"https://gitlab.com/gitlab-da/use-cases/ai/gitlab-duo-agent-platform/demo-environments/tanuki-iot-platform/-/blob/main/AGENTS.md?ref_type=heads&plain=1",[],"seguinte exemplo de produção",[814,1566,1568],{"className":864,"code":1567,"language":866,"meta":819,"style":819},"## Working with sensors\n\n### Before editing\n1. Identify the sensor directory you're working with\n2. Check for an `AGENTS.md` file in that directory\n3. Read sensor-specific instructions before making changes\n4. Follow language-specific style guides\n\n### Making changes\n- Keep changes minimal and focused on the user request\n- Do not refactor existing code unless specifically instructed\n- Preserve original code formatting\n- Only modify code necessary to solve the specific request\n\n### Creating MRs\n- Always run local builds and tests first\n- Create a new branch for changes\n- Automatically create a merge request after successful commits\n- Reference relevant issues or tasks in the MR description\n",[810,1569,1570,1576,1580,1585,1594,1608,1616,1624,1629,1635,1644,1652,1660,1668,1673,1679,1687,1695,1703],{"__ignoreMap":819},[823,1571,1572],{"class":825,"line":708},[823,1573,1575],{"class":1574},"surfw","## Working with sensors\n",[823,1577,1578],{"class":825,"line":839},[823,1579,852],{"emptyLinePlaceholder":15},[823,1581,1582],{"class":825,"line":849},[823,1583,1584],{"class":1574},"### Before editing\n",[823,1586,1587,1591],{"class":825,"line":855},[823,1588,1590],{"class":1589},"sqxcx","1.",[823,1592,1593],{"class":873}," Identify the sensor directory you're working with\n",[823,1595,1596,1599,1602,1605],{"class":825,"line":975},[823,1597,1598],{"class":1589},"2.",[823,1600,1601],{"class":873}," Check for an ",[823,1603,1604],{"class":842},"`AGENTS.md`",[823,1606,1607],{"class":873}," file in that directory\n",[823,1609,1610,1613],{"class":825,"line":993},[823,1611,1612],{"class":1589},"3.",[823,1614,1615],{"class":873}," Read sensor-specific instructions before making changes\n",[823,1617,1618,1621],{"class":825,"line":1053},[823,1619,1620],{"class":1589},"4.",[823,1622,1623],{"class":873}," Follow language-specific style guides\n",[823,1625,1627],{"class":825,"line":1626},8,[823,1628,852],{"emptyLinePlaceholder":15},[823,1630,1632],{"class":825,"line":1631},9,[823,1633,1634],{"class":1574},"### Making changes\n",[823,1636,1638,1641],{"class":825,"line":1637},10,[823,1639,1640],{"class":1589},"-",[823,1642,1643],{"class":873}," Keep changes minimal and focused on the user request\n",[823,1645,1647,1649],{"class":825,"line":1646},11,[823,1648,1640],{"class":1589},[823,1650,1651],{"class":873}," Do not refactor existing code unless specifically instructed\n",[823,1653,1655,1657],{"class":825,"line":1654},12,[823,1656,1640],{"class":1589},[823,1658,1659],{"class":873}," Preserve original code formatting\n",[823,1661,1663,1665],{"class":825,"line":1662},13,[823,1664,1640],{"class":1589},[823,1666,1667],{"class":873}," Only modify code necessary to solve the specific request\n",[823,1669,1671],{"class":825,"line":1670},14,[823,1672,852],{"emptyLinePlaceholder":15},[823,1674,1676],{"class":825,"line":1675},15,[823,1677,1678],{"class":1574},"### Creating MRs\n",[823,1680,1682,1684],{"class":825,"line":1681},16,[823,1683,1640],{"class":1589},[823,1685,1686],{"class":873}," Always run local builds and tests first\n",[823,1688,1690,1692],{"class":825,"line":1689},17,[823,1691,1640],{"class":1589},[823,1693,1694],{"class":873}," Create a new branch for changes\n",[823,1696,1698,1700],{"class":825,"line":1697},18,[823,1699,1640],{"class":1589},[823,1701,1702],{"class":873}," Automatically create a merge request after successful commits\n",[823,1704,1706,1708],{"class":825,"line":1705},19,[823,1707,1640],{"class":1589},[823,1709,1710],{"class":873}," Reference relevant issues or tasks in the MR description\n",[718,1712,1713,1714,1719],{},"Essas ",[754,1715,1718],{"href":1716,"rel":1717},"https://docs.gitlab.com/user/duo_agent_platform/customize/agents_md/",[],"instruções personalizadas"," também são processadas por agentes e flows no GitLab Duo Agent Platform.",[718,1721,1722,1723,1726,1727,768],{},"O Claude Code prefere o ",[810,1724,1725],{},"CLAUDE.md",", que também pode ser apontado para o ",[810,1728,1558],{},[814,1730,1732],{"className":864,"code":1731,"language":866,"meta":819,"style":819},"@AGENTS.md\n",[810,1733,1734],{"__ignoreMap":819},[823,1735,1736],{"class":825,"line":708},[823,1737,1731],{"class":873},[744,1739,1741],{"id":1740},"resumo","Resumo",[718,1743,1744],{},"As ferramentas de programação com IA tornam as equipes de desenvolvedores mais rápidas na hora de programar. Porém, escrever código e entregar software não são a mesma coisa, e essa diferença entre os dois cresce justamente porque as ferramentas são muito boas na primeira parte. Com elas, mais código é escrito, mas o backlog de bugs aumenta, as taxas de falha nos pipelines sobem e as vulnerabilidades de segurança se acumulam.",[718,1746,1747],{},"O Claude Code mantém a produtividade onde o código se localiza: entende bases de código desconhecidas, propõe correções e estrutura novos recursos rapidamente. O GitLab Duo Agent Platform é o que transforma essa velocidade — de muitos desenvolvedores em times de software de organizações empresariais — em software seguro que você realmente pode entregar e certificar em diversos marcos de release e projetos. Com o GitLab, o restante do ciclo de vida do software (como as correções no pipeline de CI/CD, a verificação de segurança, a remediação automatizada, revisão de código e muito mais, com fluxos de trabalho que mantêm humanos no controle) permite que cada ação dos agentes de IA seja rastreada e configurada para funcionar dentro das diretrizes de proteção e políticas de segurança da sua organização.",[718,1749,1750],{},"Neste tutorial, você viu três formas de unir o Claude Code e o GitLab Duo Agent Platform:",[731,1752,1753,1756,1759],{},[734,1754,1755],{},"Corrigir um bug com o Claude Code e deixar que o GitLab CI/CD, a verificação de segurança e o Duo Code Review façam o resto.",[734,1757,1758],{},"Adicionar contexto do GitLab via MCP para que o Claude trabalhe a partir do contexto real salvo no issue do GitLab, e não apenas dos arquivos locais.",[734,1760,1761],{},"Usar um agente externo com tecnologia Claude no GitLab Duo Agent Platform para resolver o feedback de revisão diretamente na MR.",[718,1763,1764],{},"O princípio se mantém o mesmo nos três casos: o Claude avança rápido, o GitLab certifica o trabalho.",[1766,1767,1768,1776,1784],"blockquote",{},[718,1769,1770,1771,768],{},"Se você ainda não usa o GitLab Duo Agent Platform, pode começar com um ",[754,1772,1775],{"href":1773,"rel":1774},"https://about.gitlab.com/pt-br/gitlab-duo-agent-platform/",[],"teste gratuito da ferramenta",[718,1777,1778,1779,768],{},"Se você já usa o GitLab no plano gratuito, pode assinar o GitLab Duo Agent Platform ",[754,1780,1783],{"href":1781,"rel":1782},"https://docs.gitlab.com/subscriptions/gitlab_credits/#for-the-free-tier-on-gitlabcom",[],"seguindo alguns passos simples",[718,1785,1786,1787,1792,1793,1798],{},"E se você já é assinante do GitLab Premium ou Ultimate, basta ",[754,1788,1791],{"href":1789,"rel":1790},"https://docs.gitlab.com/user/duo_agent_platform/turn_on_off/",[],"ativar o Duo Agent Platform"," e começar a usar os GitLab Credits ",[754,1794,1797],{"href":1795,"rel":1796},"https://docs.gitlab.com/subscriptions/gitlab_credits/#included-credits",[],"incluídos"," na sua assinatura.",[1800,1801,1802],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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 .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .surfw, html code.shiki .surfw{--shiki-default:#005CC5;--shiki-default-font-weight:bold}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}",{"title":819,"searchDepth":839,"depth":839,"links":1804},[1805,1808,1809,1813,1814,1817],{"id":746,"depth":839,"text":747,"children":1806},[1807],{"id":789,"depth":849,"text":790},{"id":876,"depth":839,"text":877},{"id":1154,"depth":839,"text":1155,"children":1810},[1811,1812],{"id":1168,"depth":849,"text":1169},{"id":1297,"depth":849,"text":1298},{"id":1422,"depth":839,"text":1423},{"id":1547,"depth":839,"text":1548,"children":1815},[1816],{"id":1551,"depth":849,"text":1552},{"id":1740,"depth":839,"text":1741},"2026-05-06","Agentes de IA escrevem código rápido. Mas quem entrega? Veja como Claude Code e GitLab Duo Agent Platform vão do relato do bug à correção em produção.","md","https://res.cloudinary.com/about-gitlab-com/image/upload/v1778087000/qdfsf8kz6ebfnopx9v2e.png",{},"/pt-br/blog/claude-code-and-gitlab",{"config":1825,"title":711,"description":1819},{"noIndex":10},"claude-code-and-gitlab","pt-br/blog/claude-code-and-gitlab",[1829,1830,1831],"AI","tutorial","product","BlogPost","DEVf53kTufyZJnoGHQbY5JQ7DHbkzuDx3kR8-LV_Gy4",[],1790351825485]