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:
CODEBLOCK0
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:
CODEBLOCK1
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", INLINECODE7 |
| 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 |
|---|
| INLINECODE22 | Add a narrator and configure their interview channel |
| INLINECODE23 |
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 |
|---|
| INLINECODE34 | Origins & Childhood | 出身与童年 | "Where were you born, and what's your earliest memory of home?" |
| INLINECODE35 |
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/:
CODEBLOCK2
/memorist_agent setup
Purpose: Register a narrator and choose how interviews will be conducted.
Steps:
- 1. 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.
- 2. Ask the user:
CODEBLOCK3
- 3. 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).
- 4. 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.
- 5. 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.
- 6. If "Live" is selected: Note that the narrator is present — skip channel setup, start interview immediately after setup completes.
- 5. Generate a narrator ID:
narrator-{slug(name)}-{timestamp}.
- 6. Create
~/.openclaw/memorist_agent/narrators/{id}/ directory structure (including fragments/, chapters/, exports/ subdirs):
profile.json:
CODEBLOCK7
entities.json: INLINECODE73
sessions.json: INLINECODE74
- 7. Append narrator to
narrators.json.
- 8. If channel is "whatsapp", "imessage", or "telegram", immediately recommend auto-reply:
CODEBLOCK8
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 - INLINECODE77 — specific narrator
- INLINECODE78 — specific domain
- INLINECODE79 — continue last session
High-level flow:
- 1. 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: INLINECODE82
Interview principles (read before first session): references/interview-principles.md
/memorist_agent remind
Purpose: Send a gentle, warm reminder to continue sharing stories.
Steps:
- 1. 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 - INLINECODE85 — filtered
Steps:
- 1. 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:
- 1. 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:
- 1. 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.
CODEBLOCK10
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 INLINECODE95 |
| INLINECODE96 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 | INLINECODE105 | 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
- - fileread / filewrite: all narrator data at
~/.openclaw/memorist_agent/. - whatsappsendmessage: 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: INLINECODE112
记忆师代理
帮助你的父母和祖父母,趁还来得及,讲述他们的故事。
记忆师代理在9个人生领域中进行自适应、共情式访谈——支持英语和中文。它会记住讲述者提到的每一个名字、地点和年份,并跟进针对性问题,以唤起更丰富的记忆。
为什么选择记忆师代理?
- - 本地优先 — 每个故事片段、实体和章节都保存在你的机器上,路径为~/.openclaw/memoristagent/。没有任何内容上传到任何服务器。你完全拥有家人的数据。
- 隐私设计 — 无需账户,无需云同步,无需第三方数据库。唯一的网络调用是你明确触发的(发送WhatsApp问题或分享导出文件)。删除文件夹,一切消失。
- 易于使用 — 运行/memoristagent setup,回答4个问题,即可开始访谈。中继模式无需任何配置即可立即使用。WhatsApp自动回复只需额外一条命令。AI处理问题流程、实体追踪和故事撰写——你只需与家人交谈。
- 双语支持 — 原生支持英语和中文(普通话)。代理会自然地跟随讲述者的语言,包括方言短语和口语表达。
- 适配任何渠道 — WhatsApp、Telegram、企业微信、iMessage,或当面边喝茶边转述问题。该技能会适应你家人的沟通方式。
快速入门 — 你的第一次访谈
第一步 — 设置一位讲述者:
/memorist_agent setup
第二步 — 选择中继模式(最简单——无需额外配置)。你会获得问题,可以当面、通过电话或任何即时通讯应用向讲述者提问。输入或粘贴他们的回答。
第三步 — 运行访谈:
/memorist_agent interview --narrator 爸爸
就这样。经过3-5个问题后,该技能会自动保存一个故事片段。
想要免提的WhatsApp? 在设置过程中选择WhatsApp自动回复即可。讲述者直接与专属代理聊天——无需复制粘贴。需要WhatsApp网关设置(参见下方前提条件)。
你需要什么
- - OpenClaw网关正在运行:openclaw status应显示网关running。
- 其他一切在首次运行时自动设置。
建议具备(根据你的设置):
| 功能 | 需要配置的内容 |
|---|
| WhatsApp自动回复 | WhatsApp已关联(openclaw status),讲述者号码在channels.whatsapp.allowFrom中或dmPolicy: open,mkdir -p ~/.openclaw/media |
| Telegram自动回复 |
Telegram机器人已配置,讲述者数字用户ID在channels.telegram.allowFrom中 |
| 企业微信自动回复 | 已加载@sunnoy/wecom插件,channels.wecom.enabled: true |
| iMessage自动回复 | 仅限macOS。channels.imessage.enabled: true,讲述者电话/邮箱在channels.imessage.allowFrom中,终端已授予完全磁盘访问权限。需要imsg命令行工具(brew install pj4533/homebrew-imsg/imsg) |
| 语音回复(TTS) | 在openclaw配置中配置messages.tts——参见references/media-and-voice.md |
| 语音笔记转录 | pip3 install mlx-whisper(Apple Silicon)或brew install openai-whisper,或运行/memorist_agent setup-stt |
文件路径使用~/.openclaw/(所有平台均为$HOME/.openclaw/——macOS、Linux、Windows WSL)。
命令
| 命令 | 描述 |
|---|
| /memoristagent setup | 添加一位讲述者并配置其访谈渠道 |
| /memoristagent interview [--narrator NAME] [--domain DOMAIN] |
开始或继续一次访谈会话 |
| /memorist_agent spawn [--narrator NAME] | 启用自动回复——为此讲述者创建一个专属代理 |
| /memorist_agent despawn [--narrator NAME] | 禁用自动回复——移除专属代理 |
| /memorist_agent remind [--narrator NAME] | 发送一条温和的提醒,请他们继续讲述故事 |
| /memorist_agent stories [--narrator NAME] [--domain DOMAIN] | 浏览已收集的故事片段 |
| /memorist_agent entities [--narrator NAME] | 显示实体地图:人物、地点、年份 |
| /memorist_agent compile [--narrator NAME] | 将片段编译成精炼的回忆录章节 |
| /memorist_agent export [--narrator NAME] [--format md\|json\|txt] | 将回忆录导出到文件 |
| /memorist_agent share [--narrator NAME] | 邀请一位家庭共同编辑进行审阅 |
| /memorist_agent status | 显示所有讲述者、进度和代理状态 |
| /memorist_agent setup-stt | 自动安装语音转录 |
人生故事领域
| ID | 领域(英文) | 领域(中文) | 示例开场问题 |
|---|
| origins | 出身与童年 | 出身与童年 | 你在哪里出生?你对家最早的记忆是什么? |
| growing-up |
成长岁月 | 成长岁月 | 你上学时是什么样的?谁是你最亲密的朋友? |
| family-history | 家族历史 | 家族历史 | 跟我说说你的父母——他们是怎样的人? |
| love | 爱情与伴侣 | 爱情与伴侣 | 你和妈妈/爸爸是怎么第一次见面的? |
| work | 工作与事业 | 工作与事业 | 你的第一份真正的工作是什么?你曾梦想成为什么? |
| places | 地方与旅途 | 地方与旅途 | 你一生中在哪些地方生活过? |
| history | 历史时刻 | 历史时刻 | 你经历了[年代]——你最记得什么? |
| milestones | 家庭里程碑 | 家庭里程碑 | 你记忆中最突出的家庭庆祝活动是什么? |
| wisdom | 价值观与智慧 | 价值观与智慧 | 生活教给你最重要的一课是什么? |
存储结构
所有数据本地存储在~/.openclaw/memorist_agent/:
~/.openclaw/memorist_agent/
├── owner.json # 技能拥有者姓名
├── narrators.json # 所有讲述者索引
├── narrators/
│ └── {讲述者ID}/
│ ├── profile.json # 讲述者元数据及领域进度
│ ├── entities.json # 提取的人物、地点、年份
│ ├── sessions.json # 访谈会话日志
│ ├── fragments/ # 按领域分类的故事片段
│ ├── chapters/ # 编译后的回忆录章节
│ ├── exports/ # 导出的回忆录文件
│ └── workspace/ # 代理工作空间(如启用自动回复)
/memorist_agent setup
目的: 注册一位讲述者并选择访谈方式。
步骤:
- 1. 首次运行引导:如果数据目录不存在则创建:
- mkdir -p ~/.openclaw/memorist_agent/narrators
- 如果narrators.json不存在,则创建为[]。
- 如果是首次运行,询问:
你叫什么名字?(讲述者将以此知道是谁设置的。) 保存到~/.openclaw/memorist_agent/owner.json,格式为{ name: {姓名} }。如果owner.json已存在则跳过。
- 2. 询问用户:
让我们设置你的讲述者。我会问几个问题。
1. 他们叫什么名字?(例如爸爸、李奶奶、陈叔叔)
2. 他们与你的关系是什么?(父母/祖父母/亲戚/朋友)
3. 我应该用什么语言采访他们?
[1] 英语
[2] 中文(普通话)
[3] 双语(用中文开始,关键摘要用英文)
4. 我应该如何进行访谈?
[1] 中继——我给你问题,你去问他们并带回答案
(适用于任何渠道:当面、电话、微信等)
[2] WhatsApp自动回复——他们直接与专属代理聊天
(需要WhatsApp网关。我会帮你设置。)
[3] iMessage自动回复——他们通过iMessage与专属代理聊天
(仅限macOS。需要配置iMessage渠道。)
[4] Telegram自动回复——他们通过Telegram与专属代理聊天
(需要配置Tele