Repository navigation
Add family-story-keeper: record and replay family life stories - #388
Conversation
Interviews a family member about their life a few questions at a time, works through life chapters across sessions, and lets anyone at home ask for a story later. With Google linked, recordings live in the user's own Drive and play back in the storyteller's voice; otherwise transcripts. Reuses profile, summary, Memory Mirror and Social Memory data read-only.
✅ Community PR Path Check — PassedAll changed files are inside the |
🔀 Branch Merge CheckPR direction: ✅ Passed — |
✅ Ability Validation Passed |
🔍 Lint Results✅
|
- Stop the audio recording when the session ends, so the mic never stays on after an interrupted or failed session. - Match storytellers on whole words, so "Dadi" or "Mumtaz" no longer match an existing "Dad" or "Mum". - Track played stories per storyteller, so "play another" no longer skips a different person's story with the same number.
|
Hello @hassan1731996, thanks for this, really nice ability overall. The interview flow and the way it builds on what the household already shared both feel very natural. I reviewed it closely and pushed a few fixes directly to this branch: Recording: if a session was interrupted or hit an error while an answer was being recorded, the microphone could stay on after the ability ended. Recording now always stops when the session ends. Storyteller names: names were matched as a substring, so once "Dad" was saved, saying "Dadi" or "Dada" matched Dad. "Mumtaz" matched "Mum" the same way. A second relative couldn't be added, and "no, it's Dadi" kept switching back to Dad. Names now match on whole words, so "my dad" still finds Dad but similar names stay separate people. Play another: story numbers restart for each storyteller, so "play another" could skip a different person's story with the same number. Played stories are now tracked per storyteller. A few smaller things you could look at in a follow-up:
|
What does this Ability do?
Family Story Keeper interviews a family member (a grandparent, a parent, or you) about their life, a few questions at a time, and works through the chapters of a life across sessions. Later anyone at home can ask "how did Grandpa meet Grandma?" and hear the answer. With Google linked, it plays the storyteller's own recorded voice from the family's Google Drive. Without Google, it reads back the transcript.
Suggested Trigger Words
("tell me a story" is avoided on purpose because Bedtime Stories already uses it.)
Type
External APIs
get_token("google")). This is optional and needs no API key. Without Google linked, no audio is recorded and the ability keeps transcripts only.Testing
Live Editor (Google linked):
Probe: a separate throwaway probe ability confirmed the four platform assumptions the design relies on:
start_audio_recording()captures audio whileuser_response()waits.get_token("google")returns a token..wavto Drive.play_audio()in music mode.Offline:
validate_ability.pypasses, and flake8 is clean with the CI settings.Error scenarios are covered only in those offline checks, not live:
Checklist
community/family-story-keeper/main.pyfollows SDK pattern (extendsMatchingCapability, hasregister_capability+call)README.mdincluded with description, suggested triggers, and setupresume_normal_flow()called on every exit pathprint()— usingeditor_logging_handlerredis,user_config)asyncio.sleep()orasyncio.create_task()— usingsession_tasksAnything else?
How it differs from existing abilities. Voice Journal, Voice Memory Capture and Private Notes store notes you dictate about yourself. Future Letter Writer saves a message to yourself, and Bedtime Stories invents fiction. Family Story Keeper interviews someone else, follows up on what they say, keeps track of which parts of a life are still untold, and lets family members queue questions for the next session. It is also the first community ability to use the audio recording API to keep and replay a real person's voice.
Review patterns followed from earlier feedback:
does_match(); triggers belong in the dashboard.create_keyfirst and thesuccessfield checked. Data is cached in memory to cover the visibility delay.user_profile.mdanduser_summary.md, which are read only.Reuses existing data, read-only. It reads
user_profile.md,user_summary.md,memory_mirror_corrections.mdand Social Memory'ssocial_memory.json. This lets it suggest who to interview ("Abdul, your grandfather?") and make questions personal. All of it is fenced off as untrusted data in prompts, never spoken verbatim and never logged.Privacy.
family_story_keeper.md, under 180 words) can be turned off with "keep the stories private".