Files
pr-agent/tools/improve/index.html

3236 lines
113 KiB
HTML
Raw Normal View History

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="prev" href="../review/">
<link rel="next" href="../ask/">
<link rel="icon" href="../../assets/favicon.ico">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.15">
<title>Improve - Qodo Merge (and open-source PR-Agent)</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.342714a4.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../css/custom.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-M6PJSFV');</script>
<!-- End Google Tag Manager -->
<script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="Improve - Qodo Merge (and open-source PR-Agent)" >
<meta property="og:description" content="None" >
<meta property="og:image" content="./assets/images/social/tools/improve.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="None" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="Improve - Qodo Merge (and open-source PR-Agent)" >
<meta name="twitter:description" content="None" >
<meta name="twitter:image" content="./assets/images/social/tools/improve.png" >
<link href="../../assets/stylesheets/glightbox.min.css" rel="stylesheet"/><style>
html.glightbox-open { overflow: initial; height: 100%; }
.gslide-title { margin-top: 0px; user-select: text; }
.gslide-desc { color: #666; user-select: text; }
.gslide-image img { background: white; }
.gscrollbar-fixer { padding-right: 15px; }
.gdesc-inner { font-size: 0.75rem; }
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color);}
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color);}
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color);}</style> <script src="../../assets/javascripts/glightbox.min.js"></script></head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#overview" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="Qodo Merge (and open-source PR-Agent)" class="md-header__button md-logo" aria-label="Qodo Merge (and open-source PR-Agent)" data-md-component="logo">
<img src="../../assets/logo.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Qodo Merge (and open-source PR-Agent)
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Improve
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zm-9.15 3.96h2.3L12 9z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6m0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4M7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="custom" data-md-color-accent="custom" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/qodo-ai/pr-agent" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
Qodo-ai/pr-agent
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../.." class="md-tabs__link">
Overview
</a>
</li>
<li class="md-tabs__item">
<a href="../../installation/" class="md-tabs__link">
Installation
</a>
</li>
<li class="md-tabs__item">
<a href="../../usage-guide/" class="md-tabs__link">
Usage Guide
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../" class="md-tabs__link">
Tools
</a>
</li>
<li class="md-tabs__item">
<a href="../../core-abilities/" class="md-tabs__link">
Core Abilities
</a>
</li>
<li class="md-tabs__item">
<a href="../../pr_benchmark/" class="md-tabs__link">
PR Benchmark
</a>
</li>
<li class="md-tabs__item">
<a href="../../recent_updates/" class="md-tabs__link">
Recent Updates
</a>
</li>
<li class="md-tabs__item">
<a href="../../ai_search/" class="md-tabs__link">
AI Docs Search
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../.." title="Qodo Merge (and open-source PR-Agent)" class="md-nav__button md-logo" aria-label="Qodo Merge (and open-source PR-Agent)" data-md-component="logo">
<img src="../../assets/logo.svg" alt="logo">
</a>
Qodo Merge (and open-source PR-Agent)
</label>
<div class="md-nav__source">
<a href="https://github.com/qodo-ai/pr-agent" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
Qodo-ai/pr-agent
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_1" >
<div class="md-nav__link md-nav__container">
<a href="../.." class="md-nav__link ">
<span class="md-ellipsis">
Overview
</span>
</a>
<label class="md-nav__link " for="__nav_1" id="__nav_1_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
Overview
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../overview/pr_agent_pro/" class="md-nav__link">
<span class="md-ellipsis">
💎 Qodo Merge
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../overview/data_privacy/" class="md-nav__link">
<span class="md-ellipsis">
Data Privacy
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
<div class="md-nav__link md-nav__container">
<a href="../../installation/" class="md-nav__link ">
<span class="md-ellipsis">
Installation
</span>
</a>
<label class="md-nav__link " for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../installation/pr_agent/" class="md-nav__link">
<span class="md-ellipsis">
PR-Agent
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../installation/qodo_merge/" class="md-nav__link">
<span class="md-ellipsis">
💎 Qodo Merge
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_3" >
<div class="md-nav__link md-nav__container">
<a href="../../usage-guide/" class="md-nav__link ">
<span class="md-ellipsis">
Usage Guide
</span>
</a>
<label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Usage Guide
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../usage-guide/introduction/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../usage-guide/enabling_a_wiki/" class="md-nav__link">
<span class="md-ellipsis">
Enabling a Wiki
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../usage-guide/configuration_options/" class="md-nav__link">
<span class="md-ellipsis">
Configuration File
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../usage-guide/automations_and_usage/" class="md-nav__link">
<span class="md-ellipsis">
Usage and Automation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../usage-guide/mail_notifications/" class="md-nav__link">
<span class="md-ellipsis">
Managing Mail Notifications
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../usage-guide/changing_a_model/" class="md-nav__link">
<span class="md-ellipsis">
Changing a Model
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../usage-guide/additional_configurations/" class="md-nav__link">
<span class="md-ellipsis">
Additional Configurations
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../faq/" class="md-nav__link">
<span class="md-ellipsis">
Frequently Asked Questions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../usage-guide/qodo_merge_models/" class="md-nav__link">
<span class="md-ellipsis">
💎 Qodo Merge Models
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
<div class="md-nav__link md-nav__container">
<a href="../" class="md-nav__link ">
<span class="md-ellipsis">
Tools
</span>
</a>
<label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Tools
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../describe/" class="md-nav__link">
<span class="md-ellipsis">
Describe
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../review/" class="md-nav__link">
<span class="md-ellipsis">
Review
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Improve
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Improve
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#overview" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#how-it-looks" class="md-nav__link">
<span class="md-ellipsis">
How it looks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example-usage" class="md-nav__link">
<span class="md-ellipsis">
Example usage
</span>
</a>
<nav class="md-nav" aria-label="Example usage">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#manual-triggering" class="md-nav__link">
<span class="md-ellipsis">
Manual triggering
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#automatic-triggering" class="md-nav__link">
<span class="md-ellipsis">
Automatic triggering
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#assessing-impact" class="md-nav__link">
<span class="md-ellipsis">
Assessing Impact
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#suggestion-tracking" class="md-nav__link">
<span class="md-ellipsis">
Suggestion tracking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#extra-instructions-and-best-practices" class="md-nav__link">
<span class="md-ellipsis">
Extra instructions and best practices
</span>
</a>
<nav class="md-nav" aria-label="Extra instructions and best practices">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#extra-instructions" class="md-nav__link">
<span class="md-ellipsis">
Extra instructions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#best-practices" class="md-nav__link">
<span class="md-ellipsis">
Best practices
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#auto-best-practices" class="md-nav__link">
<span class="md-ellipsis">
Auto best practices
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#multiple-best-practices-sources" class="md-nav__link">
<span class="md-ellipsis">
Multiple best practices sources
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#combining-extra-instructions-and-best-practices" class="md-nav__link">
<span class="md-ellipsis">
Combining 'extra instructions' and 'best practices'
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#usage-tips" class="md-nav__link">
<span class="md-ellipsis">
Usage Tips
</span>
</a>
<nav class="md-nav" aria-label="Usage Tips">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#implementing-the-proposed-code-suggestions" class="md-nav__link">
<span class="md-ellipsis">
Implementing the proposed code suggestions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dual-publishing-mode" class="md-nav__link">
<span class="md-ellipsis">
Dual publishing mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#controlling-suggestions-depth" class="md-nav__link">
<span class="md-ellipsis">
Controlling suggestions depth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#self-review" class="md-nav__link">
<span class="md-ellipsis">
Self-review
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#how-many-code-suggestions-are-generated" class="md-nav__link">
<span class="md-ellipsis">
How many code suggestions are generated?
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#configuration-options" class="md-nav__link">
<span class="md-ellipsis">
Configuration options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#understanding-ai-code-suggestions" class="md-nav__link">
<span class="md-ellipsis">
Understanding AI Code Suggestions
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../ask/" class="md-nav__link">
<span class="md-ellipsis">
Ask
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../help/" class="md-nav__link">
<span class="md-ellipsis">
Help
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../help_docs/" class="md-nav__link">
<span class="md-ellipsis">
Help Docs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../update_changelog/" class="md-nav__link">
<span class="md-ellipsis">
Update Changelog
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../documentation/" class="md-nav__link">
<span class="md-ellipsis">
💎 Add Documentation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../analyze/" class="md-nav__link">
<span class="md-ellipsis">
💎 Analyze
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../ci_feedback/" class="md-nav__link">
<span class="md-ellipsis">
💎 CI Feedback
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../custom_prompt/" class="md-nav__link">
<span class="md-ellipsis">
💎 Custom Prompt
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../custom_labels/" class="md-nav__link">
<span class="md-ellipsis">
💎 Generate Labels
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../test/" class="md-nav__link">
<span class="md-ellipsis">
💎 Generate Tests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../implement/" class="md-nav__link">
<span class="md-ellipsis">
💎 Implement
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../improve_component/" class="md-nav__link">
<span class="md-ellipsis">
💎 Improve Components
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../scan_repo_discussions/" class="md-nav__link">
<span class="md-ellipsis">
💎 Scan Repo Discussions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../similar_code/" class="md-nav__link">
<span class="md-ellipsis">
💎 Similar Code
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
<div class="md-nav__link md-nav__container">
<a href="../../core-abilities/" class="md-nav__link ">
<span class="md-ellipsis">
Core Abilities
</span>
</a>
<label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Core Abilities
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../core-abilities/auto_approval/" class="md-nav__link">
<span class="md-ellipsis">
Auto approval
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/auto_best_practices/" class="md-nav__link">
<span class="md-ellipsis">
Auto best practices
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/chat_on_code_suggestions/" class="md-nav__link">
<span class="md-ellipsis">
Chat on code suggestions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../chrome-extension/" class="md-nav__link">
<span class="md-ellipsis">
Chrome extension
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/code_validation/" class="md-nav__link">
<span class="md-ellipsis">
Code validation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/dynamic_context/" class="md-nav__link">
<span class="md-ellipsis">
Dynamic context
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/fetching_ticket_context/" class="md-nav__link">
<span class="md-ellipsis">
Fetching ticket context
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/impact_evaluation/" class="md-nav__link">
<span class="md-ellipsis">
Impact evaluation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/incremental_update/" class="md-nav__link">
<span class="md-ellipsis">
Incremental Update
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/interactivity/" class="md-nav__link">
<span class="md-ellipsis">
Interactivity
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/metadata/" class="md-nav__link">
<span class="md-ellipsis">
Local and global metadata
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/rag_context_enrichment/" class="md-nav__link">
<span class="md-ellipsis">
RAG context enrichment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/self_reflection/" class="md-nav__link">
<span class="md-ellipsis">
Self-reflection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../core-abilities/static_code_analysis/" class="md-nav__link">
<span class="md-ellipsis">
Static code analysis
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
<div class="md-nav__link md-nav__container">
<a href="../../pr_benchmark/" class="md-nav__link ">
<span class="md-ellipsis">
PR Benchmark
</span>
</a>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
PR Benchmark
</label>
<ul class="md-nav__list" data-md-scrollfix>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<div class="md-nav__link md-nav__container">
<a href="../../recent_updates/" class="md-nav__link ">
<span class="md-ellipsis">
Recent Updates
</span>
</a>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Recent Updates
</label>
<ul class="md-nav__list" data-md-scrollfix>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../ai_search/" class="md-nav__link">
<span class="md-ellipsis">
AI Docs Search
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="On this page">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
On this page
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#overview" class="md-nav__link">
<span class="md-ellipsis">
Overview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#how-it-looks" class="md-nav__link">
<span class="md-ellipsis">
How it looks
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#example-usage" class="md-nav__link">
<span class="md-ellipsis">
Example usage
</span>
</a>
<nav class="md-nav" aria-label="Example usage">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#manual-triggering" class="md-nav__link">
<span class="md-ellipsis">
Manual triggering
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#automatic-triggering" class="md-nav__link">
<span class="md-ellipsis">
Automatic triggering
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#assessing-impact" class="md-nav__link">
<span class="md-ellipsis">
Assessing Impact
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#suggestion-tracking" class="md-nav__link">
<span class="md-ellipsis">
Suggestion tracking
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#extra-instructions-and-best-practices" class="md-nav__link">
<span class="md-ellipsis">
Extra instructions and best practices
</span>
</a>
<nav class="md-nav" aria-label="Extra instructions and best practices">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#extra-instructions" class="md-nav__link">
<span class="md-ellipsis">
Extra instructions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#best-practices" class="md-nav__link">
<span class="md-ellipsis">
Best practices
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#auto-best-practices" class="md-nav__link">
<span class="md-ellipsis">
Auto best practices
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#multiple-best-practices-sources" class="md-nav__link">
<span class="md-ellipsis">
Multiple best practices sources
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#combining-extra-instructions-and-best-practices" class="md-nav__link">
<span class="md-ellipsis">
Combining 'extra instructions' and 'best practices'
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#usage-tips" class="md-nav__link">
<span class="md-ellipsis">
Usage Tips
</span>
</a>
<nav class="md-nav" aria-label="Usage Tips">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#implementing-the-proposed-code-suggestions" class="md-nav__link">
<span class="md-ellipsis">
Implementing the proposed code suggestions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dual-publishing-mode" class="md-nav__link">
<span class="md-ellipsis">
Dual publishing mode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#controlling-suggestions-depth" class="md-nav__link">
<span class="md-ellipsis">
Controlling suggestions depth
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#self-review" class="md-nav__link">
<span class="md-ellipsis">
Self-review
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#how-many-code-suggestions-are-generated" class="md-nav__link">
<span class="md-ellipsis">
How many code suggestions are generated?
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#configuration-options" class="md-nav__link">
<span class="md-ellipsis">
Configuration options
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#understanding-ai-code-suggestions" class="md-nav__link">
<span class="md-ellipsis">
Understanding AI Code Suggestions
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>Improve</h1>
<h2 id="overview">Overview<a class="headerlink" href="#overview" title="Permanent link">&para;</a></h2>
<p>The <code>improve</code> tool scans the PR code changes, and automatically generates meaningful suggestions for improving the PR code.
The tool can be triggered automatically every time a new PR is <a href="../../usage-guide/automations_and_usage/#github-app-automatic-tools-when-a-new-pr-is-opened">opened</a>, or it can be invoked manually by commenting on any PR:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="err">/</span><span class="n">improve</span>
</code></pre></div>
<h2 id="how-it-looks">How it looks<a class="headerlink" href="#how-it-looks" title="Permanent link">&para;</a></h2>
<div class="tabbed-set tabbed-alternate" data-tabs="1:2"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Suggestions Overview</label><label for="__tabbed_1_2">Selecting a specific suggestion</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/code_suggestions_as_comment_closed.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="code_suggestions_as_comment_closed" src="https://codium.ai/images/pr_agent/code_suggestions_as_comment_closed.png" width="512" /></a></p>
</div>
<div class="tabbed-block">
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/code_suggestions_as_comment_open.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="code_suggestions_as_comment_open" src="https://codium.ai/images/pr_agent/code_suggestions_as_comment_open.png" width="512" /></a></p>
</div>
</div>
</div>
<hr />
<div class="admonition note">
<p class="admonition-title">The following features are available only for Qodo Merge 💎 users:</p>
<ul>
<li>The <code>Apply / Chat</code> checkbox, which interactively converts a suggestion into a committable code comment</li>
<li>The <code>More</code> checkbox to generate additional suggestions</li>
<li>On Bitbucket (Cloud &amp; Data Center) and GitLab Server (v16 and earlier), you can invoke <a href="#manual-more-suggestions">More Suggestions manually</a></li>
</ul>
</div>
<h2 id="example-usage">Example usage<a class="headerlink" href="#example-usage" title="Permanent link">&para;</a></h2>
<h3 id="manual-triggering">Manual triggering<a class="headerlink" href="#manual-triggering" title="Permanent link">&para;</a></h3>
<p>Invoke the tool manually by commenting <code>/improve</code> on any PR. The code suggestions by default are presented as a single comment:</p>
<p>To edit <a href="#configuration-options">configurations</a> related to the <code>improve</code> tool, use the following template:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a><span class="err">/</span><span class="n">improve</span><span class="w"> </span><span class="n">--pr_code_suggestions</span><span class="p">.</span><span class="n">some_config1</span><span class="o">=</span><span class="err">... --pr</span><span class="mi">_</span><span class="n">code_suggestions</span><span class="p">.</span><span class="n">some_config2</span><span class="o">=</span><span class="err">...</span>
</code></pre></div>
<p>For example, you can choose to present all the suggestions as committable code comments, by running the following command:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="err">/</span><span class="n">improve</span><span class="w"> </span><span class="n">--pr_code_suggestions</span><span class="p">.</span><span class="n">commitable_code_suggestions</span><span class="o">=</span><span class="kc">true</span>
</code></pre></div>
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/improve.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="improve" src="https://codium.ai/images/pr_agent/improve.png" width="512" /></a></p>
<p>As can be seen, a single table comment has a significantly smaller PR footprint. We recommend this mode for most cases.
Also note that collapsible are not supported in <em>Bitbucket</em>. Hence, the suggestions can only be presented in Bitbucket as code comments.</p>
<h4 id="manual-more-suggestions">Manual more suggestions<a class="headerlink" href="#manual-more-suggestions" title="Permanent link">&para;</a></h4>
<p>To generate more suggestions (distinct from the ones already generated), for git-providers that don't support interactive checkbox option, you can manually run:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>/improve --more_suggestions=true
</code></pre></div>
<h3 id="automatic-triggering">Automatic triggering<a class="headerlink" href="#automatic-triggering" title="Permanent link">&para;</a></h3>
<p>To run the <code>improve</code> automatically when a PR is opened, define in a <a href="https://qodo-merge-docs.qodo.ai/usage-guide/configuration_options/#wiki-configuration-file">configuration file</a>:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="k">[github_app]</span>
<a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a><span class="n">pr_commands</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span>
<a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a><span class="w"> </span><span class="s2">&quot;/improve&quot;</span><span class="p">,</span>
<a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="w"> </span><span class="err">...</span>
<a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a><span class="err">]</span>
<a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a>
<a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a><span class="k">[pr_code_suggestions]</span>
<a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a><span class="n">num_code_suggestions_per_chunk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">...</span>
<a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a><span class="p">...</span>
</code></pre></div>
<ul>
<li>The <code>pr_commands</code> lists commands that will be executed automatically when a PR is opened.</li>
<li>The <code>[pr_code_suggestions]</code> section contains the configurations for the <code>improve</code> tool you want to edit (if any)</li>
</ul>
<h3 id="assessing-impact">Assessing Impact<a class="headerlink" href="#assessing-impact" title="Permanent link">&para;</a></h3>
<blockquote>
<p><code>💎 feature</code></p>
</blockquote>
<p>Qodo Merge tracks two types of implementations for tracking implemented suggestions:</p>
<ul>
<li>Direct implementation - when the user directly applies the suggestion by clicking the <code>Apply</code> checkbox.</li>
<li>Indirect implementation - when the user implements the suggestion in their IDE environment. In this case, Qodo Merge will utilize, after each commit, a dedicated logic to identify if a suggestion was implemented, and will mark it as implemented.</li>
</ul>
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/code_suggestions_asses_impact.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="code_suggestions_assess_impact" src="https://codium.ai/images/pr_agent/code_suggestions_asses_impact.png" width="512" /></a></p>
<p>In post-process, Qodo Merge counts the number of suggestions that were implemented, and provides general statistics and insights about the suggestions' impact on the PR process.</p>
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/code_suggestions_asses_impact_stats_1.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="code_suggestions_assess_impact_stats_1" src="https://codium.ai/images/pr_agent/code_suggestions_asses_impact_stats_1.png" width="512" /></a></p>
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/code_suggestions_asses_impact_stats_2.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="code_suggestions_assess_impact_stats_2" src="https://codium.ai/images/pr_agent/code_suggestions_asses_impact_stats_2.png" width="512" /></a></p>
<h2 id="suggestion-tracking">Suggestion tracking<a class="headerlink" href="#suggestion-tracking" title="Permanent link">&para;</a></h2>
<blockquote>
<p><code>💎 feature. Platforms supported: GitHub, GitLab</code></p>
</blockquote>
<p>Qodo Merge employs a novel detection system to automatically <a href="https://qodo-merge-docs.qodo.ai/core-abilities/impact_evaluation/">identify</a> AI code suggestions that PR authors have accepted and implemented.</p>
<p>Accepted suggestions are also automatically documented in a dedicated wiki page called <code>.pr_agent_accepted_suggestions</code>, allowing users to track historical changes, assess the tool's effectiveness, and learn from previously implemented recommendations in the repository.
An example <a href="https://github.com/Codium-ai/pr-agent/wiki/.pr_agent_accepted_suggestions">result</a>:</p>
<p><a href="https://github.com/Codium-ai/pr-agent/wiki/.pr_agent_accepted_suggestions"><img alt="pr_agent_accepted_suggestions1.png" src="https://qodo.ai/images/pr_agent/pr_agent_accepted_suggestions1.png" width="768" /></a></p>
<p>This dedicated wiki page will also serve as a foundation for future AI model improvements, allowing it to learn from historically implemented suggestions and generate more targeted, contextually relevant recommendations.</p>
<p>This feature is controlled by a boolean configuration parameter: <code>pr_code_suggestions.wiki_page_accepted_suggestions</code> (default is true).</p>
<div class="admonition note">
<p class="admonition-title">Wiki must be enabled</p>
<p>While the aggregation process is automatic, GitHub repositories require a one-time manual wiki setup.</p>
<p>To initialize the wiki: navigate to <code>Wiki</code>, select <code>Create the first page</code>, then click <code>Save page</code>.</p>
<p><a class="glightbox" href="https://qodo.ai/images/pr_agent/pr_agent_accepted_suggestions_create_first_page.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="pr_agent_accepted_suggestions_create_first_page.png" src="https://qodo.ai/images/pr_agent/pr_agent_accepted_suggestions_create_first_page.png" width="768" /></a></p>
<p>Once a wiki repo is created, the tool will automatically use this wiki for tracking suggestions.</p>
</div>
<div class="admonition note">
<p class="admonition-title">Why a wiki page?</p>
<p>Your code belongs to you, and we respect your privacy. Hence, we won't store any code suggestions in an external database.</p>
<p>Instead, we leverage a dedicated private page, within your repository wiki, to track suggestions. This approach offers convenient secure suggestion tracking while avoiding pull requests or any noise to the main repository.</p>
</div>
<h2 id="extra-instructions-and-best-practices"><code>Extra instructions</code> and <code>best practices</code><a class="headerlink" href="#extra-instructions-and-best-practices" title="Permanent link">&para;</a></h2>
<p>The <code>improve</code> tool can be further customized by providing additional instructions and best practices to the AI model.</p>
<h3 id="extra-instructions">Extra instructions<a class="headerlink" href="#extra-instructions" title="Permanent link">&para;</a></h3>
<p>You can use the <code>extra_instructions</code> configuration option to give the AI model additional instructions for the <code>improve</code> tool.
Be specific, clear, and concise in the instructions. With extra instructions, you are the prompter.</p>
<p>Examples for possible instructions:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a><span class="k">[pr_code_suggestions]</span>
<a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="n">extra_instructions</span><span class="o">=</span><span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
<a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="s2">(1) Answer in Japanese</span>
<a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="s2">(2) Don&#39;t suggest to add try-except block</span>
<a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="s2">(3) Ignore changes in toml files</span>
<a id="__codelineno-5-6" name="__codelineno-5-6" href="#__codelineno-5-6"></a><span class="s2">...</span>
<a id="__codelineno-5-7" name="__codelineno-5-7" href="#__codelineno-5-7"></a><span class="s2">&quot;&quot;&quot;</span>
</code></pre></div>
<p>Use triple quotes to write multi-line instructions. Use bullet points or numbers to make the instructions more readable.</p>
<h3 id="best-practices">Best practices<a class="headerlink" href="#best-practices" title="Permanent link">&para;</a></h3>
<blockquote>
<p><code>💎 feature. Platforms supported: GitHub, GitLab, Bitbucket</code></p>
</blockquote>
<p>Qodo Merge supports both simple and hierarchical best practices configurations to provide guidance to the AI model for generating relevant code suggestions.</p>
<details class="- tip">
<summary>Writing effective best practices files</summary>
<p>The following guidelines apply to all best practices files:</p>
<ul>
<li>Write clearly and concisely</li>
<li>Include brief code examples when helpful with before/after patterns</li>
<li>Focus on project-specific guidelines that will result in relevant suggestions you actually want to get</li>
<li>Keep each file relatively short, under 800 lines, since:<ul>
<li>AI models may not process effectively very long documents</li>
<li>Long files tend to contain generic guidelines already known to AI</li>
</ul>
</li>
<li>Use pattern-based structure rather than simple bullet points for better clarity</li>
</ul>
</details>
<details class="- tip">
<summary>Example of a best practices file</summary>
<p>Pattern 1: Add proper error handling with try-except blocks around external function calls.</p>
<p>Example code before:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a><span class="c1"># Some code that might raise an exception</span>
<a id="__codelineno-6-2" name="__codelineno-6-2" href="#__codelineno-6-2"></a><span class="k">return</span> <span class="n">process_pr_data</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</code></pre></div>
<p>Example code after:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a><span class="k">try</span><span class="p">:</span>
<a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a> <span class="c1"># Some code that might raise an exception</span>
<a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a> <span class="k">return</span> <span class="n">process_pr_data</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a><span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<a id="__codelineno-7-5" name="__codelineno-7-5" href="#__codelineno-7-5"></a> <span class="n">logger</span><span class="o">.</span><span class="n">exception</span><span class="p">(</span><span class="s2">&quot;Failed to process request&quot;</span><span class="p">,</span> <span class="n">extra</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;error&quot;</span><span class="p">:</span> <span class="n">e</span><span class="p">})</span>
</code></pre></div>
<p>Pattern 2: Add defensive null/empty checks before accessing object properties or performing operations on potentially null variables to prevent runtime errors.</p>
<p>Example code before:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="k">def</span><span class="w"> </span><span class="nf">get_pr_code</span><span class="p">(</span><span class="n">pr_data</span><span class="p">):</span>
<a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a> <span class="k">if</span> <span class="s2">&quot;changed_code&quot;</span> <span class="ow">in</span> <span class="n">pr_data</span><span class="p">:</span>
<a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a> <span class="k">return</span> <span class="n">pr_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;changed_code&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</code></pre></div>
<p>Example code after:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a><span class="k">def</span><span class="w"> </span><span class="nf">get_pr_code</span><span class="p">(</span><span class="n">pr_data</span><span class="p">):</span>
<a id="__codelineno-9-2" name="__codelineno-9-2" href="#__codelineno-9-2"></a> <span class="k">if</span> <span class="n">pr_data</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<a id="__codelineno-9-3" name="__codelineno-9-3" href="#__codelineno-9-3"></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
<a id="__codelineno-9-4" name="__codelineno-9-4" href="#__codelineno-9-4"></a> <span class="k">if</span> <span class="s2">&quot;changed_code&quot;</span> <span class="ow">in</span> <span class="n">pr_data</span><span class="p">:</span>
<a id="__codelineno-9-5" name="__codelineno-9-5" href="#__codelineno-9-5"></a> <span class="k">return</span> <span class="n">pr_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;changed_code&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<a id="__codelineno-9-6" name="__codelineno-9-6" href="#__codelineno-9-6"></a> <span class="k">return</span> <span class="s2">&quot;&quot;</span>
</code></pre></div>
</details>
<h4 id="local-best-practices">Local best practices<a class="headerlink" href="#local-best-practices" title="Permanent link">&para;</a></h4>
<p>For basic usage, create a <code>best_practices.md</code> file in your repository's root directory containing a list of best practices, coding standards, and guidelines specific to your repository.</p>
<p>The AI model will use this <code>best_practices.md</code> file as a reference, and in case the PR code violates any of the guidelines, it will create additional suggestions, with a dedicated label: <code>Organization best practice</code>.</p>
<h4 id="global-hierarchical-best-practices">Global hierarchical best practices<a class="headerlink" href="#global-hierarchical-best-practices" title="Permanent link">&para;</a></h4>
<p>For organizations managing multiple repositories with different requirements, Qodo Merge supports a hierarchical best practices system using a dedicated global configuration repository.</p>
<p><strong>Supported scenarios:</strong></p>
<ol>
<li><strong>Standalone repositories</strong>: Individual repositories can have their own specific best practices tailored to their unique requirements</li>
<li><strong>Groups of repositories</strong>: Repositories can be mapped to shared group-level best practices for consistent standards across similar projects</li>
<li><strong>Monorepos with subprojects</strong>: Large monorepos can have both repository-level and subproject-level best practices, with automatic path-based matching</li>
</ol>
<h4 id="setting-up-global-hierarchical-best-practices">Setting up global hierarchical best practices<a class="headerlink" href="#setting-up-global-hierarchical-best-practices" title="Permanent link">&para;</a></h4>
<p>1. Create a new repository named <code>pr-agent-settings</code> in your organization/workspace.</p>
<p>2. Build the folder hierarchy in your <code>pr-agent-settings</code> repository, for example:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1" href="#__codelineno-10-1"></a>pr-agent-settings/
<a id="__codelineno-10-2" name="__codelineno-10-2" href="#__codelineno-10-2"></a>├──<span class="w"> </span>metadata.yaml<span class="w"> </span><span class="c1"># Maps repos/folders to best practice paths</span>
<a id="__codelineno-10-3" name="__codelineno-10-3" href="#__codelineno-10-3"></a>└──<span class="w"> </span>codebase_standards/<span class="w"> </span><span class="c1"># Root for all best practice definitions</span>
<a id="__codelineno-10-4" name="__codelineno-10-4" href="#__codelineno-10-4"></a><span class="w"> </span>├──<span class="w"> </span>global/<span class="w"> </span><span class="c1"># Global rules, inherited widely</span>
<a id="__codelineno-10-5" name="__codelineno-10-5" href="#__codelineno-10-5"></a><span class="w"> </span><span class="w"> </span>└──<span class="w"> </span>best_practices.md
<a id="__codelineno-10-6" name="__codelineno-10-6" href="#__codelineno-10-6"></a><span class="w"> </span>├──<span class="w"> </span>groups/<span class="w"> </span><span class="c1"># For groups of repositories</span>
<a id="__codelineno-10-7" name="__codelineno-10-7" href="#__codelineno-10-7"></a><span class="w"> </span><span class="w"> </span>├──<span class="w"> </span>frontend_repos/
<a id="__codelineno-10-8" name="__codelineno-10-8" href="#__codelineno-10-8"></a><span class="w"> </span><span class="w"> </span><span class="w"> </span>└──<span class="w"> </span>best_practices.md
<a id="__codelineno-10-9" name="__codelineno-10-9" href="#__codelineno-10-9"></a><span class="w"> </span><span class="w"> </span>├──<span class="w"> </span>backend_repos/
<a id="__codelineno-10-10" name="__codelineno-10-10" href="#__codelineno-10-10"></a><span class="w"> </span><span class="w"> </span><span class="w"> </span>└──<span class="w"> </span>best_practices.md
<a id="__codelineno-10-11" name="__codelineno-10-11" href="#__codelineno-10-11"></a><span class="w"> </span><span class="w"> </span>└──<span class="w"> </span>...
<a id="__codelineno-10-12" name="__codelineno-10-12" href="#__codelineno-10-12"></a><span class="w"> </span>├──<span class="w"> </span>qodo-merge/<span class="w"> </span><span class="c1"># For standalone repositories</span>
<a id="__codelineno-10-13" name="__codelineno-10-13" href="#__codelineno-10-13"></a><span class="w"> </span><span class="w"> </span>└──<span class="w"> </span>best_practices.md
<a id="__codelineno-10-14" name="__codelineno-10-14" href="#__codelineno-10-14"></a><span class="w"> </span>├──<span class="w"> </span>qodo-monorepo/<span class="w"> </span><span class="c1"># For monorepo-specific rules </span>
<a id="__codelineno-10-15" name="__codelineno-10-15" href="#__codelineno-10-15"></a><span class="w"> </span><span class="w"> </span>├──<span class="w"> </span>best_practices.md<span class="w"> </span><span class="c1"># Root level monorepo rules</span>
<a id="__codelineno-10-16" name="__codelineno-10-16" href="#__codelineno-10-16"></a><span class="w"> </span><span class="w"> </span>├──<span class="w"> </span>qodo-github/<span class="w"> </span><span class="c1"># Subproject best practices</span>
<a id="__codelineno-10-17" name="__codelineno-10-17" href="#__codelineno-10-17"></a><span class="w"> </span><span class="w"> </span><span class="w"> </span>└──<span class="w"> </span>best_practices.md
<a id="__codelineno-10-18" name="__codelineno-10-18" href="#__codelineno-10-18"></a><span class="w"> </span><span class="w"> </span>└──<span class="w"> </span>qodo-gitlab/<span class="w"> </span><span class="c1"># Another subproject</span>
<a id="__codelineno-10-19" name="__codelineno-10-19" href="#__codelineno-10-19"></a><span class="w"> </span><span class="w"> </span>└──<span class="w"> </span>best_practices.md
<a id="__codelineno-10-20" name="__codelineno-10-20" href="#__codelineno-10-20"></a><span class="w"> </span>└──<span class="w"> </span>...<span class="w"> </span><span class="c1"># More repositories</span>
</code></pre></div>
<p>3. Define the metadata file <code>metadata.yaml</code> that maps your repositories to their relevant best practices paths, for example:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1" href="#__codelineno-11-1"></a><span class="c1"># Standalone repos</span>
<a id="__codelineno-11-2" name="__codelineno-11-2" href="#__codelineno-11-2"></a><span class="nt">qodo-merge</span><span class="p">:</span>
<a id="__codelineno-11-3" name="__codelineno-11-3" href="#__codelineno-11-3"></a><span class="w"> </span><span class="nt">best_practices_paths</span><span class="p">:</span>
<a id="__codelineno-11-4" name="__codelineno-11-4" href="#__codelineno-11-4"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;qodo-merge&quot;</span>
<a id="__codelineno-11-5" name="__codelineno-11-5" href="#__codelineno-11-5"></a>
<a id="__codelineno-11-6" name="__codelineno-11-6" href="#__codelineno-11-6"></a><span class="c1"># Group-associated repos</span>
<a id="__codelineno-11-7" name="__codelineno-11-7" href="#__codelineno-11-7"></a><span class="nt">repo_b</span><span class="p">:</span>
<a id="__codelineno-11-8" name="__codelineno-11-8" href="#__codelineno-11-8"></a><span class="w"> </span><span class="nt">best_practices_paths</span><span class="p">:</span>
<a id="__codelineno-11-9" name="__codelineno-11-9" href="#__codelineno-11-9"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;groups/backend_repos&quot;</span>
<a id="__codelineno-11-10" name="__codelineno-11-10" href="#__codelineno-11-10"></a>
<a id="__codelineno-11-11" name="__codelineno-11-11" href="#__codelineno-11-11"></a><span class="c1"># Multi-group repos</span>
<a id="__codelineno-11-12" name="__codelineno-11-12" href="#__codelineno-11-12"></a><span class="nt">repo_c</span><span class="p">:</span>
<a id="__codelineno-11-13" name="__codelineno-11-13" href="#__codelineno-11-13"></a><span class="w"> </span><span class="nt">best_practices_paths</span><span class="p">:</span>
<a id="__codelineno-11-14" name="__codelineno-11-14" href="#__codelineno-11-14"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;groups/frontend_repos&quot;</span>
<a id="__codelineno-11-15" name="__codelineno-11-15" href="#__codelineno-11-15"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;groups/backend_repos&quot;</span>
<a id="__codelineno-11-16" name="__codelineno-11-16" href="#__codelineno-11-16"></a>
<a id="__codelineno-11-17" name="__codelineno-11-17" href="#__codelineno-11-17"></a><span class="c1"># Monorepo with subprojects</span>
<a id="__codelineno-11-18" name="__codelineno-11-18" href="#__codelineno-11-18"></a><span class="nt">qodo-monorepo</span><span class="p">:</span>
<a id="__codelineno-11-19" name="__codelineno-11-19" href="#__codelineno-11-19"></a><span class="w"> </span><span class="nt">best_practices_paths</span><span class="p">:</span>
<a id="__codelineno-11-20" name="__codelineno-11-20" href="#__codelineno-11-20"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;qodo-monorepo&quot;</span>
<a id="__codelineno-11-21" name="__codelineno-11-21" href="#__codelineno-11-21"></a><span class="w"> </span><span class="nt">monorepo_subprojects</span><span class="p">:</span>
<a id="__codelineno-11-22" name="__codelineno-11-22" href="#__codelineno-11-22"></a><span class="w"> </span><span class="nt">qodo-github</span><span class="p">:</span>
<a id="__codelineno-11-23" name="__codelineno-11-23" href="#__codelineno-11-23"></a><span class="w"> </span><span class="nt">best_practices_paths</span><span class="p">:</span>
<a id="__codelineno-11-24" name="__codelineno-11-24" href="#__codelineno-11-24"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;qodo-monorepo/qodo-github&quot;</span>
<a id="__codelineno-11-25" name="__codelineno-11-25" href="#__codelineno-11-25"></a><span class="w"> </span><span class="nt">qodo-gitlab</span><span class="p">:</span>
<a id="__codelineno-11-26" name="__codelineno-11-26" href="#__codelineno-11-26"></a><span class="w"> </span><span class="nt">best_practices_paths</span><span class="p">:</span>
<a id="__codelineno-11-27" name="__codelineno-11-27" href="#__codelineno-11-27"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="s">&quot;qodo-monorepo/qodo-gitlab&quot;</span>
</code></pre></div>
<p>4. Set the following configuration in your global configuration file:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1" href="#__codelineno-12-1"></a><span class="k">[best_practices]</span>
<a id="__codelineno-12-2" name="__codelineno-12-2" href="#__codelineno-12-2"></a><span class="n">enable_global_best_practices</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
</code></pre></div>
<details class="- info">
<summary>Best practices priority and fallback behavior</summary>
<p>When global best practices are enabled, Qodo Merge follows this priority order:</p>
<p>1. <strong>Primary</strong>: Global hierarchical best practices from <code>pr-agent-settings</code> repository:</p>
<div class="highlight"><pre><span></span><code>1.1 If the repository is mapped in `metadata.yaml`, it uses the specified paths
1.2 For monorepos, it automatically collects best practices matching PR file paths
1.3 If no mapping exists, it falls back to the global best practices
</code></pre></div>
<p>2. <strong>Fallback</strong>: Local repository <code>best_practices.md</code> file:</p>
<div class="highlight"><pre><span></span><code>2.1 Used when global best practices are not found or configured
2.2 Acts as a safety net for repositories not yet configured in the global system
2.3 Local best practices are completely ignored when global best practices are successfully loaded
</code></pre></div>
</details>
<details class="- info">
<summary>Edge cases and behavior</summary>
<ul>
<li><strong>Missing paths</strong>: If specified paths in <code>metadata.yaml</code> don't exist in the file system, those paths are skipped</li>
<li><strong>Monorepo subproject matching</strong>: For monorepos, Qodo Merge automatically matches PR file paths against subproject paths to apply relevant best practices</li>
<li><strong>Multiple group inheritance</strong>: Repositories can inherit from multiple groups, and all applicable best practices are combined</li>
</ul>
</details>
<details class="- info">
<summary>Dedicated label for best practices suggestions</summary>
<p>Best practice suggestions are labeled as <code>Organization best practice</code> by default.
To customize this label, modify it in your configuration file:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="k">[best_practices]</span>
<a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a><span class="n">organization_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;...&quot;</span>
</code></pre></div>
<p>And the label will be: <code>{organization_name} best practice</code>.</p>
<h4 id="example-results">Example results<a class="headerlink" href="#example-results" title="Permanent link">&para;</a></h4>
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/org_best_practice.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="best_practice" src="https://codium.ai/images/pr_agent/org_best_practice.png" width="512" /></a></p>
</details>
<h3 id="auto-best-practices">Auto best practices<a class="headerlink" href="#auto-best-practices" title="Permanent link">&para;</a></h3>
<blockquote>
<p><code>💎 feature. Platforms supported: GitHub.</code></p>
</blockquote>
<p><code>Auto best practices</code> is a novel Qodo Merge capability that:</p>
<ol>
<li>Identifies recurring patterns from accepted suggestions</li>
<li><strong>Automatically</strong> generates <a href="https://github.com/qodo-ai/pr-agent/wiki/.pr_agent_auto_best_practices">best practices page</a> based on what your team consistently values</li>
<li>Applies these learned patterns to future code reviews</li>
</ol>
<p>This creates an automatic feedback loop where the system continuously learns from your team's choices to provide increasingly relevant suggestions.
The system maintains two analysis phases:</p>
<ul>
<li>Open exploration for new issues</li>
<li>Targeted checking against established best practices</li>
</ul>
<p>Note that when a <a href="https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices">custom best practices</a> exist, Qodo Merge will still generate an 'auto best practices' wiki file, though it won't use it in the <code>improve</code> tool.
Learn more about utilizing 'auto best practices' in our <a href="https://qodo-merge-docs.qodo.ai/core-abilities/auto_best_practices/">detailed guide</a>.</p>
<h4 id="relevant-configurations">Relevant configurations<a class="headerlink" href="#relevant-configurations" title="Permanent link">&para;</a></h4>
<div class="highlight"><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1" href="#__codelineno-14-1"></a><span class="k">[auto_best_practices]</span>
<a id="__codelineno-14-2" name="__codelineno-14-2" href="#__codelineno-14-2"></a><span class="c1"># Disable all auto best practices usage or generation</span>
<a id="__codelineno-14-3" name="__codelineno-14-3" href="#__codelineno-14-3"></a><span class="n">enable_auto_best_practices</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>
<a id="__codelineno-14-4" name="__codelineno-14-4" href="#__codelineno-14-4"></a>
<a id="__codelineno-14-5" name="__codelineno-14-5" href="#__codelineno-14-5"></a><span class="c1"># Disable usage of auto best practices file in the &#39;improve&#39; tool</span>
<a id="__codelineno-14-6" name="__codelineno-14-6" href="#__codelineno-14-6"></a><span class="n">utilize_auto_best_practices</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span>
<a id="__codelineno-14-7" name="__codelineno-14-7" href="#__codelineno-14-7"></a>
<a id="__codelineno-14-8" name="__codelineno-14-8" href="#__codelineno-14-8"></a><span class="c1"># Extra instructions to the auto best practices generation prompt</span>
<a id="__codelineno-14-9" name="__codelineno-14-9" href="#__codelineno-14-9"></a><span class="n">extra_instructions</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="w"> </span>
<a id="__codelineno-14-10" name="__codelineno-14-10" href="#__codelineno-14-10"></a>
<a id="__codelineno-14-11" name="__codelineno-14-11" href="#__codelineno-14-11"></a><span class="c1"># Max number of patterns to be detected</span>
<a id="__codelineno-14-12" name="__codelineno-14-12" href="#__codelineno-14-12"></a><span class="n">max_patterns</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span>
</code></pre></div>
<h3 id="multiple-best-practices-sources">Multiple best practices sources<a class="headerlink" href="#multiple-best-practices-sources" title="Permanent link">&para;</a></h3>
<p>The <code>improve</code> tool will combine best practices from all available sources - global configuration, local configuration, and auto-generated files - to provide you with comprehensive recommendations.</p>
<h3 id="combining-extra-instructions-and-best-practices">Combining 'extra instructions' and 'best practices'<a class="headerlink" href="#combining-extra-instructions-and-best-practices" title="Permanent link">&para;</a></h3>
<blockquote>
<p><code>💎 feature</code></p>
</blockquote>
<p>The <code>extra instructions</code> configuration is more related to the <code>improve</code> tool prompt. It can be used, for example, to avoid specific suggestions ("Don't suggest to add try-except block", "Ignore changes in toml files", ...) or to emphasize specific aspects or formats ("Answer in Japanese", "Give only short suggestions", ...)</p>
<p>In contrast, the <code>best_practices.md</code> file is a general guideline for the way code should be written in the repo.</p>
<p>Using a combination of both can help the AI model to provide relevant and tailored suggestions.</p>
<h2 id="usage-tips">Usage Tips<a class="headerlink" href="#usage-tips" title="Permanent link">&para;</a></h2>
<h3 id="implementing-the-proposed-code-suggestions">Implementing the proposed code suggestions<a class="headerlink" href="#implementing-the-proposed-code-suggestions" title="Permanent link">&para;</a></h3>
<p>Each generated suggestion consists of three key elements:</p>
<ol>
<li>A single-line summary of the proposed change</li>
<li>An expandable section containing a comprehensive description of the suggestion</li>
<li>A diff snippet showing the recommended code modification (before and after)</li>
</ol>
<p>We advise users to apply critical analysis and judgment when implementing the proposed suggestions.
In addition to mistakes (which may happen, but are rare), sometimes the presented code modification may serve more as an <em>illustrative example</em> than a directly applicable solution.
In such cases, we recommend prioritizing the suggestion's detailed description, using the diff snippet primarily as a supporting reference.</p>
<h3 id="dual-publishing-mode">Dual publishing mode<a class="headerlink" href="#dual-publishing-mode" title="Permanent link">&para;</a></h3>
<p>Our recommended approach for presenting code suggestions is through a <a href="https://qodo-merge-docs.qodo.ai/tools/improve/#overview">table</a> (<code>--pr_code_suggestions.commitable_code_suggestions=false</code>).
This method significantly reduces the PR footprint and allows for quick and easy digestion of multiple suggestions.</p>
<p>We also offer a complementary <strong>dual publishing mode</strong>. When enabled, suggestions exceeding a certain score threshold are not only displayed in the table, but also presented as committable PR comments.
This mode helps highlight suggestions deemed more critical.</p>
<p>To activate dual publishing mode, use the following setting:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1" href="#__codelineno-15-1"></a><span class="k">[pr_code_suggestions]</span>
<a id="__codelineno-15-2" name="__codelineno-15-2" href="#__codelineno-15-2"></a><span class="n">dual_publishing_score_threshold</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">x</span>
</code></pre></div>
<p>Where x represents the minimum score threshold (&gt;=) for suggestions to be presented as committable PR comments in addition to the table. Default is -1 (disabled).</p>
<h3 id="controlling-suggestions-depth">Controlling suggestions depth<a class="headerlink" href="#controlling-suggestions-depth" title="Permanent link">&para;</a></h3>
<blockquote>
<p><code>💎 feature</code></p>
</blockquote>
<p>You can control the depth and comprehensiveness of the code suggestions by using the <code>pr_code_suggestions.suggestions_depth</code> parameter.</p>
<p>Available options:</p>
<ul>
<li><code>selective</code> - Shows only suggestions above a score threshold of 6</li>
<li><code>regular</code> - Default mode with balanced suggestion coverage </li>
<li><code>exhaustive</code> - Provides maximum suggestion comprehensiveness</li>
</ul>
<p>(Alternatively, use numeric values: 1, 2, or 3 respectively)</p>
<p>We recommend starting with <code>regular</code> mode, then exploring <code>exhaustive</code> mode, which can provide more comprehensive suggestions and enhanced bug detection.</p>
<h3 id="self-review">Self-review<a class="headerlink" href="#self-review" title="Permanent link">&para;</a></h3>
<blockquote>
<p><code>💎 feature. Platforms supported: GitHub, GitLab</code></p>
</blockquote>
<p>If you set in a configuration file:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1" href="#__codelineno-16-1"></a><span class="k">[pr_code_suggestions]</span>
<a id="__codelineno-16-2" name="__codelineno-16-2" href="#__codelineno-16-2"></a><span class="n">demand_code_suggestions_self_review</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
</code></pre></div>
<p>The <code>improve</code> tool will add a checkbox below the suggestions, prompting user to acknowledge that they have reviewed the suggestions.
You can set the content of the checkbox text via:</p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1" href="#__codelineno-17-1"></a><span class="k">[pr_code_suggestions]</span>
<a id="__codelineno-17-2" name="__codelineno-17-2" href="#__codelineno-17-2"></a><span class="n">code_suggestions_self_review_text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">&quot;... (your text here) ...&quot;</span>
</code></pre></div>
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/self_review_1.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="self_review_1" src="https://codium.ai/images/pr_agent/self_review_1.png" width="512" /></a></p>
<div class="admonition tip">
<p class="admonition-title">Tip - Reducing visual footprint after self-review 💎</p>
<p>The configuration parameter <code>pr_code_suggestions.fold_suggestions_on_self_review</code> (default is True)
can be used to automatically fold the suggestions after the user clicks the self-review checkbox.</p>
<p>This reduces the visual footprint of the suggestions, and also indicates to the PR reviewer that the suggestions have been reviewed by the PR author, and don't require further attention.</p>
</div>
<div class="admonition tip">
<p class="admonition-title">Tip - Demanding self-review from the PR author 💎</p>
<p>By setting:
<div class="highlight"><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="k">[pr_code_suggestions]</span>
<a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a><span class="n">approve_pr_on_self_review</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">true</span>
</code></pre></div>
the tool can automatically add an approval when the PR author clicks the self-review checkbox.</p>
<ul>
<li>If you set the number of required reviewers for a PR to 2, this effectively means that the PR author must click the self-review checkbox before the PR can be merged (in addition to a human reviewer).</li>
</ul>
<p><a class="glightbox" href="https://codium.ai/images/pr_agent/self_review_2.png" data-type="image" data-width="auto" data-height="auto" data-desc-position="bottom"><img alt="self_review_2" src="https://codium.ai/images/pr_agent/self_review_2.png" width="512" /></a></p>
<ul>
<li>
<p>If you keep the number of required reviewers for a PR to 1 and enable this configuration, this effectively means that the PR author can approve the PR by actively clicking the self-review checkbox.</p>
<p>To prevent unauthorized approvals, this configuration defaults to false, and cannot be altered through online comments; enabling requires a direct update to the configuration file and a commit to the repository. This ensures that utilizing the feature demands a deliberate documented decision by the repository owner.</p>
</li>
</ul>
</div>
<h3 id="how-many-code-suggestions-are-generated">How many code suggestions are generated?<a class="headerlink" href="#how-many-code-suggestions-are-generated" title="Permanent link">&para;</a></h3>
<p>Qodo Merge uses a dynamic strategy to generate code suggestions based on the size of the pull request (PR). Here's how it works:</p>
<h4 id="1-chunking-large-prs">1. Chunking large PRs<a class="headerlink" href="#1-chunking-large-prs" title="Permanent link">&para;</a></h4>
<ul>
<li>Qodo Merge divides large PRs into 'chunks'.</li>
<li>Each chunk contains up to <code>pr_code_suggestions.max_context_tokens</code> tokens (default: 24,000).</li>
</ul>
<h4 id="2-generating-suggestions">2. Generating suggestions<a class="headerlink" href="#2-generating-suggestions" title="Permanent link">&para;</a></h4>
<ul>
<li>For each chunk, Qodo Merge generates up to <code>pr_code_suggestions.num_code_suggestions_per_chunk</code> suggestions (default: 4).</li>
</ul>
<p>This approach has two main benefits:</p>
<ul>
<li>Scalability: The number of suggestions scales with the PR size, rather than being fixed.</li>
<li>Quality: By processing smaller chunks, the AI can maintain higher quality suggestions, as larger contexts tend to decrease AI performance.</li>
</ul>
<p>Note: Chunking is primarily relevant for large PRs. For most PRs (up to 600 lines of code), Qodo Merge will be able to process the entire code in a single call.</p>
<h2 id="configuration-options">Configuration options<a class="headerlink" href="#configuration-options" title="Permanent link">&para;</a></h2>
<details class="example" open="open">
<summary>General options</summary>
<p><table>
<tr>
<td><b>extra_instructions</b></td>
<td>Optional extra instructions to the tool. For example: "focus on the changes in the file X. Ignore change in ...".</td>
</tr>
<tr>
<td><b>commitable_code_suggestions</b></td>
<td>If set to true, the tool will display the suggestions as committable code comments. Default is false.</td>
</tr>
<tr>
<td><b>enable_chat_in_code_suggestions</b></td>
<td>If set to true, QM bot will interact with comments made on code changes it has proposed. Default is true.</td>
</tr>
<tr>
<td><b>suggestions_depth 💎</b></td>
<td> Controls the depth of the suggestions. Can be set to 'selective', 'regular', or 'exhaustive'. Default is 'regular'.</td>
</tr>
<tr>
<td><b>dual_publishing_score_threshold</b></td>
<td>Minimum score threshold for suggestions to be presented as committable PR comments in addition to the table. Default is -1 (disabled).</td>
</tr>
<tr>
<td><b>focus_only_on_problems</b></td>
<td>If set to true, suggestions will focus primarily on identifying and fixing code problems, and less on style considerations like best practices, maintainability, or readability. Default is true.</td>
</tr>
<tr>
<td><b>persistent_comment</b></td>
<td>If set to true, the improve comment will be persistent, meaning that every new improve request will edit the previous one. Default is true.</td>
</tr>
<tr>
<td><b>suggestions_score_threshold</b></td>
<td> Any suggestion with importance score less than this threshold will be removed. Default is 0. Highly recommend not to set this value above 7-8, since above it may clip relevant suggestions that can be useful. </td>
</tr>
<tr>
<td><b>apply_suggestions_checkbox</b></td>
<td> Enable the checkbox to create a committable suggestion. Default is true.</td>
</tr>
<tr>
<td><b>enable_more_suggestions_checkbox</b></td>
<td> Enable the checkbox to generate more suggestions. Default is true.</td>
</tr>
<tr>
<td><b>enable_help_text</b></td>
<td>If set to true, the tool will display a help text in the comment. Default is true.</td>
</tr>
<tr>
<td><b>enable_chat_text</b></td>
<td>If set to true, the tool will display a reference to the PR chat in the comment. Default is true.</td>
</tr>
<tr>
<td><b>publish_output_no_suggestions</b></td>
<td>If set to true, the tool will publish a comment even if no suggestions were found. Default is true.</td>
<tr>
<td><b>wiki_page_accepted_suggestions</b></td>
<td>If set to true, the tool will automatically track accepted suggestions in a dedicated wiki page called <code>.pr_agent_accepted_suggestions</code>. Default is true.</td>
</tr>
<tr>
<td><b>allow_thumbs_up_down</b></td>
<td>If set to true, all code suggestions will have thumbs up and thumbs down buttons, to encourage users to provide feedback on the suggestions. Default is false. Note that this feature is for statistics tracking. It will not affect future feedback from the AI model.</td>
</tr>
</table></p>
</details>
<details class="example" open="open">
<summary>Params for number of suggestions and AI calls</summary>
<p><table>
<tr>
<td><b>auto_extended_mode</b></td>
<td>Enable chunking the PR code and running the tool on each chunk. Default is true.</td>
</tr>
<tr>
<td><b>num_code_suggestions_per_chunk</b></td>
<td>Number of code suggestions provided by the 'improve' tool, per chunk. Default is 3.</td>
</tr>
<tr>
<td><b>max_number_of_calls</b></td>
<td>Maximum number of chunks. Default is 3.</td>
</tr>
</table></p>
</details>
<h2 id="understanding-ai-code-suggestions">Understanding AI Code Suggestions<a class="headerlink" href="#understanding-ai-code-suggestions" title="Permanent link">&para;</a></h2>
<ul>
<li><strong>AI Limitations:</strong> AI models for code are getting better and better, but they are not flawless. Not all the suggestions will be perfect, and a user should not accept all of them automatically. Critical reading and judgment are required. Mistakes of the AI are rare but can happen, and it is usually quite easy for a human to spot them.</li>
<li><strong>Purpose of Suggestions:</strong><ul>
<li><strong>Self-reflection:</strong> The suggestions aim to enable developers to <em>self-reflect</em> and improve their pull requests. This process can help to identify blind spots, uncover missed edge cases, and enhance code readability and coherency. Even when a specific code suggestion isn't suitable, the underlying issue it highlights often reveals something important that might deserve attention.</li>
<li><strong>Bug detection:</strong> The suggestions also alert on any <em>critical bugs</em> that may have been identified during the analysis. This provides an additional safety net to catch potential issues before they make it into production. It's perfectly acceptable to implement only the suggestions you find valuable for your specific context.</li>
</ul>
</li>
<li><strong>Hierarchy:</strong> Presenting the suggestions in a structured hierarchical table enables the user to <em>quickly</em> understand them, and to decide which ones are relevant and which are not.</li>
<li><strong>Customization:</strong> To guide the model to suggestions that are more relevant to the specific needs of your project, we recommend using the <a href="https://qodo-merge-docs.qodo.ai/tools/improve/#extra-instructions-and-best-practices"><code>extra_instructions</code></a> and <a href="https://qodo-merge-docs.qodo.ai/tools/improve/#best-practices"><code>best practices</code></a> fields.</li>
<li><strong>Model Selection:</strong> SaaS users can also <a href="https://qodo-merge-docs.qodo.ai/usage-guide/qodo_merge_models/">choose</a> between different models. For specific programming languages or use cases, some models may perform better than others.</li>
<li><strong>Interactive usage:</strong> The interactive <a href="https://qodo-merge-docs.qodo.ai/chrome-extension/">PR chat</a> also provides an easy way to get more tailored suggestions and feedback from the AI model.</li>
</ul>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Footer</title>
<style>
body {
margin: 0;
padding: 0;
font-family: Arial, sans-serif;
font-size: 16px;
}
.wrapper {
background-color: #171518;
}
.container {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
color: white;
padding: 20px;
max-width: 61rem;
margin-left: auto;
margin-right: auto;
}
.footer-links, .social-icons {
padding: 0;
list-style-type: none;
display: flex;
justify-content: center;
gap: 20px;
align-items: center;
}
.footer-links a:hover, .social-icons a:hover {
color: #AEA1F1;
}
.social-icons svg {
width: 24px;
height: auto;
fill: white;
}
.footer-text {
width: 240px;
}
@media (max-width: 768px) {
.container {
flex-direction: column;
align-items: center;
text-align: center;
}
.footer-links, .social-icons, .footer-text {
width: 100%;
justify-content: center;
margin: 10px 0;
}
.footer-links {
order: 1;
}
.social-icons {
order: 2;
}
.footer-text {
order: 3;
}
}
</style>
<link href="../../assets/stylesheets/glightbox.min.css" rel="stylesheet"/><style>
html.glightbox-open { overflow: initial; height: 100%; }
.gslide-title { margin-top: 0px; user-select: text; }
.gslide-desc { color: #666; user-select: text; }
.gslide-image img { background: white; }
.gscrollbar-fixer { padding-right: 15px; }
.gdesc-inner { font-size: 0.75rem; }
body[data-md-color-scheme="slate"] .gdesc-inner { background: var(--md-default-bg-color);}
body[data-md-color-scheme="slate"] .gslide-title { color: var(--md-default-fg-color);}
body[data-md-color-scheme="slate"] .gslide-desc { color: var(--md-default-fg-color);}</style> <script src="../../assets/javascripts/glightbox.min.js"></script></head>
<body>
<footer class="wrapper">
<div class="container">
<p class="footer-text">© 2025 <a href="https://www.qodo.ai/" target="_blank" rel="noopener">Qodo</a></p>
<div class="footer-links">
<a href="https://qodo-gen-docs.qodo.ai/">Qodo Gen</a>
<p>|</p>
<a href="https://qodo-flow-docs.qodo.ai/">AlphaCodium</a>
</div>
<div class="social-icons">
<a href="https://github.com/Codium-ai" target="_blank" rel="noopener" title="github.com" class="social-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>
</a>
<a href="https://discord.com/invite/SgSxuQ65GF" target="_blank" rel="noopener" title="discord.com" class="social-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M524.531 69.836a1.5 1.5 0 0 0-.764-.7A485.065 485.065 0 0 0 404.081 32.03a1.816 1.816 0 0 0-1.923.91 337.461 337.461 0 0 0-14.9 30.6 447.848 447.848 0 0 0-134.426 0 309.541 309.541 0 0 0-15.135-30.6 1.89 1.89 0 0 0-1.924-.91 483.689 483.689 0 0 0-119.688 37.107 1.712 1.712 0 0 0-.788.676C39.068 183.651 18.186 294.69 28.43 404.354a2.016 2.016 0 0 0 .765 1.375 487.666 487.666 0 0 0 146.825 74.189 1.9 1.9 0 0 0 2.063-.676A348.2 348.2 0 0 0 208.12 430.4a1.86 1.86 0 0 0-1.019-2.588 321.173 321.173 0 0 1-45.868-21.853 1.885 1.885 0 0 1-.185-3.126 251.047 251.047 0 0 0 9.109-7.137 1.819 1.819 0 0 1 1.9-.256c96.229 43.917 200.41 43.917 295.5 0a1.812 1.812 0 0 1 1.924.233 234.533 234.533 0 0 0 9.132 7.16 1.884 1.884 0 0 1-.162 3.126 301.407 301.407 0 0 1-45.89 21.83 1.875 1.875 0 0 0-1 2.611 391.055 391.055 0 0 0 30.014 48.815 1.864 1.864 0 0 0 2.063.7A486.048 486.048 0 0 0 610.7 405.729a1.882 1.882 0 0 0 .765-1.352c12.264-126.783-20.532-236.912-86.934-334.541ZM222.491 337.58c-28.972 0-52.844-26.587-52.844-59.239s23.409-59.241 52.844-59.241c29.665 0 53.306 26.82 52.843 59.239 0 32.654-23.41 59.241-52.843 59.241Zm195.38 0c-28.971 0-52.843-26.587-52.843-59.239s23.409-59.241 52.843-59.241c29.667 0 53.307 26.82 52.844 59.239 0 32.654-23.177 59.241-52.844 59.241Z"></path></svg>
</a>
<a href="https://www.youtube.com/@QodoAI" target="_blank" rel="noopener" title="www.youtube.com" class="social-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"></path></svg>
</a>
<a href="https://www.linkedin.com/company/qodoai" target="_blank" rel="noopener" title="www.linkedin.com" class="social-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg>
</a>
<a href="https://twitter.com/QodoAI" target="_blank" rel="noopener" title="twitter.com" class="social-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg>
</a>
<a href="https://www.instagram.com/qodo_ai" target="_blank" rel="noopener" title="www.instagram.com" class="social-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"></path></svg>
</a>
</div>
</div>
</footer>
<script id="init-glightbox">const lightbox = GLightbox({"touchNavigation": true, "loop": false, "zoomable": true, "draggable": true, "openEffect": "zoom", "closeEffect": "zoom", "slideEffect": "slide"});
document$.subscribe(() => { lightbox.reload() });
</script></body>
</html>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tabs", "navigation.expand", "navigation.path", "navigation.top", "navigation.tracking", "navigation.indexes", "search.suggest", "search.highlight", "content.tabs.link", "content.code.annotation", "content.code.copy"], "search": "../../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../../assets/javascripts/bundle.56ea9cef.min.js"></script>
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5C9KZBM3"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
</body>
</html>