Guide

Playground

The page behind puzzles.agntn.dev/playground runs the library in your browser. What it can tell you and what it leaves alone.

The Playground imports @agntn/puzzles into the page and runs it in your browser. Every show, list and verify is the library's own answer, through the same executors the MCP server and the extensions call. Nothing is sent anywhere. The docs worker serves the page and answers one balance route. That's it.

OperationRunsTool equivalent
ShowshowTool(id) and the record behind itpuzzles_show
ListlistTool({ collection, status, withPubkey, limit })puzzles_list
VerifyverifyTool(id)puzzles_verify
Balance/api/balance/<id> on the docs worker, which runs puzzle.balance()puzzles_balance
CollectionscollectionsTool()puzzles_collections
AuthorsauthorsTool()puzzles_authors
AuthorauthorTool(key), which takes a collection key toopuzzles_author
StatsstatsTool(), which loads every collectionpuzzles_stats

The sample chips load the fifty-five puzzles the landing walks through, one per collection at least. Want to see a PuzzleNotFoundError? Load a sample and change one character. The author operation gets a chip per author key, and a key nobody published under answers with UnknownAuthorError and the keys that do exist.

The form writes itself into the address. /playground?op=show&id=bits%2F71 opens the page on that answer, /playground?op=list&collection=zden&status=unsolved on that list, /playground?op=author&key=peter-todd on that author. Paste it to someone and they see what you saw. The permalink button copies the current one.

The two snippets

The request panel prints the same call as a CLI line and as a tool invocation in JSON, both with copy buttons. They're built from the form, and a limit reaches both: --limit 50 on the CLI line, "limit": 50 in the tool call.

The full response

The response panel summarises the answer: the record with its readout, the verdict, the balance, the author, the totals, or the rows of a list. The text the tool actually returned opens from Full tool response in a dialog, with a copy button that copies it as is. The footer says where the answer came from and how many milliseconds the call took in your browser.

What green means

Verified means the published key derives the stored address. It doesn't mean the address holds anything, and the page repeats that under every verified puzzle. The balance is the one number here that didn't come from a record. The worker asks the chain's explorer and keeps the answer for five minutes. What you see is the explorer's word, not the library's.

One page per puzzle

A show result links to the puzzle's own page, /collections/bits/71, with the whole record: every key row, every transaction with its explorer link, the images the record ships, the JSON, and the text a model gets. Every collection page lists its puzzles the same way. All 558 have a page.

The landing

The panels on the home page walk through the same fifty-five puzzles on one clock. Each step loads its collection through get(). That's the lazy registry doing its thing where you can watch it. Hover a panel to pause it. The arrows under the record step it by hand.