[{"data":1,"prerenderedAt":563},["ShallowReactive",2],{"navigation_docs":3,"-about-surfaces":124,"-about-surfaces-surround":558},[4,28],{"title":5,"path":6,"stem":7,"children":8,"icon":27},"About","\u002Fabout","1.about\u002F1.index",[9,11,15,19,23],{"title":10,"path":6,"stem":7},"Overview",{"title":12,"path":13,"stem":14},"The shape","\u002Fabout\u002Fshape","1.about\u002F2.shape",{"title":16,"path":17,"stem":18},"Surfaces","\u002Fabout\u002Fsurfaces","1.about\u002F3.surfaces",{"title":20,"path":21,"stem":22},"Conventions","\u002Fabout\u002Fconventions","1.about\u002F4.conventions",{"title":24,"path":25,"stem":26},"Security","\u002Fabout\u002Fsecurity","1.about\u002F5.security","i-lucide-book-open",{"title":29,"path":30,"stem":31,"children":32,"icon":123},"Libraries","\u002Flibraries","2.libraries\u002F0.index",[33,35,39,43,47,51,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119],{"title":34,"path":30,"stem":31},"All libraries",{"title":36,"path":37,"stem":38},"web","\u002Flibraries\u002Fweb","2.libraries\u002F01.web",{"title":40,"path":41,"stem":42},"archives","\u002Flibraries\u002Farchives","2.libraries\u002F02.archives",{"title":44,"path":45,"stem":46},"registries","\u002Flibraries\u002Fregistries","2.libraries\u002F03.registries",{"title":48,"path":49,"stem":50},"forges","\u002Flibraries\u002Fforges","2.libraries\u002F04.forges",{"title":52,"path":53,"stem":54},"keys","\u002Flibraries\u002Fkeys","2.libraries\u002F05.keys",{"title":56,"path":57,"stem":58},"harnesses","\u002Flibraries\u002Fharnesses","2.libraries\u002F06.harnesses",{"title":60,"path":61,"stem":62},"explorers","\u002Flibraries\u002Fexplorers","2.libraries\u002F07.explorers",{"title":64,"path":65,"stem":66},"chains","\u002Flibraries\u002Fchains","2.libraries\u002F08.chains",{"title":68,"path":69,"stem":70},"ciphers","\u002Flibraries\u002Fciphers","2.libraries\u002F09.ciphers",{"title":72,"path":73,"stem":74},"puzzles","\u002Flibraries\u002Fpuzzles","2.libraries\u002F10.puzzles",{"title":76,"path":77,"stem":78},"browsers","\u002Flibraries\u002Fbrowsers","2.libraries\u002F11.browsers",{"title":80,"path":81,"stem":82},"sessions","\u002Flibraries\u002Fsessions","2.libraries\u002F12.sessions",{"title":84,"path":85,"stem":86},"memory","\u002Flibraries\u002Fmemory","2.libraries\u002F13.memory",{"title":88,"path":89,"stem":90},"urls","\u002Flibraries\u002Furls","2.libraries\u002F14.urls",{"title":92,"path":93,"stem":94},"nodes","\u002Flibraries\u002Fnodes","2.libraries\u002F15.nodes",{"title":96,"path":97,"stem":98},"nfts","\u002Flibraries\u002Fnfts","2.libraries\u002F16.nfts",{"title":100,"path":101,"stem":102},"storages","\u002Flibraries\u002Fstorages","2.libraries\u002F17.storages",{"title":104,"path":105,"stem":106},"maps","\u002Flibraries\u002Fmaps","2.libraries\u002F18.maps",{"title":108,"path":109,"stem":110},"lyrics","\u002Flibraries\u002Flyrics","2.libraries\u002F19.lyrics",{"title":112,"path":113,"stem":114},"books","\u002Flibraries\u002Fbooks","2.libraries\u002F20.books",{"title":116,"path":117,"stem":118},"wiki","\u002Flibraries\u002Fwiki","2.libraries\u002F21.wiki",{"title":120,"path":121,"stem":122},"ox","\u002Flibraries\u002Fox","2.libraries\u002F22.ox","i-lucide-library",{"id":125,"title":16,"body":126,"description":552,"extension":553,"links":554,"meta":555,"navigation":201,"path":17,"seo":556,"stem":18,"__hash__":557},"docs\u002F1.about\u002F3.surfaces.md",{"type":127,"value":128,"toc":545},"minimark",[129,133,136,141,149,237,241,248,302,306,313,416,420,426,514,518,533,541],[130,131,132],"p",{},"A library has to work for a person at a shell and for a model inside an agent host. Writing each surface separately is how you end up with six slightly different answers to the same question. So every package keeps one set of tool executors and wires the surfaces onto it.",[134,135],"surface-grid",{},[137,138,140],"h2",{"id":139},"library","Library",[130,142,143,144,148],{},"The ESM package with ",[145,146,147],"code",{},".d.mts"," declarations. This is the source of truth, everything else is a thin caller.",[150,151,156],"pre",{"className":152,"code":153,"language":154,"meta":155,"style":155},"language-ts shiki shiki-themes github-light github-light poimandres","import { fetchPackageFromPURL } from \"@agntn\u002Fregistries\";\n\nconst pkg = await fetchPackageFromPURL(\"pkg:npm\u002Flodash\");\n","ts","",[145,157,158,196,203],{"__ignoreMap":155},[159,160,163,167,171,175,178,182,186,190,193],"span",{"class":161,"line":162},"line",1,[159,164,166],{"class":165},"sP0CR","import",[159,168,170],{"class":169},"sKlNE"," {",[159,172,174],{"class":173},"snHMy"," fetchPackageFromPURL",[159,176,177],{"class":169}," }",[159,179,181],{"class":180},"stCPd"," from",[159,183,185],{"class":184},"scVjq"," \"",[159,187,189],{"class":188},"sQ7BG","@agntn\u002Fregistries",[159,191,192],{"class":184},"\"",[159,194,195],{"class":169},";\n",[159,197,199],{"class":161,"line":198},2,[159,200,202],{"emptyLinePlaceholder":201},true,"\n",[159,204,206,210,214,217,221,224,227,229,232,234],{"class":161,"line":205},3,[159,207,209],{"class":208},"s1TYA","const",[159,211,213],{"class":212},"saoiD"," pkg",[159,215,216],{"class":208}," =",[159,218,220],{"class":219},"sZW6a"," await",[159,222,174],{"class":223},"sULi6",[159,225,226],{"class":169},"(",[159,228,192],{"class":184},[159,230,231],{"class":188},"pkg:npm\u002Flodash",[159,233,192],{"class":184},[159,235,236],{"class":169},");\n",[137,238,240],{"id":239},"cli","CLI",[130,242,243,244,247],{},"Same calls from a shell, ",[145,245,246],{},"--json"," for scripts. The binary is the package name without the scope.",[150,249,253],{"className":250,"code":251,"language":252,"meta":155,"style":155},"language-bash shiki shiki-themes github-light github-light poimandres","registries info pkg:npm\u002Flodash --json\nweb search \"typescript 7 native\" --provider brave\nchains validate 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\n","bash",[145,254,255,271,291],{"__ignoreMap":155},[159,256,257,260,264,267],{"class":161,"line":162},[159,258,44],{"class":259},"sseY5",[159,261,263],{"class":262},"sX7Zv"," info",[159,265,266],{"class":262}," pkg:npm\u002Flodash",[159,268,270],{"class":269},"sqT1Y"," --json\n",[159,272,273,275,278,280,283,285,288],{"class":161,"line":198},[159,274,36],{"class":259},[159,276,277],{"class":262}," search",[159,279,185],{"class":184},[159,281,282],{"class":188},"typescript 7 native",[159,284,192],{"class":184},[159,286,287],{"class":269}," --provider",[159,289,290],{"class":262}," brave\n",[159,292,293,295,298],{"class":161,"line":205},[159,294,64],{"class":259},[159,296,297],{"class":262}," validate",[159,299,301],{"class":300},"siHFe"," 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\n",[137,303,305],{"id":304},"ai-sdk","AI SDK",[130,307,308,309,312],{},"Packages with a ",[145,310,311],{},"\u002Fai"," subpath export Vercel AI SDK tools with Zod schemas. The host abort signal goes straight through to the provider request. Right now that's web, registries, urls, nfts, storages, maps, lyrics and books. The others expose the same executors through MCP and the extensions.",[150,314,316],{"className":152,"code":315,"language":154,"meta":155,"style":155},"import { generateText } from \"ai\";\nimport { searchTool } from \"@agntn\u002Fweb\u002Fai\";\n\nawait generateText({ model, tools: { search: searchTool }, prompt: \"…\" });\n",[145,317,318,340,362,366],{"__ignoreMap":155},[159,319,320,322,324,327,329,331,333,336,338],{"class":161,"line":162},[159,321,166],{"class":165},[159,323,170],{"class":169},[159,325,326],{"class":173}," generateText",[159,328,177],{"class":169},[159,330,181],{"class":180},[159,332,185],{"class":184},[159,334,335],{"class":188},"ai",[159,337,192],{"class":184},[159,339,195],{"class":169},[159,341,342,344,346,349,351,353,355,358,360],{"class":161,"line":198},[159,343,166],{"class":165},[159,345,170],{"class":169},[159,347,348],{"class":173}," searchTool",[159,350,177],{"class":169},[159,352,181],{"class":180},[159,354,185],{"class":184},[159,356,357],{"class":188},"@agntn\u002Fweb\u002Fai",[159,359,192],{"class":184},[159,361,195],{"class":169},[159,363,364],{"class":161,"line":205},[159,365,202],{"emptyLinePlaceholder":201},[159,367,369,372,374,377,381,384,387,390,392,394,396,398,401,404,406,408,411,413],{"class":161,"line":368},4,[159,370,371],{"class":219},"await",[159,373,326],{"class":223},[159,375,376],{"class":169},"({",[159,378,380],{"class":379},"spVlQ"," model",[159,382,383],{"class":169},",",[159,385,386],{"class":173}," tools",[159,388,389],{"class":169},":",[159,391,170],{"class":169},[159,393,277],{"class":173},[159,395,389],{"class":169},[159,397,348],{"class":379},[159,399,400],{"class":169}," },",[159,402,403],{"class":173}," prompt",[159,405,389],{"class":169},[159,407,185],{"class":184},[159,409,410],{"class":188},"…",[159,412,192],{"class":184},[159,414,415],{"class":169}," });\n",[137,417,419],{"id":418},"mcp","MCP",[130,421,422,425],{},[145,423,424],{},"\u003Cname> mcp"," serves the same tools over stdio. Register it once in any MCP host and every tool of that library is there.",[150,427,431],{"className":428,"code":429,"language":430,"meta":155,"style":155},"language-json shiki shiki-themes github-light github-light poimandres","{\n  \"mcpServers\": {\n    \"web\": { \"command\": \"web\", \"args\": [\"mcp\"] }\n  }\n}\n","json",[145,432,433,438,452,503,508],{"__ignoreMap":155},[159,434,435],{"class":161,"line":162},[159,436,437],{"class":169},"{\n",[159,439,440,444,447,449],{"class":161,"line":198},[159,441,443],{"class":442},"sy8Ar","  \"",[159,445,446],{"class":212},"mcpServers",[159,448,192],{"class":442},[159,450,451],{"class":169},": {\n",[159,453,454,457,459,461,464,466,470,472,475,477,479,481,484,486,489,491,494,496,498,500],{"class":161,"line":205},[159,455,456],{"class":442},"    \"",[159,458,36],{"class":269},[159,460,192],{"class":442},[159,462,463],{"class":169},": { ",[159,465,192],{"class":442},[159,467,469],{"class":468},"s39Ir","command",[159,471,192],{"class":442},[159,473,474],{"class":169},": ",[159,476,192],{"class":184},[159,478,36],{"class":188},[159,480,192],{"class":184},[159,482,483],{"class":169},", ",[159,485,192],{"class":442},[159,487,488],{"class":468},"args",[159,490,192],{"class":442},[159,492,493],{"class":169},": [",[159,495,192],{"class":184},[159,497,418],{"class":188},[159,499,192],{"class":184},[159,501,502],{"class":169},"] }\n",[159,504,505],{"class":161,"line":368},[159,506,507],{"class":169},"  }\n",[159,509,511],{"class":161,"line":510},5,[159,512,513],{"class":169},"}\n",[137,515,517],{"id":516},"pi-and-omp","Pi and OMP",[130,519,520,521,524,525,528,529,532],{},"The extension sources ship inside the npm package under ",[145,522,523],{},"packages\u002Fpi"," and ",[145,526,527],{},"packages\u002Fomp",". They load the library from the package itself, source tree in a checkout, ",[145,530,531],{},"dist"," once installed. No second copy of the logic to keep in sync.",[130,534,535,536,540],{},"Which surfaces each library actually ships is on its page in the ",[537,538,539],"a",{"href":30},"catalogue",".",[542,543,544],"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 .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 .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}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 .siHFe, html code.shiki .siHFe{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5DE4C7}html pre.shiki code .sy8Ar, html code.shiki .sy8Ar{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCD}html pre.shiki code .s39Ir, html code.shiki .s39Ir{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#91B4D5}",{"title":155,"searchDepth":198,"depth":198,"links":546},[547,548,549,550,551],{"id":139,"depth":198,"text":140},{"id":239,"depth":198,"text":240},{"id":304,"depth":198,"text":305},{"id":418,"depth":198,"text":419},{"id":516,"depth":198,"text":517},"Library, CLI, AI SDK tool, MCP server, Pi extension and OMP extension, all calling the same executors.","md",null,{},{"title":16,"description":552},"QxS7z41pXdWfC51jErIYYVEzOpZbpBBszDnuUVJWQ0w",[559,561],{"title":12,"path":13,"stem":14,"description":560,"children":-1},"How an agntn library is built, from the adapter that registers itself to the normalized answer and the typed error.",{"title":20,"path":21,"stem":22,"description":562,"children":-1},"The stack, scripts and release flow every agntn repo shares.",1789773068618]