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.
59 lines
2.8 KiB
Markdown
59 lines
2.8 KiB
Markdown
# 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` |
|