Your AI conversations should belong to you.
We'll remember your choice.
We'll remember your choice.
Most AI today runs through a small handful of large companies. You sign up with your email or phone, they tie your conversations to your account, they store everything on their servers, and — depending on the policy of the moment — some of what you said becomes training material for the next model. Their account, their rules, their copy of your conversation.
Node Neo is a different shape. There's no account. There's no central server holding a copy of your prompts. The AI runs on a public network of independent providers. Instead of buying a monthly subscription, you hold a small amount of a crypto token called MOR — you lock a tiny piece of it to start each chat session, and that piece is returned to your wallet when the session ends. The same MOR funds session after session, indefinitely. Your conversation history lives, encrypted, on your own device.
You don't sign up. There's no email, no phone number, no profile. Your wallet (created on first launch) is your only identity, and its key is stored in your device's Keychain. Nothing for us to suspend, ban, or hand over.
When you send a prompt, it goes from the app, through the Morpheus protocol, to a provider that bid for your session. We don't operate a server in that path. We can't read your conversation, and nothing in between can either. The provider you picked does see your prompt, unless you use Max Privacy (see “What's the catch?”).
"Stake" means lock, not loan and not spend. To start a session you lock a small amount of MOR — a "right-to-use" token. When the session ends, unused MOR comes back right away. The rest stays on hold until midnight UTC, then comes back too, ready for the next session. The same MOR funds chat after chat, indefinitely. A typical session locks just cents. Think of it as a library card on the Morpheus network — in your wallet forever, lets you check out as many sessions as you want.
Conversations are stored on the device, encrypted with a key derived from your wallet. Nobody — including us — can read your chat history without that wallet. Backup is a single file you export when you want.
If a provider misbehaves, gets slow, or you just don't trust them, close the session and open a new one with someone else. There is no single throat to choke — which is also the whole point. Sensitive prompt? Turn on Max Privacy and your prompt only goes to providers running inside an attested TEE: a locked-down area of the provider's chip, built so the people running it can't see your prompt.
You hold your own key. Lose it and nobody can recover it. Read the details →
Node Neo will show you a long list of models when you start a chat — names like
GLM-4.6, Qwen3-Coder, Llama-3.3,
DeepSeek-V3. Some are tuned for code, some for reasoning, some for chat.
On Free you see a weekly set of about eight; Pro shows the full catalog.
For your first session, any general-purpose chat model is a fine way to kick the tires. Once you're comfortable, browse the others and switch any time. Each new session can use a different model; nothing is locked in.
In 2014, almost nobody had Signal. iMessage was “encrypted enough.” SMS was just what you used. Then Snowden, then the Apple-vs-FBI fight, then a cascade of breaches that made everyone realize their entire texting history was a few subpoenas away from being printed in a courtroom. Today it’s a normal app people install without thinking twice. Not because it's prettier than iMessage — it isn't — but because once you understood what was at stake, you couldn't go back.
We think the same shift is starting with AI. The first wave of users didn't care that their ChatGPT history sits on OpenAI's servers. The next wave will, and they'll want somewhere else to go. Node Neo is somewhere else to go.
Node Neo is a Flutter UI on top of an embedded Go module — specifically the
proxy-router/mobile
SDK from the upstream Morpheus consumer-node project. The SDK is compiled as a c-shared
library and called via dart:ffi on the same process. There is no
separate proxy-router daemon, no HTTP hop, and no Node Neo-operated server in the
consumer hot path. Wallet, chain RPC, model browsing, session open/close, and
prompt streaming all run inside the user's app, talking to two things: a Base RPC node
and the provider that bid for the session.
8453. Multi-endpoint round-robin across public RPCs (Base public, publicnode, drpc.org, blockpi, plus an optional build-time premium RPC).flutter_secure_storage in the Keychain on iPhone, iPad and Mac (this-device-only on iOS; optional iCloud Keychain sync on Mac), and the Android Keystore once Android ships. No mnemonic UI — the legacy mnemonic vault auto-migrates to PK on cold start, then is wiped.nodeneo_{fp}.db where fp is a fingerprint of the wallet). All message content is AES-256-GCM encrypted with a key derived as SHA-256(privateKey). Backups are AES-256-GCM encrypted .nnbak archives, keyed from a passphrase you choose.
The whole protocol turns on a Diamond contract on Base
(0x6aBE…030a).
Two facets do the heavy lifting:
SessionRouter
and
ProviderRegistry.
The token is plain ERC-20 MOR
(0x7431…b8e3).
The numbers below are read from the contracts.
openSession(amount, …) calls safeTransferFrom(user, diamond, amount)
— your MOR is moved into escrow inside the Diamond; it is not handed to the provider. The
amount is collateral that buys a stipend via:
stipend = (amount × computeBalance) / (totalMORSupply × 100)
The stipend then pays the provider at pricePerSecond (set by the provider's
bid) for as long as the math holds, up to a network-wide max session duration. Minimum
session length is 5 minutes
(MIN_SESSION_DURATION).
The pre-session confirmation modal in Node Neo shows you the exact MOR stake required
before you confirm; nothing happens silently.
On close, _rewardUserAfterClose anchors to when the session actually
stopped using compute: sessionEnd = min(closedAt, endsAt)
(SessionRouter.sol,
the PR #830 stipend-recycle fix). Then, in the default indirect-payment mode:
userInitialLock = (sessionEnd - max(openedAt, startOfTheDay(sessionEnd))) × pricePerSecond
— the MOR-stipend value of the time you actually used on that UTC day.stipendToStake(userInitialLock)
and pushes it onto userStakesOnHold with a release time of
startOfTheDay(sessionEnd) + 1 day.stake − locked) is transferred back to your wallet
immediately, in the same transaction.fundingAccount, not from your stake.This applies whether you close early or on time. Closing early just means less of the stake was used, so less of it goes on hold.
Node Neo doesn't actually require you to remember any of this.
The embedded SDK runs a session-maintenance loop on a 15-minute ticker
(DefaultMaintenanceInterval = 15 * time.Minute in
proxy-router/mobile/sdk_maintenance.go)
that paginates through your unclosed sessions on-chain, finds any whose
endsAt has passed, and submits closeSession for each
of them automatically. The home screen still surfaces
expiredUnclosedCount as a backstop in case the app hasn't been
launched for a while, but for anyone who opens the app now and then, expired sessions
close themselves. Node Neo also returns on-hold MOR on its own once the hold ends: on start,
hourly while running, on resume, and after a close (amounts of 1 MOR or more;
Where’s My MOR → Recover MOR claims any amount).
For a normal same-day chat session, the math collapses to a simple proportion: the locked fraction equals the fraction of planned time you actually used. Concrete example, indirect payment mode:
closeSession transaction.startOfTheDay(sessionEnd) + 1 day
and shows up under on-hold in Node Neo's home screen and the "Where's My
MOR?" scan.withdrawUserStakes(address, 1) (selector 0xa98a7c6b) for you.The cooldown clock is 0–24 hours, not 24–48. Because the release time is anchored to the start of the UTC day the session ended in, closing at 11:55pm UTC is released ~5 minutes later, while closing at 12:05am UTC is released ~23h 55m later. The maximum you ever wait is one full day from the close time.
The stipend that funds the provider is sliced from a daily emission window. Without the lock, a user could open and immediately close a session, harvesting the day's stipend slice without doing the corresponding work. The 1-day-from-day-start lock makes that economically pointless while still returning every bit of the stake within a day.
That's why the Node Neo home screen splits MOR into three buckets: wallet balance (spendable now), active stake (locked in currently-open sessions, returns on close), on-hold (the rest of a closed session’s stake, held until midnight UTC, then returned).
A provider registers via ProviderRegistry with a MOR stake. From
ProviderStorage.sol:
PROVIDER_REWARD_LIMITER_PERIOD = 365 days. On every payout the contract
enforces:
providerClaimLimit = provider.stake − provider.limitPeriodEarned
In plain English: a provider can earn at most their stake amount in MOR per
rolling year. Stake 100 MOR → headroom to earn up to 100 MOR before the
limiter resets at limitPeriodEnd. Want to earn more? Stake more. The
limiter is enforced before the transfer regardless of whether the session is funded
from the central pool (the default) or directly from the user's stake (the rare
isDirectPaymentFromUser branch) — both paths go through
_claimForProvider which subtracts from the same providerClaimLimit_.
Token supply, emission curve, and the L1 distribution contract that funds the
computeBalance term are out of scope for this page — for the
canonical numbers see mor.org.
"Max Privacy" mode in Node Neo restricts the bid set to providers whose model is
running inside a Trusted Execution Environment — an Intel TDX
or AMD SEV-SNP enclave on the provider's hardware. The provider's chip generates a
cryptographic attestation that the running image matches a known good build, and the
attestation is verified through Sigstore
against the Morpheus secure-build pipeline. (The Sigstore TUF cache is configured to
live in the app's writable data dir — see
attestation_config.go
for the iOS-sandbox-friendly path.)
What this gives you: a locked-down area of the provider's chip, built so the people running it can't see your prompt, even with full admin access to the machine. Node Neo checks the attestation before the session opens and won't send prompts to an endpoint that fails it.
What this doesn't give you: a guarantee that the model you asked for is the model you got. TEE attestation proves the running image is the published image; it doesn't, by itself, prove that a malicious provider didn't substitute a different attested image. For the threat model, the trust assumptions, and the chip-level details, see tech.mor.org/tee.html.
SessionRouter and ProviderRegistry facets.
openSession, closeSession, the stipend math,
and the user / provider on-hold mechanics quoted above.
SessionRouter.sol
sdk_chat.go, sdk_sessions.go,
sdk_wallet.go, redact.go, attestation_config.go.
proxy-router/mobile
Four honest ones. We'd rather you read these here than discover them yourself and feel sold to.
The top models from OpenAI, Anthropic, and Google are at the frontier. Models on the Morpheus network are usually a generation or two behind on raw benchmark scores. If you're chasing the absolute best leaderboard performance regardless of what you're paying with, those are the right tools. We use them too, sometimes; we just don't use them for everything anymore.
If you've never touched crypto, the first ten minutes feel weird. You'll create a wallet, save a private key, buy a few dollars of ETH on Base, swap some for MOR. We wrote a calm, plain-language walkthrough for first-time users — New to crypto? Start here. — that takes the fear out and gets you from zero to funded in about 25 minutes. An easier way to buy MOR and a free starter credit are on the roadmap to make this easier. The wallet itself isn't going away. That's by design. Nobody can suspend an account that doesn't exist.
On a normal session, the provider serving your model can technically log your prompt on their own server. The protocol doesn't prevent it. What the protocol does prevent is anyone between you and the provider seeing it — no Morpheus-operated relay, no Node Neo server, no central inbox. For prompts where that's not enough, turn on Max Privacy and the bid set is restricted to providers running inside an attested TEE: a locked-down area of the provider's chip, built so the people running it can't see your prompt.
Your wallet address is a pseudonym; it isn't tied to an email or phone number. But
it is tied to every session you open: the fact that wallet
0x… opened a session with this provider, on this model,
for this much MOR, for this duration, is on Base mainnet and public.
Prompt content is never on-chain. But analysis of the metadata can,
in principle, link a wallet to a person if that wallet is also used in identifiable
ways elsewhere. Standard wallet-hygiene rules apply — use a fresh wallet for
Node Neo if that matters to you.
Ten honest rows. Some of these matter to you, some don't. Read for the ones that do.
| Centralized AI | Node Neo + Morpheus | |
|---|---|---|
| Identity | Email, phone, sometimes a credit card. The account is the unit of access and enforcement. | A wallet generated locally on first launch. No signup, no email, nothing for us to suspend. |
| Conversation logs | Stored, indexed, and retained on the vendor's servers, indexed against your account. | Encrypted on your device with a wallet-derived key. Nothing centrally retained. |
| Model choice | One vendor decides which models you get to use, and for how long. | Browse every model active on the network. Switch any time. New models register on-chain. |
| Cost model | $20/mo (or much more), whether you use it or not. Tier upgrades for "more usage." | Lock a little MOR per session (it comes back) and pay a few cents of ETH in network fees. Pro is an optional subscription for the full catalog and app features; it never pays for chats. (do the math.) |
| Training-data policy | "We don't train on your data" — trust us. Policy can change at any time. | No central operator holds your chats. A regular provider could log your prompt. With Max Privacy, the provider's hardware is built to stop that. |
| Refusal / censorship | Centrally tuned refusal policy. Legitimate questions sometimes get blocked. | Per-model. Pick a provider whose model behavior you like; switch when you don't. |
| Account suspension | Suspended, region-blocked, or rate-limited at any time. Recourse is a help-desk ticket. | There is no account. Wallet-based access; nothing to suspend. |
| Jurisdiction / breach surface | One company's data jurisdiction. Subpoena-able. Breachable. Employee-browsable. | No central operator. Your history is encrypted on-device with a key only your wallet derives. |
| Verification | Closed weights, closed inference, closed pipeline. You trust the brand. | Open-source SDK and contracts; on-chain session metadata anyone can audit; optional hardware-attested execution. |
| Client vs protocol openness | Closed app, closed weights for the flagship models, closed server. | Node Neo client: proprietary (ABSGrafx). Morpheus protocol / contracts / proxy-router: open-source (MorpheusAIs). Contracts: on Base, verifiable. |
Node Neo isn't trying to be everyone's AI. It's for people who've decided that who owns the conversation matters more than who has the highest leaderboard score. That includes:
If that's you, you'll get it. If it's not you yet, that's fine — bookmark this page and come back the next time a privacy story makes you flinch.