Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline (Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/* packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2.8 KiB
Gruppenunterhaltungen — fun factor & chemistry
Das Ganze ist mehr als die Summe seiner Teile. The product must make the ensemble feel stronger than any single Oo — emergent capability from distinct specialists, not a mega-agent wearing many hats.
When strong Oo personalities meet, it should get funny sometimes. Fun factor is essential. Group chats must spark — character friction, banter, chemistry — not a sterile multi-bot committee.
Product bar
| Do | Don't |
|---|---|
| Playful disagreement when useful | Corporate-dull consensus voice |
| Distinct personas riffing in-lane | Same tone from every bot |
| Useful outcomes after the spark | Chaos for its own sake |
| Grandma-simple entry (see PERSONA-SELECTION) | Jargon gate or “meeting mode” UI |
Useful + lively. Banter serves the user; it is not performative noise.
Persona prompts & group dynamics
Group roster context (renderGroupMembersContext in packages/core/src/bot-messages.ts) tells each Oo:
- Strong personalities may disagree playfully — humor and chemistry welcome when it helps.
- Never sterile committee tone; never condescending Wunderwuzzi.
- One bot owns each stage; handoffs are baton passes, not ping-pong reports.
When writing specialist instructions: allow geek-peer depth and respectful pushback between specialists; defer out-of-lane work, don’t flatten voice.
Stage & ensemble (OoGroupStage)
| Signal | Stage |
|---|---|
| Active speaker | Full hero — who has the floor |
| Peer reply / riff | extractGroupSpark → Riffing phase label + spark subtitle (same stage grammar as 1:1) |
| Multi-working | Higher bloom energy; subtitle names count on the floor |
| Handoff | Awareness strip + handoff sound — baton pass, not boardroom |
Ensemble row: working pulse only — no extra chrome (mantra: weniger ist mehr). Chemistry lives in copy + sound, not one-off UI.
Sound & motion
| Cue | When |
|---|---|
group-spark |
Peer Oo reply in group thread — lighter, playful staccato |
handoff |
Stage ownership transfer |
work-complete |
Run settles — calm exhale |
Respects prefers-reduced-motion: reduce. Lively ≠ loud; energy caps stay procedural.
Implementation map
| Layer | Path |
|---|---|
| Spark detection | apps/web/src/lib/group-stage.ts — extractGroupSpark, resolveRiffingBotId |
| Group narration | apps/web/src/lib/bot-persona.ts — narrateGroupSpark |
| Stage UI | apps/web/src/components/stage/OoStage.tsx — OoGroupStage, StageEnsemble |
| Sound | apps/web/src/lib/oo-sound.ts — group-spark |
| Shell wiring | apps/web/src/pages/Shell.tsx — play spark on bot_message_received in groups |
| Bot prompts | packages/core/src/bot-messages.ts |