Letterlock

The seal anyone can press, and only you can break.

Passkeys become encryption addresses on Monad.

npm · 27 Sep, 10:43 UTC

$ npx letterlock resolve agent:10260
agent:10260 has a key on Monad mainnet (143)
  kid        e5b30e2e52ec0dec
Letterlockv0.1.0 · Monad Metropolis 2026 · Track 04

The note, today

Your AI assistant keeps notes on everything you tell it, in a database you will never see.

the dentist moved to Thursday 10:40stored as written

Readable by whoever runs the server.

Letterlockv0.1.0

Why it stays

People have no address to encrypt to.

SERVER

The server keeps the key.

You trust whoever runs it.

PGP

Manage your own keys.

People did not.

WALLET

A wallet address.

It signs. Nobody can encrypt to it.

Letterlockv0.1.0

The product

One passkey, one encryption address.

One button: the passkey derives a key and an account; the account posts the public half to Monad.

letterlock-app.vercel.app27 Sep 2026
The live app's home page: One passkey, one encryption address, and the Create my encryption address button beside an example address card.
Letterlockv0.1.0

Posted once, sealed to by anyone.

THE RECIPIENT, ONCEANYONE, ANY TIME Your passkeyX25519 keyThe directory Any senderEnvelopeInboxThe note nothing storedMonad mainnet plain JSON PRFpublish(pub, epoch) HPKEdroptap keyOf · one read
Letterlockv0.1.0

Mainnet · 27 Sep 2026

Storage cleared. The seal still breaks.

letterlock-app.vercel.app/open
The live app's inbox for 0x4f48…463c: one sealed letter, dropped in block 108,386,081, and an Open with passkey button.

The agent's letter

One passkey tap

"storage cleared + reopen": {
  "sameAddress": true,
  "opened": true
}

The agent's drop: 0x44428957…02d9

Letterlockv0.1.0

Five calls, one passkey.

Derive

PRF output becomes an X25519 key. Nothing stored.

WebAuthn PRF

Publish

Posted by the passkey itself.

Resolve

One read, any app.

keyOf

Seal

No passkey, no transaction.

HPKE

Rotate

Old notes still open.

Letterlockv0.1.0

Why Monad

Read on every seal, written once per person.

Post a key

70,863gas

Look up + seal

25.578ms

p50

Drop 490 bytes

45,780gas

ERC-8004 agent

10260

mera: every passkey is a Monad account

Letterlockv0.1.0

Traction · 27 Sep 2026

Shipped this week. Adoption is next.

letterlock@0.1.0 on npm
Live app, judges' route
Agent 10260, live
ETHJKT Discord intro · portal update
0

outside integrations, so far.

The ask is next.

Letterlockv0.1.0

The ask

Seal to a person, not to a server.

1

Builders: one read.

npm i letterlock

2

Judges: two devices.

letterlock-app.vercel.app/judge

/judge · scan to try

Letterlockv0.1.0

01 / 10