The console log, filtered by level, and an empty result that tells you it is a real reading rather than a missing one.
reticle_console is not advertised. The default surface is the merged ten, so an agent does not see
this name. Call reticle_observe { action: "console" } instead. Everything below describes what that call does;
only the spelling changed. A call to the old name is answered with the new one, but an
allowedTools allowlist or an MCP permission rule naming it refuses before Reticle is asked.
reticle_observe { action: "console" } returns the app’s console log, filtered by level, and tells you whether an empty result is a real reading or a missing one. Reach for it as the fast triage read after something goes wrong, and assert { "kind": "console", "absent": true } when you want a clean console to be part of the pass.
{ "limit": 3 }
Real response from a page with a clean console:
{ "logs": [], "buffer": { "held": 535, "dropped": 10, "note": "event buffer evicted older events (age/size cap): a negative result here may be a false negative; the evidence may have expired. Grade sooner or widen the buffer." }, "observed": true, "note": "no console lines; the observation ran and found none, which is a result, not a missing reading", "cost": { "bytes": 338, "tokens": 85 }}
An empty array is ambiguous in almost every tool that returns one. Did nothing happen, or did the observation not run? Reticle answers both:
observed: true with that note. The observation ran and genuinely found nothing. You may treat a clean console as a fact.
buffer.dropped: 10, older events were evicted. If you are asking about something from a while ago, the honest answer is “not in what I still have”, not “it didn’t happen”.
Read both fields together. observed: true with a non-zero dropped count means recently clean, which is usually what you wanted but is not the same as always clean.
That fails if the click succeeds and logs an error, which is exactly the case a human reviewer tends to wave through.
level: "error" is the fast triage read. If it comes back empty with observed: true, stop
looking at the console and go look at reticle_observe { action: "network" } or
reticle_look { action: "state" } instead. That is a real capture from this fixture:
{"logs":[],"observed":true,"cost":{"bytes":337,"tokens":85}}, eighty-five tokens to rule out a
whole class of bug.
Last modified on October 12, 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/console","slug":"/tools/console","pageMetadata":{"title":"reticle_console","description":"The console log, filtered by level, and an empty result that tells you it is a real reading rather than a missing one.","icon":"terminal","href":"/tools/console"},"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: \"The console log, filtered by level, and an empty result that tells you it is a real reading rather than a missing one.\"\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`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`reticle_console is not advertised.`}),` The default surface is the merged ten, so an agent does not see\nthis name. Call `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`reticle_observe { action: \"console\" }`})}),` instead. Everything below describes what that call does;\nonly the spelling changed. A call to the old name is answered with the new one, but an\n`,_jsx(_components.code,{children:`allowedTools`}),` allowlist or an MCP permission rule naming it refuses before Reticle is asked.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`reticle_observe { action: \"console\" }`}),` returns the app’s console log, filtered by level, and tells you whether an empty result is a real reading or a missing one. Reach for it as the fast triage read after something goes wrong, and assert `,_jsx(_components.code,{children:`{ \"kind\": \"console\", \"absent\": true }`}),` when you want a clean console to be part of the pass.`]}),`\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:`\"limit\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Real response from a page with a clean console:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,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:`11`,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:` \"logs\"`}),_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:` \"buffer\"`}),_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:` \"held\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`535`}),_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:` \"dropped\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_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:`\"event buffer evicted older events (age/size cap): a negative result here may be a false negative; the evidence may have expired. Grade sooner or widen the buffer.\"`})]}),`\n`,_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:` \"observed\"`}),_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:`\"no console lines; the observation ran and found none, which is a result, not a missing reading\"`}),_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:` \"cost\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"bytes\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`338`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"tokens\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#B5CEA8`,\"--shiki-dark\":`#B5CEA8`},children:`85`}),_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`,_jsx(Heading,{level:`2`,id:`the-empty-result-is-the-interesting-one`,children:`The empty result is the interesting one`}),`\n`,_jsx(_components.p,{children:`An empty array is ambiguous in almost every tool that returns one. Did nothing happen, or did the observation not run? Reticle answers both:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`observed: true`})}),` with that `,_jsx(_components.code,{children:`note`}),`. The observation ran and genuinely found nothing. You may treat a clean console as a fact.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`buffer.dropped: 10`})}),`, older events were evicted. If you are asking about something from a while ago, the honest answer is “not in what I still have”, not “it didn’t happen”.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Read both fields together. `,_jsx(_components.code,{children:`observed: true`}),` with a non-zero `,_jsx(_components.code,{children:`dropped`}),` count means `,_jsx(_components.em,{children:`recently`}),` clean, which is usually what you wanted but is not the same as `,_jsx(_components.em,{children:`always`}),` clean.`]}),`\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:`level`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`log`}),` · `,_jsx(_components.code,{children:`warn`}),` · `,_jsx(_components.code,{children:`error`}),` · `,_jsx(_components.code,{children:`info`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`limit`})}),_jsx(_components.td,{children:`Most recent N (default 200). Older matches are dropped and counted`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`actionId`})}),_jsx(_components.td,{children:`Only lines attributed to one action`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`since`}),` / `,_jsx(_components.code,{children:`until`})]}),_jsx(_components.td,{children:`Cursors from a prior act`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`the-check-worth-making-by-default`,children:`The check worth making by default`}),`\n`,_jsx(_components.p,{children:`Plenty of features “work” while quietly throwing. Assert the clean console as part of the action rather than checking afterwards:`}),`\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:`\"e605\"`}),_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:`\"console\"`}),_jsx(_components.span,{style:{color:`#D4D4D4`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#9CDCFE`,\"--shiki-dark\":`#9CDCFE`},children:`\"absent\"`}),_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`]})})}),`\n`,_jsxs(_components.p,{children:[`That fails if the click succeeds `,_jsx(_components.em,{children:`and`}),` logs an error, which is exactly the case a human reviewer tends to wave through.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`level: \"error\"`}),` is the fast triage read. If it comes back empty with `,_jsx(_components.code,{children:`observed: true`}),`, stop\nlooking at the console and go look at `,_jsx(_components.a,{href:`/tools/network`,children:_jsx(_components.code,{children:`reticle_observe { action: \"network\" }`})}),` or\n`,_jsx(_components.a,{href:`/tools/state`,children:_jsx(_components.code,{children:`reticle_look { action: \"state\" }`})}),` instead. That is a real capture from this fixture:\n`,_jsx(_components.code,{children:`{\"logs\":[],\"observed\":true,\"cost\":{\"bytes\":337,\"tokens\":85}}`}),`, eighty-five tokens to rule out a\nwhole class of bug.`]})})]})}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_console","description":"The console log, filtered by level, and an empty result that tells you it is a real reading rather than a missing one.","icon":"terminal","href":"/tools/console"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The empty result is the interesting one","slug":"the-empty-result-is-the-interesting-one","depth":2,"children":[]},{"title":"Arguments","slug":"arguments","depth":2,"children":[]},{"title":"The check worth making by default","slug":"the-check-worth-making-by-default","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"reticle","siteName":"Reticle","title":"Reticle Docs: verification for AI coding agents","navMaps":{"firstHrefInVersion":{"3.9.0":{"href":"/tools/console","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-10-12T21:19:04.517Z","gitLastModified":"2026-10-12T21:08:04.000Z","originalFileLocation":"tools/console.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=\"The console log, filtered by level, and an empty result that tells you it is a real reading rather than a missing one.\">\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/console\">\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/console\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/tools/console.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/console#webpage\",\"url\":\"https://docs.reticle.sh/tools/console\",\"name\":\"reticle_console\",\"description\":\"The console log, filtered by level, and an empty result that tells you it is a real reading rather than a missing one.\",\"dateModified\":\"2026-10-12T21:08:04.000Z\",\"isPartOf\":{\"@id\":\"https://docs.reticle.sh#website\"},\"breadcrumb\":{\"@id\":\"https://docs.reticle.sh/tools/console#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.reticle.sh/tools/console#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Tools\",\"item\":\"https://docs.reticle.sh/tools/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"reticle_console\",\"item\":\"https://docs.reticle.sh/tools/console\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.reticle.sh/tools/console#article\",\"headline\":\"reticle_console\",\"name\":\"reticle_console\",\"description\":\"The console log, filtered by level, and an empty result that tells you it is a real reading rather than a missing one.\",\"url\":\"https://docs.reticle.sh/tools/console\",\"mainEntityOfPage\":{\"@id\":\"https://docs.reticle.sh/tools/console#webpage\"},\"image\":\"https://docs.reticle.sh/images/og.png\",\"dateModified\":\"2026-10-12T21:08:04.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\" }","icon":"crosshairs","href":"/tools/inspect"},{"title":"reticle_navigate","icon":"compass","href":"/tools/navigate"},{"title":"reticle_act","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","description":"A filtered log of every request the app made, with status, timing, bodies when capture is on, automatic credential redaction, and an honest note when evidence has expired.","icon":"satellite-dish","href":"/tools/network"},{"title":"reticle_console","icon":"terminal","href":"/tools/console"},{"title":"reticle_state","description":"Read live framework state directly from the running app. What it believes, not just what it rendered, without the app broadcasting anything.","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":[]}