evOo-local/docs/PRODUCT.md
Claude 4875753d9c
feat(memory): remember appends dated notes instead of replacing memory
The remember tool rewrote the bot's whole MEMORY.md with each call, so every
new fact erased the earlier ones unless the model re-sent the full document.

- MemoryCommitRequest gains mode "append" (the store joins the note onto the
  current content inside the same serializable transaction and still writes a
  revision row) and every commit is capped at 16 KB per document.
- remember appends a dated bullet ("- YYYY-MM-DD: ...", the user's local date)
  by default and rewrites only with mode "replace"; a full document returns an
  error that tells the bot to condense it. Retries of the same tool call stay
  single appends through the existing effect record.
- Scripted runtime memory entries can append too; the scripted "remember"
  script now appends instead of overwriting the bot's memory.
- When memory does not fit the run's 32 KB budget, the prompt keeps a
  document's newest lines instead of its oldest.
- memory.update maps an oversized save to BAD_REQUEST.
- docs/PRODUCT.md records that UserFact is the cross-space user model and the
  space MEMORY.md stays space notes (no migration).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MRtGG9ARfqqhma3t85Ro2u
2026-10-03 13:10:25 +00:00

8.3 KiB

evOo — Product rules (Gesamterfahrung)

Design mantra (apply ruthlessly)

EINFACHHEIT und Durchgängigkeit. Dennoch super flexibel. Weniger ist Mehr.

Rule Product
One model Unterhaltungen (1:1 / Gruppe), Ordner/Projekte, specialist Oos
One language Same stage, sound, and transcript grammar everywhere — no one-off chrome
Hide power Depth in specialists and settings — not every control on first screen
Cut clutter Fewer, stronger affordances; stub/TODO lists stay in docs, not UI

When a slice gets feature-heavy: prune to the simplest coherent path that still delivers Stage + sound + calm onboarding.

Conversations, not agent rows

The product is organized as Unterhaltungen (see VOICE.md). Team lists your Oos; opening one starts a conversation, not “the agent app”.

Type Who
1:1 Unterhaltung One Oo
Gruppenunterhaltung Multiple Oos (+ humans later) — fun factor essential (see docs/GROUP-CONVERSATIONS.md)
Projekte Group conversations in Ordner (BotSection folders)

Deepest personalization

evOo must adapt to each user more individually than any other app. Persona/crew fit is lifestyle-agnostic — office worker, club/scene person, hardcore nerd: same mechanism, simplest path to what they want.

Companion tone When
Geek-peer / Fachsimpeln User wants depth — match enthusiasm, stay in lane
Quiet-doer User wants outcomes — never act like we know better

Onboarding harvest infers help & vibe (user-help-vibe.ts → MEMORY.md), then spawn/select specialist Oos and Unterhaltungen — not one personality for everyone. See docs/PERSONA-SELECTION.md.

Accessibility of ambition

Power-user literacy must not be required. Same product, radically different crews/Unterhaltungen — domain excellence in each case.

User Gets
Mom, Thermomix That — simply, excellently
Hard math Specialist Oo at very high level
Software development Specialist Oo at very high level
Axis Rule
Skill floor Grandma-simple entry — no jargon gate, no setup maze
Skill ceiling Expert-grade per specialty — depth when wanted
Anti-pattern Wunderwuzzi mediocre at everything

Simple entry, deep ceiling. UI and onboarding copy stay calm and plain; specialist lanes carry the depth.

Emergent ensemble

Das Ganze ist mehr als die Summe seiner Teile.

Power comes from more individualists and differences — a crew of distinct specialists with chemistry — not from one mega-agent. Capability emerges when diverse Oos meet in Unterhaltungen and Gruppen.

Pillar Why
No Wunderwuzzi Depth per lane beats one mediocre generalist
Specialty ceiling Each Oo expert-grade in its domain
Fun friction Banter and pushback between personalities — useful spark
Ensemble > solo Group stage + handoffs make the crew feel stronger than any single Oo

Chief coordinates; the crew delivers. Product, prompts, and stage should never imply one bot could replace the group.

No Wunderwuzzi

Every Oo has a clear specialty. There is no do-everything generalist personality.

  • Persona archetypes map to templates (CTO, Fixer, quant, engineer, …).
  • Unmatched bots fall back to specialist, not “companion/helper”.
  • Chief (first onboarding bot) is seeded as Chief of Staff — coordinates the crew, does not replace specialists.
  • Group encounters show active speaker + ensemble; collaboration is the model — banter & chemistry, not corporate-dull committee.

When adding templates or copy: narrow scope, explicit role line, defer out-of-lane work to other Oos.

First-run emotional north star

The app sets itself up. It discovers what it can (profile, tools, crew) and shows the user:

Don't stress. We're here now. Trust us — there are many of us. We've got this.

Principle Product
Calm collective crew Reassurance copy + discovery progress (OnboardingDiscoveryShell), not a long wizard
Honest discovery Progress bar + one active step in onboarding — future sources stay in docs, not UI laundry lists
Specialists Chief of Staff + crew framing; no Wunderwuzzi

Surfaces: Welcome.tsx (spirit), Onboarding.tsx (progress + minimal model/tools steps).

Onboarding → user profile

During onboarding, harvest respectful local signals into the existing user-scoped MEMORY.md (space memory — not a parallel brain):

Signal Source
Name, email rpc.me()
Timezone Intl / localTimezone()
Locale, UI locale navigator.language, saved UI pref
Languages, platform navigator
Default model, computer host bootstrap Me

Implementation:

Layer Path
Profile harvest apps/web/src/lib/user-profile-harvest.ts
Help & vibe inference apps/web/src/lib/user-help-vibe.ts
Persona/crew selection notes docs/PERSONA-SELECTION.md
Discovery plan + progress apps/web/src/lib/onboarding-discovery.ts
Reassurance UI apps/web/src/components/onboarding/OnboardingDiscoveryShell.tsx

Called from Onboarding.tsx after first bot ensure.

Oo relationship over time

Principle Meaning
Always on Presence when needed — 24/7 feeling without theater
Compounding Stronger/more attuned the more the user works with their Oos (memory + threads)
Never creepy Warm competence; no surveillance vibes
Not yes-men Respectful pushback — don't just echo

Seeded in user MEMORY.md (user-relationship-contract.ts). Persona copy and prompts follow. Details: docs/OO-RELATIONSHIP.md.

Memory and the user model

Store Holds Written by
UserProfile + UserFact (Settings → About you) The user model: who the user is, across spaces; a fact can be limited to chosen spaces update_user_profile, onboarding, chat consolidation, the user
User-scoped MEMORY.md (Settings → Memory) Space notes shared by the bots of one space The user, onboarding harvest
Bot-scoped MEMORY.md (bot → Knowledge) One bot's notes in one space remember appends dated notes; mode: "replace" rewrites

Space notes are not migrated into facts: facts are short, consented statements about the user, space notes are free-form context for one space. A memory document holds at most 16 KB, so a bot's notes and the space notes both reach the prompt; when it is full, remember asks the bot to condense it.

Capability vision — ambient & video (future roadmap)

This PR does not build surveillance. Current Gesamterfahrung stays Stage + sound + calm onboarding (VOICE.md). The following is Ingo's long-term direction — optional layers only.

Capability Rule
Video calls Optional — user-initiated; audio-only remains the simpler default
Ambient help Oo handles practical presence in the background; user need not sit in front of the app
"It's just an Oo" Presence without performative attention-seeking — compounding via use, not constant face time
Home metaphors (far future) Could replace alarm system or surveillance camera only with strict opt-in — never creepy, never default-on
  • No always-on camera/mic without explicit, revocable consent UX
  • Any sensing feature must pass earned or creepy? (docs/OO-RELATIONSHIP.md)
  • Specialist lanes for home/security — not one mega-agent watching everything
  • Respectful pushback when a setup would be over-broad or unsafe

Details and encounter grammar: VOICE.md § Ambient & video presence.

TODO (future passes)

  • Merge focus choice from onboarding.chooseFocus into help/vibe (mergeHelpVibeHints — mapping exists, wire on answer)
  • Merge connector authorizations into profile
  • Wire projects-on-disk / habits-routines / pain-points discovery sources (currently shown as planned stubs)
  • Suggested Unterhaltungen + specialist Oos + project folders from discovery results
  • Optional explicit name confirmation step in onboarding UI