Move the connected tab to a URL or reload it, and understand why ok does not mean the page arrived.
reticle_navigate moves the connected browser tab to a URL, or reloads it in place with { "reload": true }. Reach for it for a genuine document load: a deep link, a hard refresh, or the first visit. Clicking a link inside a single-page app is a route change, not a navigation, and does not need this tool.
{ "url": "/deployments" }
Real response, with the throttled-tab session and warning fields trimmed off:
{ "ok": true, "url": "http://localhost:4310/deployments", "confirmed": false, "waitedMs": 5000, "note": "ok means the navigation was DISPATCHED, not that the page arrived. The SDK is torn down by the navigation itself, so nothing here can see the new document, and no session reconnected at the new URL within 5000ms. A slow app may still be on its way (an SPA reattaching under HMR can take 30-60s): navigate again with a larger timeout_ms, or call reticle_sessions to confirm a session reconnected before acting; if none appears, the page did not load or is not instrumented."}
The daemon waits up to timeout_ms (default 5000) for the SDK to re-announce itself. When it does, you are told so, with the sessionId it came back as, and can act immediately without a reticle_session { action: "list" } round trip. This is a real reload response:
{ "ok": true, "confirmed": true, "note": "the page came back and re-announced itself under the same session id, so this session is live again. Anything captured before the reload is gone with the old document."}
Read the second sentence, which is the one that costs people a turn. confirmed: true restores the session, not the evidence: every event, network call and console line captured before the reload went with the old document.
A full navigation destroys the document the SDK was living in. Reticle cannot report on the new page from inside the old one, because the old one no longer exists. So it tells you what it actually knows: the navigation was dispatched.Most tools would return ok: true and let you assume arrival. When the page then fails to load, or loads without instrumentation, you get a confusing cascade of “element not found” errors several calls later, with nothing pointing at the real cause.confirmed: false with a landedOn URL is a different case: the page arrived, but the app sent it somewhere else, such as a login or route-guard redirect. landedOn says where the browser actually is.waitedMs is how long Reticle waited for the page to come back before it stopped. The page may still arrive after that. A single-page app that reattaches under HMR can take 30–60 s, so give a slow app a larger timeout_ms:
with reticle_session, and only then look at the page. If no session appears at the new URL, the page did not load or is not instrumented. And you know that immediately rather than three calls later.
Refs do not survive a navigation. A new document means new refs. Across one afternoon on the
same fixture, the same “Sign in” button was e105, then e305, then e3. Re-snapshot; never
carry refs across. Reticle refuses a stale ref rather than clicking whatever now occupies the
slot, so the failure is loud, but it still costs you a turn.
In a single-page app, clicking a link usually changes the route without destroying the document. That is a route change, not a navigation. Refs survive, and you can assert it directly:
Use reticle_navigate for a genuine document load. A deep link, a hard reload, or the first visit.
Last modified on October 25, 2026
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Reticle","description":"Reticle is the proof layer for AI agents: it verifies a running web app from the inside, without screenshots, and returns a verdict with evidence.","colors":{"primary":"#ff9d86","light":"#ffbcac","dark":"#d04425"},"logo":{"light":"https://mintcdn.com/reticle/Av2V9aUJid9T03FY/logo/wordmark-black.svg?fit=max\u0026auto=format\u0026n=Av2V9aUJid9T03FY\u0026q=85\u0026s=e08f6759b891a00c239f881dbd753e51","dark":"https://mintcdn.com/reticle/Av2V9aUJid9T03FY/logo/wordmark-white.svg?fit=max\u0026auto=format\u0026n=Av2V9aUJid9T03FY\u0026q=85\u0026s=b6d93ace9d26effbd5118548c4037bac"},"favicon":{"light":"https://mintcdn.com/reticle/Av2V9aUJid9T03FY/favicon/mark-black.svg?fit=max\u0026auto=format\u0026n=Av2V9aUJid9T03FY\u0026q=85\u0026s=67a4aa2bd8abbe587697b62440ef9568","dark":"https://mintcdn.com/reticle/Av2V9aUJid9T03FY/favicon/mark-white.svg?fit=max\u0026auto=format\u0026n=Av2V9aUJid9T03FY\u0026q=85\u0026s=e767b03c6c23a64027794fe639d5f918"},"appearance":{"default":"system"},"navbar":{"links":[{"href":"https://github.com/reticlehq/reticle","type":"github"}],"primary":{"type":"button","label":"Get started","href":"/quickstart"}},"footer":{"socials":{"x":"https://x.com/reticle_hq","github":"https://github.com/reticlehq/reticle","linkedin":"https://www.linkedin.com/company/reticlehq","discord":"https://discord.gg/BwAbzv9ZRz"},"links":[{"header":"Docs","items":[{"label":"Quickstart","href":"/quickstart"},{"label":"Usage guide","href":"/usage"},{"label":"Agent cheat sheet","href":"/agent-cheatsheet"},{"label":"For agents","href":"/for-agents"}]},{"header":"Project","items":[{"label":"Contributing","href":"https://github.com/reticlehq/reticle/blob/main/CONTRIBUTING.md"},{"label":"Security","href":"https://github.com/reticlehq/reticle/blob/main/SECURITY.md"},{"label":"License","href":"https://github.com/reticlehq/reticle/blob/main/LICENSE"}]},{"header":"Community","items":[{"label":"Discord","href":"https://discord.gg/BwAbzv9ZRz"},{"label":"Star on GitHub","href":"https://github.com/reticlehq/reticle"},{"label":"X","href":"https://x.com/reticle_hq"},{"label":"LinkedIn","href":"https://www.linkedin.com/company/reticlehq"}]}]},"search":{"prompt":"Search the Reticle docs"},"seo":{"metatags":{"og:site_name":"Reticle Docs","og:type":"website","og:title":"Reticle Docs: verification for AI coding agents","og:description":"Reticle verifies a running web app from the inside and returns a verdict with evidence, not a screenshot. Install it, instrument it, and read the full tool reference.","og:url":"https://docs.reticle.sh","og:image":"https://docs.reticle.sh/images/og.png","og:image:alt":"Reticle: your agent says it works. Reticle checks.","twitter:card":"summary_large_image","twitter:site":"@reticle_hq","twitter:creator":"@reticle_hq","twitter:image":"https://docs.reticle.sh/images/og.png"},"organization":{"name":"Reticle","url":"https://docs.reticle.sh","logo":"https://docs.reticle.sh/images/og.png","sameAs":["https://github.com/reticlehq/reticle","https://www.npmjs.com/org/reticlehq"]}},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":false},"errors":{"404":{"redirect":false,"title":"No such page","description":"That page moved or never existed. Start at [Getting started](/getting-started), or search above."}},"contextual":{"options":["copy","view","claude","chatgpt","cursor","vscode","mcp","add-mcp"],"display":"header"},"metadata":{"timestamp":true},"markdown":{"instructions":["Reticle is a verification layer for AI coding agents. Its SDK runs in development builds, and in staging or production only through the signed activate loader (see /production-mode). It reads program truth (network, state, console, routing, animations, framework state) from inside a running web app and returns a deterministic verdict with evidence. It is not a screenshot tool and not a browser automation library.","Verdicts come from `reticle_act_and_wait`, `reticle_assert`, `reticle_act { steps }` when a step declares `expect`, and `reticle_verify` (`change`/`flows`). Everything else moves or reads the app and proves nothing. Only `verified: \"yes\"` is a pass: `unknown` means Reticle could not tell, and `no-fault` means nothing was declared to prove. A drive that ends without a verdict has no result, however many tools it used. Never weaken a check to make it pass.","Package names are scoped `@reticlehq/*`. Run every CLI command as `npx @reticlehq/server \u003ccommand>`, for example `npx @reticlehq/server init`. `reticle` is a bin name that `@reticlehq/server` installs once it is on your PATH, NOT a package on npm: `npx reticle` fetches an unrelated package published by somebody else, so never run that. The complete tool surface is on the `/usage` page; `/agent-cheatsheet` is the one-screen version."]},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/reticlehq/reticle"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/BwAbzv9ZRz"},{"anchor":"npm","icon":"npm","href":"https://www.npmjs.com/org/reticlehq"},{"anchor":"Changelog","icon":"clock-rotate-left","href":"https://github.com/reticlehq/reticle/blob/main/CHANGELOG.md"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"reticle","hasAudioNarration":false,"actualSubdomain":"reticle","customDomains":["docs.reticle.sh"],"gitSource":{"type":"github","owner":"reticlehq","repo":"reticle","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae69cc40339475b5aab186c","collectionId":"2ac606aa-a038-4b66-a9a0-af8c551db2f8","liveDeploymentHistoryId":"6ae69cc40339475b5aab186c","schemaVersion":"v3"},"feedback":{"agentFeedback":true},"entitlements":{},"buildId":"6ae69cc40339475b5aab186c","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Reference","count":67},{"language":"default","tag":"CLI commands","count":25},{"language":"default","tag":"Guides","count":25},{"language":"default","tag":"Tools","count":19},{"language":"default","tag":"Packages","count":14},{"language":"default","tag":"Resources","count":12},{"language":"default","tag":"Get started","count":6},{"language":"default","tag":"Install","count":6},{"language":"default","tag":"Long form","count":5},{"language":"default","tag":"Verify and ship","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#footer a.select-none::after{content:'Your agent says it works. Reticle checks.';display:block;margin-top:.75rem;font-size:.875rem;line-height:1.25rem;color:rgb(var(--gray-500))}.dark #footer a.select-none::after{color:rgb(var(--gray-400))}"}],"page":{"pagePath":"tools/navigate","slug":"/tools/navigate","pageMetadata":{"title":"reticle_navigate","description":"Move the connected tab to a URL or reload it, and understand why ok does not mean the page arrived.","icon":"compass","href":"/tools/navigate"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Move the connected tab to a URL or reload it, and understand why ok does not mean the page arrived.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`reticle_navigate`}),` moves the connected browser tab to a URL, or reloads it in place with `,_jsx(_components.code,{children:`{ \"reload\": true }`}),`. Reach for it for a genuine document load: a deep link, a hard refresh, or the first visit. Clicking a link inside a single-page app is a route change, not a navigation, and does not need this tool.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"url\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"/deployments\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Real response, with the throttled-tab `,_jsx(_components.code,{children:`session`}),` and `,_jsx(_components.code,{children:`warning`}),` fields trimmed off:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"ok\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"http://localhost:4310/deployments\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"confirmed\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"waitedMs\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`5000`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"note\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"ok means the navigation was DISPATCHED, not that the page arrived. The SDK is torn down by the navigation itself, so nothing here can see the new document, and no session reconnected at the new URL within 5000ms. A slow app may still be on its way (an SPA reattaching under HMR can take 30-60s): navigate again with a larger timeout_ms, or call reticle_sessions to confirm a session reconnected before acting; if none appears, the page did not load or is not instrumented.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(Heading,{level:`2`,id:`confirmed-true-when-the-page-comes-back-in-time`,children:[_jsx(_components.code,{children:`confirmed: true`}),` when the page comes back in time`]}),`\n`,_jsxs(_components.p,{children:[`The daemon waits up to `,_jsx(_components.code,{children:`timeout_ms`}),` (default 5000) for the SDK to re-announce itself. When it does, you are told so, with the `,_jsx(_components.code,{children:`sessionId`}),` it came back as, and can act immediately without a `,_jsx(_components.code,{children:`reticle_session { action: \"list\" }`}),` round trip. This is a real reload response:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"ok\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"confirmed\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"note\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"the page came back and re-announced itself under the same session id, so this session is live again. Anything captured before the reload is gone with the old document.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Read the second sentence, which is the one that costs people a turn. `,_jsx(_components.code,{children:`confirmed: true`}),` restores the session, not the evidence: every event, network call and console line captured before the reload went with the old document.`]}),`\n`,_jsxs(Heading,{level:`2`,id:`confirmed-false-is-the-honest-part`,children:[_jsx(_components.code,{children:`confirmed: false`}),` is the honest part`]}),`\n`,_jsx(_components.p,{children:`A full navigation destroys the document the SDK was living in. Reticle cannot report on the new page from inside the old one, because the old one no longer exists. So it tells you what it actually knows: the navigation was dispatched.`}),`\n`,_jsxs(_components.p,{children:[`Most tools would return `,_jsx(_components.code,{children:`ok: true`}),` and let you assume arrival. When the page then fails to load, or loads without instrumentation, you get a confusing cascade of “element not found” errors several calls later, with nothing pointing at the real cause.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`confirmed: false`}),` with a `,_jsx(_components.code,{children:`landedOn`}),` URL is a different case: the page arrived, but the app sent it somewhere else, such as a login or route-guard redirect. `,_jsx(_components.code,{children:`landedOn`}),` says where the browser actually is.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`waitedMs`}),` is how long Reticle waited for the page to come back before it stopped. The page may still arrive after that. A single-page app that reattaches under HMR can take 30–60 s, so give a slow app a larger `,_jsx(_components.code,{children:`timeout_ms`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"url\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"/deployments\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"timeout_ms\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`45000`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`the-pattern-after-navigating`,children:`The pattern after navigating`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"url\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"/deployments\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`then confirm a session reconnected:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"action\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"list\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`with `,_jsx(_components.a,{href:`/tools/sessions`,children:_jsx(_components.code,{children:`reticle_session`})}),`, and only then look at the page. If no session appears at the new URL, the page did not load or is not instrumented. And you know that immediately rather than three calls later.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Refs do not survive a navigation.`}),` A new document means new refs. Across one afternoon on the\nsame fixture, the same “Sign in” button was `,_jsx(_components.code,{children:`e105`}),`, then `,_jsx(_components.code,{children:`e305`}),`, then `,_jsx(_components.code,{children:`e3`}),`. Re-snapshot; never\ncarry refs across. Reticle refuses a stale ref rather than clicking whatever now occupies the\nslot, so the failure is loud, but it still costs you a turn.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`arguments`,children:`Arguments`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Argument`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`url`})}),_jsx(_components.td,{children:`Where to go. Relative paths work`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`reload`})}),_jsx(_components.td,{children:`Reload in place instead of navigating`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`hard`})}),_jsxs(_components.td,{children:[`With `,_jsx(_components.code,{children:`reload`}),`, bypass the cache`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`timeout_ms`})}),_jsxs(_components.td,{children:[`How long to wait for the page to come back before `,_jsx(_components.code,{children:`confirmed: false`}),`. Default 5000; 0 looks once`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`client-side-routing-is-different`,children:`Client-side routing is different`}),`\n`,_jsx(_components.p,{children:`In a single-page app, clicking a link usually changes the route without destroying the document. That is a route change, not a navigation. Refs survive, and you can assert it directly:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"ref\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"e618\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"action\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"click\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"until\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"kind\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"route\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"pathname\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"/deployments\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` } }`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`That is a verified call. Its verdict quotes the transition itself:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes dark-plus dark-plus`,style:{backgroundColor:`#0B0C0E`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"verified\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"yes\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"verdict\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"pass\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#569CD6`,\"--shiki-dark\":`#569CD6`},children:`true`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"evidence\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"from\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"http://localhost:4310/\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"to\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"http://localhost:4310/deployments\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"pathname\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"/deployments\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"search\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:` \"hash\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CE9178`,\"--shiki-dark\":`#CE9178`},children:`\"\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`reticle_navigate`}),` for a genuine document load. A deep link, a hard reload, or the first visit.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"reticle_navigate","description":"Move the connected tab to a URL or reload it, and understand why ok does not mean the page arrived.","icon":"compass","href":"/tools/navigate"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"confirmed: true when the page comes back in time","slug":"confirmed-true-when-the-page-comes-back-in-time","depth":2,"children":[]},{"title":"confirmed: false is the honest part","slug":"confirmed-false-is-the-honest-part","depth":2,"children":[]},{"title":"The pattern after navigating","slug":"the-pattern-after-navigating","depth":2,"children":[]},{"title":"Arguments","slug":"arguments","depth":2,"children":[]},{"title":"Client-side routing is different","slug":"client-side-routing-is-different","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"reticle","siteName":"Reticle","title":"Reticle Docs: verification for AI coding agents","navMaps":{"firstHrefInVersion":{"3.9.0":{"href":"/tools/navigate","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-25T17:22:48.760Z","gitLastModified":"2026-10-25T16:59:47.000Z","originalFileLocation":"tools/navigate.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Move the connected tab to a URL or reload it, and understand why ok does not mean the page arrived.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Reticle\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Reticle Docs: verification for AI coding agents\">\u003cmeta data-mint-head property=\"og:description\" content=\"Reticle verifies a running web app from the inside and returns a verdict with evidence, not a screenshot. Install it, instrument it, and read the full tool reference.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Reticle Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.reticle.sh/tools/navigate\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://docs.reticle.sh/images/og.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Reticle Docs: verification for AI coding agents\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Reticle verifies a running web app from the inside and returns a verdict with evidence, not a screenshot. Install it, instrument it, and read the full tool reference.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://docs.reticle.sh/images/og.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/reticle/KCHC-1Uhb39vqD4T/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Reticle\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ff9d86\">\u003cmeta data-mint-head name=\"og:image:alt\" content=\"Reticle: your agent says it works. Reticle checks.\">\u003cmeta data-mint-head name=\"twitter:creator\" content=\"@reticle_hq\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.reticle.sh/tools/navigate\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/tools/navigate.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.reticle.sh/#organization\",\"name\":\"Reticle\",\"url\":\"https://docs.reticle.sh\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://docs.reticle.sh/images/og.png\"},\"sameAs\":[\"https://github.com/reticlehq/reticle\",\"https://www.npmjs.com/org/reticlehq\"]},{\"@type\":\"WebSite\",\"@id\":\"https://docs.reticle.sh#website\",\"name\":\"Reticle\",\"url\":\"https://docs.reticle.sh\",\"publisher\":{\"@id\":\"https://docs.reticle.sh/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.reticle.sh/tools/navigate#webpage\",\"url\":\"https://docs.reticle.sh/tools/navigate\",\"name\":\"reticle_navigate\",\"description\":\"Move the connected tab to a URL or reload it, and understand why ok does not mean the page arrived.\",\"dateModified\":\"2026-10-25T16:59:47.000Z\",\"isPartOf\":{\"@id\":\"https://docs.reticle.sh#website\"},\"breadcrumb\":{\"@id\":\"https://docs.reticle.sh/tools/navigate#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.reticle.sh/tools/navigate#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Tools\",\"item\":\"https://docs.reticle.sh/tools/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"reticle_navigate\",\"item\":\"https://docs.reticle.sh/tools/navigate\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.reticle.sh/tools/navigate#article\",\"headline\":\"reticle_navigate\",\"name\":\"reticle_navigate\",\"description\":\"Move the connected tab to a URL or reload it, and understand why ok does not mean the page arrived.\",\"url\":\"https://docs.reticle.sh/tools/navigate\",\"mainEntityOfPage\":{\"@id\":\"https://docs.reticle.sh/tools/navigate#webpage\"},\"image\":\"https://docs.reticle.sh/images/og.png\",\"dateModified\":\"2026-10-25T16:59:47.000Z\",\"publisher\":{\"@id\":\"https://docs.reticle.sh/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.reticle.sh#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Reticle\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Reticle","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/reticlehq/reticle"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/BwAbzv9ZRz"},{"anchor":"npm","icon":"npm","href":"https://www.npmjs.com/org/reticlehq"},{"anchor":"Changelog","icon":"clock-rotate-left","href":"https://github.com/reticlehq/reticle/blob/main/CHANGELOG.md"}]},"versions":[{"version":"3.9.0","default":true,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/quickstart"}]},{"tab":"Reference","groups":[{"group":"Tools","pages":[{"title":"Reticle tools overview","sidebarTitle":"Tools overview","icon":"wrench","href":"/tools/overview"},{"title":"reticle_look","icon":"magnifying-glass","href":"/tools/look"},{"title":"reticle_verify","icon":"shield-check","href":"/tools/verify"},{"title":"reticle_snapshot","icon":"camera","href":"/tools/snapshot"},{"title":"reticle_query","icon":"magnifying-glass","href":"/tools/query"},{"title":"reticle_look { action: \"element\" }","description":"Everything about one element. Accessibility properties, geometry, computed styles, design tokens, React component stack, and the exact source file and line.","icon":"crosshairs","href":"/tools/inspect"},{"title":"reticle_navigate","icon":"compass","href":"/tools/navigate"},{"title":"reticle_act","description":"Perform an action without checking the result. Useful for setup steps, and dangerous as a final step, because ok means dispatched, not worked.","icon":"hand-pointer","href":"/tools/act"},{"title":"reticle_act_and_wait","icon":"circle-check","href":"/tools/act-and-wait"},{"title":"reticle_act_sequence","icon":"layer-group","href":"/tools/act-sequence"},{"title":"reticle_observe","icon":"timeline","href":"/tools/observe"},{"title":"reticle_network","icon":"satellite-dish","href":"/tools/network"},{"title":"reticle_console","icon":"terminal","href":"/tools/console"},{"title":"reticle_state","icon":"database","href":"/tools/state"},{"title":"reticle_wait_for","icon":"hourglass","href":"/tools/wait-for"},{"title":"reticle_assert","icon":"gavel","href":"/tools/assert"},{"title":"reticle_sessions","icon":"list-check","href":"/tools/sessions"},{"title":"reticle_tools and reticle_run","icon":"boxes-stacked","href":"/tools/tools-and-run"},{"title":"reticle_session and reticle_feedback","icon":"comments","href":"/tools/session-and-feedback"}]},{"group":"Beyond the loop","pages":[{"title":"Beyond the verify loop","icon":"sparkles","href":"/capabilities"}]},{"group":"CLI commands","pages":[{"title":"CLI reference","icon":"terminal","href":"/cli"},{"title":"reticle init","icon":"wand-magic-sparkles","href":"/cli/init"},{"title":"reticle setup mcp","icon":"plug","href":"/cli/setup"},{"title":"reticle doctor","icon":"stethoscope","href":"/cli/doctor"},{"title":"reticle status","icon":"heart-pulse","href":"/cli/status"},{"title":"reticle serve","icon":"play","href":"/cli/serve"},{"title":"reticle stop","icon":"circle-stop","href":"/cli/stop"},{"title":"reticle restart","icon":"rotate","href":"/cli/restart"},{"title":"reticle mcp","icon":"plug","href":"/cli/mcp"},{"title":"reticle open","icon":"window-maximize","href":"/cli/open"},{"title":"reticle drive","icon":"gauge-high","href":"/cli/drive"},{"title":"reticle verify","icon":"circle-check","href":"/cli/verify"},{"title":"reticle try","icon":"play","href":"/cli/try"},{"title":"reticle affected","icon":"code-branch","href":"/cli/affected"},{"title":"reticle gate","icon":"shield-halved","href":"/cli/gate"},{"title":"reticle report","icon":"clipboard-check","href":"/cli/report"},{"title":"reticle update","icon":"arrow-up","href":"/cli/update"},{"title":"reticle rollback","icon":"arrow-rotate-left","href":"/cli/rollback"},{"title":"reticle license","icon":"key","href":"/cli/license"},{"title":"reticle version","icon":"tag","href":"/cli/version"},{"title":"reticle telemetry","icon":"chart-line","href":"/cli/telemetry"},{"title":"reticle feedback","icon":"comment","href":"/cli/feedback"},{"title":"reticle help","icon":"circle-question","href":"/cli/help"},{"title":"reticle cloud commands","icon":"cloud","href":"/cli/cloud"},{"title":"Environment variables","icon":"sliders","href":"/environment"}]},{"group":"Packages","pages":[{"title":"Packages: what is in the box","sidebarTitle":"Packages","icon":"cubes","href":"/packages"},{"title":"open-verification","icon":"scale-balanced","href":"/packages/open-verification"},{"title":"@reticlehq/core","icon":"cube","href":"/packages/core"},{"title":"@reticlehq/engine","icon":"gavel","href":"/packages/engine"},{"title":"@reticlehq/browser","icon":"window","href":"/packages/browser"},{"title":"@reticlehq/server","icon":"server","href":"/packages/server"},{"title":"@reticlehq/react","icon":"react","href":"/packages/react"},{"title":"@reticlehq/vite-plugin","icon":"bolt","href":"/packages/vite-plugin"},{"title":"@reticlehq/babel-plugin","icon":"file-code","href":"/packages/babel-plugin"},{"title":"@reticlehq/next","icon":"n","href":"/packages/next"},{"title":"@reticlehq/test","icon":"vial","href":"/packages/test"},{"title":"@reticlehq/eslint-plugin","icon":"shield-check","href":"/packages/eslint-plugin"},{"title":"@reticlehq/electron","icon":"display","href":"/packages/electron"},{"title":"reticle-tauri","icon":"rust","href":"/packages/tauri"}]},{"group":"Grammar","pages":[{"title":"Predicate reference: the grammar of green","sidebarTitle":"Predicates","icon":"filter","href":"/predicates"},{"title":"Action reference: lights, camera, click","sidebarTitle":"Actions","icon":"hand-pointer","href":"/actions"},{"title":"Recipes: copy, paste, verify","sidebarTitle":"Recipes","icon":"book-open","href":"/recipes"}]},{"group":"Long form","pages":[{"title":"Agent cheat sheet","icon":"bolt","href":"/agent-cheatsheet"},{"title":"Reticle: what each tool actually does","icon":"table-list","href":"/reticle-manual"},{"title":"Complete usage guide","icon":"book","href":"/usage"},{"title":"Let Reticle drive","icon":"steering-wheel","href":"/autodrive"},{"title":"FAQ: frequently asserted questions","sidebarTitle":"FAQ","icon":"circle-question","href":"/faq"}]}]},{"tab":"Desktop","pages":[{"title":"Desktop","href":"/desktop"}]},{"tab":"Resources","pages":[{"title":"Resources","href":"/architecture"}]},{"tab":"Contributing","pages":[{"title":"Contributing","href":"/first-drive"}]}]}]},"basePath":"","title":"Reticle Docs: verification for AI coding agents","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}