mrly.net

Libraries

A pick is choosing a value for a host: a color, a glyph, a tile. There are no pickers. Components render inline; nothing floats but toast and the `ask` confirm.

The pattern

The vocabulary apps each own a `library`: a persisted list of kept values, seeded with defaults for cold start.

{name}`.

current char), `font.drop {char}`, cap 24.

name}`, `tile.drop {id}`, cap 12. Entries carry the same `{v:1, tile, paint}` value hosts consume, plus a rendered thumb frame.

Each app's view ends in a library card; libraries ride the app's normal `state()`/`save()`/`load()`, so they persist and replay like any state.

Hosts

`components/library.tsx` renders a library inline wherever a host asks for a value: swatch grid for colors, glyph buttons for emoji/font, canvas thumbs for tiles. It reads real app state through `peek` (`peeks.ts`, installed at boot); a tap fires the host's own `${host}.set {key, value}`, the only journaled call. Sleep and matrix palette slots cycle through the colors library in place. Timer needs no vocabulary: inline h/m steppers fire `timer.set duration` directly. Typed glyph fields stay; the kernel validates and bad input fails the verb.

Agent parity

Libraries are kernel state behind journaled verbs: an agent peeks the same library a finger sees, edits it with the same verbs, and its pick is the same host `.set` a tap fires.