Monkegotchi — Plan
A Tamagotchi-style virtual pet for the MonkeDAO community, with an optional AI agent companion via Telegram. Mobile-first, mass-market for the pet, motivated users for the agent.
Context
Build a Tamagotchi-style virtual pet ("Monkegotchi") for the MonkeDAO community. The pet is the visible vessel for a Telegram-based AI agent ("OpenClaw") the user is also building. Two surfaces: a Telegram Mini App + a standalone mobile-first web page. Audience is mass-market for the pet, motivated users for the optional agent companion.
Goal of v1: ship a hatchable, evolving, agent-coupled pet that any user can care for, with optional SMB-trait personalization for holders. Reuse OSS where it accelerates us; build the state machine ourselves since it's small (~300–600 LOC TS).
Product shape — two halves, three entry points
Monkegotchi is two complementary products that share one identity + state layer. Users enter from any of three doors and converge to the same end state:
┌─ Anonymous Web Pet ─┐
│ (local-only) │
└────────┬────────────┘
│ opt-in: claim with email or TG login
▼
┌─────────────────────┐
│ Linked Pet │
│ (no agent) │
└────────┬────────────┘
│ opt-in: BotFather wizard
▼
┌─────────────────────┐
│ Pet + Agent │ ◄── /hatch from
│ (full experience) │ agent-first user
└─────────────────────┘
▲
│ opt-in: hatch a pet
┌─────────────────────┐
│ Agent only │ ◄── existing multi-user-openclaw user
└─────────────────────┘
- Pet half — mini-app + tick worker + D1 + image-gen. Has standalone value as a web game.
- Agent half — existing multi-user-openclaw infra + a new
monkegotchi-skill. Has standalone value as a personal AI agent. - Glue — a single D1 row keyed by
tg_user_id(anonymous pet → claimed via Telegram-Login-Widget on the web).
The embodiment moment. When an agent-first user hatches their first pet, the skill fires a one-shot "soul-arrived" event the agent reacts to ("Whoa. I feel… different. There's something here. It's small. And it's hungry."). Tentpole UX moment — design + write copy explicitly.
Key decisions (locked)
| Decision | Choice | Why |
|---|---|---|
| Pet ↔ Agent coupling | Loose coupling, shared state | Pet runs lifecycle; agent reads state, modulates tone. Agent never breaks because pet got sad. |
| Audience | Mass-market for pet, motivated for agent | Pet = anonymous-friendly web. Agent = BotFather wizard + container, opt-in only. |
| Web3 surface | Hidden by default; Matrica OAuth | No wallet popups. @matrica/oauth-sdk. Gen2 OG > Gen3 in tier perks. |
| Agent deployment | Per-user container + per-user bot | Guided BotFather wizard. One bot per user. Aligns with multi-user-openclaw. |
| Pet-state injection | Custom openclaw skill, fetched per request | Skill reads D1 on every inbound message, injects mood/stage/lineage live. |
| Art pipeline | AI portrait + behavioral overlays | One image per pet, cached. CSS overlays handle animation. |
| Art direction | B · Soft Illustrated Plush (provisional) | Picked to unblock UX work. Painterly Studio-Ghibli-ish baby creature, warm cream + tan + sage palette. Revisitable. |
| Image gen | MiniMax image-01 | Existing subscription with generous quota. |
| Death | Coma + revive, no permadeath | Safe for casual + Web3 audiences. Stakes without loss-aversion panic. |
| Stack | TMA React template + Cloudflare | Reference AI-tamago, don't fork. CF Workers + D1 + R2. |
| UI library | shadcn/ui + Tailwind | Full design flexibility for the painterly brand. Mini-app won't look like a generic native TG kit — it'll have a Monkegotchi identity. |
| v1 scope | Care + evolution + agent + Matrica pedigree + social | On-chain mint + mini-games deferred. |
Tier matrix
| Tier | Trigger | Pet effects |
|---|---|---|
| Public | TG initData or email | Standard hatched Monke (curated style) |
| Connected | Matrica linked, no SMB | Standard pet + verified-wallet flair |
| Gen3 Pedigree | Holds Gen3 SMB | Trait-inherited portrait, Gen3 evolution branch, Gen3-only items |
| Gen2 OG Pedigree | Holds Gen2 SMB (overrides Gen3) | Gen3 perks + OG aura overlay, faster evolution, "OG" agent title, persistent lineage badge |
Launch sequencing
- Phase 1 — Pet (standalone): mini-app + web, anonymous + email auth, tick worker, image gen, care loop, evolution, Matrica + pedigree tiers, social profiles + visits. No agent required.
- Phase 2 — Agent coupling:
monkegotchi-skill, BotFather wizard onboarding, soul-arrived event,/hatchtool inside the agent. - Phase 3 (post-v1): on-chain NFT, mini-games, hardcore permadeath, breeding, payments, multi-pet, localization.
Game mechanics (v1)
All numbers below are tunable starting points — they live in one config file (packages/shared/src/mechanics.ts) and ship as the "Casual" preset. Easy to retune from playtest without code changes elsewhere.
Stats & decay
| Stat | Initial | Decay (awake) | Notes |
|---|---|---|---|
| Hunger | 70 | −1 / hour | Fastest decay — primary check-in driver |
| Happiness | 70 | −0.5 / hour | Boosted when other stats are high |
| Energy | 80 | −0.7 / hour | Recovers +5/hr while asleep |
| Hygiene | 100 | −0.3 / hour | Drops faster after eating |
Pacing target: once-a-day check-in keeps a casual player's pet happy. Coma takes ~3 days of total neglect. Tick runs every 5 min on a CF Cron Worker; offline catch-up is deterministic (now − lastTickAt), not LLM-decided.
Care actions
| Action | Effect | Cooldown |
|---|---|---|
| Feed (banana, free) | +25 hunger, −5 hygiene | 30 min |
| Play | +20 happiness, −10 energy, −5 hunger | 20 min |
| Clean | +40 hygiene, −5 happiness | 1 hour |
| Sleep (toggle) | Passive energy recovery; pet skips other decay | — |
Shop foods (pizza, cake, spicy) have larger hunger gains + unique agent reactions, cost bananas, share the Feed cooldown.
Mood derivation (single source of truth)
mood_score = avg(hunger, happiness, energy, hygiene)
if any stat == 0 for >6h → coma
else if mood_score < 25 → sick
else if mood_score < 45 → grumpy
else if mood_score < 70 → neutral
else → happy
Mood drives both the portrait overlay (sad tear / ZZZ / sparkle / etc.) and the agent's tone register.
Stages & evolution
| Stage | Min age | Evolution criteria |
|---|---|---|
| Egg | 0 | Tap-to-hatch on first open (60s cinematic) |
| Baby | 0 | — |
| Teen | 3 days | mood_score avg ≥ 60 over last 24h |
| Adult | 7 days | mood_score avg ≥ 65 over last 48h |
Poor care → pet stays in current stage longer instead of failing forever. Evolution is one-way. Adult branches (Cheerful / Sassy) are deferred to v1.5 — v1 ships a single Adult stage.
Coma + revive
- Enters coma when any stat hits 0 and stays there for 6h, OR mood_score < 10 for 12h.
- Visual: portrait washed out + dim, agent shifts to mourning register ("she's not responding…").
- Revive paths: (a) free smelling-salts with 24h cooldown, (b) shop smelling-salts (no cooldown), (c) 30 min of sustained care (3 successful care actions in a row).
- Lineage logged: every episode appended with timestamp + days-since-last-revival. Profile surfaces them ("survived 2 comas").
Adventure XP
- Care action → +1 XP · Friend visit → +1 XP · 7-day care streak → +10 XP · Coma → −5 XP (mild penalty)
- Levels: 1→2 = 10 XP, then ×1.5 each (10, 15, 22, 33, 50…). Levels unlock shop tiers + cosmetics.
Agent contract (what the skill injects per message)
The openclaw skill reads pet_state and pulls exactly 3 derived values for the system-prompt prefix — keep it short, cache in KV:
mood_band(happy / neutral / grumpy / sick / coma) → tone registerstage(baby / teen / adult) → vocabulary registerlast_event("just ate cake 12min ago" / "in coma 4h" / "evolved 2h ago") → conversational color
What we explicitly defer past v1
- On-chain pet NFT mint
- Touch mini-game / earn loop
- Hardcore permadeath mode (opt-in)
- Breeding between two pets
- Real-money items / Stars / TON payments
- Multi-pet ownership
- Localization beyond English
Open questions for after v1
- Monetization: coins-only forever, or TG Stars / TON for premium items?
- Should the agent gain wallet-interaction capabilities for SMB holders?
- Breeding / multi-pet — is there demand?
- Should pet death after N coma relapses exist as a soft permadeath?
Design
Visual identity, screens, flows, microinteractions, and copy. This section is iterating — most areas are placeholders until we work through them.
Art direction
MiniMax generates every pet from a style reference sheet. Each card below shows two samples per direction: Cold = prompt only, no SMB reference. SMB-grounded = same prompt + subject_reference pointing at SMB #1012. Open the prompt block to see exact text.
Pixel SMB Heritage


Chunky pixel sprites, flat colors, no anti-aliasing. Faithful continuation of SMB's 24×24 aesthetic, scaled to a 32×32 or 48×48 baby variant.
Cold prompt
pixel art baby monkey companion character, 32x32 chunky pixel sprite, flat colors no anti-aliasing, retro 16-bit videogame style, deep purple background, tan fur with brown details, big simple square eyes, single character portrait centered, NES SNES aesthetic, Solana Monkey Business inspired baby version
SMB-grounded prompt (ref: SMB #1012)
baby version of the reference monkey character, same chunky 32x32 pixel art SMB style, flat colors no anti-aliasing, retro 16-bit aesthetic, big simple square eyes, small baby proportions, pastel pink background, single character portrait centered
Soft Illustrated Plush


Painterly, hand-drawn feel. Soft gradients, gentle outlines, big expressive eyes, plush rounded silhouette, watercolor textures.
Cold prompt
hand-drawn painterly baby monkey companion character, soft watercolor textures, warm cream and tan palette with sage green accents, big expressive eyes, plush rounded silhouette, gentle hand-drawn outlines, Studio Ghibli inspired, cozy tender mood, single character portrait centered on warm cream gradient background
SMB-grounded prompt (ref: SMB #1012)
baby version of the reference monkey character reimagined in soft painterly Studio Ghibli style, watercolor textures, warm cream and tan palette with sage accents, plush rounded silhouette, big expressive eyes, cozy tender mood, single character portrait centered on cream gradient background
Cyberpunk Banana


Dark backgrounds, neon outlines, holographic shimmer, occasional CRT/glitch artifacts. Pet reads as a digital spirit projected into your phone.
Cold prompt
cyberpunk baby monkey digital spirit companion character, glowing neon magenta and cyan outlines, holographic shimmer effect, dark void background with subtle CRT scanline glitch artifacts, bright banana yellow accents, single character portrait centered, vaporwave futuristic spirit-projection aesthetic, hologram vibe
SMB-grounded prompt (ref: SMB #1012)
baby version of the reference monkey character reimagined as a cyberpunk digital spirit, glowing neon magenta and cyan outlines, holographic shimmer, dark void background with subtle CRT scanline artifacts, banana yellow accents, single character portrait centered, vaporwave hologram aesthetic
Vector Toon


Bold black outlines, flat fills, limited palette, slightly off-balance shapes. Sticker-pack friendly, animation-ready.
Cold prompt
bold vector toon baby monkey character, thick black outlines, flat fills with limited 5-color palette of warm browns and sunny yellow, sunny yellow gradient background, cream face, simple expressive black dot eyes, slightly off-balance asymmetric shape, modern indie videogame sticker style, Cult of the Lamb inspired, single character portrait centered
SMB-grounded prompt (ref: SMB #1012)
baby version of the reference monkey character reimagined in bold vector toon style, thick black outlines, flat fills, limited 5-color palette of warm browns and sunny yellow, sunny yellow gradient background, simple expressive black dot eyes, Cult of the Lamb sticker aesthetic, single character portrait centered
E · Direct Baby SMB (no stylistic reinterpretation)
The minimalist option: take an SMB ref + ask for a "baby version" with no style override. Comparison across runs — Parent · Run 03 (loose prompt) · Run 04 (strict pixel-art prompt).












Known issues with these runs: "pilot" look comes from the model confusing over-ear headphones with aviator goggles + projecting pilot iconography. Pixel-art quality is soft because MiniMax image-01 is a general diffusion model and doesn't natively produce true indexed-color sprites at any prompt strength. To fix: per-parent accessory prompts ("pink over-ear headphones, NOT aviator goggles") + either a post-process pixelation pass or switching to a pixel-art-tuned model for this direction.
Prompt used (same for all 4 calls, strict — run 04)
Pixel art sprite portrait of a baby version of the reference monkey character. Render in identical 8-bit / 16-bit chunky pixel art style as the reference: hard-edged pixels, flat indexed colors, zero anti-aliasing, zero gradients, zero painterly textures, zero illustration shading. Preserve every accessory, every color, every trait from the reference exactly — same hat, same headphones, same clothing pattern, same jacket, same fur color, same eye color and shape, same mouth, same skin tones. The ONLY differences from the reference: slightly larger head relative to body (cute baby proportions), slightly smaller torso, slightly rounder face. Background is a single solid pastel color (no gradient). Composition matches the reference: head and shoulders portrait, centered.
Previous (looser) prompt available in art-samples/runs/2026-05-26-03-direct-baby/prompts.json.
Decision pending. Hybrids welcome — e.g. "D's outline + B's painterly shading," or "E's faithfulness with B's emotional polish on tentpole moments." Next: pick a direction, then iterate on the house style reference sheet.
Inspiration · virtual-pet UI references
Curated set of strong virtual-pet / tamagotchi / cozy-creature UIs. Click any tile to open its source. Image files cached locally so the gallery doesn't break if a CDN moves. Initial gather had several misidentified products — labels and links below have been visually verified.
15 references · re-verified 2026-05-26 · index at research/inspiration/index.json. Filenames preserved from initial gather; labels and source links corrected after visual verification.
Wireframes (v2 — incorporating inspiration learnings)
Mobile-first sketches of the four core screens, rewritten after the inspiration audit. Key changes from v1: pet lives IN a painterly scene (not floating on void), stat ring replaced with a single Adventure bar + agent-voiced needs line, persistent currency on Home, friends as a 2-col collection grid, lineage as Catbook-style silhouettes, dedicated 3-screen Evolution tentpole sequence. v1 wires preserved at the bottom for diff.
— Banana's mood, tap → open chat
Mango · 12d
survived 1 coma
Coco · 9d
retired
???
future
???
future
Banana_Jr
😊 · visit
Solana_kid
😴 · visit
MonkeBro
🍌 · visit
Pixel_Ape
😠 · visit
OG_Legend
✨ · visit
+ invite
a friend
Shop · v1 (in-game currency only)
Five categories. No real money in v1. Items earned at ~5–8 🍌/day passive + 1 🍌 per friend visit (rate-limited).
Banana
free · daily
Berry mix
🍌 8
Pizza
🍌 15
Cake
🍌 25
Spicy
🍌 12
???
Lvl 5+
| Category | Items (v1) | Effect |
|---|---|---|
| 🍌 Food | Banana (free daily), Berry mix, Pizza, Cake, Spicy snack | Different hunger/mood curves. Each triggers a unique agent line ("ugh, spicy" / "you spoil me"). |
| 🎾 Toys | Ball, Puzzle box, Plushie, Music box | Different happiness boosts. Each unlocks a small Play-animation overlay. |
| 🌄 Scenes | Forest, Beach, Night sky | Cosmetic Home backgrounds. Painterly-direction self-expression. |
| 💊 Care | Smelling salts (instant coma-revive), Lullaby (faster sleep) | Functional. Smelling salts also have a free 24h-cooldown alternative — coma-revive is never paywalled. |
| ☕ Moodifiers | Sweet treat (→ sappy), Espresso (→ manic), Calming tea (→ serene) | Shifts agent tone register for 24h. Discovery moment: "wait, the shop changes how my agent talks?" |
Held for post-v1: accessories (hats / glasses — needs portrait overlay system), pedigree-exclusive items (Gen2 OG aura), profile-frame cosmetics, TG Stars / TON premium currency.
Tentpole · Evolution sequence (3 screens)
Per the ARCB Behance concept, evolution is its own multi-screen moment — not a single in-place transition. Designed as: a building-up Home → an announcement → the reveal. Same pattern reused for Hatch (egg crack → name → first portrait) and Coma+Revive (sick portrait → mourning agent line → revived portrait + lineage update).
— Banana sounds restless
v2 decisions, summarized:
- Pet lives in a painterly scene, not floating on void. Background tint reflects mood + time of day.
- One Adventure progress bar + one agent-voiced needs line, instead of 4 stat meters.
- Notification chip top-right (unread agent DMs) replaces the gear icon. Settings move to Profile.
- Currency persistent bottom-left on Home.
- Action tray icons only; copy ("Bon appétit!") appears as a top banner during the action itself.
- Friends = 2-col collection grid (Finch / Catbook), not contact list. Last tile is "+ invite."
- Lineage on Profile = 2x2 Catbook grid with silhouettes for future generations.
- Tentpole moments (Evolution, Hatch, Coma+Revive) are 3-screen sequences with a building-up Home → announcement takeover → reveal pattern.
v1 wireframes (diff reference)
Preserved below to show what we changed. Each v1 screen's note explains the v2 replacement reasoning.
Onboarding flows
Tentpole moments
Tone of voice & copy
Tech Details
Architecture, components, file layout, risks, and verification.
Architecture
┌────────────────────────────────────────┐
│ ONBOARDING (Cloudflare Pages) │
│ Guided BotFather wizard │
│ Matrica OAuth link (optional) │
│ Submits to provision-agent │
└────────────────┬───────────────────────┘
▼
┌────────────────────────────────────────┐
│ provision-agent (VPS, loopback) │
│ admin.sh create <username> │
│ → Docker container + .env (bot tok) │
│ → init.sh runs `openclaw onboard` │
│ → mounts shared skills/ dir │
└────────────────┬───────────────────────┘
▼
(one container per user, one bot per user)
┌───────────────────────────────────────────────┐
│ USER CONTAINER (openclaw, Telegram channel) │
│ ┌─────────────────────────────────────────┐ │
│ │ monkegotchi-skill (read-only mount) │ │
│ │ • fetch pet state from D1 per message │ │
│ │ • inject mood/stage/lineage into prompt│ │
│ │ • expose /pet, /feed, /play tools │ │
│ └─────────────────────────────────────────┘ │
└───────────┬─────────────────────┬─────────────┘
│ read pet state │ write care
▼ ▼
┌────────────────────────────────────────┐
│ SHARED D1 (Cloudflare) │
│ reuses multi-user-openclaw's D1 │
│ + pets, pet_state, lineage, visits │
└────────────────┬───────────────────────┘
▲
│ reads + writes
┌────────────────────────────────────────┐
│ MINI-APP / WEB (CF Pages + Workers) │
│ TMA React template │
│ • care → POST /api/care │
│ • portrait + overlays │
│ • social: profiles, visits, friends │
└────────────────────────────────────────┘
┌────────────────────────────────────────┐
│ TICK WORKER (CF Cron, every 5min) │
│ decay stats, transition stages │
└────────────────────────────────────────┘
┌────────────────────────────────────────┐
│ IMAGE GEN (MiniMax image-01) │
│ at hatch + each evolution, → R2 │
└────────────────────────────────────────┘
Components
1. Mini-app / web client (one codebase, two surfaces)
- Base template:
Telegram-Mini-Apps/reactjs-template(Vite + React + TS + react-router +@tma.js/sdk). - UI library: shadcn/ui + Tailwind CSS — copy-paste components owned in repo, painterly-brand friendly.
- Data layer: TanStack Query (React Query) for pet state fetching, caching, and optimistic updates on care actions.
- Animation: Framer Motion for overlay layers (idle bob, blink, ZZZ, sparkle, sad tear, eating-banana, evolution glow). Portrait stays static.
- Routing: detect TMA context via
initData; same routes/components serve the public web page when accessed standalone. - Screens: Hatch · Home · Profile · Friends · Shop. Bottom tab nav.
- Auth: in TMA —
initDataHMAC-verified server-side. On web — anonymous local-only by default, email magic-link or Telegram-Login-Widget on upgrade. - Pedigree unlock (optional): "Link MonkeDAO" → Matrica OAuth → callback returns wallets + NFTs → server filters for SMB Gen2/Gen3 → assigns tier. No wallet adapter, no signing.
2. Agent service — reuses multi-user-openclaw
- One container per user, one Telegram bot per user.
- New
monkegotchi-skillmounted read-only into every container. - On every inbound message: skill fetches pet state from D1, injects mood/stage/lineage as a system-context line.
- TG user ID is the join key between agent and pet state.
- Agent capabilities (Solana questions, tasks) never depend on pet state — only persona does.
3. Backend (Cloudflare Workers + D1 + KV + R2)
- D1: users, pets, pet_state, lineage, friendships, visits.
- KV: session tokens, rate limits, hot pet snapshots.
- R2: generated portraits + overlay sprites.
- Workers:
api(REST for mini-app),tick(cron decay),image-gen(MiniMax wrapper).
4. Agent ↔ Pet contract
- Mood band: happy / neutral / grumpy / sick / coma → tone register.
- Stage: egg-not-hatched (silent/curious) → baby (eager) → teen (sassy) → adult (witty).
- Hunger / energy: color willingness to do tasks.
- Lineage memory: coma episodes occasionally surface in agent responses.
5. Image generation
- MiniMax
image-01REST API, called from theimage-genWorker. - House style sheet at
assets/style-ref.pngpassed as reference for family resemblance. - Prompt template: baby-monke companion, transparent BG, single portrait, traits from SMB if pedigree.
- Cached forever at R2 key
pet/{pet_id}/{stage}.png.
6. Social (in v1)
- Public profile route
/m/:handlerendering portrait + stats + lineage + recent visits. - Visit action: any user can visit another pet → small mood boost on visited, small coin reward to visitor. Rate-limited per pair per day.
- Friends list seeded from Telegram contacts who have also hatched.
AI-tamago reference — what we borrow vs skip
Repo: ykhli/AI-tamago. We don't fork. Their stack (Next.js + Supabase + Inngest + Clerk) doesn't match ours. What's worth copying are a few patterns; most of the code is over-engineered or single-tenant by construction.
Borrow
| Pattern | Where they do it | How we use it |
|---|---|---|
| Append-only event-sourced status | supabase/migrations/...init_tables.sql — tamagotchi_status + tamagotchi_interactions are insert-only; current = latest row | D1 tables pet_status_log and pet_interactions insert-only, keyed by chat_id. Free history for LLM prompts. |
| Two-tier split: deterministic tick + LLM narration | They put stat math in the LLM (anti-pattern, see below). We invert: math in code, narration in LLM | CF Cron Worker computes decay (cheap, deterministic). Separate cheaper LLM call writes a single "thought" line, cached in KV with TTL. |
| Strict JSON output prompts | src/app/utils/state.ts:42-88 — they repeat "ONLY JSON" 3+ times | Same trick for any structured LLM output we add (e.g., portrait-prompt generation). |
| Preference vector memory (optional, v1.5) | src/app/utils/memory.ts + pgvector + Xenova transformers | If we add "remember what foods this monke liked," use Cloudflare Vectorize + small embeddings. Skip for v1. |
Skip / avoid
- LLM as physics engine. They ask GPT to compute new stat values every 5 min. ~288 calls/pet/day, expensive, non-deterministic, hard to balance. We do all decay/mood/stage math in pure TypeScript (testable, free, instant) and only call the LLM for narration.
- Inngest + waitForEvent ceremony. Over-engineered on CF Workers — just
awaitinline. - Module-level mutable state.
let status = ""at the top of route files — breaks on serverless cold starts and across users. We key everything bychat_idfrom day one. - Single-tenant schema. Their DB has no
user_idanywhere. Our schema hastg_user_idas primary key on every table. - Their stage / evolution system. Doesn't exist in code (just an unused
agecounter). We're building our own (see Game mechanics in Plan tab). - Their death system. Also doesn't exist — just a line in the prompt that says "you die when…" with no code to enforce it. We have explicit coma + revive.
- Their
interact/route.ts. Their team flagged it as messy; don't read for ideas.
Files worth a direct read in their repo
src/app/utils/state.ts— the whole update loop, ~120 LOCsupabase/migrations/20231029050944_init_tables.sql— schema in 30 linessrc/inngest/functions.ts— tick shape (port to CF Cron)
Risks + mitigations
- Image-gen style drift between pets — strict reference image + prompt template; manually review first 50 pets.
- Telegram Mini App iOS webview quirks — test on real iPhone early; lean on
@tma.js/sdkviewport helpers. - Tick loop scale — only iterate pets touched within 30d.
- Agent persona inconsistency — snapshot-test prompt assembly against canned pet states.
- Empty cold-start — 60s hatching cinematic + immediate first DM.
Verification plan
- Hatch flow (non-Web3): open mini-app → name pet → see hatching → portrait in ~5s → first agent DM lands.
- Care updates agent tone: feed=happy=enthusiastic; neglect=grumpy=snippy. Snapshot-test prompt assembly.
- Evolution: fast-time multiplier in dev → stage transitions + new portrait + vocabulary expands.
- Coma + revive: neglect → sick visuals → mourning tone → revive → lineage records episode.
- Matrica pedigree: Gen2/Gen3/none each set correct tier, visuals, agent voice.
- Three entry paths: (a) anon web → email-claim merges. (b) Pet-first → BotFather wizard → skill enabled with existing pet_id. (c) Agent-first →
/hatch→ soul-arrived event → next reply has the "I feel different" moment. - Social: two test accounts visit each other; rate-limit holds.
- Cross-platform parity: all flows pass on mobile Safari + Chrome.
- Tick loop survives restart: redeploy → no double-decays.














