Skip to content

[Feature]: Composer lobster mascot perches on the empty prompt (seeded per session) #102754

Description

@steipete

Summary

Give the Control UI chat composer a small OpenClaw lobster mascot that perches on the prompt while it is empty, does little idle animations, and is re-randomized per session.

Problem to solve

The empty composer is a dead moment in the product: a bare input with placeholder text. OpenClaw has a strong mascot identity (the lobster in the sidebar, the dreams-scene sleeper, icons.lobster), but nothing playful in the main surface people actually stare at. A tiny, unobtrusive companion adds personality without adding config or product surface.

Proposed solution

A decorative openclaw-composer-lobster element rendered inside the composer:

  • Perches on the top edge of the prompt box (feet dangle over the border) only while the composer is quietly idle: connected, empty draft (IME-aware), no attachments, no reply target, no queue, no active run, voice mode off.
  • Ducks away behind the box edge as soon as you type or a run starts; pops back up when the prompt is empty again.
  • Does idle acts on a personality-weighted schedule: scuttle along the edge, wave, claw snips, hop, spin, peek, blow bubbles, nap with floating z's. Poking it makes it startle.
  • Seeded randomization per session + page load: shell palette (crimson/coral/teal/violet/ink/rare gold), size, antennae style, accessory (none/crown/sprout/eyepatch), perch spot, facing, and personality (sleepy/zoomy/friendly/showoff). Every new session hatches a slightly different lobster.
  • Drawn in the smooth OpenClaw lobster style (same species as icons.lobster and the dreams sleeper), not pixel art.
  • Purely decorative: aria-hidden, no i18n strings, no config surface, honors prefers-reduced-motion (static sprite, no acts), timers pause when the tab is hidden and clean up on disconnect.

Alternatives considered

  • Animating the existing welcome-screen avatar: only visible on brand-new sessions, not on the composer where the idle moment lives.
  • A static decoration: rejected, the ask is that it "does stuff" rather than float there.
  • Config-gated easter egg: rejected; config surface bar is high and reduced-motion users already get the static fallback.

Impact

Delight/branding polish for the Control UI chat surface. No behavior change for sending, drafts, or slash commands; nothing rendered when the composer is busy.

Evidence/examples

Implementation PR follows with screenshots (dark/light, mobile, variants) and jsdom tests for seeding determinism, act scheduling, and lifecycle cleanup.

Additional information

Requested by Peter ("place the animated lobster on the prompt when there's no text yet; it should not just float there; randomized versions per session").

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Low-priority cleanup, docs, polish, ergonomics, or speculative work.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.enhancementNew feature or requestissue-rating: 🌊 off-meta tidepoolIssue quality rating does not apply to this item.maintainerMaintainer-authored PR

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions