[{"data":1,"prerenderedAt":978},["ShallowReactive",2],{"navigation_docs":3,"-guide-custom":180,"-guide-custom-surround":973},[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":179},"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,167,171,175],{"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",{"title":168,"path":169,"stem":170},"Arc","\u002Fchains\u002Farc","2.chains\u002F30.arc",{"title":172,"path":173,"stem":174},"Dogecoin","\u002Fchains\u002Fdogecoin","2.chains\u002F31.dogecoin",{"title":176,"path":177,"stem":178},"Bitcoin Cash","\u002Fchains\u002Fbitcoincash","2.chains\u002F32.bitcoincash","i-lucide-link",{"id":181,"title":36,"body":182,"description":966,"extension":967,"links":968,"meta":969,"navigation":301,"path":37,"seo":971,"stem":38,"__hash__":972},"docs\u002F1.guide\u002F08.custom.md",{"type":183,"value":184,"toc":960},"minimark",[185,190,207,665,777,799,803,914,918,929,933,956],[186,187,189],"h2",{"id":188},"one-class-one-file","One class, one file",[191,192,193,194,198,199,202,203,206],"p",{},"Every built-in is a concrete class extending the exported abstract ",[195,196,197],"code",{},"Chain",", or ",[195,200,201],{},"EVM"," and ",[195,204,205],{},"Move"," when the address format is theirs. Yours is the same shape:",[208,209,215],"pre",{"className":210,"code":211,"filename":212,"language":213,"meta":214,"style":214},"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** The shape of a Nano account. Its checksum stays unchecked here. *\u002F\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","",[195,216,217,266,296,303,310,362,367,385,416,438,457,476,495,514,529,534,565,624,636,642,648,653],{"__ignoreMap":214},[218,219,222,226,230,234,237,240,242,245,248,252,256,260,263],"span",{"class":220,"line":221},"line",1,[218,223,225],{"class":224},"sP0CR","import",[218,227,229],{"class":228},"sKlNE"," {",[218,231,233],{"class":232},"snHMy"," Chain",[218,235,236],{"class":228},",",[218,238,239],{"class":232}," InvalidAddressError",[218,241,236],{"class":228},[218,243,244],{"class":232}," register",[218,246,247],{"class":228}," }",[218,249,251],{"class":250},"stCPd"," from",[218,253,255],{"class":254},"scVjq"," \"",[218,257,259],{"class":258},"sQ7BG","@agntn\u002Fchains",[218,261,262],{"class":254},"\"",[218,264,265],{"class":228},";\n",[218,267,269,271,274,276,279,281,284,286,288,290,292,294],{"class":220,"line":268},2,[218,270,225],{"class":224},[218,272,273],{"class":250}," type",[218,275,229],{"class":228},[218,277,278],{"class":232}," ChainKey",[218,280,236],{"class":228},[218,282,283],{"class":232}," ChainType",[218,285,247],{"class":228},[218,287,251],{"class":250},[218,289,255],{"class":254},[218,291,259],{"class":258},[218,293,262],{"class":254},[218,295,265],{"class":228},[218,297,299],{"class":220,"line":298},3,[218,300,302],{"emptyLinePlaceholder":301},true,"\n",[218,304,306],{"class":220,"line":305},4,[218,307,309],{"class":308},"sjhu3","\u002F** The shape of a Nano account. Its checksum stays unchecked here. *\u002F\n",[218,311,313,317,321,324,327,330,334,338,342,345,348,351,354,357,360],{"class":220,"line":312},5,[218,314,316],{"class":315},"s1TYA","const",[218,318,320],{"class":319},"saoiD"," ADDRESS",[218,322,323],{"class":315}," =",[218,325,326],{"class":254}," \u002F",[218,328,329],{"class":250},"^",[218,331,333],{"class":332},"sLrG9","nano_",[218,335,337],{"class":336},"sy8Ar","[",[218,339,341],{"class":340},"stM5N","13",[218,343,344],{"class":336},"][",[218,346,347],{"class":340},"13456789abcdefghijkmnopqrstuwxyz",[218,349,350],{"class":336},"]",[218,352,353],{"class":315},"{59}",[218,355,356],{"class":250},"$",[218,358,359],{"class":254},"\u002F",[218,361,265],{"class":228},[218,363,365],{"class":220,"line":364},6,[218,366,302],{"emptyLinePlaceholder":301},[218,368,370,373,377,380,382],{"class":220,"line":369},7,[218,371,372],{"class":315},"class",[218,374,376],{"class":375},"scZRh"," Nano",[218,378,379],{"class":224}," extends",[218,381,233],{"class":375},[218,383,384],{"class":228}," {\n",[218,386,388,391,394,398,400,402,405,407,411,414],{"class":220,"line":387},8,[218,389,390],{"class":224},"  static",[218,392,393],{"class":224}," readonly",[218,395,397],{"class":396},"s0VbO"," key",[218,399,323],{"class":315},[218,401,255],{"class":254},[218,403,404],{"class":258},"nano",[218,406,262],{"class":254},[218,408,410],{"class":409},"sp-LQ"," as",[218,412,278],{"class":413},"sCrqT",[218,415,265],{"class":228},[218,417,419,422,424,426,428,430,432,434,436],{"class":220,"line":418},9,[218,420,421],{"class":224},"  readonly",[218,423,273],{"class":396},[218,425,323],{"class":315},[218,427,255],{"class":254},[218,429,404],{"class":258},[218,431,262],{"class":254},[218,433,410],{"class":409},[218,435,283],{"class":413},[218,437,265],{"class":228},[218,439,441,443,446,448,450,453,455],{"class":220,"line":440},10,[218,442,421],{"class":224},[218,444,445],{"class":396}," name",[218,447,323],{"class":315},[218,449,255],{"class":254},[218,451,452],{"class":258},"Nano",[218,454,262],{"class":254},[218,456,265],{"class":228},[218,458,460,462,465,467,469,472,474],{"class":220,"line":459},11,[218,461,421],{"class":224},[218,463,464],{"class":396}," symbol",[218,466,323],{"class":315},[218,468,255],{"class":254},[218,470,471],{"class":258},"XNO",[218,473,262],{"class":254},[218,475,265],{"class":228},[218,477,479,482,484,487,489,493],{"class":220,"line":478},12,[218,480,481],{"class":224},"  override",[218,483,393],{"class":224},[218,485,486],{"class":396}," decimals",[218,488,323],{"class":315},[218,490,492],{"class":491},"siHFe"," 30",[218,494,265],{"class":228},[218,496,498,500,503,505,507,510,512],{"class":220,"line":497},13,[218,499,421],{"class":224},[218,501,502],{"class":396}," explorer",[218,504,323],{"class":315},[218,506,255],{"class":254},[218,508,509],{"class":258},"https:\u002F\u002Fnanexplorer.com\u002Fnano",[218,511,262],{"class":254},[218,513,265],{"class":228},[218,515,517,519,522,524,527],{"class":220,"line":516},14,[218,518,421],{"class":224},[218,520,521],{"class":396}," bip44",[218,523,323],{"class":315},[218,525,526],{"class":491}," 165",[218,528,265],{"class":228},[218,530,532],{"class":220,"line":531},15,[218,533,302],{"emptyLinePlaceholder":301},[218,535,537,539,542,545,549,552,556,559,561,563],{"class":220,"line":536},16,[218,538,481],{"class":224},[218,540,541],{"class":375}," assertAddress",[218,543,544],{"class":228},"(",[218,546,548],{"class":547},"s1jWp","address",[218,550,551],{"class":315},":",[218,553,555],{"class":554},"s8yaW"," string",[218,557,558],{"class":228},")",[218,560,551],{"class":315},[218,562,555],{"class":554},[218,564,384],{"class":228},[218,566,568,571,574,577,581,584,588,590,593,596,600,603,605,607,611,613,616,619,621],{"class":220,"line":567},17,[218,569,570],{"class":250},"    if",[218,572,573],{"class":228}," (",[218,575,576],{"class":315},"!",[218,578,580],{"class":579},"sqT1Y","ADDRESS",[218,582,583],{"class":228},".",[218,585,587],{"class":586},"sULi6","test",[218,589,544],{"class":228},[218,591,548],{"class":592},"spVlQ",[218,594,595],{"class":228},")) ",[218,597,599],{"class":598},"szlwh","throw",[218,601,602],{"class":224}," new",[218,604,239],{"class":586},[218,606,544],{"class":228},[218,608,610],{"class":609},"s-lox","this",[218,612,583],{"class":228},[218,614,615],{"class":592},"key",[218,617,618],{"class":228},", ",[218,620,548],{"class":592},[218,622,623],{"class":228},");\n",[218,625,627,631,634],{"class":220,"line":626},18,[218,628,630],{"class":629},"sZW6a","    return",[218,632,633],{"class":592}," address",[218,635,265],{"class":228},[218,637,639],{"class":220,"line":638},19,[218,640,641],{"class":228},"  }\n",[218,643,645],{"class":220,"line":644},20,[218,646,647],{"class":228},"}\n",[218,649,651],{"class":220,"line":650},21,[218,652,302],{"emptyLinePlaceholder":301},[218,654,656,659,661,663],{"class":220,"line":655},22,[218,657,658],{"class":586},"register",[218,660,544],{"class":228},[218,662,452],{"class":592},[218,664,623],{"class":228},[208,666,668],{"className":210,"code":667,"language":213,"meta":214,"style":214},"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",[195,669,670,683,714,718,743],{"__ignoreMap":214},[218,671,672,674,676,679,681],{"class":220,"line":221},[218,673,225],{"class":224},[218,675,255],{"class":254},[218,677,678],{"class":258},".\u002Fnano",[218,680,262],{"class":254},[218,682,265],{"class":228},[218,684,685,687,689,692,694,697,699,702,704,706,708,710,712],{"class":220,"line":268},[218,686,225],{"class":224},[218,688,229],{"class":228},[218,690,691],{"class":232}," create",[218,693,236],{"class":228},[218,695,696],{"class":232}," getChain",[218,698,236],{"class":228},[218,700,701],{"class":232}," identify",[218,703,247],{"class":228},[218,705,251],{"class":250},[218,707,255],{"class":254},[218,709,259],{"class":258},[218,711,262],{"class":254},[218,713,265],{"class":228},[218,715,716],{"class":220,"line":298},[218,717,302],{"emptyLinePlaceholder":301},[218,719,720,723,725,727,729,731,734,737,740],{"class":220,"line":305},[218,721,722],{"class":586},"getChain",[218,724,544],{"class":228},[218,726,262],{"class":254},[218,728,404],{"class":258},[218,730,262],{"class":254},[218,732,733],{"class":228},").",[218,735,736],{"class":592},"name",[218,738,739],{"class":228},"; ",[218,741,742],{"class":308},"\u002F\u002F \"Nano\"\n",[218,744,745,748,750,752,755,757,759,762,764,767,770,772,774],{"class":220,"line":312},[218,746,747],{"class":586},"identify",[218,749,544],{"class":228},[218,751,262],{"class":254},[218,753,754],{"class":258},"nano_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3",[218,756,262],{"class":254},[218,758,733],{"class":228},[218,760,761],{"class":592},"matches",[218,763,337],{"class":228},[218,765,766],{"class":491},"0",[218,768,769],{"class":228},"]?.",[218,771,615],{"class":592},[218,773,739],{"class":228},[218,775,776],{"class":308},"\u002F\u002F \"nano\"\n",[191,778,779,780,202,783,786,787,790,791,794,795,798],{},"Two casts, and they are the honest part of this page. ",[195,781,782],{},"ChainKey",[195,784,785],{},"ChainType"," are closed unions of the built-in values, so a new key doesn't type check without ",[195,788,789],{},"as ChainKey",", and ",[195,792,793],{},"create(\"nano\")"," wants the same cast. ",[195,796,797],{},"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.",[186,800,802],{"id":801},"the-contract","The contract",[804,805,806,820,850,863,882,902],"ul",{},[807,808,809,812,813,815,816,819],"li",{},[195,810,811],{},"static readonly key"," is what ",[195,814,658],{}," files the class under and what ",[195,817,818],{},"chain.key"," returns. Lowercase, the chain's name rather than its ticker. Registering the same key again replaces the class.",[807,821,822,618,824,618,827,202,830,833,834,618,837,618,840,618,843,202,846,849],{},[195,823,736],{},[195,825,826],{},"symbol",[195,828,829],{},"type",[195,831,832],{},"explorer"," are required. ",[195,835,836],{},"decimals",[195,838,839],{},"bip44",[195,841,842],{},"chainId",[195,844,845],{},"caip2",[195,847,848],{},"rpcDefault"," are optional and mean unknown when left out, never a default.",[807,851,852,855,856,859,860,862],{},[195,853,854],{},"assertAddress"," returns the address or throws ",[195,857,858],{},"InvalidAddressError(this.key, address)",". Throw that class and nothing else for a bad address, because ",[195,861,747],{}," counts only that as a miss and lets any other throw come back out as a bug.",[807,864,865,866,202,868,871,872,875,876,790,879,881],{},"Skip ",[195,867,854],{},[195,869,870],{},"validatesAddress"," says ",[195,873,874],{},"false",", the base method throws ",[195,877,878],{},"AddressValidationUnsupportedError",[195,880,747],{}," lists your chain as unchecked rather than pretending it said no.",[807,883,884,887,888,891,892,871,895,897,898,901],{},[195,885,886],{},"assertTxid"," is optional the same way. Override it and throw ",[195,889,890],{},"InvalidTxidError",", or skip it and ",[195,893,894],{},"validatesTxid",[195,896,874],{},". ",[195,899,900],{},"class Mine extends UTXO"," gets the 64 hex digit check for free.",[807,903,904,905,908,909,618,911,913],{},"An EVM chain is ",[195,906,907],{},"class Mine extends EVM"," with ",[195,910,842],{},[195,912,845],{}," and the rest. Both format checks come with the family.",[186,915,917],{"id":916},"decode-when-you-can","Decode when you can",[191,919,920,921,924,925,928],{},"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, ",[195,922,923],{},"src\u002Fchains\u002Ftron.ts"," is the short one and ",[195,926,927],{},"src\u002Fchains\u002Fcardano.ts"," the long one.",[186,930,932],{"id":931},"where-it-shows-up","Where it shows up",[191,934,935,936,618,939,942,943,945,946,948,949,202,952,955],{},"Once the module is imported, the chain is in ",[195,937,938],{},"chains()",[195,940,941],{},"has()"," says true, ",[195,944,722],{}," finds it by key and by display name, ",[195,947,747],{}," 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 ",[195,950,951],{},"create",[195,953,954],{},"createMcpServer",". There's no plugin path, and I'd rather say so than invent one that half works.",[957,958,959],"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":214,"searchDepth":268,"depth":268,"links":961},[962,963,964,965],{"id":188,"depth":268,"text":189},{"id":801,"depth":268,"text":802},{"id":916,"depth":268,"text":917},{"id":931,"depth":268,"text":932},"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":970},"i-lucide-plus",{"title":36,"description":966},"z22CEYRLoWHUUbeZFRdqGCxIsbdb3U0COheS1N4zo9w",[974,976],{"title":32,"path":33,"stem":34,"description":975,"children":-1},"The same five 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":977,"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.",1790261451460]