03 / SCENARIO SUB-AGENTS

From a question to a sourced answer.

Follow local-browser search, fresh source readers, bounded result collections and an exact cited answer in V8.

Ask a current question

V8 teaches Lilith to use web_research for current or externally verifiable facts and explicit searches. Ask When does GTA 6 come out? Default coverage is five readable pages. Add Use 10 sources to supply a different source_count. Tool selection is model-dependent; an explicit Run web_research scenario request is also supported.

One question, several fresh conversations

  1. web_search queries configured public engines and merges distinct result URLs.
  2. A bounded collection invokes web_read_source for each candidate; web_fetch retrieves actual page text.
  3. Fresh tool-less readers assess relevance, dates, authority and uncertainty.
  4. web_synthesize compares the collected findings and answers the question.
  5. The host checks citation URLs against readable pages, adds actual coverage and copies the final answer unchanged.

Read web_research XML

Read web_search XML

Read web_fetch XML

Read web_read_source XML

Read web_synthesize XML

Local browser, public internet

Selenium controls an isolated local Chrome profile. The local model assesses evidence. No paid search API or API key is required, but search terms and visited URLs still go to external websites. An existing Chrome installation is required; Selenium Manager may obtain a matching driver. Personal browser profiles, saved logins and downloads are not used.

Three engines, an editable list

Bing, DuckDuckGo and Google are defaults. All configured engines are attempted, then links are deduplicated and interleaved. Set LILITH_WEB_CONFIG to a trusted JSON file with 1-8 unique engine names, queryUrl templates containing {query}, and CSS resultSelector values selecting links. The source example also supports chromeBinary and driverDirectory overrides.

JSON / EDITABLE ENGINE CONFIGURATION
{
  "engines": [
    {
      "name": "Bing",
      "queryUrl": "https://www.bing.com/search?q={query}&count=30",
      "resultSelector": "li.b_algo h2 a"
    },
    {
      "name": "DuckDuckGo",
      "queryUrl": "https://duckduckgo.com/?q={query}",
      "resultSelector": "a[data-testid='result-title-a'],a.result__a"
    },
    {
      "name": "Google",
      "queryUrl": "https://www.google.com/search?q={query}&num=30",
      "resultSelector": "#search a:has(h3)"
    }
  ],
  "headless": true,
  "chromeBinary": null,
  "driverDirectory": null
}

Read failures are results too

Bot challenges, unavailable engines and unreadable pages are reported, never solved or presented as successful reads. Up to 30 candidate/page attempts aim for 1-20 readable distinct pages. Failed and duplicate final URLs prompt replacements within those bounds. Zero evidence produces a host-written limitation; partial coverage is disclosed. Engine availability changes, so a past successful recording is not a promise that every future request will work.

Citations have a precise boundary

The host checks that Markdown citation URLs belong to actually readable pages. This verifies identity, not every interpretation or claim. Readers must ignore navigation, advertising and unrelated platform lists. Prefer direct official announcements and disclose disagreements rather than treating repeated reporting as independent confirmation.

Keep the evidence, keep memory deliberate

Search outcomes, populated XML, source text, child histories and final results remain in the run evidence. Research does not automatically write persistent user memory. Child output follows the subagent summary/detail toggle; only the final main reply is spoken.

Write result bindings and collection steps

Explore the source and demonstration