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