[{"data":1,"prerenderedAt":946},["ShallowReactive",2],{"navigation_docs":3,"-guide-custom":168,"-guide-custom-surround":941},[4,44],{"title":5,"path":6,"stem":7,"children":8,"icon":43},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Registry and aliases","\u002Fguide\u002Fregistry","1.guide\u002F02.registry",{"title":16,"path":17,"stem":18},"Address validation","\u002Fguide\u002Fvalidation","1.guide\u002F03.validation",{"title":20,"path":21,"stem":22},"Identify","\u002Fguide\u002Fidentify","1.guide\u002F04.identify",{"title":24,"path":25,"stem":26},"Metadata","\u002Fguide\u002Fmetadata","1.guide\u002F05.metadata",{"title":28,"path":29,"stem":30},"CLI","\u002Fguide\u002Fcli","1.guide\u002F06.cli",{"title":32,"path":33,"stem":34},"Agents","\u002Fguide\u002Fagents","1.guide\u002F07.agents",{"title":36,"path":37,"stem":38},"Custom chains","\u002Fguide\u002Fcustom","1.guide\u002F08.custom",{"title":40,"path":41,"stem":42},"Playground","\u002Fguide\u002Fplayground","1.guide\u002F09.playground","i-lucide-book-open",{"title":45,"path":46,"stem":47,"children":48,"icon":167},"Chains","\u002Fchains","2.chains\u002F00.index",[49,51,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163],{"title":50,"path":46,"stem":47},"Overview",{"title":52,"path":53,"stem":54},"Ethereum","\u002Fchains\u002Fethereum","2.chains\u002F01.ethereum",{"title":56,"path":57,"stem":58},"Base","\u002Fchains\u002Fbase","2.chains\u002F02.base",{"title":60,"path":61,"stem":62},"Arbitrum One","\u002Fchains\u002Farbitrum","2.chains\u002F03.arbitrum",{"title":64,"path":65,"stem":66},"Optimism","\u002Fchains\u002Foptimism","2.chains\u002F04.optimism",{"title":68,"path":69,"stem":70},"Polygon PoS","\u002Fchains\u002Fpolygon","2.chains\u002F05.polygon",{"title":72,"path":73,"stem":74},"BNB Chain","\u002Fchains\u002Fbsc","2.chains\u002F06.bsc",{"title":76,"path":77,"stem":78},"Avalanche C-Chain","\u002Fchains\u002Favalanche","2.chains\u002F07.avalanche",{"title":80,"path":81,"stem":82},"Fantom Opera","\u002Fchains\u002Ffantom","2.chains\u002F08.fantom",{"title":84,"path":85,"stem":86},"Gnosis Chain","\u002Fchains\u002Fgnosis","2.chains\u002F09.gnosis",{"title":88,"path":89,"stem":90},"Linea","\u002Fchains\u002Flinea","2.chains\u002F10.linea",{"title":92,"path":93,"stem":94},"zkSync Era","\u002Fchains\u002Fzksync","2.chains\u002F11.zksync",{"title":96,"path":97,"stem":98},"Scroll","\u002Fchains\u002Fscroll","2.chains\u002F12.scroll",{"title":100,"path":101,"stem":102},"Berachain","\u002Fchains\u002Fberachain","2.chains\u002F13.berachain",{"title":104,"path":105,"stem":106},"Bitcoin","\u002Fchains\u002Fbitcoin","2.chains\u002F14.bitcoin",{"title":108,"path":109,"stem":110},"Litecoin","\u002Fchains\u002Flitecoin","2.chains\u002F15.litecoin",{"title":112,"path":113,"stem":114},"Pepecoin","\u002Fchains\u002Fpepecoin","2.chains\u002F16.pepecoin",{"title":116,"path":117,"stem":118},"eCash","\u002Fchains\u002Fecash","2.chains\u002F17.ecash",{"title":120,"path":121,"stem":122},"Cardano","\u002Fchains\u002Fcardano","2.chains\u002F18.cardano",{"title":124,"path":125,"stem":126},"Solana","\u002Fchains\u002Fsolana","2.chains\u002F19.solana",{"title":128,"path":129,"stem":130},"Stellar","\u002Fchains\u002Fstellar","2.chains\u002F20.stellar",{"title":132,"path":133,"stem":134},"XRP Ledger","\u002Fchains\u002Fxrpl","2.chains\u002F21.xrpl",{"title":136,"path":137,"stem":138},"Aptos","\u002Fchains\u002Faptos","2.chains\u002F22.aptos",{"title":140,"path":141,"stem":142},"Sui","\u002Fchains\u002Fsui","2.chains\u002F23.sui",{"title":144,"path":145,"stem":146},"TON (The Open Network)","\u002Fchains\u002Fton","2.chains\u002F24.ton",{"title":148,"path":149,"stem":150},"TRON","\u002Fchains\u002Ftron","2.chains\u002F25.tron",{"title":152,"path":153,"stem":154},"Octra","\u002Fchains\u002Foctra","2.chains\u002F26.octra",{"title":156,"path":157,"stem":158},"Arweave","\u002Fchains\u002Farweave","2.chains\u002F27.arweave",{"title":160,"path":161,"stem":162},"Monero","\u002Fchains\u002Fmonero","2.chains\u002F28.monero",{"title":164,"path":165,"stem":166},"Decred","\u002Fchains\u002Fdecred","2.chains\u002F29.decred","i-lucide-link",{"id":169,"title":36,"body":170,"description":934,"extension":935,"links":936,"meta":937,"navigation":289,"path":37,"seo":939,"stem":38,"__hash__":940},"docs\u002F1.guide\u002F08.custom.md",{"type":171,"value":172,"toc":928},"minimark",[173,178,195,653,765,787,791,882,886,897,901,924],[174,175,177],"h2",{"id":176},"one-class-one-file","One class, one file",[179,180,181,182,186,187,190,191,194],"p",{},"Every built-in is a concrete class extending the exported abstract ",[183,184,185],"code",{},"Chain",", or ",[183,188,189],{},"EVM"," and ",[183,192,193],{},"Move"," when the address format is theirs. Yours is the same shape:",[196,197,203],"pre",{"className":198,"code":199,"filename":200,"language":201,"meta":202,"style":202},"language-ts shiki shiki-themes github-light github-light poimandres","import { Chain, InvalidAddressError, register } from \"@agntn\u002Fchains\";\nimport type { ChainKey, ChainType } from \"@agntn\u002Fchains\";\n\n\u002F\u002F The shape of a Nano account. Its checksum stays unchecked here.\nconst ADDRESS = \u002F^nano_[13][13456789abcdefghijkmnopqrstuwxyz]{59}$\u002F;\n\nclass Nano extends Chain {\n  static readonly key = \"nano\" as ChainKey;\n  readonly type = \"nano\" as ChainType;\n  readonly name = \"Nano\";\n  readonly symbol = \"XNO\";\n  override readonly decimals = 30;\n  readonly explorer = \"https:\u002F\u002Fnanexplorer.com\u002Fnano\";\n  readonly bip44 = 165;\n\n  override assertAddress(address: string): string {\n    if (!ADDRESS.test(address)) throw new InvalidAddressError(this.key, address);\n    return address;\n  }\n}\n\nregister(Nano);\n","nano.ts","ts","",[183,204,205,254,284,291,298,350,355,373,404,426,445,464,483,502,517,522,553,612,624,630,636,641],{"__ignoreMap":202},[206,207,210,214,218,222,225,228,230,233,236,240,244,248,251],"span",{"class":208,"line":209},"line",1,[206,211,213],{"class":212},"sP0CR","import",[206,215,217],{"class":216},"sKlNE"," {",[206,219,221],{"class":220},"snHMy"," Chain",[206,223,224],{"class":216},",",[206,226,227],{"class":220}," InvalidAddressError",[206,229,224],{"class":216},[206,231,232],{"class":220}," register",[206,234,235],{"class":216}," }",[206,237,239],{"class":238},"stCPd"," from",[206,241,243],{"class":242},"scVjq"," \"",[206,245,247],{"class":246},"sQ7BG","@agntn\u002Fchains",[206,249,250],{"class":242},"\"",[206,252,253],{"class":216},";\n",[206,255,257,259,262,264,267,269,272,274,276,278,280,282],{"class":208,"line":256},2,[206,258,213],{"class":212},[206,260,261],{"class":238}," type",[206,263,217],{"class":216},[206,265,266],{"class":220}," ChainKey",[206,268,224],{"class":216},[206,270,271],{"class":220}," ChainType",[206,273,235],{"class":216},[206,275,239],{"class":238},[206,277,243],{"class":242},[206,279,247],{"class":246},[206,281,250],{"class":242},[206,283,253],{"class":216},[206,285,287],{"class":208,"line":286},3,[206,288,290],{"emptyLinePlaceholder":289},true,"\n",[206,292,294],{"class":208,"line":293},4,[206,295,297],{"class":296},"sjhu3","\u002F\u002F The shape of a Nano account. Its checksum stays unchecked here.\n",[206,299,301,305,309,312,315,318,322,326,330,333,336,339,342,345,348],{"class":208,"line":300},5,[206,302,304],{"class":303},"s1TYA","const",[206,306,308],{"class":307},"saoiD"," ADDRESS",[206,310,311],{"class":303}," =",[206,313,314],{"class":242}," \u002F",[206,316,317],{"class":238},"^",[206,319,321],{"class":320},"sLrG9","nano_",[206,323,325],{"class":324},"sy8Ar","[",[206,327,329],{"class":328},"stM5N","13",[206,331,332],{"class":324},"][",[206,334,335],{"class":328},"13456789abcdefghijkmnopqrstuwxyz",[206,337,338],{"class":324},"]",[206,340,341],{"class":303},"{59}",[206,343,344],{"class":238},"$",[206,346,347],{"class":242},"\u002F",[206,349,253],{"class":216},[206,351,353],{"class":208,"line":352},6,[206,354,290],{"emptyLinePlaceholder":289},[206,356,358,361,365,368,370],{"class":208,"line":357},7,[206,359,360],{"class":303},"class",[206,362,364],{"class":363},"scZRh"," Nano",[206,366,367],{"class":212}," extends",[206,369,221],{"class":363},[206,371,372],{"class":216}," {\n",[206,374,376,379,382,386,388,390,393,395,399,402],{"class":208,"line":375},8,[206,377,378],{"class":212},"  static",[206,380,381],{"class":212}," readonly",[206,383,385],{"class":384},"s0VbO"," key",[206,387,311],{"class":303},[206,389,243],{"class":242},[206,391,392],{"class":246},"nano",[206,394,250],{"class":242},[206,396,398],{"class":397},"sp-LQ"," as",[206,400,266],{"class":401},"sCrqT",[206,403,253],{"class":216},[206,405,407,410,412,414,416,418,420,422,424],{"class":208,"line":406},9,[206,408,409],{"class":212},"  readonly",[206,411,261],{"class":384},[206,413,311],{"class":303},[206,415,243],{"class":242},[206,417,392],{"class":246},[206,419,250],{"class":242},[206,421,398],{"class":397},[206,423,271],{"class":401},[206,425,253],{"class":216},[206,427,429,431,434,436,438,441,443],{"class":208,"line":428},10,[206,430,409],{"class":212},[206,432,433],{"class":384}," name",[206,435,311],{"class":303},[206,437,243],{"class":242},[206,439,440],{"class":246},"Nano",[206,442,250],{"class":242},[206,444,253],{"class":216},[206,446,448,450,453,455,457,460,462],{"class":208,"line":447},11,[206,449,409],{"class":212},[206,451,452],{"class":384}," symbol",[206,454,311],{"class":303},[206,456,243],{"class":242},[206,458,459],{"class":246},"XNO",[206,461,250],{"class":242},[206,463,253],{"class":216},[206,465,467,470,472,475,477,481],{"class":208,"line":466},12,[206,468,469],{"class":212},"  override",[206,471,381],{"class":212},[206,473,474],{"class":384}," decimals",[206,476,311],{"class":303},[206,478,480],{"class":479},"siHFe"," 30",[206,482,253],{"class":216},[206,484,486,488,491,493,495,498,500],{"class":208,"line":485},13,[206,487,409],{"class":212},[206,489,490],{"class":384}," explorer",[206,492,311],{"class":303},[206,494,243],{"class":242},[206,496,497],{"class":246},"https:\u002F\u002Fnanexplorer.com\u002Fnano",[206,499,250],{"class":242},[206,501,253],{"class":216},[206,503,505,507,510,512,515],{"class":208,"line":504},14,[206,506,409],{"class":212},[206,508,509],{"class":384}," bip44",[206,511,311],{"class":303},[206,513,514],{"class":479}," 165",[206,516,253],{"class":216},[206,518,520],{"class":208,"line":519},15,[206,521,290],{"emptyLinePlaceholder":289},[206,523,525,527,530,533,537,540,544,547,549,551],{"class":208,"line":524},16,[206,526,469],{"class":212},[206,528,529],{"class":363}," assertAddress",[206,531,532],{"class":216},"(",[206,534,536],{"class":535},"s1jWp","address",[206,538,539],{"class":303},":",[206,541,543],{"class":542},"s8yaW"," string",[206,545,546],{"class":216},")",[206,548,539],{"class":303},[206,550,543],{"class":542},[206,552,372],{"class":216},[206,554,556,559,562,565,569,572,576,578,581,584,588,591,593,595,599,601,604,607,609],{"class":208,"line":555},17,[206,557,558],{"class":238},"    if",[206,560,561],{"class":216}," (",[206,563,564],{"class":303},"!",[206,566,568],{"class":567},"sqT1Y","ADDRESS",[206,570,571],{"class":216},".",[206,573,575],{"class":574},"sULi6","test",[206,577,532],{"class":216},[206,579,536],{"class":580},"spVlQ",[206,582,583],{"class":216},")) ",[206,585,587],{"class":586},"szlwh","throw",[206,589,590],{"class":212}," new",[206,592,227],{"class":574},[206,594,532],{"class":216},[206,596,598],{"class":597},"s-lox","this",[206,600,571],{"class":216},[206,602,603],{"class":580},"key",[206,605,606],{"class":216},", ",[206,608,536],{"class":580},[206,610,611],{"class":216},");\n",[206,613,615,619,622],{"class":208,"line":614},18,[206,616,618],{"class":617},"sZW6a","    return",[206,620,621],{"class":580}," address",[206,623,253],{"class":216},[206,625,627],{"class":208,"line":626},19,[206,628,629],{"class":216},"  }\n",[206,631,633],{"class":208,"line":632},20,[206,634,635],{"class":216},"}\n",[206,637,639],{"class":208,"line":638},21,[206,640,290],{"emptyLinePlaceholder":289},[206,642,644,647,649,651],{"class":208,"line":643},22,[206,645,646],{"class":574},"register",[206,648,532],{"class":216},[206,650,440],{"class":580},[206,652,611],{"class":216},[196,654,656],{"className":198,"code":655,"language":201,"meta":202,"style":202},"import \".\u002Fnano\";\nimport { create, getChain, identify } from \"@agntn\u002Fchains\";\n\ngetChain(\"nano\").name; \u002F\u002F \"Nano\"\nidentify(\"nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3\").matches[0]?.key; \u002F\u002F \"nano\"\n",[183,657,658,671,702,706,731],{"__ignoreMap":202},[206,659,660,662,664,667,669],{"class":208,"line":209},[206,661,213],{"class":212},[206,663,243],{"class":242},[206,665,666],{"class":246},".\u002Fnano",[206,668,250],{"class":242},[206,670,253],{"class":216},[206,672,673,675,677,680,682,685,687,690,692,694,696,698,700],{"class":208,"line":256},[206,674,213],{"class":212},[206,676,217],{"class":216},[206,678,679],{"class":220}," create",[206,681,224],{"class":216},[206,683,684],{"class":220}," getChain",[206,686,224],{"class":216},[206,688,689],{"class":220}," identify",[206,691,235],{"class":216},[206,693,239],{"class":238},[206,695,243],{"class":242},[206,697,247],{"class":246},[206,699,250],{"class":242},[206,701,253],{"class":216},[206,703,704],{"class":208,"line":286},[206,705,290],{"emptyLinePlaceholder":289},[206,707,708,711,713,715,717,719,722,725,728],{"class":208,"line":293},[206,709,710],{"class":574},"getChain",[206,712,532],{"class":216},[206,714,250],{"class":242},[206,716,392],{"class":246},[206,718,250],{"class":242},[206,720,721],{"class":216},").",[206,723,724],{"class":580},"name",[206,726,727],{"class":216},"; ",[206,729,730],{"class":296},"\u002F\u002F \"Nano\"\n",[206,732,733,736,738,740,743,745,747,750,752,755,758,760,762],{"class":208,"line":300},[206,734,735],{"class":574},"identify",[206,737,532],{"class":216},[206,739,250],{"class":242},[206,741,742],{"class":246},"nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3",[206,744,250],{"class":242},[206,746,721],{"class":216},[206,748,749],{"class":580},"matches",[206,751,325],{"class":216},[206,753,754],{"class":479},"0",[206,756,757],{"class":216},"]?.",[206,759,603],{"class":580},[206,761,727],{"class":216},[206,763,764],{"class":296},"\u002F\u002F \"nano\"\n",[179,766,767,768,190,771,774,775,778,779,782,783,786],{},"Two casts, and they are the honest part of this page. ",[183,769,770],{},"ChainKey",[183,772,773],{},"ChainType"," are closed unions of the built-in values, so a new key doesn't type check without ",[183,776,777],{},"as ChainKey",", and ",[183,780,781],{},"create(\"nano\")"," wants the same cast. ",[183,784,785],{},"getChain(\"nano\")"," takes a plain string and needs none. The unions exist so a typo in a key is a compile error inside the package; the price is paid once, in your class.",[174,788,790],{"id":789},"the-contract","The contract",[792,793,794,808,838,851,870],"ul",{},[795,796,797,800,801,803,804,807],"li",{},[183,798,799],{},"static readonly key"," is what ",[183,802,646],{}," files the class under and what ",[183,805,806],{},"chain.key"," returns. Lowercase, the chain's name rather than its ticker. Registering the same key again replaces the class.",[795,809,810,606,812,606,815,190,818,821,822,606,825,606,828,606,831,190,834,837],{},[183,811,724],{},[183,813,814],{},"symbol",[183,816,817],{},"type",[183,819,820],{},"explorer"," are required. ",[183,823,824],{},"decimals",[183,826,827],{},"bip44",[183,829,830],{},"chainId",[183,832,833],{},"caip2",[183,835,836],{},"rpcDefault"," are optional and mean unknown when left out, never a default.",[795,839,840,843,844,847,848,850],{},[183,841,842],{},"assertAddress"," returns the address or throws ",[183,845,846],{},"InvalidAddressError(this.key, address)",". Throw that class and nothing else for a bad address, because ",[183,849,735],{}," counts only that as a miss and lets any other throw come back out as a bug.",[795,852,853,854,190,856,859,860,863,864,778,867,869],{},"Skip ",[183,855,842],{},[183,857,858],{},"validatesAddress"," says ",[183,861,862],{},"false",", the base method throws ",[183,865,866],{},"AddressValidationUnsupportedError",[183,868,735],{}," lists your chain as unchecked rather than pretending it said no.",[795,871,872,873,876,877,606,879,881],{},"An EVM chain is ",[183,874,875],{},"class Mine extends EVM"," with ",[183,878,830],{},[183,880,833],{}," and the rest. The format check comes with the family.",[174,883,885],{"id":884},"decode-when-you-can","Decode when you can",[179,887,888,889,892,893,896],{},"A regex is fine when the width is the whole format, as it is for Octra. When the format is Base58Check with a known byte length, decode and look at the bytes: a character window takes neighbouring chains and half the typos. The built-ins are the reference, ",[183,890,891],{},"src\u002Fchains\u002Ftron.ts"," is the short one and ",[183,894,895],{},"src\u002Fchains\u002Fcardano.ts"," the long one.",[174,898,900],{"id":899},"where-it-shows-up","Where it shows up",[179,902,903,904,606,907,910,911,913,914,916,917,190,920,923],{},"Once the module is imported, the chain is in ",[183,905,906],{},"chains()",[183,908,909],{},"has()"," says true, ",[183,912,710],{}," finds it by key and by display name, ",[183,915,735],{}," asks it like any other. The CLI and the MCP server only load the built-ins. To use a custom chain there you build your own binary around ",[183,918,919],{},"create",[183,921,922],{},"createMcpServer",". There's no plugin path, and I'd rather say so than invent one that half works.",[925,926,927],"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 .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 .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 .sLrG9, html code.shiki .sLrG9{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5FB3A1}html pre.shiki code .sy8Ar, html code.shiki .sy8Ar{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCD}html pre.shiki code .stM5N, html code.shiki .stM5N{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#5FB3A1}html pre.shiki code .scZRh, html code.shiki .scZRh{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#ADD7FF}html pre.shiki code .s0VbO, html code.shiki .s0VbO{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#A6ACCD}html pre.shiki code .sp-LQ, html code.shiki .sp-LQ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCDC0}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}html pre.shiki code .s1jWp, html code.shiki .s1jWp{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#E4F0FB}html pre.shiki code .s8yaW, html code.shiki .s8yaW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCDC0}html pre.shiki code .sqT1Y, html code.shiki .sqT1Y{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#ADD7FF}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 pre.shiki code .szlwh, html code.shiki .szlwh{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#D0679D}html pre.shiki code .s-lox, html code.shiki .s-lox{--shiki-light:#005CC5;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#5DE4C7;--shiki-dark-font-style:italic}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}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);}",{"title":202,"searchDepth":256,"depth":256,"links":929},[930,931,932,933],{"id":176,"depth":256,"text":177},{"id":789,"depth":256,"text":790},{"id":884,"depth":256,"text":885},{"id":899,"depth":256,"text":900},"Extend the abstract Chain with a key and a validator and register the class. From then on the registry treats it like a built-in.","md",null,{"icon":938},"i-lucide-plus",{"title":36,"description":934},"YHJeRP7OwM91TSkRDHRnkuJRiB53o5-hrGznNByE_tc",[942,944],{"title":32,"path":33,"stem":34,"description":943,"children":-1},"The same four tools over MCP and the Pi and OMP extensions. What the text carries and what sets isError. What a model can't hand the process.",{"title":40,"path":41,"stem":42,"description":945,"children":-1},"The page behind chains.agntn.dev\u002Fplayground runs the library in your browser. What it can tell you and what it can't.",1789393739618]