The model gets one tool, SearchProducts, and decides when to use it. The model call runs in a Solid Queue background job and the reply streams to the browser with Turbo Streams. Verified with 14 RSpec specs and end to end against Shopify's live Global Catalog. Two real bugs fixed along the way: replies not reaching the browser (fixed with Solid Cable) and the assistant forgetting the conversation (fixed by replaying saved messages).