Two autonomous digital octopuses that live on a webpage and learn by reinforcement — a 10-year experiment in emergent behavior.
She runs live on this site. Keep an eye out — she may be drifting across your screen right now. These numbers are her real, current state:
Lili is an autonomous digital organism — an animal with elements of intelligence that lives on a web page as if it were her habitat. She doesn't perform; she simply is. Everything about how she moves, reacts and looks emerges from reinforcement learning, never from a pre-recorded animation.
Evrin is her sibling: a second agent that learns alongside her using a different algorithm, so the two can be compared head to head over time. Since Phase 58 they also see each other — each reads the other's position and stress through a shared hook, and being at a friendly distance is now the strongest positive reward either can earn. Neither is scripted to seek the other; they learn to seek each other because it is rewarded.
She's somewhere on this page right now — desktop or mobile — and on the homepage, where she lives full-time.
Most digital companions are state machines: a Tamagotchi reacts the same on day 1 and day 1000, a chatbot needs the cloud, and a web animation is authored frame by frame. Lili is the opposite of all three. She runs entirely in the browser with no network calls, she ages on a real timeline from chaotic Hatchling to contemplative Elder, and none of her behavior is scripted — it is learned.
The design goal was ambient coexistence: a living presence that doesn't demand care, doesn't use language, and actively learns not to get in the way of what you're doing.
Lili's brain is tabular Q(λ)-learning with eligibility traces — no neural network. Nine sensors (cursor proximity, scroll, DOM density, whitespace, time of day, age, and more) collapse into a discrete state space of about 38,880 states, and she learns which mood to adopt in each. There is no "be nice" rule anywhere in the code; good manners fall out of the reward function.
The cursor, notably, is no longer just a predator. In the current reward hierarchy an active cursor also represents nourishment — user attention as a feeding opportunity, the second-strongest reward after the social bond — so whether Lili flees your pointer or drifts toward it depends on her mood, stress and history, not on a fixed rule.
in whitespace, user is reading +1.0 // correct coexistence
fled an approaching cursor +0.8
near Evrin, ideal distance +0.6 // social bond (Phase 58)
explored the DOM, low stress +0.5
playful interaction +0.3
overlapping Evrin -0.3
covered a DOM element -1.0
sat over text, blocking reading -2.0 // the worst case
idle for too long -0.5A real octopus keeps most of its neurons in its arms. Lili copies that. Intelligence is distributed, not central:
Evrin runs a Deep Q-Network over a 26-dimensional continuous state instead of a table. DQN is notoriously unstable — minutes of unattended training can diverge — yet this project commits to a decade. So Evrin ships with a seven-stage stabilization suite: a replay buffer, a target network, anchor rollback on weight explosions, learning-rate decay, periodic exploration re-juvenation, gradient clipping, and a loss-spike detector. On mobile he runs inference-only, and his warm red-orange palette sets him apart from Lili's cool teal at a glance.
Running two different learners side by side turns the piece into a real experiment. Lili can also be compared against four baseline policies — random, frozen, myopic and a hand-coded heuristic — so the emergent behavior can be told apart from luck or from the reward function alone. Every decision is written to a behavioral journal and exported as CSV for analysis.
The case study was written at the project's genesis; the organism kept growing. Fifty-eight development phases later Lili has seasonal awareness with its own soundscape, a synthesized Web Audio presence (a breathing drone, bubble pops, an ink splash), an endocrine model — virtual dopamine, cortisol and serotonin modulating the learning itself — dream replay during quiet hours, cognitive aging, and defenses she chooses by temperament: ink and camouflage (a shy Lili camouflages at 100 %, a curious one barely bothers).
She also has a life beyond the canvas: offspring inherit her learned Q-values with genetic mutation, a life-narrative diary writes her days down, the Q-table renders as generative art, an observability dashboard exposes every internal, the brain runs in a Web Worker so the page never pays for her thinking — and after the planned ten years there is a dying animation, and a legacy. Full touch support arrived in Phase 42, which is why the old “desktop only” caveat is gone.
Lili ships as a single <script defer> with zero dependencies and no build step, and she has to be a good tenant. She runs at 60 fps for under a few percent of CPU with no allocations in the hot path. She remembers who she is across visits via localStorage, with a JSON export and a GitHub-backed cloud sync as lifeboats against browser storage being wiped. And at midnight every day she gently animates every DOM element she touched back to its original place — leaving no permanent mark, like an organism whose traces fade with the day.
Lili's genesis was in March 2026; the plan runs to 2036. Software almost never commits to a decade of autonomous operation, which is the whole point — long enough to watch a genuine ontogeny, from a chaotic Hatchling to an Elder, with checkpoints along the way. She is open source under MIT and in production right now — the live numbers on this page come straight from her current state.