[{"data":1,"prerenderedAt":1305},["ShallowReactive",2],{"navigation_docs":3,"-guide-agents":100,"-guide-agents-surround":1300},[4,44],{"title":5,"path":6,"stem":7,"children":8,"icon":43},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27,31,35,39],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Searching","\u002Fguide\u002Fsearch","1.guide\u002F2.search",{"title":16,"path":17,"stem":18},"Fan-out","\u002Fguide\u002Ffanout","1.guide\u002F3.fanout",{"title":20,"path":21,"stem":22},"Reading","\u002Fguide\u002Fread","1.guide\u002F4.read",{"title":24,"path":25,"stem":26},"Reverse Image Search","\u002Fguide\u002Fimage","1.guide\u002F5.image",{"title":28,"path":29,"stem":30},"CLI","\u002Fguide\u002Fcli","1.guide\u002F6.cli",{"title":32,"path":33,"stem":34},"Agents","\u002Fguide\u002Fagents","1.guide\u002F7.agents",{"title":36,"path":37,"stem":38},"Custom Providers","\u002Fguide\u002Fcustom","1.guide\u002F8.custom",{"title":40,"path":41,"stem":42},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F9.explorer","i-lucide-book-open",{"title":45,"path":46,"stem":47,"children":48,"icon":99},"Providers","\u002Fproviders","2.providers\u002F0.index",[49,51,55,59,63,67,71,75,79,83,87,91,95],{"title":50,"path":46,"stem":47},"Overview",{"title":52,"path":53,"stem":54},"Brave","\u002Fproviders\u002Fbrave","2.providers\u002F01.brave",{"title":56,"path":57,"stem":58},"Context.dev","\u002Fproviders\u002Fcontext","2.providers\u002F02.context",{"title":60,"path":61,"stem":62},"Exa","\u002Fproviders\u002Fexa","2.providers\u002F03.exa",{"title":64,"path":65,"stem":66},"Firecrawl","\u002Fproviders\u002Ffirecrawl","2.providers\u002F04.firecrawl",{"title":68,"path":69,"stem":70},"Jina","\u002Fproviders\u002Fjina","2.providers\u002F05.jina",{"title":72,"path":73,"stem":74},"Mojeek","\u002Fproviders\u002Fmojeek","2.providers\u002F06.mojeek",{"title":76,"path":77,"stem":78},"SearXNG","\u002Fproviders\u002Fsearxng","2.providers\u002F07.searxng",{"title":80,"path":81,"stem":82},"SerpAPI","\u002Fproviders\u002Fserpapi","2.providers\u002F08.serpapi",{"title":84,"path":85,"stem":86},"SerpBase","\u002Fproviders\u002Fserpbase","2.providers\u002F09.serpbase",{"title":88,"path":89,"stem":90},"Tavily","\u002Fproviders\u002Ftavily","2.providers\u002F10.tavily",{"title":92,"path":93,"stem":94},"TinyFish","\u002Fproviders\u002Ftinyfish","2.providers\u002F11.tinyfish",{"title":96,"path":97,"stem":98},"OpenAI Codex","\u002Fproviders\u002Fopenai-codex","2.providers\u002F12.openai-codex","i-lucide-library",{"id":101,"title":32,"body":102,"description":1293,"extension":1294,"links":1295,"meta":1296,"navigation":343,"path":33,"seo":1298,"stem":34,"__hash__":1299},"docs\u002F1.guide\u002F7.agents.md",{"type":103,"value":104,"toc":1285},"minimark",[105,110,200,221,239,253,257,467,483,719,762,766,811,832,842,846,853,869,887,891,898,906,910,913,1281],[106,107,109],"h2",{"id":108},"four-tools-every-host","Four tools, every host",[111,112,113,129],"table",{},[114,115,116],"thead",{},[117,118,119,123,126],"tr",{},[120,121,122],"th",{},"Tool",[120,124,125],{},"Does",[120,127,128],{},"Returns",[130,131,132,151,166,181],"tbody",{},[117,133,134,141,148],{},[135,136,137],"td",{},[138,139,140],"code",{},"web_search",[135,142,143,144,147],{},"one query or a batch, one provider, automatic selection, or ",[138,145,146],{},"all"," for fan-out",[135,149,150],{},"results with the provider diagnostics",[117,152,153,158,161],{},[135,154,155],{},[138,156,157],{},"web_search_image",[135,159,160],{},"matching pages and images for one public image URL",[135,162,163],{},[138,164,165],{},"ImageSearchResult[]",[117,167,168,173,176],{},[135,169,170],{},[138,171,172],{},"web_read",[135,174,175],{},"one URL or a batch into normalized content, with reader provenance",[135,177,178],{},[138,179,180],{},"{ result, requestedProvider, provider, attempts, failures }",[117,182,183,188,191],{},[135,184,185],{},[138,186,187],{},"web_providers",[135,189,190],{},"the running build, configuration, reachability and the complete capability matrix",[135,192,193,196,197],{},[138,194,195],{},"listProviders()"," plus ",[138,198,199],{},"packageCapabilities",[201,202,203,204,207,208,210,211,213,214,217,218,220],"p",{},"Same four on every surface. The descriptions name the built-in providers, but execution checks the name against the live registry, so a custom provider registered before the session works in a tool call too. The host's abort signal cancels the provider request, no zombie fetches after the model gives up. ",[138,205,206],{},"timeoutSeconds"," on ",[138,209,140],{}," and ",[138,212,172],{}," is the budget the model sets itself: a fan-out or batch returns what finished by then and lists the providers it cut off under ",[138,215,216],{},"errors",", so one slow provider no longer holds an ",[138,219,146],{}," search past the host's own limit.",[201,222,223,224,227,228,231,232,227,235,238],{},"A blank optional string counts as an omitted one. Models fill every property of a flat schema, so ",[138,225,226],{},"continuation: \"\""," or ",[138,229,230],{},"startPublishedDate: \"\""," arrives where a person would leave the field out, and an error there costs a round trip for nothing. Real values are still checked, a malformed token or date fails as before, and an empty ",[138,233,234],{},"query",[138,236,237],{},"url"," is still empty.",[201,240,241,242,244,245,248,249,252],{},"Some hosts send a batch as one string, so ",[138,243,234],{}," arrives as ",[138,246,247],{},"'[\"first\",\"second\"]'",". A string that parses as a JSON array of strings runs as that batch on every surface, otherwise ten queries would turn into one long search. Anything else, like ",[138,250,251],{},"[draft] notes",", stays a plain query, and a list longer than 10 fails the same way an array would.",[106,254,256],{"id":255},"ai-sdk","AI SDK",[258,259,264],"pre",{"className":260,"code":261,"language":262,"meta":263,"style":263},"language-ts shiki shiki-themes github-light github-light poimandres","import { generateText } from \"ai\";\nimport { readTool, searchImageTool, searchTool } from \"@agntn\u002Fweb\u002Fai\";\n\nconst { text } = await generateText({\n  model: yourModel,\n  tools: {\n    web_search: searchTool,\n    web_search_image: searchImageTool,\n    web_read: readTool,\n  },\n  prompt: \"Find the latest TypeScript release notes\",\n});\n","ts","",[138,265,266,304,338,345,375,391,402,414,426,438,444,461],{"__ignoreMap":263},[267,268,271,275,279,283,286,290,294,298,301],"span",{"class":269,"line":270},"line",1,[267,272,274],{"class":273},"sP0CR","import",[267,276,278],{"class":277},"sKlNE"," {",[267,280,282],{"class":281},"snHMy"," generateText",[267,284,285],{"class":277}," }",[267,287,289],{"class":288},"stCPd"," from",[267,291,293],{"class":292},"scVjq"," \"",[267,295,297],{"class":296},"sQ7BG","ai",[267,299,300],{"class":292},"\"",[267,302,303],{"class":277},";\n",[267,305,307,309,311,314,317,320,322,325,327,329,331,334,336],{"class":269,"line":306},2,[267,308,274],{"class":273},[267,310,278],{"class":277},[267,312,313],{"class":281}," readTool",[267,315,316],{"class":277},",",[267,318,319],{"class":281}," searchImageTool",[267,321,316],{"class":277},[267,323,324],{"class":281}," searchTool",[267,326,285],{"class":277},[267,328,289],{"class":288},[267,330,293],{"class":292},[267,332,333],{"class":296},"@agntn\u002Fweb\u002Fai",[267,335,300],{"class":292},[267,337,303],{"class":277},[267,339,341],{"class":269,"line":340},3,[267,342,344],{"emptyLinePlaceholder":343},true,"\n",[267,346,348,352,355,359,362,365,369,372],{"class":269,"line":347},4,[267,349,351],{"class":350},"s1TYA","const",[267,353,354],{"class":277}," { ",[267,356,358],{"class":357},"saoiD","text",[267,360,361],{"class":277}," } ",[267,363,364],{"class":350},"=",[267,366,368],{"class":367},"sZW6a"," await",[267,370,282],{"class":371},"sULi6",[267,373,374],{"class":277},"({\n",[267,376,378,381,384,388],{"class":269,"line":377},5,[267,379,380],{"class":281},"  model",[267,382,383],{"class":277},":",[267,385,387],{"class":386},"spVlQ"," yourModel",[267,389,390],{"class":277},",\n",[267,392,394,397,399],{"class":269,"line":393},6,[267,395,396],{"class":281},"  tools",[267,398,383],{"class":277},[267,400,401],{"class":277}," {\n",[267,403,405,408,410,412],{"class":269,"line":404},7,[267,406,407],{"class":281},"    web_search",[267,409,383],{"class":277},[267,411,324],{"class":386},[267,413,390],{"class":277},[267,415,417,420,422,424],{"class":269,"line":416},8,[267,418,419],{"class":281},"    web_search_image",[267,421,383],{"class":277},[267,423,319],{"class":386},[267,425,390],{"class":277},[267,427,429,432,434,436],{"class":269,"line":428},9,[267,430,431],{"class":281},"    web_read",[267,433,383],{"class":277},[267,435,313],{"class":386},[267,437,390],{"class":277},[267,439,441],{"class":269,"line":440},10,[267,442,443],{"class":277},"  },\n",[267,445,447,450,452,454,457,459],{"class":269,"line":446},11,[267,448,449],{"class":281},"  prompt",[267,451,383],{"class":277},[267,453,293],{"class":292},[267,455,456],{"class":296},"Find the latest TypeScript release notes",[267,458,300],{"class":292},[267,460,390],{"class":277},[267,462,464],{"class":269,"line":463},12,[267,465,466],{"class":277},"});\n",[201,468,469,210,471,474,475,478,479,482],{},[138,470,297],{},[138,472,473],{},"zod"," are optional peers. The main entry never imports them, only the ",[138,476,477],{},"\u002Fai"," subpath does. ",[138,480,481],{},"providersTool"," is the fourth export.",[258,484,486],{"className":260,"code":485,"language":262,"meta":263,"style":263},"type SearchToolInput = {\n  query: string | string[]; \u002F\u002F up to 10 in a batch\n  provider?: string; \u002F\u002F a built-in, a custom name, or \"all\"\n  maxResults?: number; \u002F\u002F 1 to 20, default 10\n  continuation?: string;\n  highlights?: boolean;\n  summary?: boolean;\n  fullText?: boolean;\n  favicon?: boolean; \u002F\u002F favicon URLs on results, off by default\n  includeDomains?: string[];\n  excludeDomains?: string[];\n  sources?: string[];\n  categories?: string[];\n  category?: string;\n  startPublishedDate?: string;\n  endPublishedDate?: string;\n  timeoutSeconds?: number; \u002F\u002F whole seconds, at most 3600\n};\n",[138,487,488,502,526,542,557,568,580,591,602,616,628,639,650,662,674,686,698,713],{"__ignoreMap":263},[267,489,490,493,497,500],{"class":269,"line":270},[267,491,492],{"class":350},"type",[267,494,496],{"class":495},"s3-Zl"," SearchToolInput",[267,498,499],{"class":350}," =",[267,501,401],{"class":277},[267,503,504,508,510,514,517,519,522],{"class":269,"line":306},[267,505,507],{"class":506},"stSEH","  query",[267,509,383],{"class":350},[267,511,513],{"class":512},"s8yaW"," string",[267,515,516],{"class":350}," |",[267,518,513],{"class":512},[267,520,521],{"class":277},"[];",[267,523,525],{"class":524},"sjhu3"," \u002F\u002F up to 10 in a batch\n",[267,527,528,531,534,536,539],{"class":269,"line":340},[267,529,530],{"class":506},"  provider",[267,532,533],{"class":350},"?:",[267,535,513],{"class":512},[267,537,538],{"class":277},";",[267,540,541],{"class":524}," \u002F\u002F a built-in, a custom name, or \"all\"\n",[267,543,544,547,549,552,554],{"class":269,"line":347},[267,545,546],{"class":506},"  maxResults",[267,548,533],{"class":350},[267,550,551],{"class":512}," number",[267,553,538],{"class":277},[267,555,556],{"class":524}," \u002F\u002F 1 to 20, default 10\n",[267,558,559,562,564,566],{"class":269,"line":377},[267,560,561],{"class":506},"  continuation",[267,563,533],{"class":350},[267,565,513],{"class":512},[267,567,303],{"class":277},[267,569,570,573,575,578],{"class":269,"line":393},[267,571,572],{"class":506},"  highlights",[267,574,533],{"class":350},[267,576,577],{"class":512}," boolean",[267,579,303],{"class":277},[267,581,582,585,587,589],{"class":269,"line":404},[267,583,584],{"class":506},"  summary",[267,586,533],{"class":350},[267,588,577],{"class":512},[267,590,303],{"class":277},[267,592,593,596,598,600],{"class":269,"line":416},[267,594,595],{"class":506},"  fullText",[267,597,533],{"class":350},[267,599,577],{"class":512},[267,601,303],{"class":277},[267,603,604,607,609,611,613],{"class":269,"line":428},[267,605,606],{"class":506},"  favicon",[267,608,533],{"class":350},[267,610,577],{"class":512},[267,612,538],{"class":277},[267,614,615],{"class":524}," \u002F\u002F favicon URLs on results, off by default\n",[267,617,618,621,623,625],{"class":269,"line":440},[267,619,620],{"class":506},"  includeDomains",[267,622,533],{"class":350},[267,624,513],{"class":512},[267,626,627],{"class":277},"[];\n",[267,629,630,633,635,637],{"class":269,"line":446},[267,631,632],{"class":506},"  excludeDomains",[267,634,533],{"class":350},[267,636,513],{"class":512},[267,638,627],{"class":277},[267,640,641,644,646,648],{"class":269,"line":463},[267,642,643],{"class":506},"  sources",[267,645,533],{"class":350},[267,647,513],{"class":512},[267,649,627],{"class":277},[267,651,653,656,658,660],{"class":269,"line":652},13,[267,654,655],{"class":506},"  categories",[267,657,533],{"class":350},[267,659,513],{"class":512},[267,661,627],{"class":277},[267,663,665,668,670,672],{"class":269,"line":664},14,[267,666,667],{"class":506},"  category",[267,669,533],{"class":350},[267,671,513],{"class":512},[267,673,303],{"class":277},[267,675,677,680,682,684],{"class":269,"line":676},15,[267,678,679],{"class":506},"  startPublishedDate",[267,681,533],{"class":350},[267,683,513],{"class":512},[267,685,303],{"class":277},[267,687,689,692,694,696],{"class":269,"line":688},16,[267,690,691],{"class":506},"  endPublishedDate",[267,693,533],{"class":350},[267,695,513],{"class":512},[267,697,303],{"class":277},[267,699,701,704,706,708,710],{"class":269,"line":700},17,[267,702,703],{"class":506},"  timeoutSeconds",[267,705,533],{"class":350},[267,707,551],{"class":512},[267,709,538],{"class":277},[267,711,712],{"class":524}," \u002F\u002F whole seconds, at most 3600\n",[267,714,716],{"class":269,"line":715},18,[267,717,718],{"class":277},"};\n",[201,720,721,722,725,726,210,729,732,733,736,737,210,740,743,744,747,748,750,751,210,754,757,758,761],{},"A scalar search returns ",[138,723,724],{},"{ provider, results, ignoredFilters, undeclaredFilters, pagination, metadata? }",", automatic ones add ",[138,727,728],{},"attempts",[138,730,731],{},"failures",", and ",[138,734,735],{},"provider: \"all\""," returns the fan-out envelope with ",[138,738,739],{},"providers",[138,741,742],{},"evidence"," on each result. ",[138,745,746],{},"readTool"," takes ",[138,749,237],{}," or an array of URLs plus the read options, defaults to 20 000 characters and accepts at most 200 000. Without that default a model would happily ask for a whole site and stuff it into its context. The page's ",[138,752,753],{},"links",[138,755,756],{},"images"," are off unless the model asks for them, a long page carries thousands and they'd outweigh the content several times over. The ",[138,759,760],{},"favicon"," URLs on search results are off the same way: they were a third of a ten result Brave answer and a model has nothing to do with an icon address.",[106,763,765],{"id":764},"mcp","MCP",[258,767,771],{"className":768,"code":769,"language":770,"meta":263,"style":263},"language-bash shiki shiki-themes github-light github-light poimandres","web mcp\nclaude mcp add web --scope user -- web mcp\n","bash",[138,772,773,783],{"__ignoreMap":263},[267,774,775,779],{"class":269,"line":270},[267,776,778],{"class":777},"sseY5","web",[267,780,782],{"class":781},"sX7Zv"," mcp\n",[267,784,785,788,791,794,797,801,804,807,809],{"class":269,"line":306},[267,786,787],{"class":777},"claude",[267,789,790],{"class":781}," mcp",[267,792,793],{"class":781}," add",[267,795,796],{"class":781}," web",[267,798,800],{"class":799},"sqT1Y"," --scope",[267,802,803],{"class":781}," user",[267,805,806],{"class":799}," --",[267,808,796],{"class":781},[267,810,782],{"class":781},[201,812,813,814,817,818,821,822,825,826,828,829,831],{},"The server uses the SDK's ",[138,815,816],{},"Server"," class with TypeBox schemas. Every tool advertises an output schema and returns its result under ",[138,819,820],{},"structuredContent.result",", compact JSON stays in ",[138,823,824],{},"content"," for clients that only render text. With ",[138,827,735],{}," each result already is its first provider's record, so here and in the Pi and OMP tools ",[138,830,742],{}," holds only what the other providers said, and a page just one engine found has none. Sending that record twice cost about a quarter of every fan-out answer. Tool symbols and titles match the native extensions, and nothing decorative gets written into the JSON-RPC stream. The client owns its TUI, not the server.",[201,833,834,837,838,841],{},[138,835,836],{},"createMcpServer()"," from the ",[138,839,840],{},"@agntn\u002Fweb\u002Fmcp"," subpath returns the same server when your host brings its own transport.",[106,843,845],{"id":844},"pi-and-omp","Pi and OMP",[201,847,848,849,852],{},"The Pi extension requires ",[138,850,851],{},"@earendil-works\u002Fpi-coding-agent"," 0.86.1 or later. OMP keeps its 18.x API, tested with 18.2.6. Updating the package alone won't update either host.",[258,854,856],{"className":768,"code":855,"language":770,"meta":263,"style":263},"pi install git:github.com\u002Fagntn\u002Fweb\n",[138,857,858],{"__ignoreMap":263},[267,859,860,863,866],{"class":269,"line":270},[267,861,862],{"class":777},"pi",[267,864,865],{"class":781}," install",[267,867,868],{"class":781}," git:github.com\u002Fagntn\u002Fweb\n",[201,870,871,872,878,879,882,883,886],{},"The package ships the four tools as a ",[873,874,862],"a",{"href":875,"rel":876},"https:\u002F\u002Fpi.dev",[877],"nofollow"," extension and an OMP extension. Pi also gets two slash commands: ",[138,880,881],{},"\u002Fweb [query]"," shows results as a selector and pastes the chosen URL into the editor, ",[138,884,885],{},"\u002Fweb-providers"," shows configuration, reachability and capabilities. Both extensions read the same env vars as the library. Their TUI rows show progress, provider choice, result counts and fallback attempts, with bounded previews. A whole page rendered into the terminal is useless, so it never happens.",[106,888,890],{"id":889},"what-the-answer-is","What the answer is",[201,892,893,894,897],{},"The tools return the normalized objects, not prose. A model summarizing them should say what the provider said. The ",[873,895,40],{"href":896},"\u002Fexplorer"," shows the same objects for any query, which is a quick way to check a summary against the source when a model gets creative.",[899,900,901,902,905],"caution",{},"Titles, snippets, highlights and page content are published by whoever owns the page. They are data to report, not instructions to follow. An agent that reads ",[138,903,904],{},"snippet: \"ignore previous instructions\""," has learned one thing about the page, and nothing about what to do next.",[106,907,909],{"id":908},"rolling-your-own","Rolling your own",[201,911,912],{},"Framework is none of the above? The four tools are thin wrappers over the helpers anyway:",[258,914,916],{"className":260,"code":915,"language":262,"meta":263,"style":263},"import { listProviders, readUrlDetailed, searchAllDetailed, searchByImage, searchWithFallback } from \"@agntn\u002Fweb\";\n\nexport async function run(input: { operation: string; query?: string; url?: string; provider?: string }, signal?: AbortSignal) {\n  switch (input.operation) {\n    case \"search\":\n      return input.provider === \"all\"\n        ? searchAllDetailed(input.query!, { signal })\n        : searchWithFallback(input.query!, { signal });\n    case \"search_image\":\n      return searchByImage(input.url!, { provider: input.provider, signal });\n    case \"read\":\n      return readUrlDetailed(input.url!, { provider: input.provider, maxChars: 20_000, signal });\n    case \"providers\":\n      return listProviders();\n  }\n}\n",[138,917,918,960,964,1039,1056,1071,1093,1120,1144,1157,1192,1205,1250,1262,1271,1276],{"__ignoreMap":263},[267,919,920,922,924,927,929,932,934,937,939,942,944,947,949,951,953,956,958],{"class":269,"line":270},[267,921,274],{"class":273},[267,923,278],{"class":277},[267,925,926],{"class":281}," listProviders",[267,928,316],{"class":277},[267,930,931],{"class":281}," readUrlDetailed",[267,933,316],{"class":277},[267,935,936],{"class":281}," searchAllDetailed",[267,938,316],{"class":277},[267,940,941],{"class":281}," searchByImage",[267,943,316],{"class":277},[267,945,946],{"class":281}," searchWithFallback",[267,948,285],{"class":277},[267,950,289],{"class":288},[267,952,293],{"class":292},[267,954,955],{"class":296},"@agntn\u002Fweb",[267,957,300],{"class":292},[267,959,303],{"class":277},[267,961,962],{"class":269,"line":306},[267,963,344],{"emptyLinePlaceholder":343},[267,965,966,969,972,975,979,982,986,988,990,994,996,998,1001,1003,1005,1007,1009,1011,1013,1015,1017,1020,1022,1024,1027,1030,1032,1036],{"class":269,"line":340},[267,967,968],{"class":273},"export",[267,970,971],{"class":273}," async",[267,973,974],{"class":350}," function",[267,976,978],{"class":977},"scZRh"," run",[267,980,981],{"class":277},"(",[267,983,985],{"class":984},"s1jWp","input",[267,987,383],{"class":350},[267,989,354],{"class":277},[267,991,993],{"class":992},"s0VbO","operation",[267,995,383],{"class":350},[267,997,513],{"class":512},[267,999,1000],{"class":277},"; ",[267,1002,234],{"class":992},[267,1004,533],{"class":350},[267,1006,513],{"class":512},[267,1008,1000],{"class":277},[267,1010,237],{"class":992},[267,1012,533],{"class":350},[267,1014,513],{"class":512},[267,1016,1000],{"class":277},[267,1018,1019],{"class":992},"provider",[267,1021,533],{"class":350},[267,1023,513],{"class":512},[267,1025,1026],{"class":277}," }, ",[267,1028,1029],{"class":984},"signal",[267,1031,533],{"class":350},[267,1033,1035],{"class":1034},"sCrqT"," AbortSignal",[267,1037,1038],{"class":277},") {\n",[267,1040,1041,1044,1047,1049,1052,1054],{"class":269,"line":347},[267,1042,1043],{"class":288},"  switch",[267,1045,1046],{"class":277}," (",[267,1048,985],{"class":386},[267,1050,1051],{"class":277},".",[267,1053,993],{"class":386},[267,1055,1038],{"class":277},[267,1057,1058,1061,1063,1066,1068],{"class":269,"line":377},[267,1059,1060],{"class":288},"    case",[267,1062,293],{"class":292},[267,1064,1065],{"class":296},"search",[267,1067,300],{"class":292},[267,1069,1070],{"class":277},":\n",[267,1072,1073,1076,1079,1081,1083,1086,1088,1090],{"class":269,"line":393},[267,1074,1075],{"class":367},"      return",[267,1077,1078],{"class":386}," input",[267,1080,1051],{"class":277},[267,1082,1019],{"class":386},[267,1084,1085],{"class":350}," ===",[267,1087,293],{"class":292},[267,1089,146],{"class":296},[267,1091,1092],{"class":292},"\"\n",[267,1094,1095,1098,1100,1102,1104,1106,1108,1111,1114,1117],{"class":269,"line":404},[267,1096,1097],{"class":350},"        ?",[267,1099,936],{"class":371},[267,1101,981],{"class":277},[267,1103,985],{"class":386},[267,1105,1051],{"class":277},[267,1107,234],{"class":386},[267,1109,1110],{"class":350},"!",[267,1112,1113],{"class":277},", {",[267,1115,1116],{"class":386}," signal",[267,1118,1119],{"class":277}," })\n",[267,1121,1122,1125,1127,1129,1131,1133,1135,1137,1139,1141],{"class":269,"line":416},[267,1123,1124],{"class":350},"        :",[267,1126,946],{"class":371},[267,1128,981],{"class":277},[267,1130,985],{"class":386},[267,1132,1051],{"class":277},[267,1134,234],{"class":386},[267,1136,1110],{"class":350},[267,1138,1113],{"class":277},[267,1140,1116],{"class":386},[267,1142,1143],{"class":277}," });\n",[267,1145,1146,1148,1150,1153,1155],{"class":269,"line":428},[267,1147,1060],{"class":288},[267,1149,293],{"class":292},[267,1151,1152],{"class":296},"search_image",[267,1154,300],{"class":292},[267,1156,1070],{"class":277},[267,1158,1159,1161,1163,1165,1167,1169,1171,1173,1175,1178,1180,1182,1184,1186,1188,1190],{"class":269,"line":440},[267,1160,1075],{"class":367},[267,1162,941],{"class":371},[267,1164,981],{"class":277},[267,1166,985],{"class":386},[267,1168,1051],{"class":277},[267,1170,237],{"class":386},[267,1172,1110],{"class":350},[267,1174,1113],{"class":277},[267,1176,1177],{"class":281}," provider",[267,1179,383],{"class":277},[267,1181,1078],{"class":386},[267,1183,1051],{"class":277},[267,1185,1019],{"class":386},[267,1187,316],{"class":277},[267,1189,1116],{"class":386},[267,1191,1143],{"class":277},[267,1193,1194,1196,1198,1201,1203],{"class":269,"line":446},[267,1195,1060],{"class":288},[267,1197,293],{"class":292},[267,1199,1200],{"class":296},"read",[267,1202,300],{"class":292},[267,1204,1070],{"class":277},[267,1206,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235,1238,1240,1244,1246,1248],{"class":269,"line":463},[267,1208,1075],{"class":367},[267,1210,931],{"class":371},[267,1212,981],{"class":277},[267,1214,985],{"class":386},[267,1216,1051],{"class":277},[267,1218,237],{"class":386},[267,1220,1110],{"class":350},[267,1222,1113],{"class":277},[267,1224,1177],{"class":281},[267,1226,383],{"class":277},[267,1228,1078],{"class":386},[267,1230,1051],{"class":277},[267,1232,1019],{"class":386},[267,1234,316],{"class":277},[267,1236,1237],{"class":281}," maxChars",[267,1239,383],{"class":277},[267,1241,1243],{"class":1242},"siHFe"," 20_000",[267,1245,316],{"class":277},[267,1247,1116],{"class":386},[267,1249,1143],{"class":277},[267,1251,1252,1254,1256,1258,1260],{"class":269,"line":652},[267,1253,1060],{"class":288},[267,1255,293],{"class":292},[267,1257,739],{"class":296},[267,1259,300],{"class":292},[267,1261,1070],{"class":277},[267,1263,1264,1266,1268],{"class":269,"line":664},[267,1265,1075],{"class":367},[267,1267,926],{"class":371},[267,1269,1270],{"class":277},"();\n",[267,1272,1273],{"class":269,"line":676},[267,1274,1275],{"class":277},"  }\n",[267,1277,1278],{"class":269,"line":688},[267,1279,1280],{"class":277},"}\n",[1282,1283,1284],"style",{},"html pre.shiki code .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s3-Zl, html code.shiki .s3-Zl{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCD}html pre.shiki code .stSEH, html code.shiki .stSEH{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#ADD7FF}html pre.shiki code .s8yaW, html code.shiki .s8yaW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCDC0}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}html pre.shiki code .sseY5, html code.shiki .sseY5{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#91B4D5}html pre.shiki code .sX7Zv, html code.shiki .sX7Zv{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#ADD7FF}html pre.shiki code .sqT1Y, html code.shiki .sqT1Y{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#ADD7FF}html pre.shiki code .scZRh, html code.shiki .scZRh{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#ADD7FF}html pre.shiki code .s1jWp, html code.shiki .s1jWp{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#E4F0FB}html pre.shiki code .s0VbO, html code.shiki .s0VbO{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#A6ACCD}html pre.shiki code .sCrqT, html code.shiki .sCrqT{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCDC0}html pre.shiki code .siHFe, html code.shiki .siHFe{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5DE4C7}",{"title":263,"searchDepth":306,"depth":306,"links":1286},[1287,1288,1289,1290,1291,1292],{"id":108,"depth":306,"text":109},{"id":255,"depth":306,"text":256},{"id":764,"depth":306,"text":765},{"id":844,"depth":306,"text":845},{"id":889,"depth":306,"text":890},{"id":908,"depth":306,"text":909},"The same four tools for the Vercel AI SDK, the MCP server, Pi and OMP, and what an agent should and should not do with the answer.","md",null,{"icon":1297},"i-lucide-bot",{"title":32,"description":1293},"wTuCFuffI96Hc_EcxapffRBD0TpS40nsOaKpPzK-E-0",[1301,1303],{"title":28,"path":29,"stem":30,"description":1302,"children":-1},"The web command, its five subcommands, the flags, and the JSON envelopes that match the library.",{"title":36,"path":37,"stem":38,"description":1304,"children":-1},"Extend the base class, implement the capabilities you have, register it, and every helper, tool and CLI picks it up.",1790163162696]