[{"data":1,"prerenderedAt":950},["ShallowReactive",2],{"navigation_docs":3,"-providers-openai-codex":100,"-providers-openai-codex-surround":947},[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":96,"body":102,"description":940,"extension":941,"links":942,"meta":943,"navigation":377,"path":97,"seo":945,"stem":98,"__hash__":946},"docs\u002F2.providers\u002F12.openai-codex.md",{"type":103,"value":104,"toc":935},"minimark",[105,109,118,123,126,169,172,175,269,276,308,331,334,545,548,647,666,675,679,695,713,849,860,864,917,931],[106,107],"provider-facts",{"provider":108},"openai-codex",[110,111,112,113,117],"p",{},"This is the search available through a Codex login, not the separately billed OpenAI API. The adapter calls the ChatGPT backend with the hosted ",[114,115,116],"code",{},"web_search"," tool. A model answer without a completed search is an error, not a search result.",[119,120,122],"h2",{"id":121},"credentials","Credentials",[110,124,125],{},"Log in with Pi, OMP, Codex or OpenCode, then search. No manual token export:",[127,128,133],"pre",{"className":129,"code":130,"language":131,"meta":132,"style":132},"language-bash shiki shiki-themes github-light github-light poimandres","web search \"Node.js release notes\" --provider openai-codex --json\n","bash","",[114,134,135],{"__ignoreMap":132},[136,137,140,144,148,152,156,159,163,166],"span",{"class":138,"line":139},"line",1,[136,141,143],{"class":142},"sseY5","web",[136,145,147],{"class":146},"sX7Zv"," search",[136,149,151],{"class":150},"scVjq"," \"",[136,153,155],{"class":154},"sQ7BG","Node.js release notes",[136,157,158],{"class":150},"\"",[136,160,162],{"class":161},"sqT1Y"," --provider",[136,164,165],{"class":146}," openai-codex",[136,167,168],{"class":161}," --json\n",[110,170,171],{},"Pi and OMP tools reuse the invoking host's auth storage, including its refresh and broker support. Those credentials are scoped to one operation, so concurrent hosts do not share accounts.",[110,173,174],{},"Outside a host, automatic discovery reads saved logins in this order:",[176,177,178,194],"table",{},[179,180,181],"thead",{},[182,183,184,188,191],"tr",{},[185,186,187],"th",{},"Client",[185,189,190],{},"Default store",[185,192,193],{},"Overrides",[195,196,197,213,228,254],"tbody",{},[182,198,199,203,208],{},[200,201,202],"td",{},"Codex",[200,204,205],{},[114,206,207],{},"~\u002F.codex\u002Fauth.json",[200,209,210],{},[114,211,212],{},"CODEX_HOME",[182,214,215,218,223],{},[200,216,217],{},"Pi",[200,219,220],{},[114,221,222],{},"~\u002F.pi\u002Fagent\u002Fauth.json",[200,224,225],{},[114,226,227],{},"PI_CODING_AGENT_DIR",[182,229,230,233,242],{},[200,231,232],{},"OMP",[200,234,235,238,239],{},[114,236,237],{},"~\u002F.omp\u002Fagent\u002Fagent.db",", then legacy ",[114,240,241],{},"auth.json",[200,243,244,246,247,250,251],{},[114,245,227],{},", ",[114,248,249],{},"OMP_PROFILE"," or legacy ",[114,252,253],{},"PI_PROFILE",[182,255,256,259,264],{},[200,257,258],{},"OpenCode",[200,260,261],{},[114,262,263],{},"~\u002F.local\u002Fshare\u002Fopencode\u002Fauth.json",[200,265,266],{},[114,267,268],{},"XDG_DATA_HOME",[110,270,271,272,275],{},"Only OAuth access tokens are used. API keys, disabled OMP accounts and expired tokens are skipped. Discovery never writes login files, creates a database or rotates saved refresh tokens. Standalone callers need a usable saved access token; if it expired, open the owning client and let it refresh. Codex logins held only in an OS keyring are not read. OMP SQLite requires Node's optional ",[114,273,274],{},"node:sqlite"," builtin; the native OMP host resolver does not.",[110,277,278,279,282,283,286,287,290,291,246,294,246,297,246,300,303,304,307],{},"Choose a store with ",[114,280,281],{},"codex.authSource"," or ",[114,284,285],{},"OPENAI_CODEX_AUTH_SOURCE",": ",[114,288,289],{},"auto"," (default), ",[114,292,293],{},"codex",[114,295,296],{},"pi",[114,298,299],{},"omp",[114,301,302],{},"opencode",", or ",[114,305,306],{},"none"," to disable local and host discovery. A named source bypasses other stores and the invoking host.",[110,309,310,311,314,315,318,319,322,323,326,327,330],{},"Explicit ",[114,312,313],{},"codex.credentials"," wins over environment overrides, which win over automatic discovery. ",[114,316,317],{},"OPENAI_CODEX_ACCESS_TOKEN"," can still supply a bearer; ",[114,320,321],{},"OPENAI_CODEX_ACCOUNT_ID"," is optional when its JWT contains ",[114,324,325],{},"chatgpt_account_id",". A partial environment override does not silently switch to a different account. ",[114,328,329],{},"OPENAI_API_KEY"," does not configure this provider.",[110,332,333],{},"In application code, explicit credentials remain an optional override:",[127,335,339],{"className":336,"code":337,"language":338,"meta":132,"style":132},"language-ts shiki shiki-themes github-light github-light poimandres","import { createSearchProvider } from \"@agntn\u002Fweb\";\n\nconst search = createSearchProvider(\"openai-codex\", {\n  codex: {\n    credentials: {\n      accessToken: \"your-oauth-access-token\",\n      accountId: \"your-chatgpt-account-id\",\n    },\n    model: \"gpt-5.5\",\n  },\n});\nconst results = await search.search(\"Node.js release notes\", { maxResults: 5 });\n","ts",[114,340,341,372,379,407,419,429,447,464,470,487,493,499],{"__ignoreMap":132},[136,342,343,347,351,355,358,362,364,367,369],{"class":138,"line":139},[136,344,346],{"class":345},"sP0CR","import",[136,348,350],{"class":349},"sKlNE"," {",[136,352,354],{"class":353},"snHMy"," createSearchProvider",[136,356,357],{"class":349}," }",[136,359,361],{"class":360},"stCPd"," from",[136,363,151],{"class":150},[136,365,366],{"class":154},"@agntn\u002Fweb",[136,368,158],{"class":150},[136,370,371],{"class":349},";\n",[136,373,375],{"class":138,"line":374},2,[136,376,378],{"emptyLinePlaceholder":377},true,"\n",[136,380,382,386,389,392,395,398,400,402,404],{"class":138,"line":381},3,[136,383,385],{"class":384},"s1TYA","const",[136,387,147],{"class":388},"saoiD",[136,390,391],{"class":384}," =",[136,393,354],{"class":394},"sULi6",[136,396,397],{"class":349},"(",[136,399,158],{"class":150},[136,401,108],{"class":154},[136,403,158],{"class":150},[136,405,406],{"class":349},", {\n",[136,408,410,413,416],{"class":138,"line":409},4,[136,411,412],{"class":353},"  codex",[136,414,415],{"class":349},":",[136,417,418],{"class":349}," {\n",[136,420,422,425,427],{"class":138,"line":421},5,[136,423,424],{"class":353},"    credentials",[136,426,415],{"class":349},[136,428,418],{"class":349},[136,430,432,435,437,439,442,444],{"class":138,"line":431},6,[136,433,434],{"class":353},"      accessToken",[136,436,415],{"class":349},[136,438,151],{"class":150},[136,440,441],{"class":154},"your-oauth-access-token",[136,443,158],{"class":150},[136,445,446],{"class":349},",\n",[136,448,450,453,455,457,460,462],{"class":138,"line":449},7,[136,451,452],{"class":353},"      accountId",[136,454,415],{"class":349},[136,456,151],{"class":150},[136,458,459],{"class":154},"your-chatgpt-account-id",[136,461,158],{"class":150},[136,463,446],{"class":349},[136,465,467],{"class":138,"line":466},8,[136,468,469],{"class":349},"    },\n",[136,471,473,476,478,480,483,485],{"class":138,"line":472},9,[136,474,475],{"class":353},"    model",[136,477,415],{"class":349},[136,479,151],{"class":150},[136,481,482],{"class":154},"gpt-5.5",[136,484,158],{"class":150},[136,486,446],{"class":349},[136,488,490],{"class":138,"line":489},10,[136,491,492],{"class":349},"  },\n",[136,494,496],{"class":138,"line":495},11,[136,497,498],{"class":349},"});\n",[136,500,502,504,507,509,513,516,519,522,524,526,528,530,533,536,538,542],{"class":138,"line":501},12,[136,503,385],{"class":384},[136,505,506],{"class":388}," results",[136,508,391],{"class":384},[136,510,512],{"class":511},"sZW6a"," await",[136,514,147],{"class":515},"spVlQ",[136,517,518],{"class":349},".",[136,520,521],{"class":394},"search",[136,523,397],{"class":349},[136,525,158],{"class":150},[136,527,155],{"class":154},[136,529,158],{"class":150},[136,531,532],{"class":349},", {",[136,534,535],{"class":353}," maxResults",[136,537,415],{"class":349},[136,539,541],{"class":540},"siHFe"," 5",[136,543,544],{"class":349}," });\n",[110,546,547],{},"For refresh, pass a callback instead of the fixed pair. Your login service owns token storage and concurrent refresh coordination:",[127,549,551],{"className":336,"code":550,"language":338,"meta":132,"style":132},"import { createSearchProvider, type CodexCredentialProvider } from \"@agntn\u002Fweb\";\n\nexport function createCodexSearch(credentials: CodexCredentialProvider) {\n  return createSearchProvider(\"openai-codex\", { codex: { credentials } });\n}\n",[114,552,553,582,586,611,642],{"__ignoreMap":132},[136,554,555,557,559,561,564,567,570,572,574,576,578,580],{"class":138,"line":139},[136,556,346],{"class":345},[136,558,350],{"class":349},[136,560,354],{"class":353},[136,562,563],{"class":349},",",[136,565,566],{"class":360}," type",[136,568,569],{"class":353}," CodexCredentialProvider",[136,571,357],{"class":349},[136,573,361],{"class":360},[136,575,151],{"class":150},[136,577,366],{"class":154},[136,579,158],{"class":150},[136,581,371],{"class":349},[136,583,584],{"class":138,"line":374},[136,585,378],{"emptyLinePlaceholder":377},[136,587,588,591,594,598,600,603,605,608],{"class":138,"line":381},[136,589,590],{"class":345},"export",[136,592,593],{"class":384}," function",[136,595,597],{"class":596},"scZRh"," createCodexSearch",[136,599,397],{"class":349},[136,601,121],{"class":602},"s1jWp",[136,604,415],{"class":384},[136,606,569],{"class":607},"sCrqT",[136,609,610],{"class":349},") {\n",[136,612,613,616,618,620,622,624,626,628,631,633,635,638,640],{"class":138,"line":409},[136,614,615],{"class":511},"  return",[136,617,354],{"class":394},[136,619,397],{"class":349},[136,621,158],{"class":150},[136,623,108],{"class":154},[136,625,158],{"class":150},[136,627,532],{"class":349},[136,629,630],{"class":353}," codex",[136,632,415],{"class":349},[136,634,350],{"class":349},[136,636,637],{"class":515}," credentials",[136,639,357],{"class":349},[136,641,544],{"class":349},[136,643,644],{"class":138,"line":421},[136,645,646],{"class":349},"}\n",[110,648,649,650,653,654,657,658,661,662,665],{},"The callback receives ",[114,651,652],{},"{ refresh, signal }"," and returns ",[114,655,656],{},"{ accessToken, accountId? }",", directly or through a promise. The account ID is derived from the access token when omitted. It runs before each search with ",[114,659,660],{},"refresh: false",". After an authentication rejection it runs once more with ",[114,663,664],{},"refresh: true",", then the adapter retries once using the new pair. Check expiry even on the first call. The library never handles a refresh token itself.",[110,667,668,669,282,671,674],{},"Explicit credentials and model take precedence over the environment. Instance configuration is local to that instance, it does not enroll a callback in the global ",[114,670,289],{},[114,672,673],{},"all"," flows.",[119,676,678],{"id":677},"endpoint-and-results","Endpoint and results",[110,680,681,684,685,246,688,691,692,518],{},[114,682,683],{},"POST https:\u002F\u002Fchatgpt.com\u002Fbackend-api\u002Fcodex\u002Fresponses",", with Bearer auth, ",[114,686,687],{},"chatgpt-account-id",[114,689,690],{},"store: false",", streaming enabled and ",[114,693,694],{},"tool_choice: { type: \"web_search\" }",[110,696,697,698,701,702,246,705,708,709,712],{},"Results come only from structured search sources and ",[114,699,700],{},"url_citation"," annotations. They have ",[114,703,704],{},"url",[114,706,707],{},"title"," and an empty ",[114,710,711],{},"snippet",". Generated prose is not a page excerpt. URLs that appear only in prose never become results.",[127,714,716],{"className":336,"code":715,"language":338,"meta":132,"style":132},"import { searchProviderDetailed } from \"@agntn\u002Fweb\";\n\nconst response = await searchProviderDetailed(\"openai-codex\", \"Node.js release notes\", {\n  maxResults: 5,\n  summary: true,\n});\nconsole.log(response.results);\nconsole.log(response.metadata?.answer);\n",[114,717,718,739,743,774,785,797,801,824],{"__ignoreMap":132},[136,719,720,722,724,727,729,731,733,735,737],{"class":138,"line":139},[136,721,346],{"class":345},[136,723,350],{"class":349},[136,725,726],{"class":353}," searchProviderDetailed",[136,728,357],{"class":349},[136,730,361],{"class":360},[136,732,151],{"class":150},[136,734,366],{"class":154},[136,736,158],{"class":150},[136,738,371],{"class":349},[136,740,741],{"class":138,"line":374},[136,742,378],{"emptyLinePlaceholder":377},[136,744,745,747,750,752,754,756,758,760,762,764,766,768,770,772],{"class":138,"line":381},[136,746,385],{"class":384},[136,748,749],{"class":388}," response",[136,751,391],{"class":384},[136,753,512],{"class":511},[136,755,726],{"class":394},[136,757,397],{"class":349},[136,759,158],{"class":150},[136,761,108],{"class":154},[136,763,158],{"class":150},[136,765,246],{"class":349},[136,767,158],{"class":150},[136,769,155],{"class":154},[136,771,158],{"class":150},[136,773,406],{"class":349},[136,775,776,779,781,783],{"class":138,"line":409},[136,777,778],{"class":353},"  maxResults",[136,780,415],{"class":349},[136,782,541],{"class":540},[136,784,446],{"class":349},[136,786,787,790,792,795],{"class":138,"line":421},[136,788,789],{"class":353},"  summary",[136,791,415],{"class":349},[136,793,794],{"class":540}," true",[136,796,446],{"class":349},[136,798,799],{"class":138,"line":431},[136,800,498],{"class":349},[136,802,803,806,808,811,813,816,818,821],{"class":138,"line":449},[136,804,805],{"class":515},"console",[136,807,518],{"class":349},[136,809,810],{"class":394},"log",[136,812,397],{"class":349},[136,814,815],{"class":515},"response",[136,817,518],{"class":349},[136,819,820],{"class":515},"results",[136,822,823],{"class":349},");\n",[136,825,826,828,830,832,834,836,838,841,844,847],{"class":138,"line":466},[136,827,805],{"class":515},[136,829,518],{"class":349},[136,831,810],{"class":394},[136,833,397],{"class":349},[136,835,815],{"class":515},[136,837,518],{"class":349},[136,839,840],{"class":515},"metadata",[136,842,843],{"class":349},"?.",[136,845,846],{"class":515},"answer",[136,848,823],{"class":349},[110,850,851,852,855,856,859],{},"The detailed helper uses the same automatic login discovery and explicit environment overrides. ",[114,853,854],{},"summary: true"," includes the generated answer in ",[114,857,858],{},"metadata.answer","; it stays absent otherwise. Metadata also carries the returned model, request ID and token usage when available.",[119,861,863],{"id":862},"limits-and-traps","Limits and traps",[865,866,867,871,884,890,893,901,904,907,914],"ul",{},[868,869,870],"li",{},"This is an experimental adapter for the Codex backend, not a stable public search API. Model access and subscription limits still apply.",[868,872,873,874,876,877,282,880,883],{},"The default model is ",[114,875,482],{},". Override it with ",[114,878,879],{},"codex.model",[114,881,882],{},"OPENAI_CODEX_MODEL"," if your account needs another model that supports hosted web search. There is no hidden model fallback.",[868,885,886,889],{},[114,887,888],{},"maxResults"," caps collected sources locally, not upstream search work. Default 10, maximum 100. It does not promise that many sources.",[868,891,892],{},"No paging, domain\u002Fdate\u002Fcategory filters, highlights, full page text, reverse image search or URL reading. Detailed helpers report ignored filters.",[868,894,895,897,898,900],{},[114,896,289],{}," tries Codex after the existing API providers, before custom providers and SearXNG. ",[114,899,673],{}," includes it when a usable saved login, a native host resolver or explicit environment credentials are available. Discovery does not check subscription status or refresh tokens.",[868,902,903],{},"A search has a 90-second ceiling, including credential resolution and its one possible refresh. Caller cancellation and earlier deadlines still win. The transport rejects streams above 8 MiB and events above 1 MiB.",[868,905,906],{},"The adapter does not retry metered requests after HTTP 429 or server errors. Automatic search may move to another configured provider under the library's normal fallback rules.",[868,908,909,910,913],{},"OAuth credentials can only go to the fixed ChatGPT endpoint. Custom ",[114,911,912],{},"baseURL"," values and HTTP redirects are refused. Error messages omit upstream bodies and credential callback diagnostics.",[868,915,916],{},"Do not put personal subscription credentials on a public explorer worker. Local configuration is enough to use the library and its tools.",[110,918,919,920,923,924,518],{},"Implementation: ",[114,921,922],{},"src\u002Fproviders\u002Fopenai-codex.ts",". Protocol reference: the Codex search adapter in ",[925,926,930],"a",{"href":927,"rel":928},"https:\u002F\u002Fgithub.com\u002Fcan1357\u002Foh-my-pi\u002Fblob\u002Fmain\u002Fpackages\u002Fcoding-agent\u002Fsrc\u002Fweb\u002Fsearch\u002Fproviders\u002Fcodex.ts",[929],"nofollow","oh-my-pi",[932,933,934],"style",{},"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 .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 .sqT1Y, html code.shiki .sqT1Y{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#ADD7FF}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 .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 .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 .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html pre.shiki code .siHFe, html code.shiki .siHFe{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5DE4C7}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 .sCrqT, html code.shiki .sCrqT{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCDC0}",{"title":132,"searchDepth":374,"depth":374,"links":936},[937,938,939],{"id":121,"depth":374,"text":122},{"id":677,"depth":374,"text":678},{"id":862,"depth":374,"text":863},"Web search through your existing Pi, OMP, Codex or OpenCode login.","md",null,{"icon":944},"i-lucide-search",{"title":96,"description":940},"yvEaaNL-tZaDnccXbdSyt4vNsVSsXxdLQqPzkoIWfOg",[948,942],{"title":92,"path":93,"stem":94,"description":949,"children":-1},"TinyFish Search for news and research results with publisher metadata, and TinyFish Fetch for reading pages.",1789592429997]