Use after completing any substantive piece of work (code change, analysis, document, configuration, answer to a hard question) and BEFORE presenting it as done. Switches you from author to attacker - you try to refute your own work and only present it if it survives. Do not skip because the work "looks clean"; plausible-but-wrong is the exact failure this kills.
Use when starting work in a LARGE or UNFAMILIAR codebase, when a repo already contains an INDEX.md, or when repeatedly grepping for where something is defined. Generates and consults INDEX.md - a symbol locator (namespaces, types, enums, constructors, functions, methods with parameters, globals/statics, one-line descriptions, all anchored to file:line) built by scripts/index_codebase.py - so lookups become one grep instead of N searches. Once a repo has an index, regenerate it whenever symbols are added, renamed, moved, or deleted. Do not use on small projects a single Glob already covers, and do not treat it as a reason to index every repo you touch.
Use immediately before declaring any task complete, closing any request, or presenting work as finished. Forces a completion audit against the ORIGINAL request - every explicit requirement ticked off as done-and-verified, everything skipped named plainly. Do NOT confuse it with correctness review (that is adversarial-verify's job): this catches what you DIDN'T do, not what you did wrong.
Use at the start of any task and whenever choosing how many probes, searches, or tool calls to spend - answering a question, investigating code, researching, debugging. Matches depth to task size: trivial asks get trivial effort, deep tasks get a plan and sustained effort, independent lookups run in parallel. Do NOT use it to justify skipping verification the task actually needs - cheap is not the goal, calibrated is.
Use during any multi-step task when you feel the pull to stop and ask "should I continue?", "want me to also do X?", or to hand back partial work. Forces completion of what was asked - ambiguities get a stated assumption and forward motion, not a stall. Do NOT use it to bulldoze past genuine forks the user must own, destructive actions, or a discovered scope change - those are the three legitimate stops.
Fetch a webpage as clean, structured Markdown via the jina.ai reader (r.jina.ai) instead of raw HTML — use whenever you need to read web content and want to save tokens, or when a normal fetch is blocked (HTTP 403/401), returns messy/boilerplate HTML, or the page is JavaScript-rendered (SPA, docs sites, wikis like grokipedia/notion/medium). Triggers: "fetch this page", "read this URL", "summarize this article/webpage", "get the docs at <url>", or any WebFetch that returned 403/garbled HTML.
Use whenever you are about to assert or act on a fact about a system - what a function does, what a config is set to, what is deployed, what a table contains, what a dependency's version is. Forces verification against the LIVE system before the assertion. Docs, comments, READMEs, and your own memory are treated as stale by default.
Use when writing to or reading from any persistent memory an agent keeps across sessions - CLAUDE.md, memory files, notes, project docs meant for future sessions. Governs WHAT deserves persisting, HOW to write it so it survives time, and the recall rule: verify remembered facts against live state before acting on them. Use it also when a session starts by loading old memory.