Search projects, hackathons, sponsors and tech

    ← All projects

    suica os

    A fully hallucinated OS composed by a Jev for Sui DeFi; Type anything, get app in realtime

    Demo

    About

    ![Suica OS — type anything, get an app](https://raw.githubusercontent.com/fabianferno/ethglobal-tokyo-2026/main/docs/assets/suica-pipeline.png) **Suica OS is a fully hallucinated, operating system where every app is an agent - realtime UI composed by a JEV.** There is no landing page and nothing was built as a normal app. You boot into a retro desktop, open the Start menu, and **type anything** — *"excel of vitalik.eth's portfolio"*, *"paint but roast vitalik.eth"*, *"doom but I'm shooting my losses"*, *"tetris game but my portfolio is falling"* — and a working, on-chain app appears **instantly** as a chunky retro window, as fast as you can type. **Why we built it.** We're heading toward a future where we don't need apps for everything — agents do the work. But we still need interfaces: to *see* what our agents did, understand it, and approve or refuse it. So interfaces will be **generated on demand** — changing in real time, personal to whoever is using them. Suica OS is an experiment in that idea: an OS where every window is composed live, every app has an identity, and every dollar it moves is gated on-chain. **Apps are places, not programs.** Every app is really an *agent*: an **ENSv2 name** (its identity + a ~1 KB manifest stored in its text records) plus a **Sui wallet** (an `AgentVault` with spend caps). The UI is disposable — anyone who resolves the name can rebuild the exact UI instantly, no model call. `suica.eth` becomes a real filesystem: **folders are ENS registries, sharing is Enhanced Access Control roles, and moving an app into a folder turns its old name into an ENSv2 alias — a symlink — so old share links keep working.** **The numbers are real.** Portfolios, roasts and "losses" come from Ethereum mainnet (ENS + Ethplorer); balances, gas and payments come from Sui. **Log on with Google** (zkLogin — no seed phrase) and gas is **sponsored**, so you never hold SUI. Money only moves through one **fixed signing dialog** that is never generated; apps can only *propose*. An assistant, **Tappy**, acts on its own within a cap you set, asks when it's over, and if it ever tries to overspend the **Move contract rejects it on-chain and you get a Blue Screen** — no funds move. **"Anything is possible."** Ask for a program we don't have ("tetris but…") and it opens instantly in a built-in "compatibility mode" shell while an LLM writes the real shell in the background — sandboxed, tested, published to **Walrus** and named under `shells.suica.eth`, so it's instant for everyone after that. Tracks: **Sui DeFi & Payments**, **ENS (Best Use of ENSv2, on Sepolia)**, **Curvegrid (Best Digital Asset Dashboard)**.

    How it's made

    ![Suica OS — how the tech fits together](https://raw.githubusercontent.com/fabianferno/ethglobal-tokyo-2026/main/docs/assets/suica-architecture.png) **Frontend / OS shell.** Next.js 16 + React 19 + TypeScript. No UI framework — the "Windows 99" kit is hand-written CSS (`win99.css`) with a custom window manager, taskbar, Start menu, and a real BSOD. GSAP powers ~20 hand-built animation scenes. **The real-time UI engine is Jev (TypeSafe AI), not an LLM.** On every keystroke we make **one** call to Jev — a "System One" model that never writes text, it only answers ~20 typed questions (`choice`/`score`/`noul`) in parallel with calibrated probabilities in ~70–500 ms. Jev decides *shell × function × target × vibe × risk*; a deterministic parser extracts the numbers (ENS names, tokens, amounts, leverage, schedules). **Jev decides, code computes** — a model never invents an amount. We route Jev through the **Vercel AI Gateway**. An offline keyword classifier with the identical output shape keeps the demo alive without a key. 6 data *shapes* (Table, TimeSeries, List, RiskyGrid, Gauge, Scene) let any of ~40 shells render any of ~30 functions — ~1,200 apps from one classifier call. **ENS is the filesystem (ENSv2 on Sepolia).** We registered `suica.eth` and deployed our **own UserRegistry + PermissionedResolver**. Apps and folders are minted as subnames; the full manifest lives in the `suica.manifest` text record and the app index is read from `LabelRegistered` events. **Folders are their own registries; sharing grants Enhanced Access Control (EAC) roles** (member can mint into a folder, manager can also share) — every mint/share request is EIP-191-signed by a per-browser **device key**, and the server enforces roles on-chain (mint into a folder without `ROLE_REGISTRAR` → 403). Each app deploys its **own PermissionedResolver** (creator's key holds root roles; the server keeps only argument-scoped setter roles, then revokes its root). Each user auto-claims a non-transferable username at `<name>.users.suica.eth`. **Moving an app re-mints it and links the old name to the new record (an ENSv2 alias / symlink)**, so old share links resolve live data. **Sui is where the money moves.** **Enoki zkLogin** (Google → wallet, key stays server-side, proxied through our API) + **Enoki sponsored transactions** (users never hold SUI). We wrote and published a Move package, **`AgentVault<T>`**: share tokens for depositors, an **`AgentCap`** permission slip (per-tx / per-day caps, recipient allowlist, expiry) and `fee_bps` to the creator. `agent_pay` **aborts on-chain when it exceeds a cap** — that Move abort is what drives the BSOD, and it's proven live (abort code 2 = EOverTxCap). We use **PTBs** for atomic multi-party settlement: **Group Tab** (settle each member in one sponsored PTB) and **Programmable Payroll** (`agent_pay` per recipient in one batch — over-budget reverts the *whole* batch). Because DeepBook testnet has no liquidity, we deployed our **own mock AMM pool** (a `susd` coin + constant-price `pool` Move package) to make **Rebalancer** and **DCA** real, gasless SUI→SUSD swaps. An app's vault id is written into its ENS record under **Sui coin type 784**, so `grouptab.suica.eth` resolves to its Sui vault. Sui reads/writes go over **gRPC** (`SuiGrpcClient`), since public JSON-RPC is deprecated. **Generated shells run as an untrusted guest.** When a prompt names a program we don't have, an LLM (via the AI Gateway) writes an HTML shell once, in the background. It's statically checked, smoke-tested in a hidden sandbox, then stored on **Walrus** with its sha256 and named at `<label>.shells.suica.eth`. It runs in a `sandbox="allow-scripts"` iframe with a no-network CSP — data is pushed in, and the only way out is proposing an action the trusted code already built. **The dashboard (Curvegrid track).** Task Manager shows every agent as a process with real balances and "End Process = revoke AgentCap"; My Computer shows the live **AgentVault** as a drive with a real balance + day-cap usage bar, reading on-chain vault/cap state (funds, fee_bps, caps, spent_today) every 15s. **Hacky bits worth noting:** we compile Move without a local Sui CLI by using a Dockerized `mysten/sui-tools` image with the framework vendored as a local sparse clone (the emulated container can't git-fetch); all tx-building/simulation/gRPC live server-side to dodge gRPC-web CORS (the browser only signs sponsored bytes and assembles the zkLogin signature); and the smoke-test iframe sits on-screen at 0.01 opacity because Chrome pauses rAF in hidden cross-origin frames.