PageSourceSearch

https://bitfab.ai/home

html bitfab.ai collected 2026-10-05 14:05:56 UTC 167,884 bytes, 12 lines download raw bytes

1<!DOCTYPE html><html data-dpl-id="dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" lang="en" data-theme="light"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/2h6bw45bl9frq.css?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" data-precedence="next"/><link rel="stylesheet" href="/_next/static/chunks/36w0fs67i8mgs.css?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/3mjy1k8tidhe2.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/>
1<script src="/_next/static/chunks/225qkx0yguugs.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/0g1ab6c194pba.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/21f56snm01896.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/1qu-n_q14g226.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/36i1euoormyjv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/2r0m7gr23rsos.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/turbopack-0-ylqef6el-1n.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/2bb1ovj0nke-m.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/2cidbwdxiv1uj.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<script src="/_next/static/chunks/314or7nz8laen.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" async=""></script>
1<title>Bitfab</title><meta name="description" content="Agent replay infrastructure. Capture call stacks from any point in your code and replay them dynamically."/><link rel="author" href="https://www.linkedin.com/in/ankurtoshniwal/"/><meta name="author" content="Ankur Toshniwal"/><meta property="og:title" content="Bitfab"/><meta property="og:description" content="Agent replay infrastructure. Capture call stacks from any point in your code and replay them dynamically."/><meta property="og:image" content="https://bitfab.ai/bitfab-og.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="1200"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Bitfab"/><meta name="twitter:description" content="Agent replay infrastructure. Capture call stacks from any point in your code and replay them dynamically."/><meta name="twitter:image" content="https://bitfab.ai/bitfab-og.png"/><meta name="twitter:image:width" content="1200"/><meta name="twitter:image:height" content="1200"/><link rel="icon" href="/bitfab-favicon.svg"/><meta name="next-size-adjust" content=""/><meta name="sentry-trace" content="60ef86c1f78b430e835a69b36fad9735-80102681898a87cf-0"/><meta name="baggage" content="sentry-environment=production,sentry-release=e19c7f3dc1474e75a3ae405037b044f295db4b3d,sentry-public_key=4877a1f8a47622d07f7a703aa93b0258,sentry-trace_id=60ef86c1f78b430e835a69b36fad9735,sentry-org_id=4509607918567424,sentry-transaction=GET,sentry-sampled=false,sentry-sample_rand=0.8456715294387211,sentry-sample_rate=0.2"/>
1<script src="/_next/static/chunks/0c0hxoamwjsbw.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" noModule=""></script>
1</head><body class="geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable flex max-h-screen min-h-screen flex-col overflow-hidden antialiased"><div hidden=""><!--$--><!--/$--></div>
1<script>(function(){try{var d=document.documentElement;if(!d.dataset.theme){d.dataset.theme=matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}}catch(e){}})()</script>
1<!--$--><!--/$--><!--$--><!--/$--><div class="flex min-h-0 flex-1"><div class="flex min-h-0 min-w-0 flex-1 flex-col"><div data-app-scroll-container="true" class="flex min-h-0 flex-1 flex-col overflow-y-auto"><style>
2  body {
3    background: white !important;
4    overflow-y: auto !important;
5    max-height: none !important;
6  }
7  body [data-app-scroll-container] {
8    overflow: visible !important;
9    min-height: 0 !important;
10    flex: none !important;
11  }
12</style><div><div class="motion-safe:sticky motion-safe:top-0"><div><div class="relative flex min-h-screen flex-1 flex-col bg-paper font-sohne text-foreground"><header class="sticky top-0 z-50 border-divider border-b bg-paper/80 font-sohne backdrop-blur"><div class="mx-auto flex h-16 max-w-6xl items-center justify-between px-6"><a class="flex min-w-0 items-center gap-2" href="/home"><svg viewBox="0 0 100 100" width="24" height="24" fill="none" aria-hidden="true" class="shrink-0 text-foreground"><path d="M26 10 L26 65 C26 72 32 78 40 78 L55 78" stroke="currentColor" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"></path><path d="M74 90 L74 35 C74 28 68 22 60 22 L45 22" stroke="currentColor" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-foreground font-semibold text-lg tracking-tight">bitfab</span></a><nav class="hidden items-center gap-8 font-medium text-slate-500 text-sm md:flex"><a class="transition-colors hover:text-foreground" href="/pricing">Pricing</a><a href="https://docs.bitfab.ai" target="_blank" rel="noopener" class="transition-colors hover:text-foreground">Docs</a><a href="https://docs.bitfab.ai/changelog" target="_blank" rel="noopener" class="transition-colors hover:text-foreground">Changelog</a></nav><div class="flex items-center gap-4 font-medium text-sm"><a class="text-slate-500 transition-colors hover:text-foreground" href="/sign-in">Sign in</a><a href="https://cal.com/team/bitfab/demo-bitfab" target="_blank" rel="noopener" class="bg-action px-4 py-2 text-knockout transition-colors hover:bg-brand">Book a demo</a></div></div></header><section class="relative overflow-hidden"><div class="mx-auto max-w-6xl px-6 pt-20 pb-10 lg:pt-24"><a href="https://docs.bitfab.ai/changelog" target="_blank" rel="noopener" class="group mb-6 inline-flex items-center gap-1.5 font-medium text-[0.8125rem] text-slate-500 hover:text-foreground">What we shipped recently<span class="transition group-hover:translate-x-0.5">→</span></a><h1 data-scan-anchor="true" class="max-w-[22ch] font-semibold text-4xl leading-[1.05] tracking-tight sm:text-5xl xl:text-[3.375rem]">Agent replay infrastructure.</h1><p class="mt-6 max-w-2xl text-lg text-slate-500 leading-relaxed">Capture call stacks from any point in your code and replay them dynamically.</p><ul class="mt-6 max-w-2xl space-y-2.5 text-base text-slate-500 leading-relaxed"><li class="flex items-baseline gap-2.5"><span class="h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500"></span>Test specific code changes by freezing any parts of the call stack</li><li class="flex items-baseline gap-2.5"><span class="h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500"></span>Seamlessly replay normal code and agent frameworks in a single call</li><li class="flex items-baseline gap-2.5"><span class="h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500"></span>Accelerate agent development velocity by fanning out many code change experiments</li></ul><div class="mt-8 flex items-center gap-3"><a href="https://cal.com/team/bitfab/demo-bitfab" target="_blank" rel="noopener" class="bg-action px-6 py-3 font-medium text-knockout text-sm transition-colors hover:bg-brand">Book a demo</a><a href="https://docs.bitfab.ai" target="_blank" rel="noopener" class="border border-divider bg-paper px-6 py-3 font-medium text-foreground text-sm transition-colors hover:border-slate-500">Docs</a></div></div></section><section><div class="mx-auto max-w-6xl px-6 pb-20 lg:pb-24"><p class="font-light text-base text-slate-500">Teams already adding Bitfab to their software factories</p><div class="mt-5 flex max-w-full flex-wrap items-center gap-x-10 gap-y-5"><a href="https://portraitresearch.com" target="_blank" rel="noopener"><img alt="Portrait" loading="lazy" width="0" height="16" decoding="async" data-nimg="1" class="h-4 w-auto opacity-40 grayscale" style="color:transparent" src="/logos/portrait.svg?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/></a><a href="https://haystackeditor.com" target="_blank" rel="noopener" class="flex items-center gap-2 opacity-40 grayscale"><img alt="Haystack" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="h-6 w-6 rounded" style="color:transparent" src="/logos/haystack.png?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/><span class="font-medium text-foreground text-lg leading-none">Haystack</span></a><a href="https://www.heynoah.io" target="_blank" rel="noopener"><img alt="Noah" loading="lazy" width="0" height="16" decoding="async" data-nimg="1" class="h-4 w-auto opacity-40 grayscale" style="color:transparent" src="/logos/he
12ynoah.svg?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/></a><a href="https://elo.ad" target="_blank" rel="noopener" class="flex items-center gap-2 opacity-40 grayscale"><img alt="Elo" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="h-6 w-6 rounded" style="color:transparent" src="/logos/elo.png?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/><span class="font-medium text-foreground text-lg leading-none">Elo</span></a><a href="https://lore.tanagram.ai" target="_blank" rel="noopener" class="flex items-center gap-2 opacity-40 grayscale"><img alt="Lore" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="h-6 w-6 rounded" style="color:transparent" src="/logos/lore.svg?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/><span class="font-medium text-foreground text-lg leading-none">Lore</span></a></div></div></section><section><div class="mx-auto max-w-6xl px-6 py-24"><div class="max-w-3xl"><h2 class="font-semibold text-3xl text-foreground tracking-tight">Capture, emulate, verify.</h2><p class="mt-5 text-lg text-slate-500 leading-relaxed">The loop lets you regression test and experiment on your agents rapidly, and drive them toward the outcomes you care about.</p></div><div class="mt-12 rounded-2xl bg-slate-100 p-4 sm:p-8 lg:p-10"><div class="grid grid-cols-1 gap-4 md:grid-cols-[1fr_56px_1fr]"><div class="flex flex-col overflow-hidden rounded-xl bg-foreground shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.25)]"><div class="flex items-center gap-2 border-white/10 border-b px-3 py-2 font-mono text-[11px] text-white"><span class="inline-flex gap-1"><span class="h-[7px] w-[7px] rounded-full bg-paper/15"></span><span class="h-[7px] w-[7px] rounded-full bg-paper/15"></span><span class="h-[7px] w-[7px] rounded-full bg-paper/15"></span></span>Claude Code</div><div class="min-h-[17rem] flex-1 p-3.5 font-mono text-[12px] text-slate-300 leading-[1.8]"><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span><span class="text-primary-400">&gt; /bitfab:assistant</span> <span class="text-white">fix the refund bug</span></span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-slate-400">loaded dataset refund-emails · 20 captured scenarios</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span>attempt 1: tighten prompt wording</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-slate-400">running experiment...</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-red-300">✗ 12/20 passing, 2 regressions</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span>attempt 2: add order context to the prompt</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-slate-400">running experiment...</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-primary-300">17/20 passing, closer</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span>attempt 3: split refund policy into its own prompt</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-slate-400">running experiment...</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-green-300">✓ 20/20 scenarios passing</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-green-300">✓ fix verified, kept as regression tests</span></div></div></div><div class="relative hidden self-center border-slate-300 border-t-2 border-dashed md:block"></div><div class="flex flex-col rounded-xl bg-paper shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><div class="flex items-center gap-2 border-divider border-b px-3.5 py-2.5"><img alt="" loading="lazy" width="16" height="16" decoding="async" data-nimg="1" style="color:transparent" src="/bitfab-logo.svg?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/><span class="font-semibold text-[12.5px] text-foreground">Bitfab · Experiments</span><span class="ml-auto rounded-full bg-primary-100 px-2 py-0.5 font-semibold text-[10.5px] text-primary-700 transition-opacity duration-300 opacity-0">refund-emails · 20 scenarios</span></div><div class="flex gap-1.5 border-divider border-b px-3.5 py-2.5"><span class="inline-flex items-center rounded-full border px-2.5 py-[3px] font-semibold text-[10.5px] transition-colors border-divider bg-paper text-slate-500">Capture</span><span class="inline-flex items-center rounded-full border px-2.5 py-[3px] font-semibold text-[10.5px] transition-colors border-divider bg-paper text-slate-500">Emulate</span><span class="inline-flex items-center rounded-full border px-2.5 py-[3px] font-semibold text-[10.5px] transition-colors border-divider bg-paper text-slate-500">Verify</span></div><div class="flex flex-1 flex-col gap-3 p-3.5"><div class="transition-all duration-300 translate-y-[4px] opacity-0"><div class="flex justify-between gap-2 text-[11.5px]"><span class="font-medium text-foreground">attempt 1 · tighten prompt wording</span><span class="whitespace-nowrap font-mono text-[10.5px] text-slate-500">running...</span></div><div class="mt-1.5 h-1.5 overflow-hidden rounded-full bg-track"><div class="h-full rounded-full bg-slate-400" style="width:0;transition:width 1600ms ease-out, background-color 300ms"></div></div></div><div class="transition-all duration-300 translate-y-[4px] opacity-0"><div class="flex justify-between gap-2 text-[11.5px]"><span class="font-medium text-foreground">attempt 2 · add order context</span><span class="whitespace-nowrap font-mono text-[10.5px] text-slate-500">running...</span></div><div class="mt-1.5 h-1.5 overflow-hidden rounded-full bg-track"><div class="h-full rounded-full bg-slate-400" style="width:0;transition:width 1600ms ease-out, background-color 300ms"></div></div></div><div class="transition-all duration-300 translate-y-[4px] opacity-0"><div class="flex justify-between gap-2 text-[11.5px]"><span class="font-medium text-foreground">attempt 3 · split refund policy prompt</span><span class="whitespace-nowrap font-mono text-[10.5px] text-slate-500">running...</span></div><div class="mt-1.5 h-1.5 overflow-hidden rounded-full bg-track"><div class="h-full rounded-full bg-slate-400" style="width:0;transition:width 1700ms ease-out, background-color 300ms"></div></div></div></div></div></div></div></div></section><section id="capture"><div class="mx-auto max-w-6xl px-6 py-24"><div class="max-w-3xl"><div class="font-semibold text-primary-600 text-sm">1. Capture</div><h2 class="mt-2 font-semibold text-3xl text-foreground tracking-tight">Capture scenarios from production.</h2><p class="mt-4 text-lg text-slate-500">A scenario is everything needed to relive one real customer interaction, captured automatically: the code execution, the database it read, and every external API response.</p></div><div class="mt-14 grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,22rem)_minmax(0,1fr)] lg:gap-10"><div class="flex flex-col gap-2"><button type="button" aria-pressed="true" class="group flex w-full gap-2.5 border text-left transition-colors disabled:cursor-not-allowed disabled:opacity-50 items-start border-brand bg-primary-50 text-primary-900 rounded-xl p-4"><span class="min-w-0 flex-1"><span class="block truncate font-medium text-sm">Code execution snapshot</span><span class="mt-0.5 block text-slate-500 text-xs">The recorded call: inputs, outputs, every step</span></span><span class="shrink-0"><span class="text-slate-500">→</span></span></button><button type="button" aria-pressed="false" class="group flex w-full gap-2.5 border text-left transition-colors disabled:cursor-not-allowed disabled:opacity-50 items-start border-divider bg-paper hover:border-slate-300 hover:bg-canvas rounded-xl p-4"><span class="min-w-0 flex-1"><span class="block truncate font-medium text-sm">Database snapshot</span><span class="mt-0.5 block text-slate-500 text-xs">The database exactly as it was at capture time</span></span><span class="shrink-0"><span class="text-slate-500">→</span></span></button><button type="button" aria-pressed="false" class="group flex w-full gap-2.5 border text-left transition-colors disabled:cursor-not-allowed disabled:opacity-50 items-start border-divider bg-paper hover:border-slate-300 hover:bg-canvas rounded-xl p-4"><span class="min-w-0 flex-1"><span class="block truncate font-medium text-sm">API Sandbox snapshots</span><span class="mt-0.5 block text-slate-500 text-xs">
12Recorded responses for every external call</span></span><span class="shrink-0"><span class="rounded-full bg-primary-100 px-2 py-0.5 font-semibold text-[11px] text-primary-700">Coming soon</span></span></button></div><div aria-live="polite" class="rounded-2xl bg-slate-100 p-3"><div class="flex h-[19rem] items-stretch overflow-hidden rounded-xl bg-paper shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><div class="relative h-full w-full overflow-hidden p-4 font-mono text-[13px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-code)"></span><span class="font-medium text-foreground">run_support_agent</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/support.py:31</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-code)"></span><span class="font-medium text-foreground">load_thread_state</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/support.py:74</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-external-read)"></span><span class="font-medium text-foreground">db.get_thread</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/store/threads.py:18</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-cyan-50);color:var(--color-cyan-700)"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="var(--color-cyan-700)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 3 4 4-4 4"></path><path d="M20 7H4"></path><path d="m8 21-4-4 4-4"></path><path d="M4 17h16"></path></svg>mock</span></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-external-read)"></span><span class="font-medium text-foreground">db.get_last_reply</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/store/messages.py:42</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-cyan-50);color:var(--color-cyan-700)"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="var(--color-cyan-700)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 3 4 4-4 4"></path><path d="M20 7H4"></path><path d="m8 21-4-4 4-4"></path><path d="M4 17h16"></path></svg>mock</span></div></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-code)"></span><span class="font-medium text-foreground">build_context</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/context.py:12</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)">
12<svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-llm-call)"></span><span class="font-medium text-foreground">summarize_history</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/context.py:58</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-code)"></span><span class="font-medium text-foreground">agent.run_turn</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/runtime.py:22</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-llm-call)"></span><span class="font-medium text-foreground">llm.complete</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/runtime.py:87</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">tool_calls</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/runtime.py:104</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">persist_turn</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/persist.py:9</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-cyan-50);color:var(--color-cyan-700)"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="var(--color-cyan-700)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 3 4 4-4 4"></path><path d="M20 7H4"></path><path d="m8 21-4-4 4-4"></path><path d="M4 17h16"></path></svg>mock</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:0.55"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">db.create_message</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/store/messages.py:77</span><span class="ml-auto inline-flex shrink-0 items-center font-sans font-semibold text-[11px] text-slate-400">skipped on replay</span></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:0.55"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">analytics.capture</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/lib/analytics.py:15</span><span class="ml-auto inline-flex shrink-0 items-center font-sans font-semibold text-[11px] text-slate-400">skipped on replay</span></div></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">email.send_reply</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/mailer.py:31</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-cyan-50);color:var(--color-cyan-700)">
12<svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="var(--color-cyan-700)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 3 4 4-4 4"></path><path d="M20 7H4"></path><path d="m8 21-4-4 4-4"></path><path d="M4 17h16"></path></svg>mock</span></div></div><div class="pointer-events-none absolute inset-x-0 bottom-0 h-20 bg-gradient-to-t from-white to-transparent"></div></div></div><div class="px-3 pt-5 pb-2"><p class="min-h-[69px] text-slate-500 text-sm leading-relaxed">Every call recorded in execution order with inputs, outputs, and timestamps, two-way serializable down to datetimes, at zero added latency to your production code.</p></div></div></div></div></section><section id="emulate"><div class="mx-auto max-w-6xl px-6 py-24"><div class="max-w-3xl"><div class="font-semibold text-primary-600 text-sm">2. Emulate</div><h2 class="mt-2 font-semibold text-3xl text-foreground tracking-tight">Emulate any scenario during development.</h2><p class="mt-4 text-lg text-slate-500">Replay any scenario locally against the database as it was at capture time, with every external call mocked. Or change one detail, a different user, a different order, and test the what-if. Every result is judged against the scenario&#x27;s outcome, so a pass means what your team says it means.</p></div><div class="mt-12 rounded-2xl bg-slate-100 p-4 sm:p-8 lg:p-10"><div class="relative grid grid-cols-2" style="--chan:clamp(84px, 11vw, 120px);column-gap:var(--chan)"><div class="absolute left-1/2 w-0 -translate-x-1/2 border-slate-300 border-l-[1.5px] border-dashed" style="top:48px;bottom:12px"></div><div class="absolute top-[19px] left-1/2 -translate-x-1/2 -translate-y-1/2 whitespace-nowrap rounded-full border border-divider bg-paper px-2 py-[2.5px] font-semibold text-[11px] text-slate-400">recording</div><div class="overflow-hidden rounded-xl bg-paper shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><div class="flex h-9 items-center gap-2 border-divider border-b px-3"><span class="inline-flex items-center gap-1.5 font-semibold text-[13px] text-slate-500"><span class="h-[7px] w-[7px] rounded-full" style="background:var(--color-side-effect)"></span>Executing on your server</span><span class="ml-auto font-medium text-[12px] text-slate-400"></span></div><div class="px-2 py-1.5"><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:0;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-code)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">answer_question</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-code)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">parse_question</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-external-read)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">vector_db.search</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:40px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-llm-call)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">embed_query</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:40px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-external-read)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">pinecone.query</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-llm-call)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">generate_answer</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-side-effect)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">db.log_interaction</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div></div></div><div class="relative overflow-hidden rounded-xl bg-paper shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><div class="flex h-9 items-center gap-2 border-divider border-b px-3"><span class="inline-flex items-center gap-1.5 font-semibold text-[13px]" style="color:var(--color-success)"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play" aria-hidden="true"><path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"></path></svg>Executing locally</span><span class="ml-auto font-medium text-[12px]" style="color:var(--color-success)"></span></div><div class="relative px-2 py-1.5"><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:0;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-code)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">answer_question</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-code)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">parse_question</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-external-read)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">vector_db.search</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:40px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-llm-call)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">embed_query</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:40px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-external-read)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">pinecone.query</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-llm-call)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">generate_answer</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-side-effect)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">db.log_interaction</span></div></div></div></div></div><div class="mt-6 grid grid-cols-1 gap-6 md:grid-cols-2"><div class="flex flex-col rounded-2xl bg-canvas p-6 sm:p-8"><h3 class="font-semibold text-foreground text-lg">Handles side effects</h3><ul class="mt-3 space-y-2 text-slate-500 text-sm leading-relaxed"><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>Detects and instruments dangerous calls</li><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>Replays original outputs for safe emulation</li><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>
12Configurable on the fly by you or your coding agent</li></ul><div class="relative mt-5 min-h-[15rem] flex-1 overflow-hidden rounded-lg bg-foreground"><div class="absolute inset-0 overflow-hidden p-4 font-mono text-[12.5px] text-slate-300 leading-[1.8]"><div class="whitespace-pre"><span style="color:var(--color-cyan-400)">@client.span(</span><span style="color:var(--color-amber-400)">&quot;refund&quot;</span>, mock_on_replay=<span style="color:var(--color-amber-400)">True</span><span style="color:var(--color-cyan-400)">)</span></div><div class="whitespace-pre"><span style="color:var(--color-blue-300)">async def</span> <span style="color:var(--color-blue-400)">refund</span>(row):</div><div class="whitespace-pre">    <span style="color:var(--color-blue-300)">return await</span> stripe.<span style="color:var(--color-blue-400)">refund</span>(row)</div><div class="whitespace-pre"> </div><div class="whitespace-pre"><span style="color:var(--color-cyan-400)">@client.span(</span><span style="color:var(--color-amber-400)">&quot;checkout-agent&quot;</span><span style="color:var(--color-cyan-400)">)</span></div><div class="whitespace-pre"><span style="color:var(--color-blue-300)">async def</span> <span style="color:var(--color-blue-400)">run</span>(order):</div><div class="whitespace-pre">    <!-- -->...</div><div class="whitespace-pre">    <span style="color:var(--color-blue-300)">return await</span> <span style="color:var(--color-blue-400)">refund</span>(row)</div><div class="whitespace-pre"> </div><div class="whitespace-pre"><span style="color:var(--color-cyan-400)">@client.span(</span><span style="color:var(--color-amber-400)">&quot;notify&quot;</span><span style="color:var(--color-cyan-400)">)</span></div><div class="whitespace-pre"><span style="color:var(--color-blue-300)">async def</span> <span style="color:var(--color-blue-400)">notify</span>(row):</div><div class="whitespace-pre">    <span style="color:var(--color-blue-300)">await</span> slack.<span style="color:var(--color-blue-400)">post_message</span>(row)</div></div><div class="pointer-events-none absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-foreground to-transparent"></div></div></div><div class="flex flex-col rounded-2xl bg-canvas p-6 sm:p-8"><h3 class="font-semibold text-foreground text-lg">Managed scenario data</h3><ul class="mt-3 space-y-2 text-slate-500 text-sm leading-relaxed"><li class="flex items-baseline gap-2.5"><span class="h-[5px] w-[5px] shrink-0 -translate-y-[2px] rounded-full bg-primary-500"></span>Search across billions of scenarios and connect to your monitoring tools</li><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>Adapts scenarios to survive code changes automatically</li><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>Groups similar traces into scenarios that define behavior</li></ul><div class="mt-5 flex min-h-[15rem] flex-1 items-center rounded-lg bg-paper p-4 shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><svg viewBox="0 0 320 150" class="h-auto max-h-full w-full" role="img" aria-label="Scenario data maintained across code versions, with similar scenarios grouped"><circle cx="40" cy="50" r="3" fill="var(--color-slate-400)"></circle><circle cx="55" cy="78" r="3" fill="var(--color-slate-400)"></circle><circle cx="70" cy="38" r="3" fill="var(--color-slate-400)"></circle><circle cx="88" cy="64" r="3" fill="var(--color-slate-400)"></circle><circle cx="103" cy="92" r="3" fill="var(--color-slate-400)"></circle><circle cx="120" cy="52" r="3" fill="var(--color-slate-400)"></circle><circle cx="134" cy="30" r="3" fill="var(--color-slate-400)"></circle><circle cx="148" cy="74" r="3" fill="var(--color-slate-400)"></circle><circle cx="160" cy="98" r="3" fill="var(--color-slate-400)"></circle><circle cx="178" cy="58" r="3" fill="var(--color-slate-400)"></circle><circle cx="190" cy="40" r="3" fill="var(--color-slate-400)"></circle><circle cx="205" cy="82" r="3" fill="var(--color-slate-400)"></circle><circle cx="215" cy="62" r="3" fill="var(--color-slate-400)"></circle><circle cx="232" cy="48" r="3" fill="var(--color-slate-400)"></circle><circle cx="66" cy="100" r="3" fill="var(--color-slate-400)"></circle><circle cx="262" cy="52" r="3" fill="var(--color-amber-500)"></circle><circle cx="274" cy="46" r="3" fill="var(--color-amber-500)"></circle><circle cx="268" cy="66" r="3" fill="var(--color-amber-500)"></circle><circle cx="282" cy="60" r="3" fill="var(--color-amber-500)"></circle><circle cx="276" cy="74" r="3" fill="var(--color-amber-500)"></circle><circle cx="288" cy="50" r="3" fill="var(--color-amber-500)"></circle><line x1="16" y1="126" x2="304" y2="126" stroke="var(--color-slate-200)" stroke-width="1.5"></line><circle cx="60" cy="126" r="2.5" fill="var(--color-slate-400)"></circle><circle cx="170" cy="126" r="2.5" fill="var(--color-slate-400)"></circle><circle cx="280" cy="126" r="2.5" fill="var(--color-amber-600)"></circle><text x="60" y="144" text-anchor="middle" font-family="ui-monospace, Menlo, monospace" font-size="10" fill="var(--color-slate-400)">v1</text><text x="170" y="144" text-anchor="middle" font-family="ui-monospace, Menlo, monospace" font-size="10" fill="var(--color-slate-400)">v2</text><text x="280" y="144" text-anchor="middle" font-family="ui-monospace, Menlo, monospace" font-size="10" fill="var(--color-amber-700)">v3</text></svg></div></div></div></div></section><section id="verify"><div class="mx-auto max-w-6xl px-6 py-24"><div class="max-w-3xl"><div class="font-semibold text-primary-600 text-sm">3. Verify</div><h2 class="mt-2 font-semibold text-3xl text-foreground tracking-tight">Verify every change against the outcomes you care about.</h2><p class="mt-4 text-lg text-slate-500">With Bitfab, you can build coding agent loops that weren&#x27;t possible for AI features without emulation or adding your team&#x27;s judgement. Bitfab provides interfaces connected to your coding agent so your team can define outcomes, review changes, and visualize results.</p></div><div class="mt-14 grid grid-cols-1 gap-6 md:grid-cols-2"><div class="rounded-2xl bg-canvas p-6"><h3 class="font-semibold text-foreground text-lg">Fix issues</h3>
12<p class="mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]">Start from a failing scenario, replay it until it passes, and keep it as a regression test.</p><div class="mt-4 overflow-hidden rounded-lg"><div class="bg-foreground px-3 py-2 font-mono text-[11px] text-knockout"><span class="text-primary-400">/bitfab:assistant</span> <!-- -->fix this trace</div><div class="space-y-1.5 bg-paper p-3 font-mono text-[11px]"><div class="text-slate-500">replaying refund-email <span class="text-error">✗ fail</span></div><div class="text-slate-500">applying fix, re-replaying<!-- --> <span class="text-success">✓ pass</span></div><div class="font-semibold text-success">kept as a regression test</div></div></div></div><div class="rounded-2xl bg-canvas p-6"><h3 class="font-semibold text-foreground text-lg">Run regression tests</h3><p class="mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]">Replay the whole scenario set and catch what broke before you deploy.</p><div class="mt-4 overflow-hidden rounded-lg"><div class="bg-foreground px-3 py-2 font-mono text-[11px] text-knockout"><span class="text-primary-400">/bitfab:assistant</span> <!-- -->run my dataset</div><div class="space-y-1 bg-paper p-3 font-mono text-[11px]"><div class="flex justify-between"><span class="text-slate-500">refund-email</span><span class="text-success">✓</span></div><div class="flex justify-between"><span class="text-slate-500">checkout-summary</span><span class="text-success">✓</span></div><div class="flex justify-between"><span class="text-slate-500">support-triage</span><span class="text-error">✗</span></div><div class="mt-1 flex justify-between border-divider border-t pt-1.5 font-semibold text-foreground"><span>19 / 20 passing</span><span class="text-error">1 regression</span></div></div></div></div><div class="rounded-2xl bg-canvas p-6"><h3 class="font-semibold text-foreground text-lg">Run experiments</h3><p class="mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]">Compare before and after across every scenario to see if a change actually helped.</p><div class="mt-4 overflow-hidden rounded-lg"><div class="bg-foreground px-3 py-2 font-mono text-[11px] text-knockout"><span class="text-primary-400">/bitfab:assistant</span> <!-- -->run an experiment</div><div class="space-y-2.5 bg-paper p-3"><div><div class="flex justify-between font-mono text-[10px] text-slate-500"><span>before</span><span>72% pass</span></div><div class="mt-1 h-2 rounded-full bg-track"><div class="h-2 w-[72%] rounded-full bg-slate-500"></div></div></div><div><div class="flex justify-between font-mono text-[10px]"><span class="text-slate-500">after</span><span class="font-semibold text-success">91% pass</span></div><div class="mt-1 h-2 rounded-full bg-track"><div class="h-2 w-[91%] rounded-full bg-success"></div></div></div></div></div></div><div class="rounded-2xl bg-canvas p-6"><h3 class="font-semibold text-foreground text-lg">Optimize costs</h3><p class="mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]">Profile token spend and iterate to reduce it without losing output quality.</p><div class="mt-4 overflow-hidden rounded-lg"><div class="bg-foreground px-3 py-2 font-mono text-[11px] text-knockout"><span class="text-primary-400">/bitfab:assistant</span> <!-- -->cut tokens</div><div class="space-y-1 bg-paper p-3 font-mono text-[11px]"><div class="flex justify-between"><span class="text-slate-500">tokens / run</span><span><span class="text-slate-500 line-through">1,240</span> <span class="font-semibold text-success">720</span></span></div><div class="flex justify-between"><span class="text-slate-500">cost / run</span><span><span class="text-slate-500 line-through">$0.031</span> <span class="font-semibold text-success">$0.018</span></span></div><div class="mt-1 border-divider border-t pt-1.5 font-semibold text-success">42% cheaper, same pass rate</div></div></div></div></div></div></section><section id="cta"><div class="mx-auto flex max-w-6xl flex-col items-start justify-between gap-8 px-6 py-20 sm:flex-row sm:items-center"><div class="max-w-2xl"><h2 class="font-semibold text-3xl text-foreground tracking-tight">One-line install. 15-minute setup.</h2><p class="mt-3 text-lg text-slate-500">Works with TypeScript, Python, Ruby, and Go, driven from Claude Code, Cursor, or Codex. Start building methodically now.</p></div><div class="flex shrink-0 items-center gap-3"><a href="https://cal.com/team/bitfab/demo-bitfab" target="_blank" rel="noopener" class="bg-action px-7 py-3 font-medium text-knockout text-sm transition-colors hover:bg-brand">Book a demo</a><a href="https://docs.bitfab.ai" target="_blank" rel="noopener" class="border border-divider bg-paper px-7 py-3 font-medium text-foreground text-sm transition-colors hover:border-slate-500">Docs</a></div></div></section><footer class="mt-auto bg-paper"><div class="mx-auto flex max-w-6xl flex-col items-center justify-between gap-6 px-6 py-12 sm:flex-row"><div class="flex items-center gap-2"><div class="flex min-w-0 items-center gap-2"><svg viewBox="0 0 100 100" width="20" height="20" fill="none" aria-hidden="true" class="shrink-0 text-foreground"><path d="M26 10 L26 65 C26 72 32 78 40 78 L55 78" stroke="currentColor" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"></path><path d="M74 90 L74 35 C74 28 68 22 60 22 L45 22" stroke="currentColor" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-foreground font-medium text-sm">bitfab</span></div><span class="ml-2 text-slate-400 text-xs">© 2026 Bitfab</span></div><nav class="flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-slate-500 text-sm"><a class="transition-colors hover:text-foreground" href="/pricing">Pricing</a><a href="https://docs.bitfab.ai" target="_blank" rel="noopener" class="transition-colors hover:text-foreground">Docs</a><a href="https://docs.bitfab.ai/changelog" target="_blank" rel="noopener" class="transition-colors hover:text-foreground">Changelog</a><a class="transition-colors hover:text-foreground" href="/privacy">Privacy</a><a class="transition-colors hover:text-foreground" href="/trust">Trust</a></nav></div></footer></div></div></div><div aria-hidden="true" class="hidden motion-safe:block" style="height:300px"></div><div inert="" aria-hidden="true" class="pointer-events-none invisible fixed inset-0 z-[60] [clip-path:inset(var(--scan-y,0px)_0_0_0)] motion-reduce:hidden"><div class="text-slate-500 bg-canvas will-change-transform [&amp;_*]:!text-slate-500 [&amp;_*]:!bg-transparent [&amp;_*]:!bg-none [&amp;_*]:!border-slate-300 [&amp;_*]:!shadow-none [&amp;_*]:![text-shadow:none] [&amp;_*]:![backdrop-filter:none] [&amp;_*]:!filter-none [&amp;_:is(section&gt;div,header&gt;div,footer&gt;div,nav)]:!shadow-[inset_0_1px_0_var(--color-divider),inset_1px_0_0_var(--color-divider),inset_-1px_0_0_var(--color-divider)] [&amp;_:is(h1,h2,h3,p,li,div[class*=&quot;font-semibold&quot;],a):not([class*=&quot;bg-&quot;],[class*=&quot;shadow-&quot;],:has(&gt;img))]:[outline:1px_dashed_var(--color-slate-300)] [&amp;_:is(h1,h2,h3,p,li,div[class*=&quot;font-semibold&quot;],a):not([class*=&quot;bg-&quot;],[class*=&quot;shadow-&quot;],:has(&gt;img))]:outline-offset-[3px] [&amp;_:is([class*=&quot;bg-&quot;],[class*=&quot;shadow-&quot;],img):not([class*=&quot;bg-gradient&quot;],a,button)]:[outline:1px_solid_var(--color-slate-300)] [&amp;_:is([class*=&quot;bg-&quot;],[class*=&quot;shadow-&quot;],img):not([class*=&quot;bg-gradient&quot;],a,button)]:outline-offset-[-1px] [&amp;_:is(a,button)[class*=&quot;bg-&quot;]]:[outline:1px_solid_var(--color-slate-400)] [&amp;_:is(a,button)[class*=&quot;bg-&quot;]]:outline-offset-[-1px] [&amp;_img]:opacity-50 [&amp;_img]:!grayscale [&amp;_svg_:not(text,tspan)]:!fill-none [&amp;_svg_:not(text,tspan)]:!stroke-slate-400 [&amp;_svg_:not(text,tspan)]:!stroke-1 [&amp;_svg_:is(text,tspan)]:!fill-slate-500 [&amp;_svg_:is(text,tspan)]:!stroke-none"><div class="relative flex min-h-screen flex-1 flex-col bg-paper font-sohne text-foreground"><header class="sticky top-0 z-50 border-divider border-b bg-paper/80 font-sohne backdrop-blur"><div class="mx-auto flex h-16 max-w-6xl items-center justify-between px-6"><a class="flex min-w-0 items-center gap-2" href="/home"><svg viewBox="0 0 100 100" width="24" height="24" fill="none" aria-hidden="true" class="shrink-0 text-foreground"><path d="M26 10 L26 65 C26 72 32 78 40 78 L55 78" stroke="currentColor" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"></path><path d="M74 90 L74 35 C74 28 68 22 60 22 L45 22" stroke="currentColor" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-foreground font-semibold text-lg tracking-tight">bitfab</span></a><nav class="hidden items-center gap-8 font-medium text-slate-500 text-sm md:flex"><a class="transition-colors hover:text-foreground" href="/pricing">Pricing</a><a href="https://docs.bitfab.ai" target="_blank" rel="noopener" class="transition-colors hover:text-foreground">Docs</a><a href="https://docs.bitfab.ai/changelog" target="_blank" rel="noopener" class="transition-colors hover:text-foreground">Changelog</a></nav><div class="flex items-center gap-4 font-medium text-sm"><a class="text-slate-500 transition-colors hover:text-foreground" href="/sign-in">Sign in</a><a href="https://cal.com/team/bitfab/demo-bitfab" target="_blank" rel="noopener" class="bg-action px-4 py-2 text-knockout transition-colors hover:bg-brand">Book a demo</a></div></div></header><section class="relative overflow-hidden"><div class="mx-auto max-w-6xl px-6 pt-20 pb-10 lg:pt-24"><a href="https://docs.bitfab.ai/changelog" target="_blank" rel="noopener" class="group mb-6 inline-flex items-center gap-1.5 font-medium text-[0.8125rem] text-slate-500 hover:text-foreground">What we shipped recently<span class="transition group-hover:translate-x-0.5">→</span></a><h1 data-scan-anchor="true" class="max-w-[22ch] font-semibold text-4xl leading-[1.05] tracking-tight sm:text-5xl xl:text-[3.375rem]">
12Agent replay infrastructure.</h1><p class="mt-6 max-w-2xl text-lg text-slate-500 leading-relaxed">Capture call stacks from any point in your code and replay them dynamically.</p><ul class="mt-6 max-w-2xl space-y-2.5 text-base text-slate-500 leading-relaxed"><li class="flex items-baseline gap-2.5"><span class="h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500"></span>Test specific code changes by freezing any parts of the call stack</li><li class="flex items-baseline gap-2.5"><span class="h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500"></span>Seamlessly replay normal code and agent frameworks in a single call</li><li class="flex items-baseline gap-2.5"><span class="h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500"></span>Accelerate agent development velocity by fanning out many code change experiments</li></ul><div class="mt-8 flex items-center gap-3"><a href="https://cal.com/team/bitfab/demo-bitfab" target="_blank" rel="noopener" class="bg-action px-6 py-3 font-medium text-knockout text-sm transition-colors hover:bg-brand">Book a demo</a><a href="https://docs.bitfab.ai" target="_blank" rel="noopener" class="border border-divider bg-paper px-6 py-3 font-medium text-foreground text-sm transition-colors hover:border-slate-500">Docs</a></div></div></section><section><div class="mx-auto max-w-6xl px-6 pb-20 lg:pb-24"><p class="font-light text-base text-slate-500">Teams already adding Bitfab to their software factories</p><div class="mt-5 flex max-w-full flex-wrap items-center gap-x-10 gap-y-5"><a href="https://portraitresearch.com" target="_blank" rel="noopener"><img alt="Portrait" loading="lazy" width="0" height="16" decoding="async" data-nimg="1" class="h-4 w-auto opacity-40 grayscale" style="color:transparent" src="/logos/portrait.svg?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/></a><a href="https://haystackeditor.com" target="_blank" rel="noopener" class="flex items-center gap-2 opacity-40 grayscale"><img alt="Haystack" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="h-6 w-6 rounded" style="color:transparent" src="/logos/haystack.png?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/><span class="font-medium text-foreground text-lg leading-none">Haystack</span></a><a href="https://www.heynoah.io" target="_blank" rel="noopener"><img alt="Noah" loading="lazy" width="0" height="16" decoding="async" data-nimg="1" class="h-4 w-auto opacity-40 grayscale" style="color:transparent" src="/logos/heynoah.svg?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/></a><a href="https://elo.ad" target="_blank" rel="noopener" class="flex items-center gap-2 opacity-40 grayscale"><img alt="Elo" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="h-6 w-6 rounded" style="color:transparent" src="/logos/elo.png?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/><span class="font-medium text-foreground text-lg leading-none">Elo</span></a><a href="https://lore.tanagram.ai" target="_blank" rel="noopener" class="flex items-center gap-2 opacity-40 grayscale"><img alt="Lore" loading="lazy" width="24" height="24" decoding="async" data-nimg="1" class="h-6 w-6 rounded" style="color:transparent" src="/logos/lore.svg?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/><span class="font-medium text-foreground text-lg leading-none">Lore</span></a></div></div></section><section><div class="mx-auto max-w-6xl px-6 py-24"><div class="max-w-3xl"><h2 class="font-semibold text-3xl text-foreground tracking-tight">Capture, emulate, verify.</h2><p class="mt-5 text-lg text-slate-500 leading-relaxed">The loop lets you regression test and experiment on your agents rapidly, and drive them toward the outcomes you care about.</p></div><div class="mt-12 rounded-2xl bg-slate-100 p-4 sm:p-8 lg:p-10"><div class="grid grid-cols-1 gap-4 md:grid-cols-[1fr_56px_1fr]"><div class="flex flex-col overflow-hidden rounded-xl bg-foreground shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.25)]"><div class="flex items-center gap-2 border-white/10 border-b px-3 py-2 font-mono text-[11px] text-white"><span class="inline-flex gap-1"><span class="h-[7px] w-[7px] rounded-full bg-paper/15"></span><span class="h-[7px] w-[7px] rounded-full bg-paper/15"></span><span class="h-[7px] w-[7px] rounded-full bg-paper/15"></span></span>Claude Code</div><div class="min-h-[17rem] flex-1 p-3.5 font-mono text-[12px] text-slate-300 leading-[1.8]"><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span><span class="text-primary-400">&gt; /bitfab:assistant</span> <span class="text-white">fix the refund bug</span></span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-slate-400">loaded dataset refund-emails · 20 captured scenarios</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span>attempt 1: tighten prompt wording</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-slate-400">running experiment...</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-red-300">✗ 12/20 passing, 2 regressions</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span>attempt 2: add order context to the prompt</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-slate-400">running experiment...</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-primary-300">17/20 passing, closer</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span>attempt 3: split refund policy into its own prompt</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-slate-400">running experiment...</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-green-300">✓ 20/20 scenarios passing</span></div><div class="transition-all duration-300 translate-y-[3px] opacity-0"><span class="text-green-300">✓ fix verified, kept as regression tests</span></div></div></div><div class="relative hidden self-center border-slate-300 border-t-2 border-dashed md:block"></div><div class="flex flex-col rounded-xl bg-paper shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><div class="flex items-center gap-2 border-divider border-b px-3.5 py-2.5"><img alt="" loading="lazy" width="16" height="16" decoding="async" data-nimg="1" style="color:transparent" src="/bitfab-logo.svg?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf"/><span class="font-semibold text-[12.5px] text-foreground">Bitfab · Experiments</span><span class="ml-auto rounded-full bg-primary-100 px-2 py-0.5 font-semibold text-[10.5px] text-primary-700 transition-opacity duration-300 opacity-0">refund-emails · 20 scenarios</span></div><div class="flex gap-1.5 border-divider border-b px-3.5 py-2.5"><span class="inline-flex items-center rounded-full border px-2.5 py-[3px] font-semibold text-[10.5px] transition-colors border-divider bg-paper text-slate-500">Capture</span><span class="inline-flex items-center rounded-full border px-2.5 py-[3px] font-semibold text-[10.5px] transition-colors border-divider bg-paper text-slate-500">Emulate</span><span class="inline-flex items-center rounded-full border px-2.5 py-[3px] font-semibold text-[10.5px] transition-colors border-divider bg-paper text-slate-500">Verify</span></div><div class="flex flex-1 flex-col gap-3 p-3.5"><div class="transition-all duration-300 translate-y-[4px] opacity-0"><div class="flex justify-between gap-2 text-[11.5px]"><span class="font-medium text-foreground">attempt 1 · tighten prompt wording</span><span class="whitespace-nowrap font-mono text-[10.5px] text-slate-500">running...</span></div><div class="mt-1.5 h-1.5 overflow-hidden rounded-full bg-track"><div class="h-full rounded-full bg-slate-400" style="width:0;transition:width 1600ms ease-out, background-color 300ms"></div></div></div><div class="transition-all duration-300 translate-y-[4px] opacity-0"><div class="flex justify-between gap-2 text-[11.5px]"><span class="font-medium text-foreground">attempt 2 · add order context</span><span class="whitespace-nowrap font-mono text-[10.5px] text-slate-500">running...</span></div><div class="mt-1.5 h-1.5 overflow-hidden rounded-full bg-track"><div class="h-full rounded-full bg-slate-400" style="width:0;transition:width 1600ms ease-out, background-color 300ms"></div></div></div><div class="transition-all duration-300 translate-y-[4px] opacity-0"><div class="flex justify-between gap-2 text-[11.5px]"><span class="font-medium text-foreground">attempt 3 · split refund policy prompt</span><span class="whitespace-nowrap font-mono text-[10.5px] text-slate-500">running...</span></div><div class="mt-1.5 h-1.5 overflow-hidden rounded-full bg-track"><div class="h-full rounded-full bg-slate-400" style="width:0;transition:width 1700ms ease-out, background-color 300ms"></div></div></div></div></div></div></div></div></section><section id="capture"><div class="mx-auto max-w-6xl px-6 py-24"><div class="max-w-3xl"><div class="font-semibold text-primary-600 text-sm">1. Capture</div><h2 class="mt-2 font-semibold text-3xl text-foreground tracking-tight">Capture scenarios from production.</h2><p class="mt-4 text-lg text-slate-500">A scenario is everything needed to relive one real customer interaction, captured automatically: the code execution, the database it read, and every external API response.</p></div><div class="mt-14 grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,22rem)_minmax(0,1fr)] lg:gap-10"><div class="flex flex-col gap-2"><button type="button" aria-pressed="true" class="group flex w-full gap-2.5 border text-left transition-colors disabled:cursor-not-allowed disabled:opacity-50 items-start border-brand bg-primary-50 text-primary-900 rounded-xl p-4"><span class="min-w-0 flex-1"><span class="block truncate font-medium text-sm">Code execution snapshot</span><span class="mt-0.5 block text-slate-500 text-xs">The recorded call: inputs, outputs, every step</span></span><span class="shrink-0"><span class="text-slate-500">→</span></span></button><button type="button" aria-pressed="false" class="group flex w-full gap-2.5 border text-left transition-colors disabled:cursor-not-allowed disabled:opacity-50 items-start border-divider bg-paper hover:border-slate-300 hover:bg-canvas rounded-xl p-4"><span class="min-w-0 flex-1"><span class="block truncate font-medium text-sm">Database snapshot</span><span class="mt-0.5 block text-slate-500 text-xs">The database exactly as it was at capture time</span></span><span class="shrink-0"><span class="text-slate-500">→</span></span></button><button type="button" aria-pressed="false" class="group flex w-full gap-2.5 border text-left transition-colors disabled:cursor-not-allowed disabled:opacity-50 items-start border-divider bg-paper hover:border-slate-300 hover:bg-canvas rounded-xl p-4"><span class="min-w-0 flex-1"><span class="block truncate font-medium text-sm">API Sandbox snapshots</span><span class="mt-0.5 block text-slate-500 text-xs">
12Recorded responses for every external call</span></span><span class="shrink-0"><span class="rounded-full bg-primary-100 px-2 py-0.5 font-semibold text-[11px] text-primary-700">Coming soon</span></span></button></div><div aria-live="polite" class="rounded-2xl bg-slate-100 p-3"><div class="flex h-[19rem] items-stretch overflow-hidden rounded-xl bg-paper shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><div class="relative h-full w-full overflow-hidden p-4 font-mono text-[13px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-code)"></span><span class="font-medium text-foreground">run_support_agent</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/support.py:31</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-code)"></span><span class="font-medium text-foreground">load_thread_state</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/support.py:74</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-external-read)"></span><span class="font-medium text-foreground">db.get_thread</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/store/threads.py:18</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-cyan-50);color:var(--color-cyan-700)"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="var(--color-cyan-700)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 3 4 4-4 4"></path><path d="M20 7H4"></path><path d="m8 21-4-4 4-4"></path><path d="M4 17h16"></path></svg>mock</span></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-external-read)"></span><span class="font-medium text-foreground">db.get_last_reply</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/store/messages.py:42</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-cyan-50);color:var(--color-cyan-700)"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="var(--color-cyan-700)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 3 4 4-4 4"></path><path d="M20 7H4"></path><path d="m8 21-4-4 4-4"></path><path d="M4 17h16"></path></svg>mock</span></div></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-code)"></span><span class="font-medium text-foreground">build_context</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/context.py:12</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)">
12<svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-llm-call)"></span><span class="font-medium text-foreground">summarize_history</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/context.py:58</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-code)"></span><span class="font-medium text-foreground">agent.run_turn</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/runtime.py:22</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-llm-call)"></span><span class="font-medium text-foreground">llm.complete</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/runtime.py:87</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">tool_calls</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/runtime.py:104</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-green-50);color:var(--color-success)"><svg width="10" height="10" viewBox="0 0 24 24" fill="var(--color-success)" aria-hidden="true"><polygon points="6 3 20 12 6 21"></polygon></svg>run</span></div></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">persist_turn</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/agents/persist.py:9</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-cyan-50);color:var(--color-cyan-700)"><svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="var(--color-cyan-700)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 3 4 4-4 4"></path><path d="M20 7H4"></path><path d="m8 21-4-4 4-4"></path><path d="M4 17h16"></path></svg>mock</span></div><div class="ml-[5px] border-slate-300 border-l pl-[18px]"><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:0.55"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">db.create_message</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/store/messages.py:77</span><span class="ml-auto inline-flex shrink-0 items-center font-sans font-semibold text-[11px] text-slate-400">skipped on replay</span></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:0.55"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">analytics.capture</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/lib/analytics.py:15</span><span class="ml-auto inline-flex shrink-0 items-center font-sans font-semibold text-[11px] text-slate-400">skipped on replay</span></div></div><div class="relative flex min-w-0 items-center gap-2.5 py-2" style="opacity:1"><span class="absolute top-1/2 left-[-19px] h-px w-4 bg-slate-300"></span><span class="h-[10px] w-[10px] shrink-0 rounded-full" style="background:var(--color-side-effect)"></span><span class="font-medium text-foreground">email.send_reply</span><span class="hidden truncate text-[11.5px] text-slate-400 sm:block">app/mailer.py:31</span><span class="ml-auto inline-flex shrink-0 items-center gap-1 rounded-full px-2 py-0.5 font-sans font-semibold text-[11px]" style="background:var(--color-cyan-50);color:var(--color-cyan-700)">
12<svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="var(--color-cyan-700)" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m16 3 4 4-4 4"></path><path d="M20 7H4"></path><path d="m8 21-4-4 4-4"></path><path d="M4 17h16"></path></svg>mock</span></div></div><div class="pointer-events-none absolute inset-x-0 bottom-0 h-20 bg-gradient-to-t from-white to-transparent"></div></div></div><div class="px-3 pt-5 pb-2"><p class="min-h-[69px] text-slate-500 text-sm leading-relaxed">Every call recorded in execution order with inputs, outputs, and timestamps, two-way serializable down to datetimes, at zero added latency to your production code.</p></div></div></div></div></section><section id="emulate"><div class="mx-auto max-w-6xl px-6 py-24"><div class="max-w-3xl"><div class="font-semibold text-primary-600 text-sm">2. Emulate</div><h2 class="mt-2 font-semibold text-3xl text-foreground tracking-tight">Emulate any scenario during development.</h2><p class="mt-4 text-lg text-slate-500">Replay any scenario locally against the database as it was at capture time, with every external call mocked. Or change one detail, a different user, a different order, and test the what-if. Every result is judged against the scenario&#x27;s outcome, so a pass means what your team says it means.</p></div><div class="mt-12 rounded-2xl bg-slate-100 p-4 sm:p-8 lg:p-10"><div class="relative grid grid-cols-2" style="--chan:clamp(84px, 11vw, 120px);column-gap:var(--chan)"><div class="absolute left-1/2 w-0 -translate-x-1/2 border-slate-300 border-l-[1.5px] border-dashed" style="top:48px;bottom:12px"></div><div class="absolute top-[19px] left-1/2 -translate-x-1/2 -translate-y-1/2 whitespace-nowrap rounded-full border border-divider bg-paper px-2 py-[2.5px] font-semibold text-[11px] text-slate-400">recording</div><div class="overflow-hidden rounded-xl bg-paper shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><div class="flex h-9 items-center gap-2 border-divider border-b px-3"><span class="inline-flex items-center gap-1.5 font-semibold text-[13px] text-slate-500"><span class="h-[7px] w-[7px] rounded-full" style="background:var(--color-side-effect)"></span>Executing on your server</span><span class="ml-auto font-medium text-[12px] text-slate-400"></span></div><div class="px-2 py-1.5"><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:0;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-code)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">answer_question</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-code)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">parse_question</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-external-read)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">vector_db.search</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:40px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-llm-call)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">embed_query</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:40px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-external-read)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">pinecone.query</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-llm-call)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">generate_answer</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-side-effect)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">db.log_interaction</span><span class="ml-auto inline-flex items-center gap-[3px]"><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-blue-50);color:var(--color-blue-800)">input</span><span class="w-[48px] rounded py-[2.5px] text-center font-semibold text-[10px] leading-none transition-all duration-200 scale-75 opacity-0" style="background:var(--color-amber-100);color:var(--color-amber-700)">output</span></span></div></div></div><div class="relative overflow-hidden rounded-xl bg-paper shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><div class="flex h-9 items-center gap-2 border-divider border-b px-3"><span class="inline-flex items-center gap-1.5 font-semibold text-[13px]" style="color:var(--color-success)"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play" aria-hidden="true"><path d="M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z"></path></svg>Executing locally</span><span class="ml-auto font-medium text-[12px]" style="color:var(--color-success)"></span></div><div class="relative px-2 py-1.5"><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:0;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-code)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">answer_question</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-code)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">parse_question</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-external-read)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">vector_db.search</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:40px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-llm-call)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">embed_query</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:40px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-external-read)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">pinecone.query</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-llm-call)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">generate_answer</span></div><div class="relative flex h-[30px] items-center gap-2 overflow-hidden whitespace-nowrap rounded-lg px-2" style="margin-left:20px;background:transparent"><span class="relative flex size-[14px] shrink-0 items-center justify-center"><span class="size-[9px] rounded-full transition-all duration-200" style="background:var(--color-side-effect)"></span></span><span class="font-medium font-mono text-[13.5px] text-foreground">db.log_interaction</span></div></div></div></div></div><div class="mt-6 grid grid-cols-1 gap-6 md:grid-cols-2"><div class="flex flex-col rounded-2xl bg-canvas p-6 sm:p-8"><h3 class="font-semibold text-foreground text-lg">Handles side effects</h3><ul class="mt-3 space-y-2 text-slate-500 text-sm leading-relaxed"><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>Detects and instruments dangerous calls</li><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>Replays original outputs for safe emulation</li><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>
12Configurable on the fly by you or your coding agent</li></ul><div class="relative mt-5 min-h-[15rem] flex-1 overflow-hidden rounded-lg bg-foreground"><div class="absolute inset-0 overflow-hidden p-4 font-mono text-[12.5px] text-slate-300 leading-[1.8]"><div class="whitespace-pre"><span style="color:var(--color-cyan-400)">@client.span(</span><span style="color:var(--color-amber-400)">&quot;refund&quot;</span>, mock_on_replay=<span style="color:var(--color-amber-400)">True</span><span style="color:var(--color-cyan-400)">)</span></div><div class="whitespace-pre"><span style="color:var(--color-blue-300)">async def</span> <span style="color:var(--color-blue-400)">refund</span>(row):</div><div class="whitespace-pre">    <span style="color:var(--color-blue-300)">return await</span> stripe.<span style="color:var(--color-blue-400)">refund</span>(row)</div><div class="whitespace-pre"> </div><div class="whitespace-pre"><span style="color:var(--color-cyan-400)">@client.span(</span><span style="color:var(--color-amber-400)">&quot;checkout-agent&quot;</span><span style="color:var(--color-cyan-400)">)</span></div><div class="whitespace-pre"><span style="color:var(--color-blue-300)">async def</span> <span style="color:var(--color-blue-400)">run</span>(order):</div><div class="whitespace-pre">    <!-- -->...</div><div class="whitespace-pre">    <span style="color:var(--color-blue-300)">return await</span> <span style="color:var(--color-blue-400)">refund</span>(row)</div><div class="whitespace-pre"> </div><div class="whitespace-pre"><span style="color:var(--color-cyan-400)">@client.span(</span><span style="color:var(--color-amber-400)">&quot;notify&quot;</span><span style="color:var(--color-cyan-400)">)</span></div><div class="whitespace-pre"><span style="color:var(--color-blue-300)">async def</span> <span style="color:var(--color-blue-400)">notify</span>(row):</div><div class="whitespace-pre">    <span style="color:var(--color-blue-300)">await</span> slack.<span style="color:var(--color-blue-400)">post_message</span>(row)</div></div><div class="pointer-events-none absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-foreground to-transparent"></div></div></div><div class="flex flex-col rounded-2xl bg-canvas p-6 sm:p-8"><h3 class="font-semibold text-foreground text-lg">Managed scenario data</h3><ul class="mt-3 space-y-2 text-slate-500 text-sm leading-relaxed"><li class="flex items-baseline gap-2.5"><span class="h-[5px] w-[5px] shrink-0 -translate-y-[2px] rounded-full bg-primary-500"></span>Search across billions of scenarios and connect to your monitoring tools</li><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>Adapts scenarios to survive code changes automatically</li><li class="flex items-center gap-2.5"><span class="h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500"></span>Groups similar traces into scenarios that define behavior</li></ul><div class="mt-5 flex min-h-[15rem] flex-1 items-center rounded-lg bg-paper p-4 shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]"><svg viewBox="0 0 320 150" class="h-auto max-h-full w-full" role="img" aria-label="Scenario data maintained across code versions, with similar scenarios grouped"><circle cx="40" cy="50" r="3" fill="var(--color-slate-400)"></circle><circle cx="55" cy="78" r="3" fill="var(--color-slate-400)"></circle><circle cx="70" cy="38" r="3" fill="var(--color-slate-400)"></circle><circle cx="88" cy="64" r="3" fill="var(--color-slate-400)"></circle><circle cx="103" cy="92" r="3" fill="var(--color-slate-400)"></circle><circle cx="120" cy="52" r="3" fill="var(--color-slate-400)"></circle><circle cx="134" cy="30" r="3" fill="var(--color-slate-400)"></circle><circle cx="148" cy="74" r="3" fill="var(--color-slate-400)"></circle><circle cx="160" cy="98" r="3" fill="var(--color-slate-400)"></circle><circle cx="178" cy="58" r="3" fill="var(--color-slate-400)"></circle><circle cx="190" cy="40" r="3" fill="var(--color-slate-400)"></circle><circle cx="205" cy="82" r="3" fill="var(--color-slate-400)"></circle><circle cx="215" cy="62" r="3" fill="var(--color-slate-400)"></circle><circle cx="232" cy="48" r="3" fill="var(--color-slate-400)"></circle><circle cx="66" cy="100" r="3" fill="var(--color-slate-400)"></circle><circle cx="262" cy="52" r="3" fill="var(--color-amber-500)"></circle><circle cx="274" cy="46" r="3" fill="var(--color-amber-500)"></circle><circle cx="268" cy="66" r="3" fill="var(--color-amber-500)"></circle><circle cx="282" cy="60" r="3" fill="var(--color-amber-500)"></circle><circle cx="276" cy="74" r="3" fill="var(--color-amber-500)"></circle><circle cx="288" cy="50" r="3" fill="var(--color-amber-500)"></circle><line x1="16" y1="126" x2="304" y2="126" stroke="var(--color-slate-200)" stroke-width="1.5"></line><circle cx="60" cy="126" r="2.5" fill="var(--color-slate-400)"></circle><circle cx="170" cy="126" r="2.5" fill="var(--color-slate-400)"></circle><circle cx="280" cy="126" r="2.5" fill="var(--color-amber-600)"></circle><text x="60" y="144" text-anchor="middle" font-family="ui-monospace, Menlo, monospace" font-size="10" fill="var(--color-slate-400)">v1</text><text x="170" y="144" text-anchor="middle" font-family="ui-monospace, Menlo, monospace" font-size="10" fill="var(--color-slate-400)">v2</text><text x="280" y="144" text-anchor="middle" font-family="ui-monospace, Menlo, monospace" font-size="10" fill="var(--color-amber-700)">v3</text></svg></div></div></div></div></section><section id="verify"><div class="mx-auto max-w-6xl px-6 py-24"><div class="max-w-3xl"><div class="font-semibold text-primary-600 text-sm">3. Verify</div><h2 class="mt-2 font-semibold text-3xl text-foreground tracking-tight">Verify every change against the outcomes you care about.</h2><p class="mt-4 text-lg text-slate-500">With Bitfab, you can build coding agent loops that weren&#x27;t possible for AI features without emulation or adding your team&#x27;s judgement. Bitfab provides interfaces connected to your coding agent so your team can define outcomes, review changes, and visualize results.</p></div><div class="mt-14 grid grid-cols-1 gap-6 md:grid-cols-2"><div class="rounded-2xl bg-canvas p-6"><h3 class="font-semibold text-foreground text-lg">Fix issues</h3>
12<p class="mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]">Start from a failing scenario, replay it until it passes, and keep it as a regression test.</p><div class="mt-4 overflow-hidden rounded-lg"><div class="bg-foreground px-3 py-2 font-mono text-[11px] text-knockout"><span class="text-primary-400">/bitfab:assistant</span> <!-- -->fix this trace</div><div class="space-y-1.5 bg-paper p-3 font-mono text-[11px]"><div class="text-slate-500">replaying refund-email <span class="text-error">✗ fail</span></div><div class="text-slate-500">applying fix, re-replaying<!-- --> <span class="text-success">✓ pass</span></div><div class="font-semibold text-success">kept as a regression test</div></div></div></div><div class="rounded-2xl bg-canvas p-6"><h3 class="font-semibold text-foreground text-lg">Run regression tests</h3><p class="mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]">Replay the whole scenario set and catch what broke before you deploy.</p><div class="mt-4 overflow-hidden rounded-lg"><div class="bg-foreground px-3 py-2 font-mono text-[11px] text-knockout"><span class="text-primary-400">/bitfab:assistant</span> <!-- -->run my dataset</div><div class="space-y-1 bg-paper p-3 font-mono text-[11px]"><div class="flex justify-between"><span class="text-slate-500">refund-email</span><span class="text-success">✓</span></div><div class="flex justify-between"><span class="text-slate-500">checkout-summary</span><span class="text-success">✓</span></div><div class="flex justify-between"><span class="text-slate-500">support-triage</span><span class="text-error">✗</span></div><div class="mt-1 flex justify-between border-divider border-t pt-1.5 font-semibold text-foreground"><span>19 / 20 passing</span><span class="text-error">1 regression</span></div></div></div></div><div class="rounded-2xl bg-canvas p-6"><h3 class="font-semibold text-foreground text-lg">Run experiments</h3><p class="mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]">Compare before and after across every scenario to see if a change actually helped.</p><div class="mt-4 overflow-hidden rounded-lg"><div class="bg-foreground px-3 py-2 font-mono text-[11px] text-knockout"><span class="text-primary-400">/bitfab:assistant</span> <!-- -->run an experiment</div><div class="space-y-2.5 bg-paper p-3"><div><div class="flex justify-between font-mono text-[10px] text-slate-500"><span>before</span><span>72% pass</span></div><div class="mt-1 h-2 rounded-full bg-track"><div class="h-2 w-[72%] rounded-full bg-slate-500"></div></div></div><div><div class="flex justify-between font-mono text-[10px]"><span class="text-slate-500">after</span><span class="font-semibold text-success">91% pass</span></div><div class="mt-1 h-2 rounded-full bg-track"><div class="h-2 w-[91%] rounded-full bg-success"></div></div></div></div></div></div><div class="rounded-2xl bg-canvas p-6"><h3 class="font-semibold text-foreground text-lg">Optimize costs</h3><p class="mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]">Profile token spend and iterate to reduce it without losing output quality.</p><div class="mt-4 overflow-hidden rounded-lg"><div class="bg-foreground px-3 py-2 font-mono text-[11px] text-knockout"><span class="text-primary-400">/bitfab:assistant</span> <!-- -->cut tokens</div><div class="space-y-1 bg-paper p-3 font-mono text-[11px]"><div class="flex justify-between"><span class="text-slate-500">tokens / run</span><span><span class="text-slate-500 line-through">1,240</span> <span class="font-semibold text-success">720</span></span></div><div class="flex justify-between"><span class="text-slate-500">cost / run</span><span><span class="text-slate-500 line-through">$0.031</span> <span class="font-semibold text-success">$0.018</span></span></div><div class="mt-1 border-divider border-t pt-1.5 font-semibold text-success">42% cheaper, same pass rate</div></div></div></div></div></div></section><section id="cta"><div class="mx-auto flex max-w-6xl flex-col items-start justify-between gap-8 px-6 py-20 sm:flex-row sm:items-center"><div class="max-w-2xl"><h2 class="font-semibold text-3xl text-foreground tracking-tight">One-line install. 15-minute setup.</h2><p class="mt-3 text-lg text-slate-500">Works with TypeScript, Python, Ruby, and Go, driven from Claude Code, Cursor, or Codex. Start building methodically now.</p></div><div class="flex shrink-0 items-center gap-3"><a href="https://cal.com/team/bitfab/demo-bitfab" target="_blank" rel="noopener" class="bg-action px-7 py-3 font-medium text-knockout text-sm transition-colors hover:bg-brand">Book a demo</a><a href="https://docs.bitfab.ai" target="_blank" rel="noopener" class="border border-divider bg-paper px-7 py-3 font-medium text-foreground text-sm transition-colors hover:border-slate-500">Docs</a></div></div></section><footer class="mt-auto bg-paper"><div class="mx-auto flex max-w-6xl flex-col items-center justify-between gap-6 px-6 py-12 sm:flex-row"><div class="flex items-center gap-2"><div class="flex min-w-0 items-center gap-2"><svg viewBox="0 0 100 100" width="20" height="20" fill="none" aria-hidden="true" class="shrink-0 text-foreground"><path d="M26 10 L26 65 C26 72 32 78 40 78 L55 78" stroke="currentColor" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"></path><path d="M74 90 L74 35 C74 28 68 22 60 22 L45 22" stroke="currentColor" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="truncate text-foreground font-medium text-sm">bitfab</span></div><span class="ml-2 text-slate-400 text-xs">© 2026 Bitfab</span></div><nav class="flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-slate-500 text-sm"><a class="transition-colors hover:text-foreground" href="/pricing">Pricing</a><a href="https://docs.bitfab.ai" target="_blank" rel="noopener" class="transition-colors hover:text-foreground">Docs</a><a href="https://docs.bitfab.ai/changelog" target="_blank" rel="noopener" class="transition-colors hover:text-foreground">Changelog</a><a class="transition-colors hover:text-foreground" href="/privacy">Privacy</a><a class="transition-colors hover:text-foreground" href="/trust">Trust</a></nav></div></footer></div></div></div><div class="pointer-events-none invisible fixed inset-x-0 top-[var(--scan-y,0px)] z-[70] h-px bg-accent-500 shadow-[0_0_6px_1px_color-mix(in_srgb,var(--color-accent-400)_55%,transparent)] motion-reduce:hidden"></div></div><!--$--><!--/$--></div></div></div>
12<script src="/_next/static/chunks/3mjy1k8tidhe2.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf" id="_R_" async=""></script>
12<script>(self.__next_f=self.__next_f||[]).push([0])</script>
12<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[421534,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"default\"]\n4:I[786369,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"default\"]\n6:I[205363,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[205363,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"ViewportBoundary\"]\nc:I[205363,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"MetadataBoundary\"]\ne:I[834302,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2bb1ovj0nke-m.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"default\"]\n:HL[\"/_next/static/chunks/2h6bw45bl9frq.css?d
12pl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"style\"]\n:HL[\"/_next/static/chunks/36w0fs67i8mgs.css?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"style\"]\n:HL[\"/_next/static/media/797e433ab948586e-s.p.1v5bejj26fx9h.woff2?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.0zr6hhvz-h9nw.woff2?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"home\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"home\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4096]},\"$undefined\",\"$undefined\",4096]},\"$undefined\",\"$undefined\",4112],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2h6bw45bl9frq.css?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/36w0fs67i8mgs.css?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-4\",{\"src\":\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-5\",{\"src\":\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-6\",{\"src\":\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-7\",{\"src\":\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-8\",{\"src\":\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-9\",{\"src\":\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-10\",{\"src\":\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/2cidbwdxiv1uj.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/314or7nz8laen.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/2h6bw45bl9frq.css?d
12pl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/36w0fs67i8mgs.css?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":false,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n9:C\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nf:I[637928,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"IconMark\"]\n8:null\nd:[[\"$\",\"title\",\"0\",{\"children\":\"Bitfab\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Agent replay infrastructure. Capture call stacks from any point in your code and replay them dynamically.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"author\",\"href\":\"https://www.linkedin.com/in/ankurtoshniwal/\"}],[\"$\",\"meta\",\"3\",{\"name\":\"author\",\"content\":\"Ankur Toshniwal\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:title\",\"content\":\"Bitfab\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:description\",\"content\":\"Agent replay infrastructure. Capture call stacks from any point in your code and replay them dynamically.\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:image\",\"content\":\"https://bitfab.ai/bitfab-og.png\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:height\",\"content\":\"1200\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"10\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:title\",\"content\":\"Bitfab\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:description\",\"content\":\"Agent replay infrastructure. Capture call stacks from any point in your code and replay them dynamically.\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:image\",\"content\":\"https://bitfab.ai/bitfab-og.png\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:image:height\",\"content\":\"1200\"}],[\"$\",\"link\",\"16\",{\"rel\":\"icon\",\"href\":\"/bitfab-favicon.svg\"}],[\"$\",\"$Lf\",\"17\",{}]]\n10:I[798803,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2cidbwdxiv1uj.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/314or7nz8laen.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"ScanReveal\"]\n11:I[599432,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2cidbwdxiv1uj.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/314or7nz8laen.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"\"]\n5:[[\"$\",\"style\",null,{\"children\":\"\\n  body {\\n    background: white !important;\\n    overflow-y: auto !important;\\n    max-height: none !important;\\n  }\\n  body [data-app-scroll-container] {\\n    overflow: visible !important;\\n    min-height: 0 !important;\\n    flex: none !important;\\n  }\\n\"}],[\"$\",\"$L10\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"relative flex min-h-screen flex-1 flex-col bg-paper font-sohne text-foreground\",\"children\":[[\"$\",\"header\",null,{\"className\":\"sticky top-0 z-50 border-divider border-b bg-paper/80 font-sohne backdrop-blur\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex h-16 max-w-6xl items-center justify-between px-6\",\"children\":[[\"$\",\"$L11\",null,{\"href\":\"/home\",\"className\":\"flex min-w-0 items-center gap-2\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 100 100\",\"width\":24,\"height\"
12:24,\"fill\":\"none\",\"role\":\"$undefined\",\"aria-hidden\":true,\"className\":\"shrink-0 text-foreground\",\"children\":[\"$undefined\",[\"$\",\"path\",null,{\"d\":\"M26 10 L26 65 C26 72 32 78 40 78 L55 78\",\"stroke\":\"currentColor\",\"strokeWidth\":13,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"}],[\"$\",\"path\",null,{\"d\":\"M74 90 L74 35 C74 28 68 22 60 22 L45 22\",\"stroke\":\"currentColor\",\"strokeWidth\":13,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"}]]}],[\"$\",\"span\",null,{\"className\":\"truncate text-foreground font-semibold text-lg tracking-tight\",\"children\":\"bitfab\"}]]}],[[\"$\",\"nav\",null,{\"className\":\"hidden items-center gap-8 font-medium text-slate-500 text-sm md:flex\",\"children\":[[\"$\",\"$L11\",null,{\"href\":\"/pricing\",\"className\":\"transition-colors hover:text-foreground\",\"children\":\"Pricing\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.bitfab.ai\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"transition-colors hover:text-foreground\",\"children\":\"Docs\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.bitfab.ai/changelog\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"transition-colors hover:text-foreground\",\"children\":\"Changelog\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-4 font-medium text-sm\",\"children\":[[\"$\",\"$L11\",null,{\"href\":\"/sign-in\",\"className\":\"text-slate-500 transition-colors hover:text-foreground\",\"children\":\"Sign in\"}],[\"$\",\"a\",null,{\"href\":\"https://cal.com/team/bitfab/demo-bitfab\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"bg-action px-4 py-2 text-knockout transition-colors hover:bg-brand\",\"children\":\"Book a demo\"}]]}]]]}]}],[[\"$\",\"section\",null,{\"className\":\"relative overflow-hidden\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-6xl px-6 pt-20 pb-10 lg:pt-24\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://docs.bitfab.ai/changelog\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"group mb-6 inline-flex items-center gap-1.5 font-medium text-[0.8125rem] text-slate-500 hover:text-foreground\",\"children\":[\"What we shipped recently\",[\"$\",\"span\",null,{\"className\":\"transition group-hover:translate-x-0.5\",\"children\":\"→\"}]]}],[\"$\",\"h1\",null,{\"data-scan-anchor\":true,\"className\":\"max-w-[22ch] font-semibold text-4xl leading-[1.05] tracking-tight sm:text-5xl xl:text-[3.375rem]\",\"children\":\"Agent replay infrastructure.\"}],[\"$\",\"p\",null,{\"className\":\"mt-6 max-w-2xl text-lg text-slate-500 leading-relaxed\",\"children\":\"Capture call stacks from any point in your code and replay them dynamically.\"}],[\"$\",\"ul\",null,{\"className\":\"mt-6 max-w-2xl space-y-2.5 text-base text-slate-500 leading-relaxed\",\"children\":[[\"$\",\"li\",\"Test specific code changes by freezing any parts of the call stack\",{\"className\":\"flex items-baseline gap-2.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500\"}],\"Test specific code changes by freezing any parts of the call stack\"]}],[\"$\",\"li\",\"Seamlessly replay normal code and agent frameworks in a single call\",{\"className\":\"flex items-baseline gap-2.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500\"}],\"Seamlessly replay normal code and agent frameworks in a single call\"]}],[\"$\",\"li\",\"Accelerate agent development velocity by fanning out many code change experiments\",{\"className\":\"flex items-baseline gap-2.5\",\"children\":[\"$L12\",\"Accelerate agent development velocity by fanning out many code change experiments\"]}]]}],\"$L13\"]}]}],\"$L14\",\"$L15\",\"$L16\",\"$L17\",\"$L18\",\"$L19\"],\"$L1a\"]}]}]]\n1b:I[638013,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2cidbwdxiv1uj.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/314or7nz8laen.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"Image\"]\n1c:I[623364,[\"/_
12next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2cidbwdxiv1uj.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/314or7nz8laen.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"AgentExperiments\"]\n1d:I[245459,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2cidbwdxiv1uj.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/314or7nz8laen.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"CaptureExplorer\"]\n1e:I[219932,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2cidbwdxiv1uj.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/314or7nz8laen.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"ReplayDiagram\"]\n12:[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 -translate-y-[3px] rounded-full bg-primary-500\"}]\n13:[\"$\",\"div\",null,{\"className\":\"mt-8 flex items-center gap-3\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://cal.com/team/bitfab/demo-bitfab\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"bg-action px-6 py-3 font-medium text-knockout text-sm transition-colors hover:bg-brand\",\"children\":\"Book a demo\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.bitfab.ai\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"border border-divider bg-paper px-6 py-3 font-medium text-foreground text-sm transition-colors hover:border-slate-500\",\"children\":\"Docs\"}]]}]\n14:[\"$\",\"section\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-6xl px-6 pb-20 lg:pb-24\",\"children\":[[\"$\",\"p\",null,{\"className\":\"font-light text-base text-slate-500\",\"children\":\"Teams already adding Bitfab to their software factories\"}],[\"$\",\"div\",null,{\"className\":\"mt-5 flex max-w-full flex-wrap items-center gap-x-10 gap-y-5\",\"children\":[[\"$\",\"a\",\"Portrait\",{\"href\":\"https://portraitresearch.com\",\"target\":\"_blank\",\"rel\":\"noopener\",\"children\":[\"$\",\"$L1b\",null,{\"src\":\"/logos/portrait.svg\",\"alt\":\"Portrait\",\"width\":0,\"height\"
12:16,\"sizes\":\"200px\",\"className\":\"h-4 w-auto opacity-40 grayscale\",\"unoptimized\":true}]}],[\"$\",\"a\",\"Haystack\",{\"href\":\"https://haystackeditor.com\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"flex items-center gap-2 opacity-40 grayscale\",\"children\":[[\"$\",\"$L1b\",null,{\"src\":\"/logos/haystack.png\",\"alt\":\"Haystack\",\"width\":24,\"height\":24,\"className\":\"h-6 w-6 rounded\",\"unoptimized\":true}],[\"$\",\"span\",null,{\"className\":\"font-medium text-foreground text-lg leading-none\",\"children\":\"Haystack\"}]]}],[\"$\",\"a\",\"Noah\",{\"href\":\"https://www.heynoah.io\",\"target\":\"_blank\",\"rel\":\"noopener\",\"children\":[\"$\",\"$L1b\",null,{\"src\":\"/logos/heynoah.svg\",\"alt\":\"Noah\",\"width\":0,\"height\":16,\"sizes\":\"200px\",\"className\":\"h-4 w-auto opacity-40 grayscale\",\"unoptimized\":true}]}],[\"$\",\"a\",\"Elo\",{\"href\":\"https://elo.ad\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"flex items-center gap-2 opacity-40 grayscale\",\"children\":[[\"$\",\"$L1b\",null,{\"src\":\"/logos/elo.png\",\"alt\":\"Elo\",\"width\":24,\"height\":24,\"className\":\"h-6 w-6 rounded\",\"unoptimized\":true}],[\"$\",\"span\",null,{\"className\":\"font-medium text-foreground text-lg leading-none\",\"children\":\"Elo\"}]]}],[\"$\",\"a\",\"Lore\",{\"href\":\"https://lore.tanagram.ai\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"flex items-center gap-2 opacity-40 grayscale\",\"children\":[[\"$\",\"$L1b\",null,{\"src\":\"/logos/lore.svg\",\"alt\":\"Lore\",\"width\":24,\"height\":24,\"className\":\"h-6 w-6 rounded\",\"unoptimized\":true}],[\"$\",\"span\",null,{\"className\":\"font-medium text-foreground text-lg leading-none\",\"children\":\"Lore\"}]]}]]}]]}]}]\n15:[\"$\",\"section\",null,{\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-6xl px-6 py-24\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-3xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-semibold text-3xl text-foreground tracking-tight\",\"children\":\"Capture, emulate, verify.\"}],[\"$\",\"p\",null,{\"className\":\"mt-5 text-lg text-slate-500 leading-relaxed\",\"children\":\"The loop lets you regression test and experiment on your agents rapidly, and drive them toward the outcomes you care about.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-12 rounded-2xl bg-slate-100 p-4 sm:p-8 lg:p-10\",\"children\":[\"$\",\"$L1c\",null,{}]}]]}]}]\n16:[\"$\",\"section\",null,{\"id\":\"capture\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-6xl px-6 py-24\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-3xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-semibold text-primary-600 text-sm\",\"children\":\"1. Capture\"}],[\"$\",\"h2\",null,{\"className\":\"mt-2 font-semibold text-3xl text-foreground tracking-tight\",\"children\":\"Capture scenarios from production.\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-lg text-slate-500\",\"children\":\"A scenario is everything needed to relive one real customer interaction, captured automatically: the code execution, the database it read, and every external API response.\"}]]}],[\"$\",\"$L1d\",null,{}]]}]}]\n17:[\"$\",\"section\",null,{\"id\":\"emulate\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-6xl px-6 py-24\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-3xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-semibold text-primary-600 text-sm\",\"children\":\"2. Emulate\"}],[\"$\",\"h2\",null,{\"className\":\"mt-2 font-semibold text-3xl text-foreground tracking-tight\",\"children\":\"Emulate any scenario during development.\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-lg text-slate-500\",\"children\":\"Replay any scenario locally against the database as it was at capture time, with every external call mocked. Or change one detail, a different user, a different order, and test the what-if. Every result is judged against the scenario's outcome, so a pass means what your team says it means.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-12 rounded-2xl bg-slate-100 p-4 sm:p-8 lg:p-10\",\"children\":[\"$\",\"$L1e\",null,{}]}],[\"$\",\"div\",null,{\"className\":\"mt-6 grid grid-cols-1 gap-6 md:grid-cols-2\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col rounded-2xl bg-canvas p-6 sm:p-8\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-semibold text-foreground text-lg\",\"children\":\"Handles side effects\"}],[\"$\",\"ul\",null,{\"className\":\"mt-3 space-y-2 text-slate-500 text-sm leading-relaxed\",\"children\":[[\"$\",\"li\",null,{\"className\":\"flex items-center gap-2.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500\"}],\"Detects and instruments dangerous calls\"]}],[\"$\",\"li\",null,{\"className\":\"flex items-center gap-2.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500\"}],\"Replays original outputs for safe emulation\"]}],[\"$\",\"li\",null,{\"className\":\"flex items-center gap-2.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500\"}
12],\"Configurable on the fly by you or your coding agent\"]}]]}],[\"$\",\"div\",null,{\"className\":\"relative mt-5 min-h-[15rem] flex-1 overflow-hidden rounded-lg bg-foreground\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute inset-0 overflow-hidden p-4 font-mono text-[12.5px] text-slate-300 leading-[1.8]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-cyan-400)\"},\"children\":\"@client.span(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-amber-400)\"},\"children\":\"\\\"refund\\\"\"}],\", mock_on_replay=\",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-amber-400)\"},\"children\":\"True\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-cyan-400)\"},\"children\":\")\"}]]}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-300)\"},\"children\":\"async def\"}],\" \",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-400)\"},\"children\":\"refund\"}],\"(row):\"]}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[\"    \",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-300)\"},\"children\":\"return await\"}],\" stripe.\",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-400)\"},\"children\":\"refund\"}],\"(row)\"]}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":\" \"}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-cyan-400)\"},\"children\":\"@client.span(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-amber-400)\"},\"children\":\"\\\"checkout-agent\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-cyan-400)\"},\"children\":\")\"}]]}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-300)\"},\"children\":\"async def\"}],\" \",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-400)\"},\"children\":\"run\"}],\"(order):\"]}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[\"    \",\"...\"]}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[\"    \",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-300)\"},\"children\":\"return await\"}],\" \",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-400)\"},\"children\":\"refund\"}],\"(row)\"]}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":\" \"}],[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-cyan-400)\"},\"children\":\"@client.span(\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-amber-400)\"},\"children\":\"\\\"notify\\\"\"}],[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-cyan-400)\"},\"children\":\")\"}]]}],\"$L1f\",\"$L20\"]}],\"$L21\"]}]]}],\"$L22\"]}]]}]}]\n18:[\"$\",\"section\",null,{\"id\":\"verify\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-6xl px-6 py-24\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-3xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"font-semibold text-primary-600 text-sm\",\"children\":\"3. Verify\"}],[\"$\",\"h2\",null,{\"className\":\"mt-2 font-semibold text-3xl text-foreground tracking-tight\",\"children\":\"Verify every change against the outcomes you care about.\"}],[\"$\",\"p\",null,{\"className\":\"mt-4 text-lg text-slate-500\",\"children\":\"With Bitfab, you can build coding agent loops that weren't possible for AI features without emulation or adding your team's judgement. Bitfab provides interfaces connected to your coding agent so your team can define outcomes, review changes, and visualize results.\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-14 grid grid-cols-1 gap-6 md:grid-cols-2\",\"children\":[[\"$\",\"div\",\"Fix issues\",{\"className\":\"rounded-2xl bg-canvas p-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-semibold text-foreground text-lg\",\"children\":\"Fix issues\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-slate-500 text-sm leading-relaxed md:min-
12h-[46px]\",\"children\":\"Start from a failing scenario, replay it until it passes, and keep it as a regression test.\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 overflow-hidden rounded-lg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-foreground px-3 py-2 font-mono text-[11px] text-knockout\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-primary-400\",\"children\":\"/bitfab:assistant\"}],\" \",\"fix this trace\"]}],[\"$\",\"div\",null,{\"className\":\"space-y-1.5 bg-paper p-3 font-mono text-[11px]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"text-slate-500\",\"children\":[\"replaying refund-email \",[\"$\",\"span\",null,{\"className\":\"text-error\",\"children\":\"✗ fail\"}]]}],[\"$\",\"div\",null,{\"className\":\"text-slate-500\",\"children\":[\"applying fix, re-replaying\",\" \",[\"$\",\"span\",null,{\"className\":\"text-success\",\"children\":\"✓ pass\"}]]}],[\"$\",\"div\",null,{\"className\":\"font-semibold text-success\",\"children\":\"kept as a regression test\"}]]}]]}]]}],[\"$\",\"div\",\"Run regression tests\",{\"className\":\"rounded-2xl bg-canvas p-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-semibold text-foreground text-lg\",\"children\":\"Run regression tests\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]\",\"children\":\"Replay the whole scenario set and catch what broke before you deploy.\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 overflow-hidden rounded-lg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-foreground px-3 py-2 font-mono text-[11px] text-knockout\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-primary-400\",\"children\":\"/bitfab:assistant\"}],\" \",\"run my dataset\"]}],[\"$\",\"div\",null,{\"className\":\"space-y-1 bg-paper p-3 font-mono text-[11px]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-slate-500\",\"children\":\"refund-email\"}],[\"$\",\"span\",null,{\"className\":\"text-success\",\"children\":\"✓\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-slate-500\",\"children\":\"checkout-summary\"}],[\"$\",\"span\",null,{\"className\":\"text-success\",\"children\":\"✓\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-slate-500\",\"children\":\"support-triage\"}],[\"$\",\"span\",null,{\"className\":\"text-error\",\"children\":\"✗\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-1 flex justify-between border-divider border-t pt-1.5 font-semibold text-foreground\",\"children\":[[\"$\",\"span\",null,{\"children\":\"19 / 20 passing\"}],[\"$\",\"span\",null,{\"className\":\"text-error\",\"children\":\"1 regression\"}]]}]]}]]}]]}],[\"$\",\"div\",\"Run experiments\",{\"className\":\"rounded-2xl bg-canvas p-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-semibold text-foreground text-lg\",\"children\":\"Run experiments\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]\",\"children\":\"Compare before and after across every scenario to see if a change actually helped.\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 overflow-hidden rounded-lg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-foreground px-3 py-2 font-mono text-[11px] text-knockout\",\"children\":[\"$L23\",\" \",\"run an experiment\"]}],\"$L24\"]}]]}],\"$L25\"]}]]}]}]\n19:[\"$\",\"section\",null,{\"id\":\"cta\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex max-w-6xl flex-col items-start justify-between gap-8 px-6 py-20 sm:flex-row sm:items-center\",\"children\":[[\"$\",\"div\",null,{\"className\":\"max-w-2xl\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"font-semibold text-3xl text-foreground tracking-tight\",\"children\":\"One-line install. 15-minute setup.\"}],[\"$\",\"p\",null,{\"className\":\"mt-3 text-lg text-slate-500\",\"children\":\"Works with TypeScript, Python, Ruby, and Go, driven from Claude Code, Cursor, or Codex. Start building methodically now.\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex shrink-0 items-center gap-3\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://cal.com/team/bitfab/demo-bitfab\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"bg-action px-7 py-3 font-medium text-knockout text-sm transition-colors hover:bg-brand\",\"children\":\"Book a demo\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.bitfab.ai\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"border border-divider bg-paper px-7 py-3 font-medium text-foreground text-sm transition-colors hover:border-slate-500\",\"children\":\"Docs\"}]]}]]}]}]\n1a:[\"$\",\"footer\",null,{\"className\":\"mt-auto bg-paper\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto flex max-w-6xl flex-col items-center justify-between gap-6 px-6 py-12 sm:flex-row\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-w-0 items-center gap-2\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 100 100\",\"width\":20,\"height\"
12:20,\"fill\":\"none\",\"role\":\"$undefined\",\"aria-hidden\":true,\"className\":\"shrink-0 text-foreground\",\"children\":[\"$undefined\",[\"$\",\"path\",null,{\"d\":\"M26 10 L26 65 C26 72 32 78 40 78 L55 78\",\"stroke\":\"currentColor\",\"strokeWidth\":13,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"}],[\"$\",\"path\",null,{\"d\":\"M74 90 L74 35 C74 28 68 22 60 22 L45 22\",\"stroke\":\"currentColor\",\"strokeWidth\":13,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\"}]]}],[\"$\",\"span\",null,{\"className\":\"truncate text-foreground font-medium text-sm\",\"children\":\"bitfab\"}]]}],[\"$\",\"span\",null,{\"className\":\"ml-2 text-slate-400 text-xs\",\"children\":\"© 2026 Bitfab\"}]]}],[\"$\",\"nav\",null,{\"className\":\"flex flex-wrap items-center justify-center gap-x-6 gap-y-2 text-slate-500 text-sm\",\"children\":[[\"$\",\"$L11\",null,{\"href\":\"/pricing\",\"className\":\"transition-colors hover:text-foreground\",\"children\":\"Pricing\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.bitfab.ai\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"transition-colors hover:text-foreground\",\"children\":\"Docs\"}],[\"$\",\"a\",null,{\"href\":\"https://docs.bitfab.ai/changelog\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"transition-colors hover:text-foreground\",\"children\":\"Changelog\"}],[\"$\",\"$L11\",null,{\"href\":\"/privacy\",\"className\":\"transition-colors hover:text-foreground\",\"children\":\"Privacy\"}],[\"$\",\"$L11\",null,{\"href\":\"/trust\",\"className\":\"transition-colors hover:text-foreground\",\"children\":\"Trust\"}]]}]]}]}]\n1f:[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-300)\"},\"children\":\"async def\"}],\" \",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-400)\"},\"children\":\"notify\"}],\"(row):\"]}]\n20:[\"$\",\"div\",null,{\"className\":\"whitespace-pre\",\"children\":[\"    \",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-300)\"},\"children\":\"await\"}],\" slack.\",[\"$\",\"span\",null,{\"style\":{\"color\":\"var(--color-blue-400)\"},\"children\":\"post_message\"}],\"(row)\"]}]\n21:[\"$\",\"div\",null,{\"className\":\"pointer-events-none absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-foreground to-transparent\"}]\n22:[\"$\",\"div\",null,{\"className\":\"flex flex-col rounded-2xl bg-canvas p-6 sm:p-8\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-semibold text-foreground text-lg\",\"children\":\"Managed scenario data\"}],[\"$\",\"ul\",null,{\"className\":\"mt-3 space-y-2 text-slate-500 text-sm leading-relaxed\",\"children\":[[\"$\",\"li\",null,{\"className\":\"flex items-baseline gap-2.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 -translate-y-[2px] rounded-full bg-primary-500\"}],\"Search across billions of scenarios and connect to your monitoring tools\"]}],[\"$\",\"li\",null,{\"className\":\"flex items-center gap-2.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500\"}],\"Adapts scenarios to survive code changes automatically\"]}],[\"$\",\"li\",null,{\"className\":\"flex items-center gap-2.5\",\"children\":[[\"$\",\"span\",null,{\"className\":\"h-[5px] w-[5px] shrink-0 rounded-full bg-primary-500\"}],\"Groups similar traces into scenarios that define behavior\"]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-5 flex min-h-[15rem] flex-1 items-center rounded-lg bg-paper p-4 shadow-[0_1px_2px_rgba(15,23,42,.06),0_12px_32px_-16px_rgba(15,23,42,.18)]\",\"children\":[\"$\",\"svg\",null,{\"viewBox\":\"0 0 320 150\",\"className\":\"h-auto max-h-full w-full\",\"role\":\"img\",\"aria-label\":\"Scenario data maintained across code versions, with similar scenarios grouped\",\"children\":[[[\"$\",\"circle\",\"40-50\",{\"cx\":40,\"cy\":50,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"55-78\",{\"cx\":55,\"cy\":78,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"70-38\",{\"cx\":70,\"cy\":38,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"88-64\",{\"cx\":88,\"cy\":64,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"103-92\",{\"cx\":103,\"cy\":92,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"120-52\",{\"cx\":120,\"cy\":52,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"134-30\",{\"cx\":134,\"cy\":30,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"148-74\",{\"cx\":148,\"cy\":74,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"160-98\",{\"cx\":160,\"cy\":98,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"178-58\",{\"cx\":178,\"cy\":58,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"190-40\",{\"cx\":190,\"cy\":40,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"205-82\",{\"cx\":205,\"cy\":82,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}
12],[\"$\",\"circle\",\"215-62\",{\"cx\":215,\"cy\":62,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"232-48\",{\"cx\":232,\"cy\":48,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",\"66-100\",{\"cx\":66,\"cy\":100,\"r\":\"3\",\"fill\":\"var(--color-slate-400)\"}]],[[\"$\",\"circle\",\"262-52\",{\"cx\":262,\"cy\":52,\"r\":\"3\",\"fill\":\"var(--color-amber-500)\"}],[\"$\",\"circle\",\"274-46\",{\"cx\":274,\"cy\":46,\"r\":\"3\",\"fill\":\"var(--color-amber-500)\"}],[\"$\",\"circle\",\"268-66\",{\"cx\":268,\"cy\":66,\"r\":\"3\",\"fill\":\"var(--color-amber-500)\"}],[\"$\",\"circle\",\"282-60\",{\"cx\":282,\"cy\":60,\"r\":\"3\",\"fill\":\"var(--color-amber-500)\"}],[\"$\",\"circle\",\"276-74\",{\"cx\":276,\"cy\":74,\"r\":\"3\",\"fill\":\"var(--color-amber-500)\"}],[\"$\",\"circle\",\"288-50\",{\"cx\":288,\"cy\":50,\"r\":\"3\",\"fill\":\"var(--color-amber-500)\"}]],[\"$\",\"line\",null,{\"x1\":\"16\",\"y1\":\"126\",\"x2\":\"304\",\"y2\":\"126\",\"stroke\":\"var(--color-slate-200)\",\"strokeWidth\":\"1.5\"}],[\"$\",\"circle\",null,{\"cx\":\"60\",\"cy\":\"126\",\"r\":\"2.5\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",null,{\"cx\":\"170\",\"cy\":\"126\",\"r\":\"2.5\",\"fill\":\"var(--color-slate-400)\"}],[\"$\",\"circle\",null,{\"cx\":\"280\",\"cy\":\"126\",\"r\":\"2.5\",\"fill\":\"var(--color-amber-600)\"}],[\"$\",\"text\",null,{\"x\":\"60\",\"y\":\"144\",\"textAnchor\":\"middle\",\"fontFamily\":\"ui-monospace, Menlo, monospace\",\"fontSize\":\"10\",\"fill\":\"var(--color-slate-400)\",\"children\":\"v1\"}],[\"$\",\"text\",null,{\"x\":\"170\",\"y\":\"144\",\"textAnchor\":\"middle\",\"fontFamily\":\"ui-monospace, Menlo, monospace\",\"fontSize\":\"10\",\"fill\":\"var(--color-slate-400)\",\"children\":\"v2\"}],[\"$\",\"text\",null,{\"x\":\"280\",\"y\":\"144\",\"textAnchor\":\"middle\",\"fontFamily\":\"ui-monospace, Menlo, monospace\",\"fontSize\":\"10\",\"fill\":\"var(--color-amber-700)\",\"children\":\"v3\"}]]}]}]]}]\n23:[\"$\",\"span\",null,{\"className\":\"text-primary-400\",\"children\":\"/bitfab:assistant\"}]\n24:[\"$\",\"div\",null,{\"className\":\"space-y-2.5 bg-paper p-3\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex justify-between font-mono text-[10px] text-slate-500\",\"children\":[[\"$\",\"span\",null,{\"children\":\"before\"}],[\"$\",\"span\",null,{\"children\":\"72% pass\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-1 h-2 rounded-full bg-track\",\"children\":[\"$\",\"div\",null,{\"className\":\"h-2 w-[72%] rounded-full bg-slate-500\"}]}]]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"div\",null,{\"className\":\"flex justify-between font-mono text-[10px]\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-slate-500\",\"children\":\"after\"}],[\"$\",\"span\",null,{\"className\":\"font-semibold text-success\",\"children\":\"91% pass\"}]]}],[\"$\",\"div\",null,{\"className\":\"mt-1 h-2 rounded-full bg-track\",\"children\":[\"$\",\"div\",null,{\"className\":\"h-2 w-[91%] rounded-full bg-success\"}]}]]}]]}]\n25:[\"$\",\"div\",\"Optimize costs\",{\"className\":\"rounded-2xl bg-canvas p-6\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"font-semibold text-foreground text-lg\",\"children\":\"Optimize costs\"}],[\"$\",\"p\",null,{\"className\":\"mt-1.5 text-slate-500 text-sm leading-relaxed md:min-h-[46px]\",\"children\":\"Profile token spend and iterate to reduce it without losing output quality.\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 overflow-hidden rounded-lg\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-foreground px-3 py-2 font-mono text-[11px] text-knockout\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-primary-400\",\"children\":\"/bitfab:assistant\"}],\" \",\"cut tokens\"]}],[\"$\",\"div\",null,{\"className\":\"space-y-1 bg-paper p-3 font-mono text-[11px]\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-slate-500\",\"children\":\"tokens / run\"}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-slate-500 line-through\",\"children\":\"1,240\"}],\" \",[\"$\",\"span\",null,{\"className\":\"font-semibold text-success\",\"children\":\"720\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex justify-between\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-slate-500\",\"children\":\"cost / run\"}],[\"$\",\"span\",null,{\"children\":[[\"$\",\"span\",null,{\"className\":\"text-slate-500 line-through\",\"children\":\"$$0.031\"}],\" \",[\"$\",\"span\",null,{\"className\":\"font-semibold text-success\",\"children\":\"$$0.018\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mt-1 border-divider border-t pt-1.5 font-semibold text-success\",\"children\":\"42% cheaper, same pass rate\"}]]}]]}]]}]\n26:I[728322,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"AuthProvider\"]\n27:I[378794,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"AnalyticsTracker\"]\n28:I[389499,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"PageViewTracker\"]\n29:I[346353,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"ThemeScript\"]\n2a:I[114526,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"Providers\"]\n2b:I[448262,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"EnvironmentProvider\"]\n2c:I[550871,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"default\"]\n2d:I[138356,[\"/_next/static/chunks/0228dzryqh7wn.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0zbu2nv1kp_wp.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3m-q3h6i_ki-3.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2ibj_0gf8gk-s.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/2u9ldc30jdf-7.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/1wxkya1dzqxz-.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0narhq4kkk2nb.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0xipnlgp-07rg.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3g727sqglchkv.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/0hq1q8_-l4bpt.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\",\"/_next/static/chunks/3lfqjv59mv85k.js?dpl=dpl_5n6nng9JvnaAzCaqQKrsrsncVrbf\"],\"ToastContainer\"]\n2:[\"$\",\"$L26\",null,{\"children\":[[\"$\",\"$L27\",null,{\"user\":null,\"organizationId\":null,\"externalOrganizationId\":null}],[\"$\",\"$L28\",null,{}],[\"$\",\"html\",null,{\"lang\":\"en\",\"data-theme\":\"light\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable flex max-h-screen min-h-screen flex-col overflow-hidden antialiased\",\"children\":[[\"$\",\"$L29\",null,{}],[\"$\",\"$L2a\",null,{\"themePreference\":\"system\",\"children\":[\"$\",\"$L2b\",null,{\"initialEnvironment\":null,\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-0 flex-1\",\"children\":[false,[\"$\",\"div\",null,{\"className\":\"flex min-h-0 min-w-0 flex-1 flex-col\",\"children\":[[\"$\",\"$L2c\",null,{\"serverOrgId\":null,\"serverSignedIn\":false}],[\"$\",\"div\",null,{\"data-app-scroll-container\":true,\"className\":\"flex min-h-0 flex-1 flex-col overflow-y-auto\",\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\"
12:\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],[\"$\",\"$L2d\",null,{}],false]}]}]]}]}]]}]\n"])</script>
12</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.