Skip to content

Redesign orchestrator robot #274

Description

@williamthorsen

Description

Users find the orchestrator's "working" animation distracting — the arm motions (3-frame loop cycling through raised/extended/lowering positions at 300ms) look like a cheerleader. The orchestrator also lacks the visual authority expected of a command unit.

Replace the orchestrator robot's body and animation system:

  • Body: Replace legs with tank treads, extend the torso lower for a bulkier command-unit silhouette, replace the narrow antenna with a broader 3×2 beacon lamp
  • Animations: Replace arm-wave working animation with mechanical vibration (upper body shifts 1px while treads stay planted) + beacon flashing. All activity is communicated through frame-based animation — no runtime scale pulse
  • State change: Orchestrator default in-progress state changes from resting to idle
  • Scope: Orchestrator robot only — subagent robots are completely unchanged

Design spec

docs/superpowers/specs/2026-03-12-orchestrator-redesign-design.md

Acceptance criteria

Must have

  • Orchestrator sprite has tank treads (18×4), wider torso (16×14), beacon lamp (3×2), longer arms (2×8), no legs
  • Orchestrator palette extended with index 6 beacon bright shade (#fff5c0)
  • Working animation: body vibrates (upper body Y-1) + beacon flashes, 500ms cycle, Loop strategy
  • Celebrating animation: vibrate + tread roll + visor pulse + beacon, 250ms cycle, Loop strategy
  • Idle animation: still body, slow visor dim pulse, 1200ms cycle, PingPong strategy
  • Concerned animation: head slouched +1px, beacon off, single frame, Freeze strategy
  • Walking animation: tread pattern scrolls + beacon flashes, 300ms cycle, Loop strategy
  • Deactivated: reuses idle with reduced opacity (unchanged behavior)
  • OrchestratorActor scale pulse removed (_elapsed, onPreUpdate deleted)
  • Orchestrator default in-progress state changed from resting to idle in agent-state-resolver.ts
  • Frame config split: frameConfigForState() accepts CatwalkSpriteType parameter
  • All subagent animations and behavior completely unchanged
  • All tests pass, typecheck clean, lint clean

Should have

  • Preview renderer updated with per-sprite-type animation definitions
  • Timing values stored as named constants (ORCH_WORKING_DURATION, etc.)

Nice to have

  • Follow-up ticket created for subagent idle/resting state semantic distinction

Metadata

Metadata

Labels

featureAdded or improved external functionalityscope:factory

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions