Memorist Agent
Help your parents and grandparents tell their stories before it's too late.
Memorist Agent conducts adaptive, empathetic interviews across 9 life domains — in English or Chinese. It remembers every name, place, and year the narrator mentions and follows up with targeted questions to draw out richer memories.
Why Memorist Agent?
- Local-first — Every story fragment, entity, and chapter lives on your machine at
~/.openclaw/memorist_agent/. Nothing is uploaded to any server. You own your family's data completely.
- Private by design — No accounts, no cloud sync, no third-party databases. The only network calls are the ones you explicitly trigger (sending a WhatsApp question or sharing an export). Delete the folder and it's gone.
- Easy to use — Run
/memorist_agent setup, answer 4 questions, and you're interviewing. Relay mode works immediately with zero configuration. WhatsApp auto-reply takes one extra command. The AI handles question flow, entity tracking, and story writing — you just talk to your family.
- Bilingual — Native support for English and Chinese (普通话). The agent mirrors the narrator's language naturally, including dialect phrases and colloquial expressions.
- Works with any channel — WhatsApp, Telegram, WeCom, iMessage, or just relay questions in person over tea. The skill adapts to however your family communicates.
Quick Start — Your First Interview
Step 1 — Set up a narrator:
/memorist_agent setup
Step 2 — Pick "Relay" mode (easiest — no extra config needed). You'll get questions to ask your narrator in person, over the phone, or via any messaging app. Type or paste their answers back.
Step 3 — Run the interview:
/memorist_agent interview --narrator "Dad"
That's it. After 3–5 questions, the skill saves a story fragment automatically.
Want hands-free WhatsApp? Pick "WhatsApp auto-reply" during setup instead. The narrator chats directly with their own dedicated agent — no copy-pasting needed. Requires WhatsApp gateway setup (see Prerequisites below).
What You Need
- OpenClaw gateway running:
openclaw status should show gateway running.
- Everything else is set up automatically on first run.
Nice to have (based on your setup):
| Feature |
What to configure |
| WhatsApp auto-reply |
WhatsApp linked (openclaw status), narrator's number in channels.whatsapp.allowFrom or dmPolicy: "open", mkdir -p ~/.openclaw/media |
| Telegram auto-reply |
Telegram bot configured, narrator's numeric user ID in channels.telegram.allowFrom |
| WeCom auto-reply |
@sunnoy/wecom plugin loaded, channels.wecom.enabled: true |
| iMessage auto-reply |
macOS only. channels.imessage.enabled: true, narrator's phone/email in channels.imessage.allowFrom, Full Disk Access granted to terminal. Requires imsg CLI (brew install pj4533/homebrew-imsg/imsg) |
| Voice replies (TTS) |
messages.tts configured in openclaw config — see references/media-and-voice.md |
| Voice note transcription |
pip3 install mlx-whisper (Apple Silicon) or brew install openai-whisper, or run /memorist_agent setup-stt |
File paths use ~/.openclaw/ ($HOME/.openclaw/ on all platforms — macOS, Linux, Windows WSL).
Commands
| Command |
Description |
/memorist_agent setup |
Add a narrator and configure their interview channel |
/memorist_agent interview [--narrator NAME] [--domain DOMAIN] |
Start or continue an interview session |
/memorist_agent spawn [--narrator NAME] |
Enable auto-reply — creates a dedicated agent for this narrator |
/memorist_agent despawn [--narrator NAME] |
Disable auto-reply — remove the dedicated agent |
/memorist_agent remind [--narrator NAME] |
Send a gentle reminder to continue their story |
/memorist_agent stories [--narrator NAME] [--domain DOMAIN] |
Browse collected story fragments |
/memorist_agent entities [--narrator NAME] |
Show the entity map: people, places, years |
/memorist_agent compile [--narrator NAME] |
Compile fragments into polished memoir chapters |
/memorist_agent export [--narrator NAME] [--format md|json|txt] |
Export the memoir to a file |
/memorist_agent share [--narrator NAME] |
Invite a family co-editor to review |
/memorist_agent status |
Show all narrators, progress, and agent status |
/memorist_agent setup-stt |
Auto-install voice transcription |
Life Story Domains
| ID |
Domain (EN) |
Domain (ZH) |
Sample Opening Question |
origins |
Origins & Childhood |
出身与童年 |
"Where were you born, and what's your earliest memory of home?" |
growing-up |
Growing Up |
成长岁月 |
"What was school like for you? Who were your closest friends?" |
family-history |
Family History |
家族历史 |
"Tell me about your parents — what kind of people were they?" |
love |
Love & Partnership |
爱情与伴侣 |
"How did you and Mum/Dad first meet?" |
work |
Work & Career |
工作与事业 |
"What was your first real job? What did you dream of becoming?" |
places |
Places & Journeys |
地方与旅途 |
"What places have you lived in across your life?" |
history |
Historical Moments |
历史时刻 |
"You lived through [decade] — what do you remember most?" |
milestones |
Family Milestones |
家庭里程碑 |
"What family celebrations stand out most in your memory?" |
wisdom |
Values & Wisdom |
价值观与智慧 |
"What's the most important lesson life has taught you?" |
Storage Layout
All data is stored locally at ~/.openclaw/memorist_agent/:
~/.openclaw/memorist_agent/
├── owner.json # Skill owner's name
├── narrators.json # Index of all narrators
├── narrators/
│ └── {narrator-id}/
│ ├── profile.json # Narrator metadata & domain progress
│ ├── entities.json # Extracted people, places, years
│ ├── sessions.json # Interview session log
│ ├── fragments/ # Story fragments by domain
│ ├── chapters/ # Compiled memoir chapters
│ ├── exports/ # Exported memoir files
│ └── workspace/ # Agent workspace (if auto-reply enabled)
/memorist_agent setup
Purpose: Register a narrator and choose how interviews will be conducted.
Steps:
First-run bootstrap: Create the data directory if it doesn't exist:
mkdir -p ~/.openclaw/memorist_agent/narrators
- If
narrators.json doesn't exist, create it as [].
- If this is the first run, ask: "What's your name? (This is how narrators will know who set this up.)" Save to
~/.openclaw/memorist_agent/owner.json as { "name": "{name}" }. Skip if owner.json already exists.
Ask the user:
Let's set up your narrator. I'll ask a few questions.
1. What is their name? (e.g. "Dad", "Grandma Li", "Uncle Chen")
2. What's their relationship to you? (parent / grandparent / relative / friend)
3. What language should I interview them in?
[1] English
[2] Chinese (普通话)
[3] Both (start in Chinese, key summaries in English)
4. How should I conduct interviews?
[1] Relay — I give you questions, you ask them and bring back answers
(Works with any channel: in person, phone call, WeChat, etc.)
[2] WhatsApp auto-reply — they chat directly with a dedicated agent
(Requires WhatsApp gateway. I'll help you set it up.)
[3] iMessage auto-reply — they chat via iMessage with a dedicated agent
(macOS only. Requires iMessage channel configured.)
[4] Telegram auto-reply — they chat via Telegram with a dedicated agent
(Requires Telegram bot configured.)
[5] Live — the narrator is here right now, let's start talking
If "WhatsApp auto-reply" is selected:
a. Ask for their WhatsApp number (with country code, e.g. +1234567890).
b. Validate allowlist: Read the openclaw config and check if the number is in channels.whatsapp.allowFrom or if dmPolicy is "open". If NOT:
⚠️ {number} is not in your WhatsApp allowlist yet.
Their replies will be silently dropped without this.
I can add it for you — shall I update channels.whatsapp.allowFrom?
[Yes, add it] / [No, I'll do it manually]
If user says yes, add the number to channels.whatsapp.allowFrom in the openclaw config file.
c. Verify gateway: Check openclaw status output. If WhatsApp is not linked:
⚠️ WhatsApp gateway is not connected.
Run: openclaw status
If WhatsApp shows "not linked", you'll need to pair it first.
For now, I'll set up the narrator in Relay mode. You can switch to
WhatsApp auto-reply later with /memorist_agent spawn.
Fall back to relay mode if gateway is not ready.
d. Create media directory: mkdir -p ~/.openclaw/media (gateway rejects media from other paths).
If "iMessage auto-reply" is selected:
a. Ask for their phone number or Apple ID email.
b. Check platform: If not macOS, warn: "iMessage is only available on macOS. Switching to Relay mode."
c. Validate allowlist: Check if the number/email is in channels.imessage.allowFrom or if dmPolicy is "open". Offer to add if missing (same flow as WhatsApp step 3b).
d. Verify iMessage: Check openclaw status — iMessage should show OK or configured. If not:
⚠️ iMessage channel is not configured.
Make sure:
1. channels.imessage.enabled: true in your openclaw config
2. imsg CLI is installed: brew install pj4533/homebrew-imsg/imsg
3. Full Disk Access is granted to your terminal app
(System Settings → Privacy & Security → Full Disk Access)
For now, I'll set up in Relay mode. Switch later with /memorist_agent spawn.
e. Create media directory: mkdir -p ~/.openclaw/media.
If "Telegram auto-reply" is selected:
a. Ask for their Telegram user ID (numeric). Explain: "Ask them to message @userinfobot on Telegram to get their numeric ID."
b. Validate allowlist: Check if the ID is in channels.telegram.allowFrom. Offer to add if missing.
c. Verify Telegram: Check openclaw status — Telegram should show OK. Warn and fall back to relay if not configured.
If "Live" is selected: Note that the narrator is present — skip channel setup, start interview immediately after setup completes.
Generate a narrator ID: narrator-{slug(name)}-{timestamp}.
Create ~/.openclaw/memorist_agent/narrators/{id}/ directory structure (including fragments/, chapters/, exports/ subdirs):
profile.json:
{
"id": "{narrator-id}",
"name": "{name}",
"relationship": "{relationship}",
"lang": "{en|zh|both}",
"channel": "{relay|whatsapp|imessage|telegram|live}",
"whatsapp": "{number or null}",
"imessage": "{phone or email or null}",
"telegram": "{numeric user ID or null}",
"replyFormat": "text",
"createdAt": "{ISO timestamp}",
"domains": {
"origins": { "status": "not-started", "fragmentCount": 0 },
"growing-up": { "status": "not-started", "fragmentCount": 0 },
"family-history": { "status": "not-started", "fragmentCount": 0 },
"love": { "status": "not-started", "fragmentCount": 0 },
"work": { "status": "not-started", "fragmentCount": 0 },
"places": { "status": "not-started", "fragmentCount": 0 },
"history": { "status": "not-started", "fragmentCount": 0 },
"milestones": { "status": "not-started", "fragmentCount": 0 },
"wisdom": { "status": "not-started", "fragmentCount": 0 }
}
}
entities.json: { "people": [], "places": [], "years": [], "events": [] }
sessions.json: []
Append narrator to narrators.json.
If channel is "whatsapp", "imessage", or "telegram", immediately recommend auto-reply:
Narrator added: {name}
Language : {lang}
Channel : WhatsApp ({number})
For the best experience, I recommend enabling auto-reply so {name}
can chat directly without you copy-pasting messages.
Enable now? /memorist_agent spawn --narrator "{name}"
[Skip — I'll use relay mode for now]
Otherwise (relay or live):
Narrator added: {name}
Language : {lang}
Channel : {channel}
Domains : 9 life story domains ready
Start the first interview with:
/memorist_agent interview --narrator "{name}"
/memorist_agent interview
Purpose: Conduct one interview session covering one memory domain. Generates 1–3 story fragments and updates the entity map.
Usage:
/memorist_agent interview — auto-selects narrator and next domain
/memorist_agent interview --narrator "Dad" — specific narrator
/memorist_agent interview --narrator "Dad" --domain origins — specific domain
/memorist_agent interview --narrator "Dad" --resume — continue last session
High-level flow:
- Load narrator context (profile, entities, prior fragments)
- Pick next domain (or resume in-progress one)
- Generate opening question adapted to language and prior context
- Send question via configured channel (relay, WhatsApp, or live)
- Run adaptive follow-up loop (3–5 exchanges per session)
- Distill exchanges into a first-person story fragment
- Update entity map and save all data
Error handling:
- If no narrators exist: "No narrators set up yet. Run
/memorist_agent setup first."
- If all 9 domains are complete: "All domains are complete! Run
/memorist_agent compile to create the memoir."
- If WhatsApp gateway is down: Fall back to relay mode and warn the user.
For detailed step-by-step instructions, read: references/interview-workflow.md
Interview principles (read before first session): references/interview-principles.md
/memorist_agent remind
Purpose: Send a gentle, warm reminder to continue sharing stories.
Steps:
- Load narrator profile. Find in-progress or next not-started domain.
- Generate personalized reminder referencing something they already shared.
- Send via WhatsApp if configured, otherwise display for relay.
/memorist_agent stories
Purpose: Browse collected story fragments.
Usage:
/memorist_agent stories — all fragments for default narrator
/memorist_agent stories --narrator "Dad" --domain origins — filtered
Steps:
- Load all fragment files for the narrator.
- Display grouped by domain: title, preview, people/places mentioned, pending follow-ups.
- Show total fragment count and domain coverage.
/memorist_agent entities
Purpose: Show the entity map — all people, places, years, events extracted from stories.
Steps:
- Load
entities.json for the narrator.
- Display grouped by type, with follow-up status (resolved vs pending).
- Show count of unresolved entities that will be followed up automatically.
/memorist_agent compile, export, share
Purpose: Compile fragments into memoir chapters, export to file, share with family.
For detailed instructions, read: references/compile-export-share.md
/memorist_agent spawn, despawn
Purpose: Enable or disable auto-reply for a narrator. "Spawn" creates a dedicated, isolated agent that chats directly with the narrator — no copy-pasting needed. "Despawn" removes it.
After spawning, all messages from the narrator's WhatsApp/Telegram route directly to their personal agent. The main session is never touched.
Error handling:
- If gateway is not running: "Gateway is not running. Start it with
openclaw gateway start, then try again."
- If WhatsApp is not linked: "WhatsApp is not connected. Run
openclaw status to check."
- If narrator's number is not in allowlist: Offer to add it (same as setup step 3b).
- If spawn fails for any reason: Fall back gracefully — "Auto-reply couldn't be enabled. You can still use relay mode with
/memorist_agent interview."
For detailed instructions, read: references/spawn-despawn.md
/memorist_agent status
Purpose: Overview of all narrators and their progress.
Steps:
- Load
narrators.json and each narrator's profile.json.
- Display per narrator: name, relationship, language, channel, agent status, domain progress bar, fragment count, last session date.
- Show available commands.
Memorist Agent — Overview
Narrators: {N}
───────────────────────────────
{name} ({relationship})
Language : {lang}
Channel : {Relay / WhatsApp auto-reply / Live}
Agent : {active/none}
Progress : {bar} {N}/9 domains
Fragments : {count} stories collected
───────────────────────────────
Common Issues
| Problem |
Cause |
Fix |
| Narrator's WhatsApp replies don't arrive |
Number not in allowlist |
Add to channels.whatsapp.allowFrom in openclaw config, or set dmPolicy: "open" |
/memorist_agent spawn fails |
Gateway not running |
openclaw gateway start or openclaw gateway restart |
| Media sends hang (text works) |
Gateway WhatsApp connection crashed |
openclaw gateway restart |
| Voice notes not transcribed |
No STT tool installed |
Run /memorist_agent setup-stt |
| Voice replies don't play properly |
Wrong audio format |
WhatsApp needs OGG/Opus, not MP3. See references/media-and-voice.md |
| TTS produces garbled speech |
Wrong voice language |
Set messages.tts.edge.voice to match narrator's language in openclaw config |
| Interview says "no narrators" |
Haven't run setup yet |
Run /memorist_agent setup first |
| All domains complete |
Interviews finished |
Run /memorist_agent compile to create the memoir |
Privacy Architecture
| Data |
Where it lives |
Who can access |
| Story fragments |
~/.openclaw/memorist_agent/ |
Local machine only |
| Entity map |
~/.openclaw/memorist_agent/ |
Local machine only |
| Interview sessions |
~/.openclaw/memorist_agent/ |
Local machine only |
| Compiled chapters |
~/.openclaw/memorist_agent/ |
Local machine only |
| WhatsApp messages sent |
Narrator's WhatsApp |
Narrator only |
| Exported files |
Path you choose |
You control sharing |
Claude AI processes text during active sessions. If privacy-sensitive, use relay mode — type questions manually and record answers yourself.
Tool Usage Notes
- file_read / file_write: all narrator data at
~/.openclaw/memorist_agent/.
- whatsapp_send_message: used only when narrator channel is
whatsapp.
- fetch: only called if user runs
/memorist_agent share with API option.
- web_search: not used. This skill is intentionally offline-first.
For media format requirements, TTS config, STT setup, and troubleshooting, read: references/media-and-voice.md
1---2name: memorist-agent3description: Memorist Agent — helps you capture your parents' and family members' life stories through adaptive interviews via WhatsApp, WeChat, or direct conversation. Organizes stories into memoir chapters. Local-first, privacy-protected. Bilingual: English + Chinese (普通话). Commands: /memorist_agent setup, interview, stories, compile, export, share.4license: MIT5---67# Memorist Agent89Help your parents and grandparents tell their stories before it's too late.1011Memorist Agent conducts adaptive, empathetic interviews across 9 life domains — in English or Chinese. It remembers every name, place, and year the narrator mentions and follows up with targeted questions to draw out richer memories.1213### Why Memorist Agent?1415- **Local-first** — Every story fragment, entity, and chapter lives on your machine at `~/.openclaw/memorist_agent/`. Nothing is uploaded to any server. You own your family's data completely.16- **Private by design** — No accounts, no cloud sync, no third-party databases. The only network calls are the ones you explicitly trigger (sending a WhatsApp question or sharing an export). Delete the folder and it's gone.17- **Easy to use** — Run `/memorist_agent setup`, answer 4 questions, and you're interviewing. Relay mode works immediately with zero configuration. WhatsApp auto-reply takes one extra command. The AI handles question flow, entity tracking, and story writing — you just talk to your family.18- **Bilingual** — Native support for English and Chinese (普通话). The agent mirrors the narrator's language naturally, including dialect phrases and colloquial expressions.19- **Works with any channel** — WhatsApp, Telegram, WeCom, iMessage, or just relay questions in person over tea. The skill adapts to however your family communicates.2021---2223## Quick Start — Your First Interview2425**Step 1** — Set up a narrator:26```27/memorist_agent setup28```2930**Step 2** — Pick "Relay" mode (easiest — no extra config needed). You'll get questions to ask your narrator in person, over the phone, or via any messaging app. Type or paste their answers back.3132**Step 3** — Run the interview:33```34/memorist_agent interview --narrator "Dad"35```3637That's it. After 3–5 questions, the skill saves a story fragment automatically.3839**Want hands-free WhatsApp?** Pick "WhatsApp auto-reply" during setup instead. The narrator chats directly with their own dedicated agent — no copy-pasting needed. Requires WhatsApp gateway setup (see Prerequisites below).4041---4243## What You Need4445- **OpenClaw gateway running**: `openclaw status` should show gateway `running`.46- Everything else is set up automatically on first run.4748**Nice to have (based on your setup):**4950| Feature | What to configure |51|---------|-------------------|52| WhatsApp auto-reply | WhatsApp linked (`openclaw status`), narrator's number in `channels.whatsapp.allowFrom` or `dmPolicy: "open"`, `mkdir -p ~/.openclaw/media` |53| Telegram auto-reply | Telegram bot configured, narrator's numeric user ID in `channels.telegram.allowFrom` |54| WeCom auto-reply | `@sunnoy/wecom` plugin loaded, `channels.wecom.enabled: true` |55| iMessage auto-reply | macOS only. `channels.imessage.enabled: true`, narrator's phone/email in `channels.imessage.allowFrom`, Full Disk Access granted to terminal. Requires `imsg` CLI (`brew install pj4533/homebrew-imsg/imsg`) |56| Voice replies (TTS) | `messages.tts` configured in openclaw config — see `references/media-and-voice.md` |57| Voice note transcription | `pip3 install mlx-whisper` (Apple Silicon) or `brew install openai-whisper`, or run `/memorist_agent setup-stt` |5859File paths use `~/.openclaw/` (`$HOME/.openclaw/` on all platforms — macOS, Linux, Windows WSL).6061---6263## Commands6465| Command | Description |66|---------|-------------|67| `/memorist_agent setup` | Add a narrator and configure their interview channel |68| `/memorist_agent interview [--narrator NAME] [--domain DOMAIN]` | Start or continue an interview session |69| `/memorist_agent spawn [--narrator NAME]` | Enable auto-reply — creates a dedicated agent for this narrator |70| `/memorist_agent despawn [--narrator NAME]` | Disable auto-reply — remove the dedicated agent |71| `/memorist_agent remind [--narrator NAME]` | Send a gentle reminder to continue their story |72| `/memorist_agent stories [--narrator NAME] [--domain DOMAIN]` | Browse collected story fragments |73| `/memorist_agent entities [--narrator NAME]` | Show the entity map: people, places, years |74| `/memorist_agent compile [--narrator NAME]` | Compile fragments into polished memoir chapters |75| `/memorist_agent export [--narrator NAME] [--format md\|json\|txt]` | Export the memoir to a file |76| `/memorist_agent share [--narrator NAME]` | Invite a family co-editor to review |77| `/memorist_agent status` | Show all narrators, progress, and agent status |78| `/memorist_agent setup-stt` | Auto-install voice transcription |7980---8182## Life Story Domains8384| ID | Domain (EN) | Domain (ZH) | Sample Opening Question |85|----|-------------|-------------|------------------------|86| `origins` | Origins & Childhood | 出身与童年 | "Where were you born, and what's your earliest memory of home?" |87| `growing-up` | Growing Up | 成长岁月 | "What was school like for you? Who were your closest friends?" |88| `family-history` | Family History | 家族历史 | "Tell me about your parents — what kind of people were they?" |89| `love` | Love & Partnership | 爱情与伴侣 | "How did you and Mum/Dad first meet?" |90| `work` | Work & Career | 工作与事业 | "What was your first real job? What did you dream of becoming?" |91| `places` | Places & Journeys | 地方与旅途 | "What places have you lived in across your life?" |92| `history` | Historical Moments | 历史时刻 | "You lived through [decade] — what do you remember most?" |93| `milestones` | Family Milestones | 家庭里程碑 | "What family celebrations stand out most in your memory?" |94| `wisdom` | Values & Wisdom | 价值观与智慧 | "What's the most important lesson life has taught you?" |9596---9798## Storage Layout99100All data is stored locally at `~/.openclaw/memorist_agent/`:101102```103~/.openclaw/memorist_agent/104├── owner.json # Skill owner's name105├── narrators.json # Index of all narrators106├── narrators/107│ └── {narrator-id}/108│ ├── profile.json # Narrator metadata & domain progress109│ ├── entities.json # Extracted people, places, years110│ ├── sessions.json # Interview session log111│ ├── fragments/ # Story fragments by domain112│ ├── chapters/ # Compiled memoir chapters113│ ├── exports/ # Exported memoir files114│ └── workspace/ # Agent workspace (if auto-reply enabled)115```116117---118119## /memorist_agent setup120121**Purpose:** Register a narrator and choose how interviews will be conducted.122123**Steps:**1241251. **First-run bootstrap**: Create the data directory if it doesn't exist:126 - `mkdir -p ~/.openclaw/memorist_agent/narrators`127 - If `narrators.json` doesn't exist, create it as `[]`.128 - If this is the first run, ask: **"What's your name? (This is how narrators will know who set this up.)"** Save to `~/.openclaw/memorist_agent/owner.json` as `{ "name": "{name}" }`. Skip if `owner.json` already exists.1291302. Ask the user:131 ```132 Let's set up your narrator. I'll ask a few questions.133134 1. What is their name? (e.g. "Dad", "Grandma Li", "Uncle Chen")135 2. What's their relationship to you? (parent / grandparent / relative / friend)136 3. What language should I interview them in?137 [1] English138 [2] Chinese (普通话)139 [3] Both (start in Chinese, key summaries in English)140 4. How should I conduct interviews?141 [1] Relay — I give you questions, you ask them and bring back answers142 (Works with any channel: in person, phone call, WeChat, etc.)143 [2] WhatsApp auto-reply — they chat directly with a dedicated agent144 (Requires WhatsApp gateway. I'll help you set it up.)145 [3] iMessage auto-reply — they chat via iMessage with a dedicated agent146 (macOS only. Requires iMessage channel configured.)147 [4] Telegram auto-reply — they chat via Telegram with a dedicated agent148 (Requires Telegram bot configured.)149 [5] Live — the narrator is here right now, let's start talking150 ```1511523. **If "WhatsApp auto-reply" is selected:**153 a. Ask for their WhatsApp number (with country code, e.g. `+1234567890`).154 b. **Validate allowlist**: Read the openclaw config and check if the number is in `channels.whatsapp.allowFrom` or if `dmPolicy` is `"open"`. If NOT:155 ```156 ⚠️ {number} is not in your WhatsApp allowlist yet.157 Their replies will be silently dropped without this.158159 I can add it for you — shall I update channels.whatsapp.allowFrom?160 [Yes, add it] / [No, I'll do it manually]161 ```162 If user says yes, add the number to `channels.whatsapp.allowFrom` in the openclaw config file.163 c. **Verify gateway**: Check `openclaw status` output. If WhatsApp is not `linked`:164 ```165 ⚠️ WhatsApp gateway is not connected.166 Run: openclaw status167 If WhatsApp shows "not linked", you'll need to pair it first.168169 For now, I'll set up the narrator in Relay mode. You can switch to170 WhatsApp auto-reply later with /memorist_agent spawn.171 ```172 Fall back to relay mode if gateway is not ready.173 d. **Create media directory**: `mkdir -p ~/.openclaw/media` (gateway rejects media from other paths).1741754. **If "iMessage auto-reply" is selected:**176 a. Ask for their phone number or Apple ID email.177 b. **Check platform**: If not macOS, warn: "iMessage is only available on macOS. Switching to Relay mode."178 c. **Validate allowlist**: Check if the number/email is in `channels.imessage.allowFrom` or if `dmPolicy` is `"open"`. Offer to add if missing (same flow as WhatsApp step 3b).179 d. **Verify iMessage**: Check `openclaw status` — iMessage should show `OK` or `configured`. If not:180 ```181 ⚠️ iMessage channel is not configured.182 Make sure:183 1. channels.imessage.enabled: true in your openclaw config184 2. imsg CLI is installed: brew install pj4533/homebrew-imsg/imsg185 3. Full Disk Access is granted to your terminal app186 (System Settings → Privacy & Security → Full Disk Access)187188 For now, I'll set up in Relay mode. Switch later with /memorist_agent spawn.189 ```190 e. **Create media directory**: `mkdir -p ~/.openclaw/media`.1911925. **If "Telegram auto-reply" is selected:**193 a. Ask for their Telegram user ID (numeric). Explain: "Ask them to message @userinfobot on Telegram to get their numeric ID."194 b. **Validate allowlist**: Check if the ID is in `channels.telegram.allowFrom`. Offer to add if missing.195 c. **Verify Telegram**: Check `openclaw status` — Telegram should show `OK`. Warn and fall back to relay if not configured.1961976. **If "Live" is selected:** Note that the narrator is present — skip channel setup, start interview immediately after setup completes.1981995. Generate a narrator ID: `narrator-{slug(name)}-{timestamp}`.2002016. Create `~/.openclaw/memorist_agent/narrators/{id}/` directory structure (including `fragments/`, `chapters/`, `exports/` subdirs):202203 **profile.json:**204 ```json205 {206 "id": "{narrator-id}",207 "name": "{name}",208 "relationship": "{relationship}",209 "lang": "{en|zh|both}",210 "channel": "{relay|whatsapp|imessage|telegram|live}",211 "whatsapp": "{number or null}",212 "imessage": "{phone or email or null}",213 "telegram": "{numeric user ID or null}",214 "replyFormat": "text",215 "createdAt": "{ISO timestamp}",216 "domains": {217 "origins": { "status": "not-started", "fragmentCount": 0 },218 "growing-up": { "status": "not-started", "fragmentCount": 0 },219 "family-history": { "status": "not-started", "fragmentCount": 0 },220 "love": { "status": "not-started", "fragmentCount": 0 },221 "work": { "status": "not-started", "fragmentCount": 0 },222 "places": { "status": "not-started", "fragmentCount": 0 },223 "history": { "status": "not-started", "fragmentCount": 0 },224 "milestones": { "status": "not-started", "fragmentCount": 0 },225 "wisdom": { "status": "not-started", "fragmentCount": 0 }226 }227 }228 ```229230 **entities.json:** `{ "people": [], "places": [], "years": [], "events": [] }`231232 **sessions.json:** `[]`2332347. Append narrator to `narrators.json`.2352368. **If channel is "whatsapp", "imessage", or "telegram", immediately recommend auto-reply:**237 ```238 Narrator added: {name}239 Language : {lang}240 Channel : WhatsApp ({number})241242 For the best experience, I recommend enabling auto-reply so {name}243 can chat directly without you copy-pasting messages.244245 Enable now? /memorist_agent spawn --narrator "{name}"246 [Skip — I'll use relay mode for now]247 ```248249 **Otherwise (relay or live):**250 ```251 Narrator added: {name}252 Language : {lang}253 Channel : {channel}254 Domains : 9 life story domains ready255256 Start the first interview with:257 /memorist_agent interview --narrator "{name}"258 ```259260---261262## /memorist_agent interview263264**Purpose:** Conduct one interview session covering one memory domain. Generates 1–3 story fragments and updates the entity map.265266**Usage:**267- `/memorist_agent interview` — auto-selects narrator and next domain268- `/memorist_agent interview --narrator "Dad"` — specific narrator269- `/memorist_agent interview --narrator "Dad" --domain origins` — specific domain270- `/memorist_agent interview --narrator "Dad" --resume` — continue last session271272**High-level flow:**2731. Load narrator context (profile, entities, prior fragments)2742. Pick next domain (or resume in-progress one)2753. Generate opening question adapted to language and prior context2764. Send question via configured channel (relay, WhatsApp, or live)2775. Run adaptive follow-up loop (3–5 exchanges per session)2786. Distill exchanges into a first-person story fragment2797. Update entity map and save all data280281**Error handling:**282- If no narrators exist: "No narrators set up yet. Run `/memorist_agent setup` first."283- If all 9 domains are complete: "All domains are complete! Run `/memorist_agent compile` to create the memoir."284- If WhatsApp gateway is down: Fall back to relay mode and warn the user.285286**For detailed step-by-step instructions, read:** `references/interview-workflow.md`287288**Interview principles (read before first session):** `references/interview-principles.md`289290---291292## /memorist_agent remind293294**Purpose:** Send a gentle, warm reminder to continue sharing stories.295296**Steps:**2971. Load narrator profile. Find in-progress or next not-started domain.2982. Generate personalized reminder referencing something they already shared.2993. Send via WhatsApp if configured, otherwise display for relay.300301---302303## /memorist_agent stories304305**Purpose:** Browse collected story fragments.306307**Usage:**308- `/memorist_agent stories` — all fragments for default narrator309- `/memorist_agent stories --narrator "Dad" --domain origins` — filtered310311**Steps:**3121. Load all fragment files for the narrator.3132. Display grouped by domain: title, preview, people/places mentioned, pending follow-ups.3143. Show total fragment count and domain coverage.315316---317318## /memorist_agent entities319320**Purpose:** Show the entity map — all people, places, years, events extracted from stories.321322**Steps:**3231. Load `entities.json` for the narrator.3242. Display grouped by type, with follow-up status (resolved vs pending).3253. Show count of unresolved entities that will be followed up automatically.326327---328329## /memorist_agent compile, export, share330331**Purpose:** Compile fragments into memoir chapters, export to file, share with family.332333**For detailed instructions, read:** `references/compile-export-share.md`334335---336337## /memorist_agent spawn, despawn338339**Purpose:** Enable or disable auto-reply for a narrator. "Spawn" creates a dedicated, isolated agent that chats directly with the narrator — no copy-pasting needed. "Despawn" removes it.340341After spawning, all messages from the narrator's WhatsApp/Telegram route directly to their personal agent. The main session is never touched.342343**Error handling:**344- If gateway is not running: "Gateway is not running. Start it with `openclaw gateway start`, then try again."345- If WhatsApp is not linked: "WhatsApp is not connected. Run `openclaw status` to check."346- If narrator's number is not in allowlist: Offer to add it (same as setup step 3b).347- If spawn fails for any reason: Fall back gracefully — "Auto-reply couldn't be enabled. You can still use relay mode with `/memorist_agent interview`."348349**For detailed instructions, read:** `references/spawn-despawn.md`350351---352353## /memorist_agent status354355**Purpose:** Overview of all narrators and their progress.356357**Steps:**3581. Load `narrators.json` and each narrator's `profile.json`.3592. Display per narrator: name, relationship, language, channel, agent status, domain progress bar, fragment count, last session date.3603. Show available commands.361362```363Memorist Agent — Overview364365Narrators: {N}366───────────────────────────────367{name} ({relationship})368 Language : {lang}369 Channel : {Relay / WhatsApp auto-reply / Live}370 Agent : {active/none}371 Progress : {bar} {N}/9 domains372 Fragments : {count} stories collected373───────────────────────────────374```375376---377378## Common Issues379380| Problem | Cause | Fix |381|---------|-------|-----|382| Narrator's WhatsApp replies don't arrive | Number not in allowlist | Add to `channels.whatsapp.allowFrom` in openclaw config, or set `dmPolicy: "open"` |383| `/memorist_agent spawn` fails | Gateway not running | `openclaw gateway start` or `openclaw gateway restart` |384| Media sends hang (text works) | Gateway WhatsApp connection crashed | `openclaw gateway restart` |385| Voice notes not transcribed | No STT tool installed | Run `/memorist_agent setup-stt` |386| Voice replies don't play properly | Wrong audio format | WhatsApp needs OGG/Opus, not MP3. See `references/media-and-voice.md` |387| TTS produces garbled speech | Wrong voice language | Set `messages.tts.edge.voice` to match narrator's language in openclaw config |388| Interview says "no narrators" | Haven't run setup yet | Run `/memorist_agent setup` first |389| All domains complete | Interviews finished | Run `/memorist_agent compile` to create the memoir |390391---392393## Privacy Architecture394395| Data | Where it lives | Who can access |396|------|---------------|----------------|397| Story fragments | `~/.openclaw/memorist_agent/` | Local machine only |398| Entity map | `~/.openclaw/memorist_agent/` | Local machine only |399| Interview sessions | `~/.openclaw/memorist_agent/` | Local machine only |400| Compiled chapters | `~/.openclaw/memorist_agent/` | Local machine only |401| WhatsApp messages sent | Narrator's WhatsApp | Narrator only |402| Exported files | Path you choose | You control sharing |403404**Claude AI** processes text during active sessions. If privacy-sensitive, use relay mode — type questions manually and record answers yourself.405406---407408## Tool Usage Notes409410- **file_read / file_write**: all narrator data at `~/.openclaw/memorist_agent/`.411- **whatsapp_send_message**: used only when narrator channel is `whatsapp`.412- **fetch**: only called if user runs `/memorist_agent share` with API option.413- **web_search**: not used. This skill is intentionally offline-first.414415**For media format requirements, TTS config, STT setup, and troubleshooting, read:** `references/media-and-voice.md`