[{"data":1,"prerenderedAt":629},["ShallowReactive",2],{"navigation_docs":3,"-guide-agents":96,"-guide-agents-surround":624},[4,48],{"title":5,"path":6,"stem":7,"children":8,"icon":47},"Guide","\u002Fguide","1.guide\u002F01.index",[9,11,15,19,23,27,31,35,39,43],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Puzzle records","\u002Fguide\u002Frecords","1.guide\u002F02.records",{"title":16,"path":17,"stem":18},"Registry","\u002Fguide\u002Fregistry","1.guide\u002F03.registry",{"title":20,"path":21,"stem":22},"Lookups and views","\u002Fguide\u002Flookups","1.guide\u002F04.lookups",{"title":24,"path":25,"stem":26},"Verification","\u002Fguide\u002Fverification","1.guide\u002F05.verification",{"title":28,"path":29,"stem":30},"Balances","\u002Fguide\u002Fbalances","1.guide\u002F06.balances",{"title":32,"path":33,"stem":34},"CLI","\u002Fguide\u002Fcli","1.guide\u002F07.cli",{"title":36,"path":37,"stem":38},"Agents","\u002Fguide\u002Fagents","1.guide\u002F08.agents",{"title":40,"path":41,"stem":42},"Custom collections","\u002Fguide\u002Fcustom","1.guide\u002F09.custom",{"title":44,"path":45,"stem":46},"Playground","\u002Fguide\u002Fplayground","1.guide\u002F10.playground","i-lucide-book-open",{"title":49,"path":50,"stem":51,"children":52,"icon":95},"Collections","\u002Fcollections","2.collections\u002F00.index",[53,55,59,63,67,71,75,79,83,87,91],{"title":54,"path":50,"stem":51},"Overview",{"title":56,"path":57,"stem":58},"Bitcoin puzzle transaction","\u002Fcollections\u002Fb1000","2.collections\u002F01.b1000",{"title":60,"path":61,"stem":62},"RushWallet contest","\u002Fcollections\u002Frushwallet","2.collections\u002F02.rushwallet",{"title":64,"path":65,"stem":66},"Zden's puzzles","\u002Fcollections\u002Fzden","2.collections\u002F03.zden",{"title":68,"path":69,"stem":70},"Arweave bounties","\u002Fcollections\u002Farweave","2.collections\u002F04.arweave",{"title":72,"path":73,"stem":74},"WarpWallet challenges","\u002Fcollections\u002Fwarp","2.collections\u002F05.warp",{"title":76,"path":77,"stem":78},"Hash collision bounties","\u002Fcollections\u002Fhash_collision","2.collections\u002F06.hash_collision",{"title":80,"path":81,"stem":82},"Ballet wallets","\u002Fcollections\u002Fballet","2.collections\u002F07.ballet",{"title":84,"path":85,"stem":86},"Bitimage","\u002Fcollections\u002Fbitimage","2.collections\u002F08.bitimage",{"title":88,"path":89,"stem":90},"Bitaps mnemonic challenge","\u002Fcollections\u002Fbitaps","2.collections\u002F09.bitaps",{"title":92,"path":93,"stem":94},"GSMG.io puzzle","\u002Fcollections\u002Fgsmg","2.collections\u002F10.gsmg","i-lucide-layers",{"id":97,"title":36,"body":98,"description":616,"extension":617,"links":618,"meta":619,"navigation":621,"path":37,"seo":622,"stem":38,"__hash__":623},"docs\u002F1.guide\u002F08.agents.md",{"type":99,"value":100,"toc":608},"minimark",[101,106,115,234,240,244,302,305,427,438,442,467,471,478,486,510,514,532,536,552,578,600,604],[102,103,105],"h2",{"id":104},"six-tools-three-surfaces","Six tools, three surfaces",[107,108,109,110,114],"p",{},"MCP server, Pi extension and OMP extension call the same executors in ",[111,112,113],"code",{},"src\u002Ftool-operations.ts",". They answer identically. A fix lands once.",[116,117,118,134],"table",{},[119,120,121],"thead",{},[122,123,124,128,131],"tr",{},[125,126,127],"th",{},"Tool",[125,129,130],{},"Does",[125,132,133],{},"Arguments",[135,136,137,151,163,178,203,217],"tbody",{},[122,138,139,145,148],{},[140,141,142],"td",{},[111,143,144],{},"puzzles_stats",[140,146,147],{},"Totals, status counts and prize sums",[140,149,150],{},"none",[122,152,153,158,161],{},[140,154,155],{},[111,156,157],{},"puzzles_collections",[140,159,160],{},"Every collection with its author and both counts",[140,162,150],{},[122,164,165,170,173],{},[140,166,167],{},[111,168,169],{},"puzzles_show",[140,171,172],{},"One puzzle's complete record",[140,174,175],{},[111,176,177],{},"id",[122,179,180,185,188],{},[140,181,182],{},[111,183,184],{},"puzzles_list",[140,186,187],{},"Puzzles filtered by collection, status and public key availability",[140,189,190,193,194,193,197,193,200],{},[111,191,192],{},"collection",", ",[111,195,196],{},"status",[111,198,199],{},"withPubkey",[111,201,202],{},"limit",[122,204,205,210,213],{},[140,206,207],{},[111,208,209],{},"puzzles_verify",[140,211,212],{},"A published key against its stored address",[140,214,215],{},[111,216,177],{},[122,218,219,224,227],{},[140,220,221],{},[111,222,223],{},"puzzles_balance",[140,225,226],{},"The live balance of a puzzle address",[140,228,229,193,231],{},[111,230,177],{},[111,232,233],{},"apiKey",[107,235,236,237,239],{},"Every tool is annotated read only and idempotent. Five are closed world. ",[111,238,223],{}," is open world, because it reaches a block explorer. A host that lets a model call it should know that.",[102,241,243],{"id":242},"mcp","MCP",[245,246,251],"pre",{"className":247,"code":248,"language":249,"meta":250,"style":250},"language-bash shiki shiki-themes github-light github-light vitesse-dark","puzzles mcp\nclaude mcp add puzzles --scope user -- npx -y @agntn\u002Fpuzzles mcp\n","bash","",[111,252,253,266],{"__ignoreMap":250},[254,255,258,262],"span",{"class":256,"line":257},"line",1,[254,259,261],{"class":260},"sTnI0","puzzles",[254,263,265],{"class":264},"skmWX"," mcp\n",[254,267,269,272,275,278,281,285,288,291,294,297,300],{"class":256,"line":268},2,[254,270,271],{"class":260},"claude",[254,273,274],{"class":264}," mcp",[254,276,277],{"class":264}," add",[254,279,280],{"class":264}," puzzles",[254,282,284],{"class":283},"sAsIS"," --scope",[254,286,287],{"class":264}," user",[254,289,290],{"class":283}," --",[254,292,293],{"class":264}," npx",[254,295,296],{"class":283}," -y",[254,298,299],{"class":264}," @agntn\u002Fpuzzles",[254,301,265],{"class":264},[107,303,304],{},"Or in a client's config:",[245,306,310],{"className":307,"code":308,"language":309,"meta":250,"style":250},"language-json shiki shiki-themes github-light github-light vitesse-dark","{\n  \"mcpServers\": {\n    \"puzzles\": { \"command\": \"npx\", \"args\": [\"-y\", \"@agntn\u002Fpuzzles\", \"mcp\"] }\n  }\n}\n","json",[111,311,312,318,337,415,421],{"__ignoreMap":250},[254,313,314],{"class":256,"line":257},[254,315,317],{"class":316},"s14qF","{\n",[254,319,320,324,328,331,334],{"class":256,"line":268},[254,321,323],{"class":322},"sq9Yo","  \"",[254,325,327],{"class":326},"sXmn8","mcpServers",[254,329,330],{"class":322},"\"",[254,332,333],{"class":316},":",[254,335,336],{"class":316}," {\n",[254,338,340,343,345,347,349,352,355,358,360,362,365,368,370,373,375,378,380,382,385,387,390,392,394,396,399,401,403,405,407,409,412],{"class":256,"line":339},3,[254,341,342],{"class":322},"    \"",[254,344,261],{"class":326},[254,346,330],{"class":322},[254,348,333],{"class":316},[254,350,351],{"class":316}," {",[254,353,354],{"class":322}," \"",[254,356,357],{"class":326},"command",[254,359,330],{"class":322},[254,361,333],{"class":316},[254,363,354],{"class":364},"s2tGe",[254,366,367],{"class":264},"npx",[254,369,330],{"class":364},[254,371,372],{"class":316},",",[254,374,354],{"class":322},[254,376,377],{"class":326},"args",[254,379,330],{"class":322},[254,381,333],{"class":316},[254,383,384],{"class":316}," [",[254,386,330],{"class":364},[254,388,389],{"class":264},"-y",[254,391,330],{"class":364},[254,393,372],{"class":316},[254,395,354],{"class":364},[254,397,398],{"class":264},"@agntn\u002Fpuzzles",[254,400,330],{"class":364},[254,402,372],{"class":316},[254,404,354],{"class":364},[254,406,242],{"class":264},[254,408,330],{"class":364},[254,410,411],{"class":316},"]",[254,413,414],{"class":316}," }\n",[254,416,418],{"class":256,"line":417},4,[254,419,420],{"class":316},"  }\n",[254,422,424],{"class":256,"line":423},5,[254,425,426],{"class":316},"}\n",[107,428,429,430,433,434,437],{},"The server speaks MCP over stdio. Every call is checked against the tool's JSON Schema before an executor sees it. Bringing your own transport? ",[111,431,432],{},"createMcpServer()"," is exported from ",[111,435,436],{},"@agntn\u002Fpuzzles\u002Fmcp",".",[102,439,441],{"id":440},"the-limits-live-once","The limits live once",[107,443,444,446,447,449,450,452,453,455,456,458,459,462,463,466],{},[111,445,177],{}," is 1 to 100 characters. ",[111,448,192],{}," up to 50. ",[111,451,233],{}," up to 200. ",[111,454,202],{}," an integer from 1 to 500, 50 by default. ",[111,457,196],{}," one of the five values. Those numbers sit in one ",[111,460,461],{},"facts"," table next to the tool names and descriptions. The schemas are built from it. The executors check the same numbers themselves. A host that skips schema validation hits the same wall, as ",[111,464,465],{},"InvalidArgumentError",". A limit of 501 is rejected, not clamped. A model that asked for 501 should learn the limit, not get 500 back and wonder.",[102,468,470],{"id":469},"what-the-text-carries","What the text carries",[107,472,473,474,477],{},"An MCP client sees the text a tool returns and nothing else. So the text carries the whole record, one ",[111,475,476],{},"name: value"," line per field:",[245,479,484],{"className":480,"code":482,"language":483,"meta":250},[481],"language-text","b1000\u002F1 solved  0.001 BTC   1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH\nchain: bitcoin  address kind: p2pkh\nhash160: 751e76e8199196d454941c45d1b3a323f1433bd6\npublic key: 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (compressed)\nprivate key: 0000000000000000000000000000000000000000000000000000000000000001 (hex)\nwif: KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sVHnoWn\nstarted: 2013-01-09 11:59:15\nsolved: 2013-01-10 02:54:44 (14h 55m)\npre-genesis: yes\ntransactions: 2\n    funding 2013-01-09 11:59:15 0.03 BTC    9223da07e858c6f153fbb8a24db52374ca19d2639098207c71710610cfda808e\n    claim   2013-01-10 02:54:44 0.03 BTC    3da9b8e4a9c056b22d4fd09784402fd1caab1ecf621ba074efc20dc03ff04277\nclaim: https:\u002F\u002Fblockstream.info\u002Ftx\u002F3da9b8e4a9c056b22d4fd09784402fd1caab1ecf621ba074efc20dc03ff04277\nexplorer: https:\u002F\u002Fblockstream.info\u002Faddress\u002F1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH\nsource: https:\u002F\u002Fbitcointalk.org\u002Findex.php?topic=5218972\nkey range: 1..1 (hex, 1 bit)\n","text",[111,485,482],{"__ignoreMap":250},[107,487,488,489,193,492,495,496,498,499,502,503,505,506,509],{},"The key prints in every form the record has. Hex and WIF here, a BIP38 payload with its passphrase on a Ballet card, an xpub with the published shares on bitaps. Then the dates, the solver, every transaction with its txid, the claim link and the assets. Absent things say so: ",[111,490,491],{},"public key: unknown",[111,493,494],{},"private key: unknown",". A line that vanishes reads as not shown, and a model fills it from memory. ",[111,497,184],{}," prints ",[111,500,501],{},"12 of 77 matching puzzles:"," when the limit cut the list, so the next call knows to raise it. ",[111,504,157],{}," prints the same rows as ",[111,507,508],{},"puzzles collections",". A model learns the keys before it guesses one.",[102,511,513],{"id":512},"what-sets-iserror","What sets isError",[107,515,516,517,519,520,523,524,527,528,531],{},"An unverifiable puzzle is an answer. ",[111,518,209],{}," on ",[111,521,522],{},"b1000\u002F71"," returns ",[111,525,526],{},"b1000\u002F71: unverifiable (Puzzle has no private key)"," with ",[111,529,530],{},"isError"," unset. Only a thrown error sets it: an unknown id, an argument outside its limits, a provider failure. Error text is sanitized. Every control character, format character and line separator becomes a space, and an echoed tool name is quoted. Those values arrive from the model or from a provider. One raw newline would forge a line that reads as the server's own answer.",[102,533,535],{"id":534},"pi-and-omp","Pi and OMP",[245,537,539],{"className":247,"code":538,"language":249,"meta":250,"style":250},"pi install npm:@agntn\u002Fpuzzles\n",[111,540,541],{"__ignoreMap":250},[254,542,543,546,549],{"class":256,"line":257},[254,544,545],{"class":260},"pi",[254,547,548],{"class":264}," install",[254,550,551],{"class":264}," npm:@agntn\u002Fpuzzles\n",[107,553,554,555,558,559,562,563,566,567,569,570,573,574,577],{},"Both extensions are declared in ",[111,556,557],{},"package.json",". They add ",[111,560,561],{},"details"," next to the text, the structured object the harness renders: the puzzle record for a show, ",[111,564,565],{},"{ matched, returned, ids }"," for a list, the verify result, the balance in base units as strings. MCP drops ",[111,568,561],{}," and keeps the text. OMP rebuilds the parameter schemas from its own TypeBox build, labels the tool group ",[111,571,572],{},"Puzzles",", and renders a call line like ",[111,575,576],{},"Show puzzle b1000\u002F71"," with control characters stripped.",[107,579,580,581,584,585,588,589,592,593,596,597,599],{},"The extensions load the shared executors through literal ",[111,582,583],{},"import()"," specifiers, ",[111,586,587],{},"src\u002F"," in a checkout and ",[111,590,591],{},"dist\u002F"," when installed, so a bundling host can see the dependencies. The packed layout is a CI gate. ",[111,594,595],{},"pnpm test:packed"," unpacks the tarball and runs both extensions and the MCP server from it with no ",[111,598,587],{}," next to them.",[601,602,603],"note",{},"A puzzle in a prompt is data. A verified key says the record is consistent, not that the funds are there. A key range says where a scanner would look, not that anyone should.",[605,606,607],"style",{},"html pre.shiki code .sTnI0, html code.shiki .sTnI0{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#80A665}html pre.shiki code .skmWX, html code.shiki .skmWX{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#C98A7D}html pre.shiki code .sAsIS, html code.shiki .sAsIS{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#C99076}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 .s14qF, html code.shiki .s14qF{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#666666}html pre.shiki code .sq9Yo, html code.shiki .sq9Yo{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#B8A96577}html pre.shiki code .sXmn8, html code.shiki .sXmn8{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#B8A965}html pre.shiki code .s2tGe, html code.shiki .s2tGe{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#C98A7D77}",{"title":250,"searchDepth":268,"depth":268,"links":609},[610,611,612,613,614,615],{"id":104,"depth":268,"text":105},{"id":242,"depth":268,"text":243},{"id":440,"depth":268,"text":441},{"id":469,"depth":268,"text":470},{"id":512,"depth":268,"text":513},{"id":534,"depth":268,"text":535},"The same six tools over MCP and the Pi and OMP extensions. What the text carries and where the limits live. The one tool that leaves the process.","md",null,{"icon":620},"i-lucide-bot",true,{"title":36,"description":616},"B1a9KmdEWGTiZ6byDvYLewq8UCwMXLO1VdpDAiXXYkw",[625,627],{"title":32,"path":33,"stem":34,"description":626,"children":-1},"The puzzles command. Eight subcommands and what each prints. Which ones exit 1 and what --json gives a script.",{"title":40,"path":41,"stem":42,"description":628,"children":-1},"Extend NamedCollection or NumericCollection with a key and an author and a puzzle list. Register a loader. From then on the registry treats it like a built-in.",1789734790029]