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.
- colors seeds all 15 kernel names. `colors.keep {}`, `colors.drop
{name}`.
- emoji seeds a few catalog emoji. `emoji.keep/drop {value}`, cap 24.
- font seeds a few chars. `font.keep {char?}` (no arg keeps the
current char), `font.drop {char}`, cap 24.
- tile seeds the 2D classics. `tile.save {name?}`, `tile.name {id,
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.