1<!DOCTYPE html><html lang="en" class="h-full"><head><meta charSet="UTF-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""/><link rel="icon" href="/favicon.ico" data-next-head=""/><title data-next-head="">Meticulous - Docs - Getting Started with Meticulous</title><link rel="alternate" type="text/markdown" href="/docs.md" data-next-head=""/><link rel="icon" href="/favicon.ico"/><meta name="ai-agent-instructions" content="https://app.meticulous.ai/docs/agents/setup-for-agents"/><link rel="llms-txt" href="/llms.txt"/><link rel="manifest" href="/manifest.json"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin=""/><link rel="preload" href="/_next/static/chunks/0e23fs6dtteu4.css" as="style"/><link rel="preload" href="/_next/static/chunks/2kex57b04xaih.css" as="style"/><link rel="preload" href="/_next/static/chunks/3wtthy0taz8hn.css" as="style"/>
1<script>(function () { 2 try { 3 var p = location.pathname; 4 var isDocs = ["/docs", "/changelog"].some(function (prefix) { 5 return p === prefix || p.indexOf(prefix + "/") === 0; 6 }); 7 if (!isDocs) return; 8 var stored = localStorage.getItem("meticulous.docs.theme"); 9 var dark = 10 stored === "dark" || 11 (stored !== "light" && 12 window.matchMedia("(prefers-color-scheme: dark)").matches); 13 if (dark) document.documentElement.classList.add("dark"); 14 } catch (e) {} 15})();</script>
15<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=IBM+Plex+Sans:ital,wght@0,100..700;1,100..700&display=swap" rel="stylesheet"/><link rel="stylesheet" href="/_next/static/chunks/0e23fs6dtteu4.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/chunks/2kex57b04xaih.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/chunks/3wtthy0taz8hn.css" data-n-p=""/><noscript data-n-css=""></noscript>
15<script src="/_next/static/chunks/2q_p56t-qj9mj.js" defer=""></script>
15<script src="/_next/static/chunks/02lclgihlg4l0.js" defer=""></script>
15<script src="/_next/static/chunks/0-70ja8o7jjs1.js" defer=""></script>
15<script src="/_next/static/chunks/2e8im1nexm7xs.js" defer=""></script>
15<script src="/_next/static/chunks/2th_4x45bvhds.js" defer=""></script>
15<script src="/_next/static/chunks/0xkh_f98axh47.js" defer=""></script>
15<script src="/_next/static/chunks/1vk-sejgbs5cl.js" defer=""></script>
15<script src="/_next/static/chunks/3u6z6wn819i1v.js" defer=""></script>
15<script src="/_next/static/chunks/2axx_kgcaayt4.js" defer=""></script>
15<script src="/_next/static/chunks/0griygs6vueje.js" defer=""></script>
15<script src="/_next/static/chunks/3ejupdw421omy.js" defer=""></script>
15<script src="/_next/static/chunks/33slt-m3di53i.js" defer=""></script>
15<script src="/_next/static/chunks/2k7xt4zr8ekou.js" defer=""></script>
15<script src="/_next/static/chunks/1_xa2npx-eubz.js" defer=""></script>
15<script src="/_next/static/chunks/06_j06p--a82u.js" defer=""></script>
15<script src="/_next/static/chunks/09mipaabyo-wz.js" defer=""></script>
15<script src="/_next/static/chunks/2xtckgvfnmrz9.js" defer=""></script>
15<script src="/_next/static/chunks/39_4k100q-opo.js" defer=""></script>
15<script src="/_next/static/chunks/10v8jmxzpqetr.js" defer=""></script>
15<script src="/_next/static/chunks/3z9n-iipg6jpa.js" defer=""></script>
15<script src="/_next/static/chunks/2f4-bmx8sqxn6.js" defer=""></script>
15<script src="/_next/static/chunks/2_au49hqey57w.js" defer=""></script>
15<script src="/_next/static/chunks/37z_llvp8o4su.js" defer=""></script>
15<script src="/_next/static/chunks/1-zga5gkvenxa.js" defer=""></script>
15<script src="/_next/static/chunks/turbopack-1cob2u4w0xr51.js" defer=""></script>
15<script src="/_next/static/chunks/3mbjeef7j8squ.js" defer=""></script>
15<script src="/_next/static/chunks/158dq1vhf15ei.js" defer=""></script>
15<script src="/_next/static/chunks/21i0eo2chweyp.js" defer=""></script>
15<script src="/_next/static/chunks/2e-8xveuzgovz.js" defer=""></script>
15<script src="/_next/static/chunks/3u86ue0bpzx5p.js" defer=""></script>
15<script src="/_next/static/chunks/1833yvhf51o-u.js" defer=""></script>
15<script src="/_next/static/chunks/07_-7ls53td95.js" defer=""></script>
15<script src="/_next/static/chunks/1jsscp3ugy5jp.js" defer=""></script>
15<script src="/_next/static/chunks/3toubecmw49t3.js" defer=""></script>
15<script src="/_next/static/chunks/09oham-d7wa1k.js" defer=""></script>
15<script src="/_next/static/chunks/2q9kfu9ut-xnr.js" defer=""></script>
15<script src="/_next/static/chunks/turbopack-26pg3zylpejqh.js" defer=""></script>
15<script src="/_next/static/pUu8RD8Rp2FK5CtnVisNk/_buildManifest.js" defer=""></script>
15<script src="/_next/static/pUu8RD8Rp2FK5CtnVisNk/_ssgManifest.js" defer=""></script>
15<script src="/_next/static/pUu8RD8Rp2FK5CtnVisNk/_clientMiddlewareManifest.js" defer=""></script>
15</head><body class="h-full"><div id="root"><div id="__next"><div class="docs-chrome font-sans text-[15px] antialiased text-zinc-700 bg-white dark:text-zinc-300 dark:bg-zinc-900"><header class="sticky top-0 z-30 p-0"><div class="relative flex h-12 items-center gap-2 border-b border-zinc-200 bg-zinc-100 dark:border-zinc-800 dark:bg-zinc-950 px-3 sm:gap-3"><div class="flex h-full min-w-0 items-stretch gap-2 sm:gap-3"><button type="button" class="inline-flex items-center justify-center rounded-md p-2 text-zinc-500 hover:bg-zinc-200/60 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100 lg:hidden" aria-label="Open docs menu"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon" class="h-5 w-5"><path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"></path></svg></button><div class="flex shrink-0 items-center rounded-sm py-2 px-2.5"><a class="flex shrink-0 items-center" aria-label="Go to Meticulous app" href="/"><img alt="Meticulous" loading="lazy" width="120" height="17" decoding="async" data-nimg="1" class="h-[17px] w-auto dark:hidden" style="color:transparent;width:auto" src="/meticulous-wordmark-dark.svg"/><img alt="Meticulous" loading="lazy" width="120" height="17" decoding="async" data-nimg="1" class="hidden h-[17px] w-auto dark:block" style="color:transparent;width:auto" src="/meticulous-wordmark.svg"/></a></div><nav aria-label="Product areas" class="hidden h-full items-stretch lg:flex"><a aria-current="page" class="relative flex h-full items-center px-3 text-[11px] font-medium tracking-[0.08em] uppercase transition-colors text-zinc-900 dark:text-zinc-100" href="/docs">Docs<span class="absolute inset-x-2 bottom-0 h-0.5 bg-indigo-500" aria-hidden="true"></span></a><a class="relative flex h-full items-center px-3 text-[11px] font-medium tracking-[0.08em] uppercase transition-colors text-zinc-500 hover:text-zinc-800 dark:text-zinc-400 dark:hover:text-zinc-200" href="/changelog">Changelog</a></nav></div><div class="pointer-events-none absolute inset-y-0 left-1/2 hidden -translate-x-1/2 items-center lg:flex"><div class="pointer-events-auto"><button type="button" class="group flex h-8 w-64 max-w-full items-center gap-x-2 rounded-lg border border-zinc-200 bg-white px-2.5 text-[13px] text-zinc-500 transition hover:border-zinc-300 hover:bg-zinc-50 focus:outline-hidden focus:ring-2 focus:ring-indigo-500/40 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-400 dark:hover:border-zinc-600 dark:hover:bg-zinc-800"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-3.5 w-3.5 shrink-0 text-zinc-400"><path fill-rule="evenodd" d="M9 3.5a5.5 5.5 0 1 0 0 11 5.5 5.5 0 0 0 0-11ZM2 9a7 7 0 1 1 12.452 4.391l3.328 3.329a.75.75 0 1 1-1.06 1.06l-3.329-3.328A7 7 0 0 1 2 9Z" clip-rule="evenodd"></path></svg><span class="flex-1 text-left">Search...</span></button></div></div><div class="ml-auto flex shrink-0 flex-row items-center gap-x-2"><button type="button" class="inline-flex items-center justify-center rounded-md p-2 text-zinc-500 hover:bg-zinc-200/60 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100 lg:hidden" aria-label="Search docs"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-5 w-5"><path fill-rule="evenodd" d="M9 3.5a5.5 5.5 0 1 0 0 11 5.5 5.5 0 0 0 0-11ZM2 9a7 7 0 1 1 12.452 4.391l3.328 3.329a.75.75 0 1 1-1.06 1.06l-3.329-3.328A7 7 0 0 1 2 9Z" clip-rule="evenodd"></path></svg></button><button type="button" class="inline-flex items-center justify-center rounded-md p-2 text-zinc-500 hover:bg-zinc-200/60 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100" aria-label="Toggle dark mode"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-5 w-5 dark:hidden"><path fill-rule="evenodd" d="M7.455 2.004a.75.75 0 0 1 .26.77 7 7 0 0 0 9.958 7.967.75.75 0 0 1 1.067.853A8.5 8.5 0 1 1 6.647 1.921a.75.75 0 0 1 .808.083Z" clip-rule="evenodd"></path></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="hidden h-5 w-5 dark:block"><path d="M10 2a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0v-1.5A.75.75 0 0 1 10 2ZM10 15a.75.75 0 0 1 .75.75v1.5a.75.75 0 0 1-1.5 0v-1.5A.75.75 0 0 1 10 15ZM10 7a3 3 0 1 0 0 6 3 3 0 0 0 0-6ZM15.657 5.404a.75.75 0 1 0-1.06-1.06l-1.
15061 1.06a.75.75 0 0 0 1.06 1.06l1.06-1.06ZM6.464 14.596a.75.75 0 1 0-1.06-1.06l-1.06 1.06a.75.75 0 0 0 1.06 1.06l1.06-1.06ZM18 10a.75.75 0 0 1-.75.75h-1.5a.75.75 0 0 1 0-1.5h1.5A.75.75 0 0 1 18 10ZM5 10a.75.75 0 0 1-.75.75h-1.5a.75.75 0 0 1 0-1.5h1.5A.75.75 0 0 1 5 10ZM14.596 15.657a.75.75 0 0 0 1.06-1.06l-1.06-1.061a.75.75 0 1 0-1.06 1.06l1.06 1.06ZM5.404 6.464a.75.75 0 0 0 1.06-1.06l-1.06-1.06a.75.75 0 1 0-1.061 1.06l1.06 1.06Z"></path></svg></button><a class="group hidden items-center gap-0.5 rounded-sm px-1.5 py-1 text-xs font-normal text-zinc-500 transition-colors hover:bg-zinc-200/70 hover:text-zinc-900 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100 sm:inline-flex" href="/">Go to app<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-4 w-4 shrink-0 text-zinc-400 opacity-0 transition-opacity group-hover:opacity-100"><path fill-rule="evenodd" d="M4.22 11.78a.75.75 0 0 1 0-1.06L9.44 5.5H5.75a.75.75 0 0 1 0-1.5h5.5a.75.75 0 0 1 .75.75v5.5a.75.75 0 0 1-1.5 0V6.56l-5.22 5.22a.75.75 0 0 1-1.06 0Z" clip-rule="evenodd"></path></svg></a><button class="group pl-1.5 pr-1 py-1.5 flex items-center justify-center rounded-md text-zinc-500 hover:bg-zinc-200/70 hover:text-zinc-800 data-[state=open]:bg-zinc-200/70 data-[state=open]:text-zinc-800 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-100 dark:data-[state=open]:bg-zinc-800 dark:data-[state=open]:text-zinc-100" aria-label="Open user menu" type="button" id="radix-_R_16lglm_" aria-haspopup="menu" aria-expanded="false" data-state="closed"><span class="relative inline-flex"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon" class="h-5 w-5 rounded-full"><path stroke-linecap="round" stroke-linejoin="round" d="M17.982 18.725A7.488 7.488 0 0 0 12 15.75a7.488 7.488 0 0 0-5.982 2.975m11.963 0a9 9 0 1 0-11.963 0m11.963 0A8.966 8.966 0 0 1 12 21a8.966 8.966 0 0 1-5.982-2.275M15 9.75a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"></path></svg></span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-4 w-4 rounded-full text-zinc-400 group-hover:text-zinc-500 group-data-[state=open]:text-zinc-500 dark:text-zinc-500 dark:group-hover:text-zinc-400 dark:group-data-[state=open]:text-zinc-400"><path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg></button></div></div><nav aria-label="Docs sections" class="hidden h-9 items-stretch gap-1 border-b border-zinc-200 bg-white dark:border-zinc-800 dark:bg-zinc-900 px-2 lg:flex sm:px-4"><div class="flex min-w-0 flex-1 items-stretch gap-1 overflow-x-auto scrollbar-hide"><a aria-current="page" class="relative flex shrink-0 items-center px-3 text-[13px] whitespace-nowrap transition-colors font-normal text-indigo-500 dark:text-indigo-400" href="/docs">Get started<span class="absolute inset-x-2 -bottom-px h-0.5 bg-indigo-500" aria-hidden="true"></span></a><a class="relative flex shrink-0 items-center px-3 text-[13px] whitespace-nowrap transition-colors font-normal text-zinc-600 hover:text-indigo-900 dark:text-zinc-400 dark:hover:text-zinc-100" href="/docs/agents/setup">AI agents</a><a class="relative flex shrink-0 items-center px-3 text-[13px] whitespace-nowrap transition-colors font-normal text-zinc-600 hover:text-indigo-900 dark:text-zinc-400 dark:hover:text-zinc-100" href="/docs/built-in-checks">Non-visual checks</a><a class="relative flex shrink-0 items-center px-3 text-[13px] whitespace-nowrap transition-colors font-normal text-zinc-600 hover:text-indigo-900 dark:text-zinc-400 dark:hover:text-zinc-100" href="/docs/faq-and-troubleshooting">FAQ</a></div></nav></header><div class="lg:flex lg:items-start"><div class="hidden lg:flex lg:w-72 lg:flex-col lg:sticky lg:self-start lg:top-21 lg:h-[calc(100vh-5.25rem)] border-r border-zinc-200 dark:border-zinc-800"><div class="flex-1 flex flex-col min-h-0 bg-white dark:bg-zinc-900"><div class="flex-1 flex flex-col overflow-y-auto"><nav class="mt-4 flex-1 px-2 space-y-4"><ul role="list" class="flex flex-1 flex-col gap-y-6 pb-8"><li class="lg:hidden"><ul role="list" class="space-y-0.5 px-2 lg:hidden"><li><a aria-current="page" class="block rounded-md px-3 py-1 text-[13px] leading-5 font-normal text-indigo-500 dark:text-indigo-400" href="/docs">Docs</a></li><li><a class="block rounded-md px-3 py-1 text-[13px] leading-5 font-normal text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white" href="/changelog">Changelog</a></li></ul><div class="my-3 flex items-center px-3" aria-hidden="true"><div class="w-full border-t border-zinc-200 dark:border-zinc-800"></div></div><ul role="list" class="space-y-0.5 px-2"><li><div data-headlessui-state="open" data-open=""><div class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-indigo-500 dark:text-indigo-400">
15<button class="py-1 pl-2 pr-2 rounded-md" aria-label="Collapse Get started" id="headlessui-disclosure-button-_R_33lkpglm_" type="button" aria-expanded="true" data-headlessui-state="open" data-open=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 rotate-90 text-zinc-400 dark:text-zinc-500"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg></button><a href="/docs" class="flex-1 cursor-pointer py-1 pr-2">Get started</a></div><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[1fr]"><div class="min-h-0 overflow-hidden"><ul class="px-1 mt-3 space-y-4"><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Start building</div><ul role="list" class="space-y-0.5"><li><a href="/docs" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-indigo-500 dark:text-indigo-400"><span>Introduction</span></a></li><li><a href="/docs/onboarding-guide" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Connect & set up</span></a></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_173jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Install the Recorder</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/recorder-installation" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Overview</span></a></li><li><a href="/docs/how-to/recorder-script" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Via a Script Tag</span></a></li><li><a href="/docs/session-recording/recorder-npm-dependency" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Via an NPM Package</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_193jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Setup Tests to Run In CI</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/ci" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Overview</span></a></li><li><a href="/docs/github-actions-v2" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Via your CI Pipeline</span></a></li><li><a href="/docs/cloud-replay" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Via Vercel, Netlify or Other Preview URLs</span></a></li></ul></div></div></div></li></ul></div></li><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Overview</div><ul role="list" class="space-y-0.5"><li><a href="/docs/concepts/architecture-overview" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Architecture Overview</span></a></li><li><a href="/docs/concepts/network-recording-and-patching" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Network Recording & Patching</span></a></li><li><a href="/docs/concepts/glossary" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Glossary</span></a></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_195jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Recording</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/manually-recording-tests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Manually Record a Test</span></a></li><li><a href="/docs/how-to/recorder-developer-tools" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Recorder Developer Tools</span></a></li><li><a href="/docs/session-recording/ingest-existing-tests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Ingest Existing Tests</span></a></li><li><a href="/docs/session-recording/controlling-data-recorded" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Control What Data is Recorded</span></a></li><li><a href="/docs/session-recording/controlling-when-recording-starts-and-stops" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Control When Recording Starts and Stops</span></a></li><li><a href="/docs/session-recording/redaction" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Redaction</span></a></li><li><a href="/docs/how-to/record-custom-values" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Record Custom Values</span></a></li><li><a href="/docs/how-to/record-session-context" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Record the Context of a User Session</span></a></li><li><a href="/docs/how-to/use-custom-event-api" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Using the Custom Event API</span></a></li><li><a href="/docs/how-to/handle-file-uploads" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Handle File Uploads</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1b5jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Test Execution & CI</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/testing-pool" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Select Which Sessions to Run</span></a></li><li><a href="/docs/alternative-ci-setups/create-deployments-on-github" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Manually Creating Deployments on GitHub</span></a></li><li><a href="/docs/how-to/prepare-for-tests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Ensure Base Test Runs are Available</span></a></li><li><a href="/docs/make-check-blocking" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Block Merging PRs with Unacknowledged Diffs</span></a></li><li><a href="/docs/how-to/retry-test-run" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Retry a Test Run</span></a></li><li><a href="/docs/how-to/detect-diffs-locally" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Detect Diffs Locally</span></a></li><li><a href="/docs/how-to/enable-source-coverage" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Enable Source Coverage</span></a></li><li><a href="/docs/how-to/configure-ignore-patterns" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Configure Ignore Patterns</span></a></li><li><a href="/docs/how-to/blocked-requests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Blocking Requests During Replay</span></a></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_2lr5jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Advanced</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/incremental-asset-upload" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Incremental Asset Upload</span></a></li><li><a href="/docs/how-to/filter-sessions-by-start-url" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Filter Sessions by Start URL</span></a></li><li><a href="/docs/how-to/companion-assets-advanced" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Companion Assets</span></a></li></ul></div></div></div></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1d5jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>
15Framework & App Configuration</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/frameworks/nextjs/app-router" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Next.js App Router</span></a></li><li><a href="/docs/frameworks/nextjs/pages-router" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Next.js Pages Router</span></a></li><li><a href="/docs/frameworks/react/vite" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>React with Vite</span></a></li><li><a href="/docs/frameworks/react/create-react-app" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>React with Create React App</span></a></li><li><a href="/docs/frameworks/vue/vite" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Vue with Vite</span></a></li><li><a href="/docs/frameworks/angular/angular-cli" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Angular CLI</span></a></li><li><a href="/docs/how-to/testing-multiple-apps-or-app-variants" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Test Multiple Apps or App Variants</span></a></li><li><a href="/docs/how-to/testing-feature-flags" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Testing Feature Flags</span></a></li><li><a href="/docs/how-to/window-meticulous-object" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Detect If Running as a Meticulous Test</span></a></li><li><a href="/docs/how-to/record-and-replay-on-different-environments" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Record and Simulate on Different Environments</span></a></li></ul></div></div></div></li></ul></div></li><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Troubleshooting</div><ul role="list" class="space-y-0.5"><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_137jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Recorder</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/troubleshoot-recorder" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Troubleshoot Recorder</span></a></li><li><a href="/docs/session-recording/csp-exceptions" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>
15Required CSP Exceptions for Recorder</span></a></li><li><a href="/docs/how-to/ensure-recorder-captures-all-requests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Ensure Recorder Captures All Requests</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_157jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Simulations & Diffs</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/troubleshoot-failed-simulations" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Troubleshoot Failed Simulations</span></a></li><li><a href="/docs/how-to/fix-false-positive-diffs" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Fix False Positive Diffs, or Ignore Elements</span></a></li><li><a href="/docs/how-to/troubleshoot-replay-accuracy" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Inaccurate Simulation Warnings</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_177jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Authentication</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/troubleshoot-auth" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Troubleshoot Authentication and Authorisation</span></a></li><li><a href="/docs/how-to/auth/enabling-full-auth" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Simulating Auth</span></a></li><li><a href="/docs/how-to/auth/bypassing-auth" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Bypassing Auth</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_197jlkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Warnings in Meticulous UI</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/troubleshoot-replay-accuracy" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Inaccurate Simulation Warnings</span></a></li></ul></div></div></div></li></ul></div></li><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Reference</div><ul role="list" class="space-y-0.5"><li><a href="/docs/reference/cli-commands" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>CLI Commands</span></a></li><li><a href="/docs/reference/environment-variables" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Environment Variables</span></a></li><li><a href="/docs/reference/performance-api" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Performance API</span></a></li></ul></div></li></ul></div></div></div></li><li><div data-headlessui-state=""><div class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white">
15<button class="py-1 pl-2 pr-2 rounded-md" aria-label="Expand AI agents" id="headlessui-disclosure-button-_R_35lkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg></button><a href="/docs/agents/setup" class="flex-1 cursor-pointer py-1 pr-2">AI agents</a></div><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/agents/whats-new" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>What's new</span></a></li><li><a href="/docs/agents/setup" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Setup</span></a></li><li><a href="/docs/agents/cli-commands" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>CLI Commands</span></a></li><li><a href="/docs/agents/mcp-server" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>MCP Server</span></a></li><li><a href="/docs/agents/skills" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Skills & Use cases</span></a></li><li><a href="/docs/agents/agent-swarm" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Agent swarm (Beta)</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><div class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><button class="py-1 pl-2 pr-2 rounded-md" aria-label="Expand Non-visual checks" id="headlessui-disclosure-button-_R_37lkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg></button><a href="/docs/built-in-checks" class="flex-1 cursor-pointer py-1 pr-2">Non-visual checks</a></div><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-3 space-y-4"><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Built-in checks</div><ul role="list" class="space-y-0.5"><li><a href="/docs/built-in-checks" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Overview</span></a></li><li><a href="/docs/built-in-checks/accessibility" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Accessibility</span></a></li><li><a href="/docs/built-in-checks/network-requests" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Network requests</span></a></li><li><a href="/docs/built-in-checks/react-component-renders" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>React component renders</span></a></li></ul></div></li><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Custom checks</div><ul role="list" class="space-y-0.5"><li>
15<a href="/docs/custom-checks" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Overview</span></a></li><li><a href="/docs/custom-checks/writing-a-custom-check" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Writing a custom check</span></a></li><li><a href="/docs/custom-checks/recording-custom-data" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Recording custom snapshots</span></a></li><li><a href="/docs/custom-checks/best-practices" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Best practices</span></a></li><li><a href="/docs/custom-checks/built-in-snapshot-types" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Built-in snapshot types</span></a></li></ul></div></li></ul></div></div></div></li><li><div data-headlessui-state=""><div class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><button class="py-1 pl-2 pr-2 rounded-md" aria-label="Expand FAQ" id="headlessui-disclosure-button-_R_39lkpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg></button><a href="/docs/faq-and-troubleshooting" class="flex-1 cursor-pointer py-1 pr-2">FAQ</a></div><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/faq-and-troubleshooting" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>FAQ</span></a></li></ul></div></div></div></li></ul></li><li class="hidden lg:block"><ul role="list" class="px-2 space-y-4"><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Start building</div><ul role="list" class="space-y-0.5"><li><a href="/docs" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-indigo-500 dark:text-indigo-400"><span>Introduction</span></a></li><li><a href="/docs/onboarding-guide" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Connect & set up</span></a></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1739kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Install the Recorder</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/recorder-installation" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Overview</span></a></li><li><a href="/docs/how-to/recorder-script" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Via a Script Tag</span></a></li><li><a href="/docs/session-recording/recorder-npm-dependency" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Via an NPM Package</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1939kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Setup Tests to Run In CI</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/ci" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Overview</span></a></li><li><a href="/docs/github-actions-v2" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Via your CI Pipeline</span></a></li><li><a href="/docs/cloud-replay" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Via Vercel, Netlify or Other Preview URLs</span></a></li></ul></div></div></div></li></ul></div></li><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Overview</div><ul role="list" class="space-y-0.5"><li><a href="/docs/concepts/architecture-overview" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Architecture Overview</span></a></li><li><a href="/docs/concepts/network-recording-and-patching" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Network Recording & Patching</span></a></li><li><a href="/docs/concepts/glossary" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Glossary</span></a></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1959kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Recording</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/manually-recording-tests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Manually Record a Test</span></a></li><li><a href="/docs/how-to/recorder-developer-tools" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Recorder Developer Tools</span></a></li><li><a href="/docs/session-recording/ingest-existing-tests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Ingest Existing Tests</span></a></li><li><a href="/docs/session-recording/controlling-data-recorded" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Control What Data is Recorded</span></a></li><li><a href="/docs/session-recording/controlling-when-recording-starts-and-stops" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Control When Recording Starts and Stops</span></a></li><li><a href="/docs/session-recording/redaction" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Redaction</span></a></li><li><a href="/docs/how-to/record-custom-values" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Record Custom Values</span></a></li><li><a href="/docs/how-to/record-session-context" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Record the Context of a User Session</span></a></li><li><a href="/docs/how-to/use-custom-event-api" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Using the Custom Event API</span></a></li><li><a href="/docs/how-to/handle-file-uploads" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Handle File Uploads</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1b59kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Test Execution & CI</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/testing-pool" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Select Which Sessions to Run</span></a></li><li><a href="/docs/alternative-ci-setups/create-deployments-on-github" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Manually Creating Deployments on GitHub</span></a></li><li><a href="/docs/how-to/prepare-for-tests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Ensure Base Test Runs are Available</span></a></li><li><a href="/docs/make-check-blocking" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Block Merging PRs with Unacknowledged Diffs</span></a></li><li><a href="/docs/how-to/retry-test-run" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Retry a Test Run</span></a></li><li><a href="/docs/how-to/detect-diffs-locally" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Detect Diffs Locally</span></a></li><li><a href="/docs/how-to/enable-source-coverage" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Enable Source Coverage</span></a></li><li><a href="/docs/how-to/configure-ignore-patterns" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Configure Ignore Patterns</span></a></li><li><a href="/docs/how-to/blocked-requests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Blocking Requests During Replay</span></a></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_2lr59kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Advanced</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/incremental-asset-upload" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Incremental Asset Upload</span></a></li><li><a href="/docs/how-to/filter-sessions-by-start-url" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Filter Sessions by Start URL</span></a></li><li><a href="/docs/how-to/companion-assets-advanced" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Companion Assets</span></a></li></ul></div></div></div></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1d59kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc
15-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Framework & App Configuration</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/frameworks/nextjs/app-router" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Next.js App Router</span></a></li><li><a href="/docs/frameworks/nextjs/pages-router" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Next.js Pages Router</span></a></li><li><a href="/docs/frameworks/react/vite" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>React with Vite</span></a></li><li><a href="/docs/frameworks/react/create-react-app" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>React with Create React App</span></a></li><li><a href="/docs/frameworks/vue/vite" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Vue with Vite</span></a></li><li><a href="/docs/frameworks/angular/angular-cli" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Angular CLI</span></a></li><li><a href="/docs/how-to/testing-multiple-apps-or-app-variants" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Test Multiple Apps or App Variants</span></a></li><li><a href="/docs/how-to/testing-feature-flags" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Testing Feature Flags</span></a></li><li><a href="/docs/how-to/window-meticulous-object" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Detect If Running as a Meticulous Test</span></a></li><li><a href="/docs/how-to/record-and-replay-on-different-environments" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Record and Simulate on Different Environments</span></a></li></ul></div></div></div></li></ul></div></li><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Troubleshooting</div><ul role="list" class="space-y-0.5"><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1379kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Recorder</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/troubleshoot-recorder" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>
15Troubleshoot Recorder</span></a></li><li><a href="/docs/session-recording/csp-exceptions" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Required CSP Exceptions for Recorder</span></a></li><li><a href="/docs/how-to/ensure-recorder-captures-all-requests" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Ensure Recorder Captures All Requests</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1579kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Simulations & Diffs</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/troubleshoot-failed-simulations" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Troubleshoot Failed Simulations</span></a></li><li><a href="/docs/how-to/fix-false-positive-diffs" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Fix False Positive Diffs, or Ignore Elements</span></a></li><li><a href="/docs/how-to/troubleshoot-replay-accuracy" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Inaccurate Simulation Warnings</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1779kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Authentication</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/troubleshoot-auth" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Troubleshoot Authentication and Authorisation</span></a></li><li><a href="/docs/how-to/auth/enabling-full-auth" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Simulating Auth</span></a></li><li><a href="/docs/how-to/auth/bypassing-auth" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Bypassing Auth</span></a></li></ul></div></div></div></li><li><div data-headlessui-state=""><button class="flex w-full items-center rounded-md text-left text-[13px] font-normal leading-5 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white gap-x-2 px-2 py-1" id="headlessui-disclosure-button-_R_1979kpglm_" type="button" aria-expanded="false" data-headlessui-state=""><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="shrink-0 transition-transform duration-200 ease-out h-4 w-4 text-zinc-300 dark:text-zinc-600"><path fill-rule="evenodd" d="M8.22 5.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06-1.06L11.94 10 8.22 6.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd"></path></svg>Warnings in Meticulous UI</button><div class="grid transition-[grid-template-rows] duration-200 ease-out grid-rows-[0fr]"><div class="min-h-0 overflow-hidden" inert=""><ul class="px-1 mt-0.5"><li><a href="/docs/how-to/troubleshoot-replay-accuracy" class="rounded-md text-[13px] font-normal leading-5 block py-1 pr-2 pl-8 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Inaccurate Simulation Warnings</span></a></li></ul></div></div></div></li></ul></div></li><li><div><div class="flex items-center gap-1.5 px-1 mb-2 text-[11px] font-semibold uppercase tracking-[0.08em] text-zinc-400 dark:text-zinc-500">Reference</div><ul role="list" class="space-y-0.5"><li><a href="/docs/reference/cli-commands" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>CLI Commands</span></a></li><li><a href="/docs/reference/environment-variables" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Environment Variables</span></a></li><li><a href="/docs/reference/performance-api" class="rounded-md text-[13px] font-normal leading-5 flex items-center gap-2 py-1 pr-2 pl-3 text-zinc-600 hover:text-black dark:text-zinc-400 dark:hover:text-white"><span>Performance API</span></a></li></ul></div></li></ul></li></ul></nav></div></div></div><div class="lg:pl-0 flex flex-col flex-1 h-full min-w-0 bg-white text-indigo-900 dark:bg-zinc-900 dark:text-zinc-100 pt-4 pb-12 sm:py-12 min-h-[calc(100vh-5.25rem)]"><p class="sr-only" data-agent-markdown-pointer="true">AI agents: read this page as markdown at<!-- --> <a href="/docs.md">/docs.md</a>, or start from the full AI-readable index at <a href="/llms.txt">/llms.txt</a>.</p><div class="mx-auto w-full min-w-0 max-w-4xl overflow-x-clip px-4 sm:px-6 lg:px-8"><article class="py-2 w-full min-w-0 max-w-full"><div class="flex flex-col-reverse items-stretch gap-0 py-8 first:pt-0 sm:flex-row sm:items-start sm:justify-between sm:gap-4"><div class="group relative min-w-0"><a href="#getting-started-with-meticulous" class="absolute -left-6 top-1/2 -translate-y-1/2 pr-2 opacity-0 group-hover:opacity-100 transition-opacity text-zinc-400 hover:text-indigo-500 dark:hover:text-indigo-400 hidden sm:block" aria-label="Link to this section"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-4 w-4"><path d="M12.232 4.232a2.5 2.5 0 0 1 3.536 3.536l-1.225 1.224a.75.75 0 0 0 1.061 1.06l1.224-1.224a4 4 0 0 0-5.656-5.656l-3 3a4 4 0 0 0 .225 5.865.75.75 0 0 0 .977-1.138 2.5 2.5 0 0 1-.142-3.667l3-3Z"></path><path d="M11.603 7.963a.75.75 0 0 0-.977 1.138 2.5 2.5 0 0 1 .142 3.667l-3 3a2.5 2.5 0 0 1-3.536-3.536l1.225-1.224a.75.75 0 0 0-1.061-1.06l-1.224 1.224a4 4 0 1 0 5.656 5.656l3-3a4 4 0 0 0-.225-5.865Z"></path></svg></a><h1 class="scroll-mt-12 lg:scroll-mt-21 pt-4 text-2xl font-bold leading-tight text-indigo-900 dark:text-zinc-100 wrap-break-word sm:pt-0 sm:text-[2rem] tracking-tight hx-h1" id="getting-started-with-meticulous">Getting Started with Meticulous</h1></div><div class="flex max-w-full shrink-0 flex-wrap items-center justify-start gap-2 sm:justify-end sm:pt-1.5"><button type="button" class="inline-flex h-7 max-w-full shrink-0 items-center gap-1.5 whitespace-nowrap rounded-lg border border-zinc-200 bg-white px-2.5 text-[13px] font-medium text-zinc-700 transition hover:border-zinc-300 hover:bg-zinc-50 hover:text-zinc-900 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-300 dark:hover:border-zinc-600 dark:hover:bg-zinc-800 dark:hover:text-zinc-100"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon" class="h-3.5 w-3.5 shrink-0 text-zinc-400"><path stroke-linecap="round" stroke-linejoin="round" d="M8.25 7.5V6.108c0-1.135.845-2.098 1.976-2.192.373-.03.748-.057 1.123-.08M15.75 18H18a2.25 2.25 0 0 0 2.25-2.25V6.108c0-1.135-.845-2.098-1.976-2.192a48.424 48.424 0 0 0-1.123-.08M15.75 18.75v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5A3.375 3.375 0 0 0 6.375 7.5H5.25m11.9-3.664A2.251 2.251 0 0 0 15 2.25h-1.5a2.251 2.251 0 0 0-2.15 1.586m5.8 0c.065.21.1.433.1.664v.75h-6V4.5c0-.231.035-.454.1-.664M6.75 7.5H4.875c-.621 0-1.125.504-1.125 1.125v12c0 .621.504 1.125 1.125 1.125h9.75c.621 0 1.125-.504 1.125-1.125V16.5a9 9 0 0 0-9-9Z"></path></svg><span class="grid"><span class="col-start-1 row-start-1" aria-hidden="false">Copy page</span><span class="col-start-1 row-start-1 invisible" aria-hidden="true">Copied!</span></span></button><button type="button" class="inline-flex h-7 max-w-full shrink-0 items-center gap-1.5 whitespace-nowrap rounded-lg border border-zinc-200 bg-white px-2.5 text-[13px] font-medium text-zinc-700 transition hover:border-zinc-300 hover:bg-zinc-50 hover:text-zinc-900 dark:border-zinc-700 dark:bg-zinc-900 dark:text-zinc-300 dark:hover:border-zinc-600 dark:hover:bg-zinc-800 dark:hover:text-zinc-100"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" aria-hidden="true" data-slot="icon" class="h-3.5 w-3.5 shrink-0 text-zinc-400"><path stroke-linecap="round" stroke-linejoin="round" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"></path></svg><span class="grid"><span class="col-start-1 row-start-1" aria-hidden="false">Copy .md URL</span><span class="col-start-1 row-start-1 invisible" aria-hidden="true">Copied!</span></span></button></div></div><p class="my-4 leading-7 text-zinc-600 dark:text-zinc-300 wrap-break-word wrap-anywhere">Meticulous records your interactions with your application on environments such as localhost as you develop it. It then monitors which lines of code and edge<!-- --> <!-- -->cases in your application are tested by each user flow, and from this curates a suite of tests that aims to exhaustively cover every edge<!-- --> <!-- -->case. As your application evolves, so does this test suite.</p><p class="my-4 leading-7 text-zinc-600 dark:text-zinc-300 wrap-break-word wrap-anywhere">By reducing the maintenance cost of a test to exactly zero, Meticulous is able to dramatically scale the number of tests, and from this<!-- --> <!-- -->provide a level of coverage that is unattainable with manually written tests.</p><p class="my-4 leading-7 text-zinc-600 dark:text-zinc-300 wrap-break-word wrap-anywhere">When you open a pull request Meticulous replays those selected user sessions against both the new and old version of the app, grouping and<!-- --> <!-- -->surfacing any differences to you to highlight the different edge cases your change triggers.</p><p class="my-4 leading-7 text-zinc-600 dark:text-zinc-300 wrap-break-word wrap-anywhere">
15To set Meticulous up you need to:</p><ol class="list-decimal list-outside ml-8 my-4 space-y-2 text-zinc-700 dark:text-zinc-300 leading-6 [&_ul]:mt-2 [&_ul]:mb-0 [&_ol]:mt-2 [&_ol]:mb-0"><li><a class="link dark:text-indigo-400 break-all sm:break-normal" href="/docs/onboarding-guide#1-connect-your-repository">Connect your GitHub, GitLab, or Bitbucket repository</a></li><li>Choose either <a class="link dark:text-indigo-400 break-all sm:break-normal" href="/docs/onboarding-guide#automated-setup-with-meticulous-onboard">automated CLI onboarding</a> or the manual path:<ul class="list-disc list-outside ml-8 my-4 space-y-2 text-zinc-700 dark:text-zinc-300 leading-6 [&_ul]:mt-2 [&_ul]:mb-0 [&_ol]:mt-2 [&_ol]:mb-0"><li><a class="link dark:text-indigo-400 break-all sm:break-normal" href="/docs/recorder-installation">Install the session recorder</a></li><li><a class="link dark:text-indigo-400 break-all sm:break-normal" href="/docs/ci">Set up tests to run in CI</a></li></ul></li><li>Record a session and verify Meticulous reports a result on a pull request.</li></ol><p class="my-4 leading-7 text-zinc-600 dark:text-zinc-300 wrap-break-word wrap-anywhere">Continue to the <a class="link dark:text-indigo-400 break-all sm:break-normal" href="/docs/onboarding-guide">Onboarding Guide</a> to get started. For additional<!-- --> <!-- -->questions about how Meticulous works, check out the <a class="link dark:text-indigo-400 break-all sm:break-normal" href="/docs/faq-and-troubleshooting">FAQ and Troubleshooting</a> section.</p></article><div class="mt-16 pt-8 border-t border-zinc-200 dark:border-zinc-800"><section class="mb-8"><h2 class="text-xl font-bold text-zinc-800 dark:text-zinc-100 mb-4 flex items-center gap-2">Next Steps</h2><div class="grid gap-4 md:grid-cols-2"><a class="block p-5 rounded-lg border border-zinc-200 bg-white dark:border-zinc-800 dark:bg-zinc-900 hover:border-indigo-500 hover:shadow-md transition-all duration-200 group" href="/docs/onboarding-guide"><div class="flex items-start gap-3"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-5 w-5 text-zinc-500 group-hover:text-indigo-500 transition-colors shrink-0 mt-0.5"><path d="M10.75 16.82A7.462 7.462 0 0 1 15 15.5c.71 0 1.396.098 2.046.282A.75.75 0 0 0 18 15.06v-11a.75.75 0 0 0-.546-.721A9.006 9.006 0 0 0 15 3a8.963 8.963 0 0 0-4.25 1.065V16.82ZM9.25 4.065A8.963 8.963 0 0 0 5 3c-.85 0-1.673.118-2.454.339A.75.75 0 0 0 2 4.06v11a.75.75 0 0 0 .954.721A7.506 7.506 0 0 1 5 15.5c1.579 0 3.042.487 4.25 1.32V4.065Z"></path></svg><div class="flex-1 min-w-0"><h3 class="text-base font-semibold text-zinc-800 dark:text-zinc-200 group-hover:text-indigo-500 dark:group-hover:text-indigo-400 transition-colors mb-1">Setup Guide</h3><p class="text-sm text-zinc-600 dark:text-zinc-400 line-clamp-2">Get started with Meticulous in your project</p></div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon" class="h-5 w-5 text-zinc-400 group-hover:text-indigo-500 group-hover:translate-x-1 transition-all shrink-0 mt-0.5"><path fill-rule="evenodd" d="M3 10a.75.75 0 0 1 .75-.75h10.638L10.23 5.29a.75.75 0 1 1 1.04-1.08l5.5 5.25a.75.75 0 0 1 0 1.08l-5.5 5.25a.75.75 0 1 1-1.04-1.08l4.158-3.96H3.75A.75.75 0 0 1 3 10Z" clip-rule="evenodd"></path></svg></div></a></div></section></div></div></div></div></div></div>
15<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"frontmatter":{"title":"Getting Started with Meticulous"},"markdownSource":"# Getting Started with Meticulous\n\nMeticulous records your interactions with your application on environments such as localhost as you develop it. It then monitors which lines of code and edge\ncases in your application are tested by each user flow, and from this curates a suite of tests that aims to exhaustively cover every edge\ncase. As your application evolves, so does this test suite.\n\nBy reducing the maintenance cost of a test to exactly zero, Meticulous is able to dramatically scale the number of tests, and from this\nprovide a level of coverage that is unattainable with manually written tests.\n\nWhen you open a pull request Meticulous replays those selected user sessions against both the new and old version of the app, grouping and\nsurfacing any differences to you to highlight the different edge cases your change triggers.\n\nTo set Meticulous up you need to:\n\n1. [Connect your GitHub, GitLab, or Bitbucket repository](/docs/onboarding-guide#1-connect-your-repository)\n2. Choose either [automated CLI onboarding](/docs/onboarding-guide#automated-setup-with-meticulous-onboard) or the manual path:\n - [Install the session recorder](/docs/recorder-installation)\n - [Set up tests to run in CI](/docs/ci)\n3. Record a session and verify Meticulous reports a result on a pull request.\n\nContinue to the [Onboarding Guide](/docs/onboarding-guide) to get started. For additional\nquestions about how Meticulous works, check out the [FAQ and Troubleshooting](/docs/faq-and-troubleshooting) section.\n","content":{"$$mdtype":"Tag","name":"Article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"getting-started-with-meticulous"},"children":["Getting Started with Meticulous"]},{"$$mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Meticulous records your interactions with your application on environments such as localhost as you develop it. It then monitors which lines of code and edge"," ","cases in your application are tested by each user flow, and from this curates a suite of tests that aims to exhaustively cover every edge"," ","case. As your application evolves, so does this test suite."]},{"$$mdtype":"Tag","name":"Paragraph","attributes":{},"children":["By reducing the maintenance cost of a test to exactly zero, Meticulous is able to dramatically scale the number of tests, and from this"," ","provide a level of coverage that is unattainable with manually written tests."]},{"$$mdtype":"Tag","name":"Paragraph","attributes":{},"children":["When you open a pull request Meticulous replays those selected user sessions against both the new and old version of the app, grouping and"," ","surfacing any differences to you to highlight the different edge cases your change triggers."]},{"$$mdtype":"Tag","name":"Paragraph","attributes":{},"children":["To set Meticulous up you need to:"]},{"$$mdtype":"Tag","name":"List","attributes":{"ordered":true},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/onboarding-guide#1-connect-your-repository"},"children":["Connect your GitHub, GitLab, or Bitbucket repository"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Choose either ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/onboarding-guide#automated-setup-with-meticulous-onboard"},"children":["automated CLI onboarding"]}," or the manual path:",{"$$mdtype":"Tag","name":"List","attributes":{"ordered":false},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/recorder-installation"},"children":["Install the session recorder"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/ci"},"children":["Set up tests to run in CI"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Record a session and verify Meticulous reports a result on a pull request."]}]},{"$$mdtype":"Tag","name":"Paragraph","attributes":{},"children":["Continue to the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/onboarding-guide"},"children":["Onboarding Guide"]}," to get started. For additional"," ","questions about how Meticulous works, check out the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/faq-and-troubleshooting"},"children":["FAQ and Troubleshooting"]}," section."]}]}},"__N_SSG":true},"page":"/docs","query":{},"buildId":"pUu8RD8Rp2FK5CtnVisNk","isFallback":false,"gsp":true,"scriptLoader":[]}</script>
15</div></body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.