Tusk utilizes an optimal mix of LLM-based and rule-based techniques to generate tests that are both comprehensive and context-aware.Our rule-based techniques like using the Language Server Protocol and abstract syntax tree enable Tusk to find relevant codebase context 3x faster than similar tools while being more reliable.Unlike general-purpose AI copilots or chatbots, Tusk generates tests with targeted knowledge of your mature codebase and business logic and autonomously runs and iterates on the tests to ensure they are valid. Additionally, our agent uses secondary filters to make sure that tests are de-duplicated and of high relevance to the PR/MR.These built-in mechanisms abstract away the overhead of manually writing good tests.
We’ve designed Tusk’s test generation pipeline to replicate the process of a senior software engineer writing tests by hand, while taking into account the nuances of working with LLMs.Here’s a high-level rundown of Tusk’s test generation pipeline:
Was this page helpful?
⌘I
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Tusk","colors":{"primary":"#7D36E1","light":"#D061FF","dark":"#7D36E1"},"logo":{"light":"https://mintcdn.com/tusk/49Gm3zgLxpzGJza1/logo/tusk_full_logo.svg?fit=max\u0026auto=format\u0026n=49Gm3zgLxpzGJza1\u0026q=85\u0026s=595130eae01de87791ec1be30bd48824","dark":"https://mintcdn.com/tusk/49Gm3zgLxpzGJza1/logo/tusk_full_logo.svg?fit=max\u0026auto=format\u0026n=49Gm3zgLxpzGJza1\u0026q=85\u0026s=595130eae01de87791ec1be30bd48824","href":"https://usetusk.ai"},"favicon":"https://mintcdn.com/tusk/49Gm3zgLxpzGJza1/logo/tusk_t_logo.svg?fit=max\u0026auto=format\u0026n=49Gm3zgLxpzGJza1\u0026q=85\u0026s=7aa2311d4d79b3072059b7dfbd2f81ca","api":{"playground":{"proxy":false}},"appearance":{"default":"dark"},"navbar":{"links":[{"href":"mailto:support@usetusk.ai","label":"Support"},{"href":"https://join.slack.com/t/tusk-community/shared_invite/zt-3fve1s7ie-NAAUn~UpHsf1m_2tdoGjsQ","label":"Join Community"}],"primary":{"type":"button","label":"Dashboard","href":"https://app.usetusk.ai"}},"footer":{"socials":{"x":"https://x.com/usetusk","github":"https://github.com/apps/use-tusk","linkedin":"https://www.linkedin.com/company/usetusk"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tusk","hasAudioNarration":false,"actualSubdomain":"tusk","customDomains":["docs.usetusk.ai"],"gitSource":{"type":"github","owner":"use-tusk","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21f95674bd683e723c970a","collectionId":"9445fd22-7c95-4afb-becb-6b37d50232b2","schemaVersion":"v2"},"feedback":{"thumbs":true,"issues":true,"edits":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a29c900827d3567b96d03eb:success","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"Platform","count":29},{"language":"default","tag":"API Drift Detection","count":16},{"language":"default","tag":"Unit Test Generation","count":11},{"language":"default","tag":"Analytics API","count":7},{"language":"default","tag":"API Reference","count":6},{"language":"default","tag":"Get Started","count":4},{"language":"default","tag":"Initialization","count":4},{"language":"default","tag":"PII Redaction","count":2},{"language":"default","tag":"Security","count":1},{"language":"default","tag":"Code Review","count":1}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"automated-tests/test-generation","slug":"/automated-tests/test-generation","pageMetadata":{"title":"Test Generation","description":"How Tusk generates tests with codebase and business context","href":"/automated-tests/test-generation"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How Tusk generates tests with codebase and business context\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={p:`p`,strong:`strong`,..._provideComponents(),...props.components},{Heading,Mermaid}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Tusk utilizes an optimal mix of LLM-based and rule-based techniques to generate tests that are both `,_jsx(_components.strong,{children:`comprehensive`}),` and `,_jsx(_components.strong,{children:`context-aware`}),`.`]}),`\n`,_jsx(_components.p,{children:`Our rule-based techniques like using the Language Server Protocol and abstract syntax tree enable Tusk to find relevant codebase context 3x faster than similar tools while being more reliable.`}),`\n`,_jsxs(_components.p,{children:[`Unlike general-purpose AI copilots or chatbots, Tusk generates tests with targeted knowledge of your mature codebase and business logic and `,_jsx(_components.strong,{children:`autonomously runs and iterates`}),` on the tests to ensure they are valid. Additionally, our agent uses secondary filters to make sure that tests are de-duplicated and of high relevance to the PR/MR.`]}),`\n`,_jsx(_components.p,{children:`These built-in mechanisms abstract away the overhead of manually writing good tests.`}),`\n`,_jsx(Heading,{level:`2`,id:`generating-high-quality-tests`,children:`Generating High Quality Tests`}),`\n`,_jsx(_components.p,{children:`We’ve designed Tusk’s test generation pipeline to replicate the process of a senior software engineer writing tests by hand, while taking into account the nuances of working with LLMs.`}),`\n`,_jsx(_components.p,{children:`Here’s a high-level rundown of Tusk’s test generation pipeline:`}),`\n`,_jsx(Mermaid,{chart:`flowchart TD\n subgraph initial_input\n subgraph business_context\n B[PR/MR description]\n C[Jira/Linear ticket description]\n end\n subgraph codebase_context\n D[PR/MR diff]\n E[Definitions of symbols modified]\n F[Usage of symbols modified]\n G[Stack trace for modified symbols]\n end\n end\n subgraph testing_guidelines\n H[Existing relevant unit tests]\n I[Existing relevant mocks]\n J[User-defined test generation instructions]\n end\n \n A[PR/MR is raised] --> initial_input\n initial_input --> testing_guidelines\n\n K[Happy path and edge case scenarios]\n testing_guidelines --> K\n L[Generate test code]\n K --> L\n M[Run test in ephemeral sandbox]\n L --> M\n\n N{Error when running test?}\n M --> N\n O[Fix test code based on error logs]\n P[Add test case to list of tests]\n Q[Filter to most relevant tests]\n R[Show tests in GitHub or Tusk UI]\n S{Existing test file?}\n T[Update existing test file]\n U[Create new test file]\n V[Tests committed to PR/MR's branch]\n\n N --> |No| P\n N --> |Yes| O\n O --> M\n P --> Q\n Q --> R\n R --> |User incorporates tests| S\n S --> |Yes| T\n S --> |No| U\n T --> V\n U --> V`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Test Generation","description":"How Tusk generates tests with codebase and business context","href":"/automated-tests/test-generation"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Generating High Quality Tests","slug":"generating-high-quality-tests","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/tusk/12bae3d1db832132/automated-tests/rb2b.js"],"subdomain":"tusk","siteName":"Tusk","title":"Test Generation - Tusk","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-26T19:40:50.699Z","originalFileLocation":"automated-tests/test-generation.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How Tusk generates tests with codebase and business context\">\u003cmeta data-mint-head name=\"application-name\" content=\"Tusk\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Test Generation - Tusk\">\u003cmeta data-mint-head property=\"og:description\" content=\"How Tusk generates tests with codebase and business context\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Tusk\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.usetusk.ai/automated-tests/test-generation\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tusk.mintlify.app/_mintlify/api/og/v2?division=Unit+Test+Generation\u0026amp;title=Test+Generation\u0026amp;description=How+Tusk+generates+tests+with+codebase+and+business+context\u0026amp;theme=dd682b9e76333bf530a4e2e9\u0026amp;signature=1c7671adfb0a8c2748368dbf0ecbf575d320b8aa78937b108c4c59a93d5cc332\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Test Generation - Tusk\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How Tusk generates tests with codebase and business context\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tusk.mintlify.app/_mintlify/api/og/v2?division=Unit+Test+Generation\u0026amp;title=Test+Generation\u0026amp;description=How+Tusk+generates+tests+with+codebase+and+business+context\u0026amp;theme=dd682b9e76333bf530a4e2e9\u0026amp;signature=1c7671adfb0a8c2748368dbf0ecbf575d320b8aa78937b108c4c59a93d5cc332\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/tusk/t6q-VKr6D2Hgbu6p/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Tusk\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7D36E1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.usetusk.ai/automated-tests/test-generation\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/automated-tests/test-generation.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.usetusk.ai/#organization\",\"name\":\"Tusk\",\"url\":\"https://docs.usetusk.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tusk/49Gm3zgLxpzGJza1/logo/tusk_full_logo.svg?fit=max\u0026auto=format\u0026n=49Gm3zgLxpzGJza1\u0026q=85\u0026s=595130eae01de87791ec1be30bd48824\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.usetusk.ai#website\",\"name\":\"Tusk\",\"url\":\"https://docs.usetusk.ai\",\"publisher\":{\"@id\":\"https://docs.usetusk.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.usetusk.ai/automated-tests/test-generation#webpage\",\"url\":\"https://docs.usetusk.ai/automated-tests/test-generation\",\"name\":\"Test Generation\",\"description\":\"How Tusk generates tests with codebase and business context\",\"dateModified\":\"2026-01-26T19:40:50.699Z\",\"isPartOf\":{\"@id\":\"https://docs.usetusk.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.usetusk.ai/automated-tests/test-generation#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.usetusk.ai/automated-tests/test-generation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Platform\",\"item\":\"https://docs.usetusk.ai/code-review/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Unit Test Generation\",\"item\":\"https://docs.usetusk.ai/automated-tests/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Test Generation\",\"item\":\"https://docs.usetusk.ai/automated-tests/test-generation\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.usetusk.ai/automated-tests/test-generation#article\",\"headline\":\"Test Generation\",\"name\":\"Test Generation\",\"description\":\"How Tusk generates tests with codebase and business context\",\"url\":\"https://docs.usetusk.ai/automated-tests/test-generation\",\"mainEntityOfPage\":{\"@id\":\"https://docs.usetusk.ai/automated-tests/test-generation#webpage\"},\"dateModified\":\"2026-01-26T19:40:50.699Z\",\"publisher\":{\"@id\":\"https://docs.usetusk.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.usetusk.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Tusk\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Tusk","nav":{"global":null,"groups":[{"group":"Get Started","pages":[{"title":"Documentation","href":"/introduction"},{"title":"Requirements","href":"/requirements"},{"title":"Onboarding","href":"/onboarding"},{"title":"Agent Skills","href":"/agent-skills"}]},{"group":"Platform","pages":[{"group":"Code Review","pages":[{"title":"Tusk Review Overview","tag":"NEW","href":"/code-review/overview"}]},{"group":"Unit Test Generation","pages":[{"title":"Tusk Tester Overview","href":"/automated-tests/overview"},{"title":"CLI \u0026 Agent Workflows","tag":"BETA","href":"/automated-tests/cli-agent-workflows"},{"title":"Test Execution Environments","description":"Understand how Tusk runs your unit tests","href":"/automated-tests/test-execution-environments"},{"title":"Test Generation","href":"/automated-tests/test-generation"},{"title":"CoverBot","description":"Create a scheduled pipeline to backfill unit tests for recently modified files","href":"/automated-tests/coverbot"},{"title":"FAQs","href":"/automated-tests/faqs"},{"title":"Advantages","href":"/automated-tests/advantages"},{"title":"Self-Hosted Runners","href":"/automated-tests/self-hosted"},{"title":"Repo Configuration","href":"/automated-tests/repo-configuration"},{"title":"Customization","href":"/automated-tests/customization"},{"title":"Developer Experience","href":"/automated-tests/developer-experience"}]},{"group":"API Drift Detection","pages":[{"title":"Tusk Drift Overview","href":"/api-tests/overview"},{"title":"Setup Agent","href":"/api-tests/setup-agent"},{"title":"Installation","href":"/api-tests/installation"},{"group":"Initialization","pages":[{"title":"CommonJS","href":"/api-tests/initialization/commonjs"},{"title":"ESM","href":"/api-tests/initialization/esm"},{"title":"Next.js","href":"/api-tests/initialization/nextjs"},{"title":"Python","href":"/api-tests/initialization/python"}]},{"title":"Record and Replay Tests","href":"/api-tests/record-replay-tests"},{"title":"Tusk Drift Cloud","href":"/api-tests/tusk-drift-cloud"},{"title":"CI/CD Setup","href":"/api-tests/ci-cd-setup"},{"title":"Configuration","href":"/api-tests/configuration"},{"title":"Code Coverage","tag":"BETA","href":"/api-tests/coverage"},{"group":"PII Redaction","pages":[{"title":"Basic Concepts","href":"/api-tests/pii-redaction/basic-concepts"},{"title":"HTTP/Fetch Transforms","href":"/api-tests/pii-redaction/http-fetch-transforms"}]},{"title":"Performance","href":"/api-tests/performance"},{"title":"Drift MCP","href":"/api-tests/drift-mcp"}]},{"group":"Security","pages":[{"title":"Security Policy","href":"/automated-tests/security-policy"}]}]},{"group":"Analytics API","pages":[{"title":"Analytics Overview","href":"/analytics-api/overview"},{"group":"API Reference","pages":[{"openapi":"get /totals","title":"Get client totals","href":"/analytics-api/get-client-totals"},{"openapi":"get /repos","title":"Get repos","href":"/analytics-api/get-repos"},{"openapi":"get /users","title":"Get users","href":"/analytics-api/get-users"},{"openapi":"get /prs","title":"Get PRs","href":"/analytics-api/get-prs"},{"openapi":"get /coverbot-prs","title":"Get CoverBot PRs","href":"/analytics-api/get-coverbot-prs"},{"openapi":"get /coverbot-coverage-gains","title":"Get CoverBot coverage gains","href":"/analytics-api/get-coverbot-coverage-gains"}]}]}]},"title":"Test Generation - Tusk","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}