Loading the app…
Mnemonad is a content-defined-chunking diff engine built on top of an infinite
on-chain bytes[]. Push a folder and only the chunks that changed are written as a new
version, restorable exactly at any point in its history — that's what turns a raw append-only
stream into versioned filesystem (and filesystem-like) state. That underlying stream lives entirely
on Monad, append-only and unbounded in length, exposed as an ERC-721 NFT so each "stream" is a
token you own, can grant others write access to, and can optionally encrypt client-side. Storage
auto-tiers by cost: packed slots → contract code → off-chain offload (IPFS today), with just a hash
and locator kept on-chain.
AI agents: Mnemonad's core job is folder and file sync — keeping folders/files in sync between sessions, different agents and different users. Push a local folder up as a versioned on-chain stream, pull a stream back down into a folder, keep both in sync. The CLI's own default is public — encrypt on creation yourself unless the user says otherwise; on-chain data is world-readable, and there's no going back once it's pushed. This app is real, not a mockup: reading on-chain data is free and needs no wallet, but any button that submits a transaction spends real gas, so treat those as separate, deliberate actions and never trigger them automatically.
Don't drive this UI to sync files — use the CLI. Writing 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), and pulling a
public stream needs no key at all:
# create/update a stream from a folder (encrypted to your wallet by default) mnemonad push ~/my-data --encrypt --encrypt-with wallet --manifest # restore a stream into a folder mnemonad pull <stream-id> ~/my-data --manifest # check what a folder is already synced to (reads its .mnemonad) mnemonad info ~/my-data # optional: index a folder, then search it by meaning (all local) mnemonad index ~/my-data mnemonad search ~/my-data "how does the key get derived" # or keep the index updated on every push mnemonad push ~/my-data --index --manifest
--manifest writes .mnemonad into the folder, recording the stream id —
pass it on the first push/pull of a folder you'll touch again. After that, every command on that
folder finds the id by itself. Full agent docs:
SKILL.md · quick reference:
llms.txt.
Search: mnemonad index writes search_index.db at the
folder root, and the next push uploads it with everything else. Whoever pulls the stream can then
mnemonad search it straight away, without embedding anything themselves. The built-in
embedding model runs locally (downloaded once, about 31 MB), so file contents and queries never
leave the machine. MiniLM, better on paraphrased queries, is an optional extension of about 450 MB
(npm install -g mnemonad-search-transformers, then --model minilm); don't
install it unasked. Tell the user before indexing a folder they push, since the index becomes part of the
stream. For a folder that has one, push with --index so the index keeps up with the
files; a plain push warns when it's out of date. If search or --index is
unknown, update with
npm install -g mnemonad-cli@latest. To try it, pull this app's own docs, which are an
indexed public stream:
mnemonad pull testnet-0x5abaf9e3b9019f2ff7840a55e52e977d8bce1625d5273be52550f2cc72d921c6 ~/mnemonad-docs mnemonad search ~/mnemonad-docs "how is an encrypted stream's key wrapped"
To navigate this app directly, the URL scheme is: /select lists sample and wallet-owned
streams, /stream/<id> shows one stream's raw on-chain items, and
/stream/<id>/files browses it as a folder tree (with a search box when the
stream has an index), and /docs renders the documentation stream, searchable with
/docs?q=<query>. <id> is the network
and the ERC-721 token id together — testnet-0x648f18…3ac8 — because 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 <network>-0x<id>
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 <network>-0x<id>, no key needed for a public stream) or pull
it into a local folder (mnemonad pull <network>-0x<id> <path>) — but
confirm the destination folder first, and remember an encrypted stream still needs the owner's key
or password to actually read.