[{"data":1,"prerenderedAt":1269},["ShallowReactive",2],{"navigation_docs":3,"-guide-agents":100,"-guide-agents-surround":1264},[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":1257,"extension":1258,"links":1259,"meta":1260,"navigation":311,"path":33,"seo":1262,"stem":34,"__hash__":1263},"docs\u002F1.guide\u002F7.agents.md",{"type":103,"value":104,"toc":1249},"minimark",[105,110,200,221,225,435,451,687,731,735,780,795,805,809,816,832,850,854,861,869,873,876,1245],[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.",[106,222,224],{"id":223},"ai-sdk","AI SDK",[226,227,232],"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"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,233,234,272,306,313,343,359,370,382,394,406,412,429],{"__ignoreMap":231},[235,236,239,243,247,251,254,258,262,266,269],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"sP0CR","import",[235,244,246],{"class":245},"sKlNE"," {",[235,248,250],{"class":249},"snHMy"," generateText",[235,252,253],{"class":245}," }",[235,255,257],{"class":256},"stCPd"," from",[235,259,261],{"class":260},"scVjq"," \"",[235,263,265],{"class":264},"sQ7BG","ai",[235,267,268],{"class":260},"\"",[235,270,271],{"class":245},";\n",[235,273,275,277,279,282,285,288,290,293,295,297,299,302,304],{"class":237,"line":274},2,[235,276,242],{"class":241},[235,278,246],{"class":245},[235,280,281],{"class":249}," readTool",[235,283,284],{"class":245},",",[235,286,287],{"class":249}," searchImageTool",[235,289,284],{"class":245},[235,291,292],{"class":249}," searchTool",[235,294,253],{"class":245},[235,296,257],{"class":256},[235,298,261],{"class":260},[235,300,301],{"class":264},"@agntn\u002Fweb\u002Fai",[235,303,268],{"class":260},[235,305,271],{"class":245},[235,307,309],{"class":237,"line":308},3,[235,310,312],{"emptyLinePlaceholder":311},true,"\n",[235,314,316,320,323,327,330,333,337,340],{"class":237,"line":315},4,[235,317,319],{"class":318},"s1TYA","const",[235,321,322],{"class":245}," { ",[235,324,326],{"class":325},"saoiD","text",[235,328,329],{"class":245}," } ",[235,331,332],{"class":318},"=",[235,334,336],{"class":335},"sZW6a"," await",[235,338,250],{"class":339},"sULi6",[235,341,342],{"class":245},"({\n",[235,344,346,349,352,356],{"class":237,"line":345},5,[235,347,348],{"class":249},"  model",[235,350,351],{"class":245},":",[235,353,355],{"class":354},"spVlQ"," yourModel",[235,357,358],{"class":245},",\n",[235,360,362,365,367],{"class":237,"line":361},6,[235,363,364],{"class":249},"  tools",[235,366,351],{"class":245},[235,368,369],{"class":245}," {\n",[235,371,373,376,378,380],{"class":237,"line":372},7,[235,374,375],{"class":249},"    web_search",[235,377,351],{"class":245},[235,379,292],{"class":354},[235,381,358],{"class":245},[235,383,385,388,390,392],{"class":237,"line":384},8,[235,386,387],{"class":249},"    web_search_image",[235,389,351],{"class":245},[235,391,287],{"class":354},[235,393,358],{"class":245},[235,395,397,400,402,404],{"class":237,"line":396},9,[235,398,399],{"class":249},"    web_read",[235,401,351],{"class":245},[235,403,281],{"class":354},[235,405,358],{"class":245},[235,407,409],{"class":237,"line":408},10,[235,410,411],{"class":245},"  },\n",[235,413,415,418,420,422,425,427],{"class":237,"line":414},11,[235,416,417],{"class":249},"  prompt",[235,419,351],{"class":245},[235,421,261],{"class":260},[235,423,424],{"class":264},"Find the latest TypeScript release notes",[235,426,268],{"class":260},[235,428,358],{"class":245},[235,430,432],{"class":237,"line":431},12,[235,433,434],{"class":245},"});\n",[201,436,437,210,439,442,443,446,447,450],{},[138,438,265],{},[138,440,441],{},"zod"," are optional peers. The main entry never imports them, only the ",[138,444,445],{},"\u002Fai"," subpath does. ",[138,448,449],{},"providersTool"," is the fourth export.",[226,452,454],{"className":228,"code":453,"language":230,"meta":231,"style":231},"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,455,456,470,494,510,525,536,548,559,570,584,596,607,618,630,642,654,666,681],{"__ignoreMap":231},[235,457,458,461,465,468],{"class":237,"line":238},[235,459,460],{"class":318},"type",[235,462,464],{"class":463},"s3-Zl"," SearchToolInput",[235,466,467],{"class":318}," =",[235,469,369],{"class":245},[235,471,472,476,478,482,485,487,490],{"class":237,"line":274},[235,473,475],{"class":474},"stSEH","  query",[235,477,351],{"class":318},[235,479,481],{"class":480},"s8yaW"," string",[235,483,484],{"class":318}," |",[235,486,481],{"class":480},[235,488,489],{"class":245},"[];",[235,491,493],{"class":492},"sjhu3"," \u002F\u002F up to 10 in a batch\n",[235,495,496,499,502,504,507],{"class":237,"line":308},[235,497,498],{"class":474},"  provider",[235,500,501],{"class":318},"?:",[235,503,481],{"class":480},[235,505,506],{"class":245},";",[235,508,509],{"class":492}," \u002F\u002F a built-in, a custom name, or \"all\"\n",[235,511,512,515,517,520,522],{"class":237,"line":315},[235,513,514],{"class":474},"  maxResults",[235,516,501],{"class":318},[235,518,519],{"class":480}," number",[235,521,506],{"class":245},[235,523,524],{"class":492}," \u002F\u002F 1 to 20, default 10\n",[235,526,527,530,532,534],{"class":237,"line":345},[235,528,529],{"class":474},"  continuation",[235,531,501],{"class":318},[235,533,481],{"class":480},[235,535,271],{"class":245},[235,537,538,541,543,546],{"class":237,"line":361},[235,539,540],{"class":474},"  highlights",[235,542,501],{"class":318},[235,544,545],{"class":480}," boolean",[235,547,271],{"class":245},[235,549,550,553,555,557],{"class":237,"line":372},[235,551,552],{"class":474},"  summary",[235,554,501],{"class":318},[235,556,545],{"class":480},[235,558,271],{"class":245},[235,560,561,564,566,568],{"class":237,"line":384},[235,562,563],{"class":474},"  fullText",[235,565,501],{"class":318},[235,567,545],{"class":480},[235,569,271],{"class":245},[235,571,572,575,577,579,581],{"class":237,"line":396},[235,573,574],{"class":474},"  favicon",[235,576,501],{"class":318},[235,578,545],{"class":480},[235,580,506],{"class":245},[235,582,583],{"class":492}," \u002F\u002F favicon URLs on results, off by default\n",[235,585,586,589,591,593],{"class":237,"line":408},[235,587,588],{"class":474},"  includeDomains",[235,590,501],{"class":318},[235,592,481],{"class":480},[235,594,595],{"class":245},"[];\n",[235,597,598,601,603,605],{"class":237,"line":414},[235,599,600],{"class":474},"  excludeDomains",[235,602,501],{"class":318},[235,604,481],{"class":480},[235,606,595],{"class":245},[235,608,609,612,614,616],{"class":237,"line":431},[235,610,611],{"class":474},"  sources",[235,613,501],{"class":318},[235,615,481],{"class":480},[235,617,595],{"class":245},[235,619,621,624,626,628],{"class":237,"line":620},13,[235,622,623],{"class":474},"  categories",[235,625,501],{"class":318},[235,627,481],{"class":480},[235,629,595],{"class":245},[235,631,633,636,638,640],{"class":237,"line":632},14,[235,634,635],{"class":474},"  category",[235,637,501],{"class":318},[235,639,481],{"class":480},[235,641,271],{"class":245},[235,643,645,648,650,652],{"class":237,"line":644},15,[235,646,647],{"class":474},"  startPublishedDate",[235,649,501],{"class":318},[235,651,481],{"class":480},[235,653,271],{"class":245},[235,655,657,660,662,664],{"class":237,"line":656},16,[235,658,659],{"class":474},"  endPublishedDate",[235,661,501],{"class":318},[235,663,481],{"class":480},[235,665,271],{"class":245},[235,667,669,672,674,676,678],{"class":237,"line":668},17,[235,670,671],{"class":474},"  timeoutSeconds",[235,673,501],{"class":318},[235,675,519],{"class":480},[235,677,506],{"class":245},[235,679,680],{"class":492}," \u002F\u002F whole seconds, at most 3600\n",[235,682,684],{"class":237,"line":683},18,[235,685,686],{"class":245},"};\n",[201,688,689,690,693,694,210,697,700,701,704,705,210,708,711,712,715,716,719,720,210,723,726,727,730],{},"A scalar search returns ",[138,691,692],{},"{ provider, results, ignoredFilters, undeclaredFilters, pagination, metadata? }",", automatic ones add ",[138,695,696],{},"attempts",[138,698,699],{},"failures",", and ",[138,702,703],{},"provider: \"all\""," returns the fan-out envelope with ",[138,706,707],{},"providers",[138,709,710],{},"evidence"," on each result. ",[138,713,714],{},"readTool"," takes ",[138,717,718],{},"url"," 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,721,722],{},"links",[138,724,725],{},"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,728,729],{},"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,732,734],{"id":733},"mcp","MCP",[226,736,740],{"className":737,"code":738,"language":739,"meta":231,"style":231},"language-bash shiki shiki-themes github-light github-light poimandres","web mcp\nclaude mcp add web --scope user -- web mcp\n","bash",[138,741,742,752],{"__ignoreMap":231},[235,743,744,748],{"class":237,"line":238},[235,745,747],{"class":746},"sseY5","web",[235,749,751],{"class":750},"sX7Zv"," mcp\n",[235,753,754,757,760,763,766,770,773,776,778],{"class":237,"line":274},[235,755,756],{"class":746},"claude",[235,758,759],{"class":750}," mcp",[235,761,762],{"class":750}," add",[235,764,765],{"class":750}," web",[235,767,769],{"class":768},"sqT1Y"," --scope",[235,771,772],{"class":750}," user",[235,774,775],{"class":768}," --",[235,777,765],{"class":750},[235,779,751],{"class":750},[201,781,782,783,786,787,790,791,794],{},"The server uses the SDK's ",[138,784,785],{},"Server"," class with TypeBox schemas. Every tool advertises an output schema and returns its result under ",[138,788,789],{},"structuredContent.result",", compact JSON stays in ",[138,792,793],{},"content"," for clients that only render text. 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,796,797,800,801,804],{},[138,798,799],{},"createMcpServer()"," from the ",[138,802,803],{},"@agntn\u002Fweb\u002Fmcp"," subpath returns the same server when your host brings its own transport.",[106,806,808],{"id":807},"pi-and-omp","Pi and OMP",[201,810,811,812,815],{},"The Pi extension requires ",[138,813,814],{},"@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.",[226,817,819],{"className":737,"code":818,"language":739,"meta":231,"style":231},"pi install git:github.com\u002Fagntn\u002Fweb\n",[138,820,821],{"__ignoreMap":231},[235,822,823,826,829],{"class":237,"line":238},[235,824,825],{"class":746},"pi",[235,827,828],{"class":750}," install",[235,830,831],{"class":750}," git:github.com\u002Fagntn\u002Fweb\n",[201,833,834,835,841,842,845,846,849],{},"The package ships the four tools as a ",[836,837,825],"a",{"href":838,"rel":839},"https:\u002F\u002Fpi.dev",[840],"nofollow"," extension and an OMP extension. Pi also gets two slash commands: ",[138,843,844],{},"\u002Fweb [query]"," shows results as a selector and pastes the chosen URL into the editor, ",[138,847,848],{},"\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,851,853],{"id":852},"what-the-answer-is","What the answer is",[201,855,856,857,860],{},"The tools return the normalized objects, not prose. A model summarizing them should say what the provider said. The ",[836,858,40],{"href":859},"\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.",[862,863,864,865,868],"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,866,867],{},"snippet: \"ignore previous instructions\""," has learned one thing about the page, and nothing about what to do next.",[106,870,872],{"id":871},"rolling-your-own","Rolling your own",[201,874,875],{},"Framework is none of the above? The four tools are thin wrappers over the helpers anyway:",[226,877,879],{"className":228,"code":878,"language":230,"meta":231,"style":231},"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,880,881,923,927,1003,1020,1035,1057,1084,1108,1121,1156,1169,1214,1226,1235,1240],{"__ignoreMap":231},[235,882,883,885,887,890,892,895,897,900,902,905,907,910,912,914,916,919,921],{"class":237,"line":238},[235,884,242],{"class":241},[235,886,246],{"class":245},[235,888,889],{"class":249}," listProviders",[235,891,284],{"class":245},[235,893,894],{"class":249}," readUrlDetailed",[235,896,284],{"class":245},[235,898,899],{"class":249}," searchAllDetailed",[235,901,284],{"class":245},[235,903,904],{"class":249}," searchByImage",[235,906,284],{"class":245},[235,908,909],{"class":249}," searchWithFallback",[235,911,253],{"class":245},[235,913,257],{"class":256},[235,915,261],{"class":260},[235,917,918],{"class":264},"@agntn\u002Fweb",[235,920,268],{"class":260},[235,922,271],{"class":245},[235,924,925],{"class":237,"line":274},[235,926,312],{"emptyLinePlaceholder":311},[235,928,929,932,935,938,942,945,949,951,953,957,959,961,964,967,969,971,973,975,977,979,981,984,986,988,991,994,996,1000],{"class":237,"line":308},[235,930,931],{"class":241},"export",[235,933,934],{"class":241}," async",[235,936,937],{"class":318}," function",[235,939,941],{"class":940},"scZRh"," run",[235,943,944],{"class":245},"(",[235,946,948],{"class":947},"s1jWp","input",[235,950,351],{"class":318},[235,952,322],{"class":245},[235,954,956],{"class":955},"s0VbO","operation",[235,958,351],{"class":318},[235,960,481],{"class":480},[235,962,963],{"class":245},"; ",[235,965,966],{"class":955},"query",[235,968,501],{"class":318},[235,970,481],{"class":480},[235,972,963],{"class":245},[235,974,718],{"class":955},[235,976,501],{"class":318},[235,978,481],{"class":480},[235,980,963],{"class":245},[235,982,983],{"class":955},"provider",[235,985,501],{"class":318},[235,987,481],{"class":480},[235,989,990],{"class":245}," }, ",[235,992,993],{"class":947},"signal",[235,995,501],{"class":318},[235,997,999],{"class":998},"sCrqT"," AbortSignal",[235,1001,1002],{"class":245},") {\n",[235,1004,1005,1008,1011,1013,1016,1018],{"class":237,"line":315},[235,1006,1007],{"class":256},"  switch",[235,1009,1010],{"class":245}," (",[235,1012,948],{"class":354},[235,1014,1015],{"class":245},".",[235,1017,956],{"class":354},[235,1019,1002],{"class":245},[235,1021,1022,1025,1027,1030,1032],{"class":237,"line":345},[235,1023,1024],{"class":256},"    case",[235,1026,261],{"class":260},[235,1028,1029],{"class":264},"search",[235,1031,268],{"class":260},[235,1033,1034],{"class":245},":\n",[235,1036,1037,1040,1043,1045,1047,1050,1052,1054],{"class":237,"line":361},[235,1038,1039],{"class":335},"      return",[235,1041,1042],{"class":354}," input",[235,1044,1015],{"class":245},[235,1046,983],{"class":354},[235,1048,1049],{"class":318}," ===",[235,1051,261],{"class":260},[235,1053,146],{"class":264},[235,1055,1056],{"class":260},"\"\n",[235,1058,1059,1062,1064,1066,1068,1070,1072,1075,1078,1081],{"class":237,"line":372},[235,1060,1061],{"class":318},"        ?",[235,1063,899],{"class":339},[235,1065,944],{"class":245},[235,1067,948],{"class":354},[235,1069,1015],{"class":245},[235,1071,966],{"class":354},[235,1073,1074],{"class":318},"!",[235,1076,1077],{"class":245},", {",[235,1079,1080],{"class":354}," signal",[235,1082,1083],{"class":245}," })\n",[235,1085,1086,1089,1091,1093,1095,1097,1099,1101,1103,1105],{"class":237,"line":384},[235,1087,1088],{"class":318},"        :",[235,1090,909],{"class":339},[235,1092,944],{"class":245},[235,1094,948],{"class":354},[235,1096,1015],{"class":245},[235,1098,966],{"class":354},[235,1100,1074],{"class":318},[235,1102,1077],{"class":245},[235,1104,1080],{"class":354},[235,1106,1107],{"class":245}," });\n",[235,1109,1110,1112,1114,1117,1119],{"class":237,"line":396},[235,1111,1024],{"class":256},[235,1113,261],{"class":260},[235,1115,1116],{"class":264},"search_image",[235,1118,268],{"class":260},[235,1120,1034],{"class":245},[235,1122,1123,1125,1127,1129,1131,1133,1135,1137,1139,1142,1144,1146,1148,1150,1152,1154],{"class":237,"line":408},[235,1124,1039],{"class":335},[235,1126,904],{"class":339},[235,1128,944],{"class":245},[235,1130,948],{"class":354},[235,1132,1015],{"class":245},[235,1134,718],{"class":354},[235,1136,1074],{"class":318},[235,1138,1077],{"class":245},[235,1140,1141],{"class":249}," provider",[235,1143,351],{"class":245},[235,1145,1042],{"class":354},[235,1147,1015],{"class":245},[235,1149,983],{"class":354},[235,1151,284],{"class":245},[235,1153,1080],{"class":354},[235,1155,1107],{"class":245},[235,1157,1158,1160,1162,1165,1167],{"class":237,"line":414},[235,1159,1024],{"class":256},[235,1161,261],{"class":260},[235,1163,1164],{"class":264},"read",[235,1166,268],{"class":260},[235,1168,1034],{"class":245},[235,1170,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1202,1204,1208,1210,1212],{"class":237,"line":431},[235,1172,1039],{"class":335},[235,1174,894],{"class":339},[235,1176,944],{"class":245},[235,1178,948],{"class":354},[235,1180,1015],{"class":245},[235,1182,718],{"class":354},[235,1184,1074],{"class":318},[235,1186,1077],{"class":245},[235,1188,1141],{"class":249},[235,1190,351],{"class":245},[235,1192,1042],{"class":354},[235,1194,1015],{"class":245},[235,1196,983],{"class":354},[235,1198,284],{"class":245},[235,1200,1201],{"class":249}," maxChars",[235,1203,351],{"class":245},[235,1205,1207],{"class":1206},"siHFe"," 20_000",[235,1209,284],{"class":245},[235,1211,1080],{"class":354},[235,1213,1107],{"class":245},[235,1215,1216,1218,1220,1222,1224],{"class":237,"line":620},[235,1217,1024],{"class":256},[235,1219,261],{"class":260},[235,1221,707],{"class":264},[235,1223,268],{"class":260},[235,1225,1034],{"class":245},[235,1227,1228,1230,1232],{"class":237,"line":632},[235,1229,1039],{"class":335},[235,1231,889],{"class":339},[235,1233,1234],{"class":245},"();\n",[235,1236,1237],{"class":237,"line":644},[235,1238,1239],{"class":245},"  }\n",[235,1241,1242],{"class":237,"line":656},[235,1243,1244],{"class":245},"}\n",[1246,1247,1248],"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":231,"searchDepth":274,"depth":274,"links":1250},[1251,1252,1253,1254,1255,1256],{"id":108,"depth":274,"text":109},{"id":223,"depth":274,"text":224},{"id":733,"depth":274,"text":734},{"id":807,"depth":274,"text":808},{"id":852,"depth":274,"text":853},{"id":871,"depth":274,"text":872},"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":1261},"i-lucide-bot",{"title":32,"description":1257},"yJutNnytu7AfUGay7NdKqjB1rinwMI-ah37zt_vUl9U",[1265,1267],{"title":28,"path":29,"stem":30,"description":1266,"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":1268,"children":-1},"Extend the base class, implement the capabilities you have, register it, and every helper, tool and CLI picks it up.",1790041406825]