⬡ Verified build proof · Live on 0G Aristotle mainnet ·
2026-07-04
See the whole thing in a few minutes.
No time to run it? You don't have to — this page is the whole product in a few minutes:
every screen as a real screenshot, the on-chain iNFT mint shown on the 0G explorer, and a
runnable command behind every claim. A private journal whose memory understands you,
without that understanding costing you your privacy or ownership.
your memory, minted to your own wallet on 0G — and never for sale
100
Lighthouse a11y · best-practices · SEO
NOW LIVE · 0G ARISTOTLE MAINNET (CHAIN 16661)
Not testnet. Live, on-chain, provable.
Knole runs on 0G mainnet at
knole.me. Every privacy and ownership claim below is a
real mainnet transaction you can open on
0G ChainScan right now — not
a promise, a receipt. Each row: what it proves, and the transaction that proves it.
Feature
What the chain proves
Outcome · on-chain
Memory iNFT (ERC-7857)
KnoleMemory contract deployed to mainnet; your memory mints to your own wallet,
un-sellable
The sensing model's training data is published on 0G Storage (public,
SHA-256-checkable) and a provenance commitment binding dataset + model + config is
anchored on-chain
Reflection (GLM-5.1), voice (Whisper) and image (Z-Image) run on the 0G mainnet
Private Computer, TEE-sealed; private web research (Qwen-Max, verified tier) runs
with the query anonymised — your name stripped before it ever leaves
Live on the 0G mainnet router · balance-funded
⭐ Self-custody mint (v1.1)
The user's OWN wallet signs the iMint - the mint transaction's from equals the token owner; no server key involved
KnoleCommitment: no-oracle settlement read from the anchor as of the DEADLINE, so the result is a fact about the window and not a race between whoever calls first; structurally can never pay more than staked; forfeits burn, provably
The Auditable AI dataset is downloadable by its 0G Storage root
0x2bda0a7c…4608cd0 (SHA-256 0x914022c3…); the fine-tuned sensing
model (Qwen2.5-0.5B LoRA) is trained + committed on mainnet but is
not yet wired into the app
— sensing still runs on the big sealed model, and the on-device model is
provenance-shipped, not functional. Stated plainly, not dressed up.
THE FULL FLOW · ~90 SECONDS
Watch it work, end to end
Every frame below is a real screenshot from the live deploy — the seeded showcase and the
guest onboarding path, captured this session. Read it top to bottom and you've seen the
whole product. Prefer to watch?
The Wave 3 demo
runs the same flow end to end — including the Duet seal held and released between two real
browsers.
STEP 01 · THE FIRST REFLECTION
Write one honest line. A reflection arrives.
A guest types a single sentence; Knole reflects it back — anonymised before the model,
grounded in your own words. No signup to feel it.
Live recording guest onboarding on knole.me — write
→ reflection, unedited.
STEP 02
Land — no signup, no wall.
You can read, write, and feel the memory before you ever make an account.
STEP 03 · TODAY
A calm place to write.
Pick a prompt or just start. When you hit Reflect, Knole weaves your real past into what
it writes back — then sends you off to go live the answer, not to keep talking to a bot.
STEP 04 · THE INDEX
Everything it remembers, in your own words.
Each memory shows its source quote, a recall count, and a ⬡ 0G badge. Editable,
forgettable, append-only — a contradiction retires the old memory, never deletes it.
STEP 05 · ASK MY LIFE
Ask your own past — get receipts.
It answers from your real entries, quoting you back by date, never paraphrasing without
a source — anonymised before the AI ever saw it.
STEP 06 · THE MIRROR
A day-15 synthesis of your own words.
For your first two weeks the Mirror shows only a quiet streak — missed days don't count
against you. On day 15 it reveals a synthesis of your own words: each pattern cites a
real entry, and it offers no advice. Anticipation, then reflection.
STEP 07 · REMEMBERED
Your past returns, gently.
A past entry resurfaces with a "now" reflection and a chance to answer your past self.
STEP 08 · CHAT
A thinking partner, not a chatbot.
It opens with one quiet question and takes a single thing at a time — and every turn is
anonymised before the model. Encrypted; only you can read it.
STEP 09 · OWN IT
Recover any entry, live from chain.
Postgres is just a cache. In Settings, "Verify recoverable" rebuilds a real entry from
its 0G root — ✓ RECOVERED LIVE FROM 0G — with the on-chain links right
there.
NEW SINCE SUBMISSION
What shipped after the write-up
Three things the submission called pre-mainnet — sealed inference off, no logged-in
end-to-end run, no ownership layer — are now done, alongside a deeper product. Every frame
below is a real screenshot, captured this pass. The receipts follow.
Own it as a token. Your evolving memory mints as an ERC-7857 iNFT to
your own wallet — encrypted on 0G, and not for sale (the contract reverts every
transfer). Here: Token #3, linked to the 0G explorer.
Seal your 0G copy to your wallet. The durable copy is re-encrypted
under a key only your wallet can derive — sealed to 0x0e7d…1bab, a key
Knole never holds.
A real, logged-in session. Signed in through a real disposable inbox
via Privy email-OTP — the authenticated end-to-end run, done headlessly. Mindfile export
and Sign out, all live.
When the words turn heavy. An entry about self-harm pauses the
reflection and surfaces real help — 988, text HOME to 741741, 911 — never a chatbot
pretending to be a therapist (SB243).
It tells you it's an AI. The Mirror holds back until day 15 — missed
days don't count — and every surface discloses that Knole is a reflection, not a person.
Future-Self. A letter from the person your own entries are pointing
toward — grounded in real commitments, not generic advice.
A private Wrapped. A shareable card of the shape of your year
— never the words.
Your year in one page. The arc of what you wrote, at a glance.
On this day. What you were carrying a year ago, back to answer your
past self.
Four lenses. Read the same entry as a Gentle Mirror, Pattern Finder,
Blunt Friend, or Decision Coach — an anti-sycophancy engine that won't just flatter you.
Night. A full dark theme across every surface, with no flash on load.
WAVE 3 · BUILT IN THE WINDOW
Wave 3: three contracts, six flagships, a daily gravity
Everything below shipped inside the wave-3 window and is live at knole.me — a hardened
ERC-7857 v1.1 with a 112-test Foundry suite (unit + fuzz + invariants,
up from zero at wave 2, and the first tests written exposed the live bug that
forced the redeploy), a proof-of-journaling anchor, a no-oracle staking escrow,
ERC-8004 registration on 0G's Trustless-Agents registry, and sealed
inference that now fails over across TeeML enclaves so one provider going
down costs latency, never the attestation. Every frame is a real screenshot from
production, captured during verification.
The relationship layer — what no ordinary journal does. Knole records not just what is true but what stopped being true, and when. Bi-temporal edges are extracted from your prose alone — nobody types a field — and dated to the entry that stated them. Here: works at Corvid now, and under What changed, works at Meridian Labs, true from Jul 9, 2026 until Aug 21, 2026. A tie is never deleted, only invalidated by the newer fact that contradicts it.
Duet — one question a day, for two. Neither partner can read the other's answer until both have written; the lock lives in the server's payload, not a promise. Streaks belong to the couple, quiz days reveal guesses beside truths, and the weekly Us mirror reflects on the pair from unlocked answers only.
The Monthly Archetype. Who you were this month, named from your own words — and never without receipts: every claim carries a verbatim quote the server verifies against your actual entries before anything renders. Sealed until the 1st, for everyone, paid included.
Commit — a commitment contract, never a wager. Stake OG against journaling N days; KnoleCommitment settles against the on-chain proof-of-journaling anchor with no oracle at all. You can never receive more than you staked; misses refund your completion share and burn the rest, provably. Proven with real money on mainnet — staked and refunded to the wei.
Wellbeing — a toolbox, not a couch. PHQ-9 and GAD-7 check-ins with change flags and an immediate crisis route on item 9, the five-step thought record, a field guide to thirteen thinking patterns, and calm guided exercises.
The Memory Passport. What your self-model contains, the exact payload a granted agent would receive per scope — inspectable, not asserted — and a portable bundle stamped with your iNFT's on-chain provenance.
The emotions calendar. Days colored by how they actually felt, consecutive days joining into runs — the shape of a habit, visible — with streak tiles and an analytics dashboard beneath.
The filing strip. After a reflection, you watch the Index file what it learned — the actual extracted memories appear as typed chips, dated and grounded (mem0-grade extraction: transitions captured, relative dates resolved against the entry's own day).
Sectioned entries. An optional structured page — what happened, how it felt, what you're glad of, what you're seeing, who mattered — whose placeholders do the gentle priming.
The nudge engine. One reminder a day at a fresh random moment inside your window — and only on days you haven't written. Journal first and it stays quiet. Delivered as real web push, dispatched by an idempotent cron.
Proactive check-ins. Say it in your own words — "every Sunday evening, ask how my week actually went" — and the journal asks itself on schedule, answers from your entries, and only notifies when the answer is worth your attention.
Milestones. The 5th, the 10th, then every 25th — a one-time celebration at the moment of crossing, and a permanent mark on the timeline.
EVERY FEATURE, IN USE
The rest of the product
The surfaces the flow above doesn't linger on — captured in use, so the whole app is
visible end to end, not just described.
The reveal, in full. Recurring themes charted, the overnight
Dreaming that surfaces one new pattern, and every word
Sealed in 0G TEE.
No signup — a first hello. One honest line, the SB243 age gate, and an
import path in — a reflection in under 90 seconds.
The 30-second daily on-ramp. A one-tap check-in and a gentle prompt —
the retention loop that earns the day-15 reveal.
It reaches back, gently. A year-ago resurfacing, and a consent-gated
"quiet noticing" when you've gone quiet on something.
Bring your data. Paste an old journal or a ChatGPT export — it becomes
memories, same engine, same encryption.
Save to Knole from anywhere. Highlight a tweet, an article, a reel —
one click, encrypted, only you.
Never gates emotion. A signature-verified paywall — the daily practice
stays free; only depth is paid.
Editable, forgettable. Correct any memory — your edit always wins — or
forget it. Append-only, never a black box.
EVERYTHING CHATGPT DOES — PRIVATE
The everyday surfaces, on 0G
Knole isn't only backward-looking. It researches the live web, answers anything, makes
images, and runs guided arcs — every one private, every one on 0G. Real outcomes, captured
this pass — not descriptions.
The Life Canvas — the artifact only your own data can draw. One private
page that is your life: your mood traced across the days you wrote, the themes
you circle (sized and tinted by how they land), the people who keep appearing, and the
shape of your months. Not a chart you asked an AI to render — the one made of
you, that never leaves your device.
Private Research — real web search, anonymized. A forced live web
search on 0G's Qwen-Max; your name is stripped before the query leaves. Here: journaling
for anxiety, answered with a 2018 Journal of Affective Disorders meta-analysis
of 24 trials — cited, not hallucinated.
Ask Knole — a private ChatGPT that can't read your journal. Anything on
your mind, anonymised before the model and saved to nothing. Here: a kind-but-firm
deadline-extension email, drafted in full.
Ask My Life — your past, with receipts. Ask anything; Knole answers
from your own history and quotes you back by date — never a paraphrase without
showing where it came from. Here: "what have I been avoiding?" → a throughline and the
dated entries that prove it.
Chat — a thinking partner that remembers. Talk freely, nothing saved
until you turn it into an entry. It draws on what you've shared (a "drew on 6 things"
receipt), anonymised before the model and de-anonymised in the reply.
Create — images on 0G, yours to keep. A few words become a picture on
0G's Z-Image, downloadable and private. Everything ChatGPT does, without the
surveillance.
Programs — guided arcs when the page feels blank. Working With Anxiety,
The Decision Journal, Morning Pages, 14 Days of Gratitude — a few minutes a day, always
yours to leave.
Intentions — what you said you'd do. Knole reads your entries and
surfaces the commitments you made to yourself, quoted back in your own words.
Portable memory identity. Your memory is yours to carry — grant another
0G app or agent scoped, revocable access. Ownership you can exercise, not just assert.
Therapy prep — walk in with your clearest self. Talking points gathered
from what's been alive since last time, each backed by a verbatim, dated quote
from your own entries. Nothing leaves the page unless you copy it.
Talk to your future self. A grounded letter from who your own entries
point toward — a mirror of your values, never a prophecy. Here: the job decision,
answered back in your own patterns.
A private Wrapped. A shareable card of the shape of your
fortnight — the journey grid, the day count, a theme — never the words. Only the shape
ever leaves your device.
The Pattern Mirror, composed. "Here's what was on your mind" — a
private letter written from your own words, with a proof-of-journaling streak committed
on 0G Chain and your emotional weather traced over time. The throughline names a pattern
you couldn't see yourself.
Auditable AI — stated honestly. A small sensing model fine-tuned on 0G,
its dataset (SHA-256-checkable) and provenance committed on-chain. Live entries are read
by the larger model sealed in the 0G TEE; this open fine-tune is the fully verifiable
version of that job — not a black box, and not overclaimed.
THE PROOF · IT'S ALL REAL
Now the receipts
The flow above isn't a mockup. Each claim below is backed by a command you can re-run, an
on-chain root, or an eval the CI enforces — re-verified this session. Skim the headers;
dig where you doubt.
What's proven
Privacy: embed locally, anonymise before the model, encrypt under your
key on 0G — and now a fourth live layer: TEE-sealed inference on 0G Private Computer
(glm-5.1), so even the operator can't read what the model writes back.
Ownership: Postgres is only a cache; every entry rebuilds
byte-identically from 0G — and your memory mints as an iNFT to your own wallet,
un-sellable by construction.
Memory: a real engine — embed, extract, reconcile (bi-temporal
supersede), retrieve (RRF hybrid).
Honesty: a CI gate polices our own headline numbers; pre-mainnet limits
are stated plainly.
PROOF 01
Anonymised before the model
The single most load-bearing claim: the LLM never sees who you are. A local NER model
masks every person, place, and organisation to stable tokens before any text leaves the
box; a server-side reverse map restores your words in the reply. One gateway — no call
site can forget to scrub.
npm run test:anon
WHAT YOU WROTE (encrypts under your key, stored on 0G):
"Told Mara the real fear about moving to Berlin — that leaving the job at
Google means I was never serious about the writing. Even Dr. Okafor noticed."
WHAT THE MODEL ACTUALLY RECEIVES (anonymised):
"Told [PERSON_1] the real fear about moving to [PLACE_1] — that leaving the job at
[ORG_1] means I was never serious about the writing. Even Dr. [PERSON_2]or noticed."
RESTORED IN THE REPLY (reverse map, server-side only):
[PERSON_1]→Mara [PLACE_1]→Berlin [ORG_1]→Google [PERSON_2]→Okaf
No full identifiable name reaches the model — gated statistically by the privacy-leak
eval
The honest worst case is shown deliberately: [PERSON_2]or — the NER tagged
only the prefix of "Okafor", leaving a meaningless or fragment. The
identifiable name is still gone. NER is probabilistic, so the guarantee is "no full
identifiable name reaches the model" (piiScrubRate ≥ 0.85), not "every byte
of every name."
PROOF 02
Encrypted under your key on 0G
Your entry is AES-256-GCM ciphertext before it touches the chain, sealed under a key
derived for you alone (HKDF-SHA256, your user id as the domain separator). Fetch the 0G
blob with no key and there is nothing to read.
npm run test:privacy
Fetched the raw 0G blob for the latest on-chain entry, no key applied.
ciphertext-only ........ a 24-char plaintext probe is ABSENT from the bytes ✓
wrong key .............. fails the GCM auth tag (tampered/incorrect) ✓
your key ............... recovers the JSON envelope, obj.text === plaintext ✓
The 0G blob holds ciphertext only; nothing but your key recovers it
PROOF 03
Recoverable from chain
You saw "✓ RECOVERED LIVE FROM 0G" in the flow (step 09). Here's the same thing as a test:
corrupt the Postgres copy, and Knole rebuilds the entry purely from its 0G root —
byte-identical.
npm run test:restore
Wiped the Postgres copy, called restoreEntryFromChain(uid, root):
root 0x133bf6960bc64ae60eb061ce10e5b97f3c1b55eb827e6169ac1c46577b6edc23
restoredText === original .......................................... ✓
0G rebuilt the wiped entry identically — the chain is the backstop
PROOF 04
Nobody else can read it
A journal is worthless if another user — or a forged request — can reach your inner life.
Three personas with deliberately overlapping feelings run full journeys; every user is
then probed with every other user's life.
npm run test:multiuser
recalled own memory : true ("You have concerns about your left knee…")
recalled own memory : true ("You're a new parent to a baby named Theo…")
recalled own memory : true ("You've started taking weekly piano lessons…")
isolation — retrieval leaks: 0, ask leaks: 0
Every user's memory composes; no retrieval or ask ever crosses the user boundary
The engine-level data-isolation eval additionally proves IDOR: user A calling
setMemoryStatus / updateMemoryContent on user B's memory id is a
no-op.
PROOF 05
A memory that understands you
The Index you saw (step 04) is backed by a 21-suite engine gate — every suite green
required for the release to pass, enforced in CI.
npm run evals
21-suite engine gate, every suite green required for exit 0:
retrieval (hit@1 / hit@3 ≥ 0.8) · extraction-coverage · dedup · groundedness
reconcile (bi-temporal supersede) · pinned-survival · user-correction-wins
provenance · forgetting · confidence-calibration · privacy-leak · crypto · …
21/21 suites green — written to the eval_runs table, CI-enforced
PROOF 06
Take it with you
Ownership means leaving. The Mindfile export is a full, round-trippable JSON of every
entry and memory — and forgotten, superseded, or rejected memories are provably excluded.
npm run test:export
Exported the demo Mindfile and re-validated it:
entries ......... 12
memories ........ 35
round-trip ...... valid
forgotten / superseded / rejected leaked into the export ......... 0
A clean, complete, round-trippable export — your data leaves with you
PROOF 07 new
Sealed inference is on
The fourth privacy layer, now live. Reflection runs inside a 0G TEE — 0G Private Computer,
model glm-5.1 — so even the operator can't read what the model writes back. A
stalled enclave falls back to NVIDIA within 15s, and the name-scrub protects that fallback
too, so the app never goes dark and the guarantee never weakens.
POST router-api.0g.ai/v1/chat/completions (stream: false)
sealed .... true ← served by the 0G TEE, not the NVIDIA fallback
model ..... glm-5.1
reply ..... "After such a heavy day, I hope you find a soft place to rest tonight."
The reflection came back from the 0G enclave — sealed = true, model = glm-5.1
sealedActive() gates the on-Mirror attestation badge, so the "composed where
even we can't read it" claim only ever appears when the inference genuinely ran in the
enclave — never on the fallback. And the fallback runs both ways: reflection, memory
extraction, the reconcile judge, and streaming all fail over to the 0G TEE if NVIDIA is
ever unreachable — so the whole product runs on 0G alone. An outage costs latency, never
capability (the entire demo was rebuilt through 0G with NVIDIA disabled).
PROOF 08 new
You own it, as a token
Your memory isn't only yours to read — it's yours to hold. The Memory iNFT (ERC-7857)
mints an encrypted snapshot of who you are to your own wallet; the token records only the
0G storage root and a hash. And it can never be taken from you or sold: every transfer
path reverts in the contract.
KnoleMemory (ERC-7857) · 0G mainnet
contract ............... 0xf5F6Ee304e8BfD94666a4AdeC171d116e55c267A
mint(to = your wallet) . Token #3 · encryptedURI = 0g://<root> · metadataHash set
approve() .............. revert — not for sale
setApprovalForAll() .... revert — not for sale
Minted to the user's own wallet on 0G; transfer is impossible by construction
Mint and self-custody need no oracle (the ERC-7857 oracle only re-encrypts on a sale,
which Knole deliberately never does). evolve() re-anchors a fresh snapshot as
your memory grows, keeping the same token.
PROOF 09 new
Logged in, end to end, for real
The roadmap's open item — a full authenticated run — is done, and headlessly. A real
disposable inbox receives a real Privy OTP; the embedded wallet really signs to derive the
client-side key; two entries are written; then a real on-chain iNFT mint through the UI.
npm run test:e2e — wallet-connect.spec.ts (local, auth-on)
INBOX ............ knoleqa…@web-library.net (real disposable inbox, mail.tm)
OTP .............. ●●●●●● read from the real email (Privy email-OTP)
GUEST 0 · SIGNOUT 1 .......................... authenticated
AGE_AFFIRMED ................................. SB243 gate cleared
CLIENT_ENC_ENROLLED .......................... wallet signed → 0G copy sealed to the wallet key
INFT_MINTED .................................. on-chain mint via the UI
Real inbox → Privy OTP → wallet signature → on-chain mint — headless, no shortcuts
DEPTH
Every surface
The whole product, each route mapped to what it proves — swept desktop (1280) + mobile
(412, Pixel 7) for a non-error status, real content, and zero console errors.
Today /today
Write an entry; a reflection streams back, weaving in real past memories, then sends
you to go live the answer.
journal.spec.ts · groundedness eval
Chat /chat
A thinking partner that remembers — every turn anonymised before the model,
de-anonymised in the reply.
sealed.ts gateway · test:stream
Ask My Life /ask
RAG with receipts. Quotes you back by date; refuses an empty query without spending an
LLM call.
ask.spec.ts · ask-negative.spec.ts
The Mirror /insights
A day-15 synthesis of your own words; each pattern cites a real entry, arc-gated, no
advice.
mirror-groundedness eval · mirror.ts
Life Canvas /canvas
Your whole life on one private page — a mood arc, a theme constellation, your cast of
characters, and the journey grid — every panel drawn from your own entries. The
artifact only your own data can make.
Every memory with its source quote, recall count, and ⬡ 0G badge — editable,
forgettable, append-only.
provenance eval · memory_history
Remembered /remembered
Resurfacing — a past entry returns with a "now" reflection and a chance to answer your
past self.
resurface.ts · /remembered QA pass
Settings /settings
Live decrypt-from-chain ownership proof and the real anchor + tx links; a
downward-only consent dial and four voices; and real data-rights — forget a date
range, or delete everything.
restore.ts · forgetRangeFn · deleteAccountFn
Save / Extension /extension
Capture from anywhere — the loadable MV3 Chrome build turns a thought into "just
another memory."
extension/ · test:ext-rate
Bring your data /settings
Paste an old journal or an export and Knole imports it as memories — same engine, same
encryption. Switching in is one paste; switching out is the Mindfile export.
importHistory · doImport
Onboarding /onboarding
No-signup aha: a guest reflects in under 90 seconds, then an honest "sign in to keep
it" — never a wall.
first-aha eval · onboarding.spec.ts
The worker npm run worker
Overnight Dreaming consolidates memory; a consent-gated nudge references a real
commitment — warm, never surveillant.
dreaming.ts · nudge + creepiness evals
Upgrade /upgrade
A Stripe paywall whose webhook verifies the signature before mutating any plan; a
tampered signature is rejected.
billing.ts · test:billing
Guest gate all routes
A guest sees an honest sign-in line; the doomed write-stream fetch is never fired, so
no 401 hits the console.
guest-gate.spec.ts (hitStream === false)
Own your memory /the-index
Mint your evolving memory as an ERC-7857 iNFT to your own wallet — encrypted on 0G,
and un-sellable: the contract reverts every transfer.
Re-encrypt your 0G copy under a key only your wallet can derive — a password Knole
never holds, so not even we can read that copy.
clientEnc.ts · clientCrypto.ts
Future-Self /future
A letter from the person your own entries point toward — grounded in real commitments,
not generic advice.
futureself.ts · futureStream.ts
Wrapped · Year · On-This-Day /wrapped
A shareable card of the shape of your year (never the words), the whole arc on one
page, and what you carried a year ago.
wrapped.tsx · year.tsx · onThisDay.ts
Reflection lenses /today
Read the same entry four ways — Gentle Mirror, Pattern Finder, Blunt Friend, Decision
Coach — through an anti-sycophancy engine that won't just flatter you.
reflect.ts · deep.spec.ts
Crisis safety + disclosure all surfaces
An entry about self-harm pauses the reflection and surfaces real help (988 · 741741 ·
911); every surface discloses Knole is an AI, not a person (SB243).
crisis.ts · safety.ts · gaps.spec.ts
Mood + Omission Radar /insights
A mood-trajectory graph traces your emotional weather over time; an omission radar
names what you've quietly stopped mentioning — a real zero-occurrence test, not a
guess.
valence.ts · omission.ts
Retention loop /today · worker
A one-tap daily check-in keeps the streak without a full entry; a digest email and a
consent-gated web push reach back only when there's a real, earned thing to say.
digest.ts · notify.ts · proactivity.ts
Private Research /research
A forced live web search on 0G's Qwen-Max — your name is stripped before the query
leaves, so the search never carries your identity. Real citations, not the model
guessing from memory.
research.ts (forced_search) · anonymise PER-only
Ask Knole /assistant
A private general assistant — anything on your mind, anonymised before the model and
saved to your journal never. A ChatGPT that knows the shape of you but can't read your
data.
assistant.ts · streamed reply
Create /create
Text-to-image on 0G's Z-Image — a few words become a picture, generated privately and
downloadable. Everything ChatGPT does, without the surveillance.
image gen on 0G · create.tsx
Programs /programs
Guided reflection arcs for when the page feels blank — Working With Anxiety, The
Decision Journal, Morning Pages, 14 Days of Gratitude — a few minutes a day, always
yours to leave.
programs.ts · startProgram
Intentions /intentions
The commitments you made to yourself, read back from your own entries and quoted by
date — what you said you'd do, held gently in front of you.
intentions.tsx · engine recall
Therapy prep /therapy
A session brief from what's been alive since last time — grounded in your own words
and dated, yours to take; and it gates honestly when there isn't enough recent writing
yet.
therapy.tsx · recent-window guard
Portable identity /identity
Grant another 0G app or agent scoped, revocable access to your memory — ownership you
can actually exercise, not just assert.
identity.tsx · revocable grants
Auditable AI /verify
A small sensing model fine-tuned on 0G, its dataset (SHA-256-checkable) and provenance
committed on-chain; plus recompute any reflection receipt to its anchored root. Stated
honestly: live entries are read by the larger TEE-sealed model, and this open
fine-tune is the verifiable version of that job.
sensingProvenance.ts · verifyReceipt
Correlations /insights
Gentle correlations from your own entries — how your mood shifts with the activities
you log, the topics you write, and the day of week. Phrased as hypotheses, never
causes, and gated on enough data so a coincidence never masquerades as a pattern.
Top up credits with no card — send 0G to the treasury from the wallet you already
have; the transfer is verified on-chain and credited to you, idempotent per tx hash so
a replay never double-counts.
payWith0G.ts · test:og-pay (a real on-chain 0G transfer)
Installable app any phone
A real installable app, not a website — one tap to your Home Screen on Android, an
Add-to-Home-Screen guide on iOS, offline shell, app shortcuts, and web push.
Voice-first capture on the phone: open, speak, done.
manifest.webmanifest · sw.js · PwaSetup.tsx
Share the shape /card
The one artifact only your own data can draw, made postable — your mood arc and the
themes you circled, rendered to a beautiful card. No words, no names, only the shape;
shares straight to Instagram or X. Private enough to post.
card.tsx (canvas render · Web Share API)
DEPTH
Under the hood
Reflections, chat, Ask, the Mirror, and the nudge all draw on one engine — and one
invariant: plaintext is encrypted before it touches the chain, anonymised before it
touches the model.
THE MEMORY ENGINE
Embed · extract · reconcile · retrieve
Embed locally
all-MiniLM-L6-v2, 384-dim, no API call. embed.ts
Extract facts
an LLM reads the ANONYMISED text only — people, goals, patterns, commitments, values.
engine.ts → sealed.ts
Reconcile
content-hash UPSERT dedup, then a 3-way LLM judge: reinforce a reworded duplicate ·
supersede a contradiction (bi-temporal: kept with invalid_at) · keep the
independent. engine.ts
Encrypt + anchor
AES-256-GCM under your key → upload to 0G Storage → root anchored on the entry row.
og.ts
Retrieve
RRF hybrid: pgvector cosine ⊕ lexical full-text, fused — an exact keyword surfaces
even when the vector arm wouldn't. engine.ts
Recall earns importance (retrieving a memory bumps its recall_count); a user
edit flips confidence to 1.0 and wins any contradiction; a forgotten memory never surfaces
again, yet memory_history still records that it existed.
THE GATE
Every eval suite
npm run evals writes one row per suite to eval_runs; the gate
passes only when every suite is green. LLM-judged suites retry up to 3× so a stochastic
miss doesn't fail the gate while a broken path fails all attempts.
DependenciesAll 43 transitive advisories triaged to unreachable code paths and documented; no
blind dependency bump that breaks the runtime
HONEST SCOPE
What it is, and what it isn't
Knole hides
Your entry text — AES-256-GCM ciphertext on 0G
The real names / places / people from the model
Your data, from us — sealed under your key
Knole does not hide
That an entry exists (the 0G anchor is public)
The on-chain root hash
That a mainnet wallet signs the anchors
Pre-mainnet, stated plainly: the TEE "even we can't read it" path is on
(0G Private Computer, glm-5.1); a stalled enclave falls back to NVIDIA within
15s, and the anonymise scrub protects that fallback too. The logged-in run is proven
headlessly with a real inbox + Privy OTP. The rate limiter is in-memory; mainnet waits on
an external audit and KMS-backed key custody. Full detail in SECURITY.md and
docs/PROOF.md.
REPRODUCE
Run every proof yourself
None of this is a screenshot you have to trust. Clone the repo, point it at your own Neon
DB + 0G mainnet wallet + NVIDIA key, and re-run each line — the engine and crypto proofs
need that environment, so a bare fork skips them honestly rather than faking green. The
browser sweep below runs read-only against the live deploy; the write, onboarding,
guest-gate, and 404 flows run against a local build, since the live demo is read-only by
design.
Engine gate (21 suites)npm run evals
Anonymise before the modelnpm run test:anon
Ciphertext-only on 0Gnpm run test:privacy
Byte-identical restorenpm run test:restore
Cross-user isolationnpm run test:multiuser
Memory recall composesnpm run test:remembers
Streaming privacynpm run test:stream
Mindfile exportDB_HTTP=1 npm run test:export
Browser sweep — live, read-only (26 runs)E2E_BASE_URL=https://knole.me npm run test:e2e
Write / onboarding / 404 — local gated buildE2E_BASE_URL=http://localhost:3000 npm run test:e2e
ON-CHAIN · 0G MAINNET
The roots
Real, on the 0G mainnet — here it is on the 0G explorer, and
every hash below is a link you can click to verify. Knole hides your
entry text (ciphertext) but never hides that an entry exists; the root is public and
reveals nothing.
A real iNFT mint on 0G mainnet. "Mint 1 of Knole Memory (KNOLE)" · ✓
Success · ERC-721 · TokenID 4 — minted from the zero address to the user's own wallet.
The deployed contract. KnoleMemory, tracked as "Knole Memory
(KNOLE)," with a live history of real mints on the 0G mainnet.
⬡ Memory iNFT contract0xf5F6Ee304e8BfD94666a4AdeC171d116e55c267A
— KnoleMemory (ERC-7857), deployed on 0G mainnet; mints to the user's own wallet and
reverts every transfer (not for sale)
⬡ A real mint (Token #4)0x870749f2…89ee115
— click to verify the on-chain iNFT mint transaction
⬡ Entry storage root0x133bf6960bc64ae60eb061ce10e5b97f3c1b55eb827e6169ac1c46577b6edc23 — the 0G Storage
root test:restore rebuilt the entry from, byte-identical
⬡ Memory-root anchor0xc953476d8b48c17d843a2e0cc3eade03f4f010474501052ca2deecc008fd06b3 — the daily
on-chain anchor of your memory root
Try it liveopen
/settings →
"Verify recoverable" rebuilds a real entry from 0G in front of you