data is the web result: data.data holds the source’s native result; resources identify follow-up reads; assets identify retrievable files; pagination and notices describe scope. Do not assume two providers, or even two operations from the same provider, put their records at the same path inside data.data.
Every search or read is saved on the calling machine, and the envelope’s saved.path names the file. Name the file yourself with --output:
search.json then holds the complete envelope, including the result’s schema_version, resources, assets and paging, and saved.path reports it. When the envelope is too large for stdout, stdout omits data but the file keeps it. Use a different filename if the file already exists; --force explicitly replaces it.
In a September 2026 search test, the saved result contained schema_version: 1 and a resource named web:0 targeting a Python documentation URL. web:0 was an ID inside that saved search result, not a global page ID or a filename. web read --from ... --resource ... made a new network read of the selected target; it did not reveal page content already hidden in the search file. Inspect the actual resource and its targets before following it. An empty target list offers no next action. Only web read and web download take --from.
If web read --from search.json --resource web:0 says Expected a saved web search or read result, inspect the named local file. The error alone cannot distinguish an absent file, malformed JSON and a different JSON shape. Do not guess its contents or overwrite it while diagnosing. Search again, follow the fresh saved.path, and check that it contains the desired resource ID.
Continue a collection only when page.next_cursor is present. Keep the same source, operation, identity and filters when passing --cursor NEXT_CURSOR (or --cursor @search.json to take it from a saved result); the cursor is a continuation, not an item ID. A null has_more or missing cursor does not prove the provider’s entire collection was exhausted. Search results are discovery; read the original and retain its source URL before relying on its claims.