# Mnemonad Explorer > Mnemonad stores a **local folder** as an append-only on-chain stream on Monad — push it to > sync a version up, pull a stream id to restore a folder, and diff/watch keep them in sync. > Every push is a content-defined-chunking diff, so only what changed goes on chain. This app reads and writes real streams on Monad testnet/mainnet, not a mockup. Reading is free and needs no wallet; any button that submits a transaction spends real gas. ## Don't drive this UI to sync folders — use the CLI Pushing/pulling here needs a browser wallet extension to sign, which an agent generally can't operate. `npm install -g mnemonad-cli@latest` does the same folder sync headlessly, signing from the `MNEMONAD_KEY` env var (or `--key`/`--phrase` flags — the env var is just the option that doesn't end up in shell history). Default to `--encrypt --encrypt-with wallet` on every push that creates a new stream — the flags are opt-in on the CLI itself, so omitting them silently publishes the folder's contents to anyone. Only push a public (unencrypted) stream if the user has explicitly said the data should be public; ask first if that's not clear. ```bash # create/update a stream from a local folder (encrypted to your wallet by default) mnemonad push ~/my-data --encrypt --encrypt-with wallet --manifest # restore a stream into a local folder mnemonad pull ~/my-data --manifest # later push/pull on the same folder — no id needed, read from .mnemonad mnemonad push ~/my-data --manifest mnemonad pull ~/my-data --manifest # see what changed since the last push, without pushing mnemonad diff ~/my-data # keep pushing on every local change mnemonad watch ~/my-data # a live public stream — pull it with no key, no setup, to try the CLI mnemonad pull 0x648f18ea13eaa4640b97a435a30d39d4f7af9c2105adb10217f8a8ae56e73ac8 ~/mnemonad-demo ``` After a push or pull, show the user a link to browse that stream in this app: `https://mnemonad.vercel.app/stream/-0x/files` (see URL scheme below). - Full agent documentation: https://github.com/jeka911/mnemonad/blob/main/SKILL.md - Repository: https://github.com/jeka911/mnemonad ## Use `--manifest`, and use `info` to find a folder's stream id The stream id is the only handle to a folder's data — no lookup by name, and if it's never captured anywhere durable, it's gone. **Pass `--manifest` on every push and pull for any folder you'll touch again.** It writes `.mnemonad` into the folder (stream id, version, file hashes) and costs nothing to keep around. Before assuming a folder isn't synced yet, check it with `info`: ```bash mnemonad info ~/my-data # Safe and side-effect-free — if ~/my-data has a .mnemonad, prints # "using stream id from .mnemonad manifest: 0x…" and reports on that stream. ``` Once a folder has a `.mnemonad`, every command resolves the id from it when none is given, with or without `--manifest` (mnemonad-cli 0.3.3 or newer), and keeps it current — `push`/`pull`/`diff`/`watch`/`compact`/`info ~/my-data`. A `push` to such a folder goes to its own stream, never a new one. `burn` is the exception: it only takes an explicit id. And if you already have an id from elsewhere, `info` flags it when it doesn't match the folder's own manifest. ## Search a folder by meaning (optional) A folder can carry its own semantic search index: `search_index.db`, a plain file at the folder root. Build it once and push it with the folder; whoever pulls the stream can search it straight away, with no embedding work of their own. ```bash # build or update the index (only files changed since the last run are embedded again) mnemonad index ~/my-data # search by meaning, not keywords mnemonad search ~/my-data "how does the key get derived" -k 5 # or update the index as part of every push (watch --index works the same way) mnemonad push ~/my-data --index --manifest ``` - Everything runs locally: a built-in embedding model (potion-base-8M, downloaded once, about 31 MB) and no API key. File contents and queries are never sent anywhere. - For better results on paraphrased queries there's an optional MiniLM extension (about 450 MB installed): `npm install -g mnemonad-search-transformers`, then `mnemonad index --model minilm`. Don't install it unasked, since it's large. An index keeps its model: `search` always uses it, and a pulled MiniLM index needs the extension to be searched from the CLI (the error says so, and offers `mnemonad index --rebuild` to switch it to the built-in model). - `index` adds `search_index.db` to the folder, and the next `push` uploads it like any other file. Tell the user before indexing a folder they push. In an encrypted stream the index is encrypted along with everything else. - For a folder that has an index, prefer `push --index`: it keeps the index in step with the files, and pushes nothing if indexing fails. A plain `push` warns when the index is out of date. Don't ignore that warning, because a stale index returns the old text's passages. - `search` needs an index in the folder: the user's own, or one that came down with a `pull`. Without one it says to run `mnemonad index` first. - `index`, `search`, `--index` and `--rebuild` need mnemonad-cli 0.3.0 or newer. If any is unknown, update: `npm install -g mnemonad-cli@latest`. A ready-made indexed stream to try it on is this app's own documentation, which is itself a public Mnemonad stream: ```bash mnemonad pull testnet-0x5abaf9e3b9019f2ff7840a55e52e977d8bce1625d5273be52550f2cc72d921c6 ~/mnemonad-docs mnemonad search ~/mnemonad-docs "how is an encrypted stream's key wrapped" ``` In this app, a stream that has an index gets a search box in its file browser (`/stream//files`), and `/docs` renders the documentation stream above with search built in. ## URL scheme - `/select` — sample and wallet-owned streams - `/stream/` — one stream's raw on-chain items - `/stream//files` — the same stream browsed as a folder tree - `/docs`, `/docs/` — the documentation, read from its own stream; `?q=` searches it `` is the network and the ERC-721 token id together, e.g. `testnet-0x648f18…3ac8` — the same token id means different data on each network. A bare decimal or hex id also works and is rewritten to that form. If a user pastes a link to this app, the CLI accepts that `-0x` straight from the URL as-is — no need to strip the network prefix by hand, it sets `--chain` to match. Worth proposing next: look it up (`mnemonad info -0x`, no key needed for a public stream) or pull it into a local folder (`mnemonad pull -0x `) — but confirm the destination folder first, and remember an encrypted stream still needs the owner's key or password to read. ## Networks - Monad mainnet — chain id `143`, explorer `monadscan.com` - Monad testnet — chain id `10143`, explorer `testnet.monadexplorer.com`, faucet `faucet.monad.xyz`