Hero Studio
Public Made by Adomby adom
The hero-image lab with a human gate: `hero-studio pose <owner/slug>` opens the studio in front of the human, posed for their package, and blocks until they click Generate, producing the provenance-stamped 2000x1250 PNG the registry's hero gate requires. The image carries the title and artwork; the exported image also bakes the type pill (top right) and full wiki slug (bottom right); the page shows the hero bare, and only the homepage marquee overlays its own dynamic info. Every hero wears its P
Require --ai-thread at start: thread-keyed registry, reuse-instead-of-respawn, per-thread snapshots
Same 2026-08-11 field report as the idle-shutdown issue: of 13 accumulated instances, adom/pup-bridge had THREE separate studios and two other pages had two each, because a thread that forgets its own studio just spawns another. Worse, all instances share one generated/state-snapshot.json, so 13 debounced writers clobbered each other and one studio (port 8856) ended up posing adom/pup-bridge while wearing an adom-desktop-puppeteer-bridge approval record. The in-memory isolation that #15 built multi-instance for does not exist at the persistence layer.
Proposal, following the caller-identity pattern ab and pup bridge already use (identity is self-reported attribution, never authorization):
- hero-studio start requires --ai-thread "". State-changing HTTP calls carry X-Adom-Thread (or a top-level aiThread field); anonymous calls get a teaching refusal (errorCode caller_identity_required) whose hint shows the exact retry, so the calling AI self-corrects on the next call.
- Each instance writes a registry entry (~/.adom/instances/hero-studio/.json: pid, port, thread, page, version, lastActivity). hero-studio ls lists live studios, prunes dead pids, and flags version drift against the on-disk package (the stale-fleet failure above).
- start with a thread that already has a live instance prints "already running on port NNNN, use that one" and exits instead of spawning. A different thread posing the same page gets a warning.
- Snapshots become per-thread files, which fixes the shared-snapshot clobber outright.
Full pattern spec with refusal payloads and a Node reference implementation: the app-creator-server-lifecycle sub-skill on the App Creator page.