Obsidian Memory System
Persistent agent memory using an Obsidian vault with structured folders, daily journals, semantic search, and self-improvement logging.
Architecture
CODEBLOCK0
OpenClaw auto-loads workspace root files (SOUL, USER, AGENTS, TOOLS, MEMORY) every session. Symlinks bridge workspace ↔ vault so Obsidian and the agent see the same files.
⚠️ Memory indexer symlink limitation: OpenClaw's memory indexer (memorySearch) uses lstat and explicitly skips all symlinks — both directories and files. Use real file copies for MEMORY.md and memory/ with a sync script (see references/discord-setup.md → Memory Integration).
Setup
Run the setup script to initialize everything:
CODEBLOCK1
This creates the vault structure, brain file templates, symlinks, vault/60-learnings/ directory, and templates. Then customize each brain file for your agent.
For details on each file's purpose: read references/brain-files.md
For OpenClaw config: INLINECODE7
Daily Workflow
Session Start
- 1. OpenClaw loads brain files automatically (SOUL, USER, AGENTS, TOOLS, MEMORY)
- Read today's and yesterday's journal: INLINECODE8
- Use
memory_search for any recall needs
During Work
- - Use
memory_search("query") to find past context - Follow wikilink references: INLINECODE11
After Completing Tasks
- 1. Update daily journal —
vault/10-journal/YYYY-MM-DD.md (always) - Update project docs —
vault/20-projects/*/overview.md (if project changed) - Update MEMORY.md — Only for new preferences, lessons, or projects
Self-Improvement Logging
| Situation | Action |
|---|
| Command/operation fails | Append to INLINECODE14 |
| User corrects you |
Append to
vault/60-learnings/LEARNINGS.md (category: correction) |
| Found better approach | Append to
vault/60-learnings/LEARNINGS.md (category: best_practice) |
| Knowledge was outdated | Append to
vault/60-learnings/LEARNINGS.md (category: knowledge_gap) |
| User wants missing feature | Append to
vault/60-learnings/FEATURE_REQUESTS.md |
Entry format — see INLINECODE19
Promotion Pipeline
When a learning proves broadly applicable, promote it:
| Learning Type | Promote To | Then set Status → promoted |
|---|
| Behavioral patterns | INLINECODE20 | |
| Workflow improvements |
AGENTS.md | |
| Tool gotchas |
TOOLS.md | |
| Cross-project decisions |
MEMORY.md | |
Promote when: Recurrence ≥ 3, seen across 2+ tasks, within 30-day window.
Wikilinks
Always connect related content:
CODEBLOCK2
Frontmatter
Every vault markdown file needs:
CODEBLOCK3
MEMORY.md Rules
- - Keep under ~5K characters (max 10K)
- Include: preferences, lessons, project index, cross-project decisions
- Exclude: detailed timelines, code snippets, daily events
- Point to deeper docs via wikilinks
- Full rules: INLINECODE24
Heartbeat Maintenance
During periodic heartbeats (every few days):
- 1. Review recent
vault/60-learnings/ entries - Promote applicable learnings to brain files
- Review recent journals → update MEMORY.md if needed
- Check MEMORY.md size, move detail creep to project/knowledge docs
Discord Workspace
Discord replaces WhatsApp as primary channel with major upgrades: streaming, voice, buttons, threads, and channel isolation.
For full setup guide: INLINECODE26
Quick Summary
| Feature | What it does |
|---|
| Channel separation | Per-project channels = isolated sessions, less token waste |
| Streaming |
See responses as they generate |
| Voice channels | Real-time voice: Whisper STT → LLM → OpenAI TTS |
| Interactive components | Buttons, selects, forms for quick decisions |
| Thread-bound coding | Codex/Claude Code get their own threads |
| Reactions | Visual ack (configurable emoji) |
| Auto-presence | Bot status shows health |
Channel Architecture
CODEBLOCK4
Set channel topics with vault pointers for project routing:
CODEBLOCK5
Key Config
CODEBLOCK6
⚠️ Without the guilds block, the bot only works in DMs. This is the #1 setup issue.
Full production config with status reactions, custom emoji, voice, components, and troubleshooting: read references/discord-setup.md
Full OpenClaw config reference: INLINECODE29
Quick Commands
CODEBLOCK7
Obsidian 记忆系统
使用 Obsidian 仓库实现持久化智能体记忆,包含结构化文件夹、每日日志、语义搜索和自我改进日志记录。
架构
~/clawd/ ← OpenClaw 工作空间
├── SOUL.md ──符号链接──→ vault/00-brain/SOUL.md
├── USER.md ──符号链接──→ vault/00-brain/USER.md
├── AGENTS.md ──符号链接──→ vault/00-brain/AGENTS.md
├── TOOLS.md ──符号链接──→ vault/00-brain/TOOLS.md
├── MEMORY.md (副本,非符号链接 — 索引器跳过符号链接)
├── HEARTBEAT.md (独立文件,周期性任务)
├── memory/ (实际目录,包含副本 — 从 vault/10-journal/ 同步)
├── scripts/sync-memory.sh (通过 cron 每 30 分钟执行 rsync vault→memory)
└── vault/ ← Obsidian 仓库
├── 00-brain/ 核心身份文件
├── 10-journal/ 每日工作日志 (YYYY-MM-DD.md)
├── 20-projects/ 项目文档 (概述、决策、时间线)
├── 30-knowledge/ 可复用参考资料
├── 40-people/ 人员笔记
├── 50-ideas/ 未来计划、头脑风暴
├── 60-learnings/ 自我改进日志 (错误、学习、功能请求)
└── templates/ 笔记模板
OpenClaw 在每个会话中自动加载工作空间根目录文件 (SOUL、USER、AGENTS、TOOLS、MEMORY)。符号链接桥接工作空间 ↔ 仓库,使 Obsidian 和智能体看到相同的文件。
⚠️ 记忆索引器符号链接限制: OpenClaw 的记忆索引器 (memorySearch) 使用 lstat 并明确跳过所有符号链接 — 包括目录和文件。请为 MEMORY.md 和 memory/ 使用真实文件副本,并配合同步脚本 (参见 references/discord-setup.md → 记忆集成)。
设置
运行设置脚本以初始化所有内容:
bash
bash scripts/setup-vault.sh ~/clawd
这将创建仓库结构、大脑文件模板、符号链接、vault/60-learnings/ 目录和模板。然后为您的智能体自定义每个大脑文件。
有关每个文件用途的详细信息:read references/brain-files.md
有关 OpenClaw 配置:read references/openclaw-config.md
日常工作流程
会话开始
- 1. OpenClaw 自动加载大脑文件 (SOUL、USER、AGENTS、TOOLS、MEMORY)
- 阅读今天和昨天的日志:vault/10-journal/YYYY-MM-DD.md
- 使用 memory_search 进行任何回忆需求
工作期间
- - 使用 memory_search(query) 查找过往上下文
- 遵循维基链接引用:[[20-projects/name/overview|Name]]
完成任务后
- 1. 更新每日日志 — vault/10-journal/YYYY-MM-DD.md (始终)
- 更新项目文档 — vault/20-projects/*/overview.md (如果项目有变更)
- 更新 MEMORY.md — 仅针对新的偏好、经验教训或项目
自我改进日志记录
| 情况 | 操作 |
|---|
| 命令/操作失败 | 追加到 vault/60-learnings/ERRORS.md |
| 用户纠正您 |
追加到 vault/60-learnings/LEARNINGS.md (类别:纠正) |
| 发现更好的方法 | 追加到 vault/60-learnings/LEARNINGS.md (类别:最佳实践) |
| 知识已过时 | 追加到 vault/60-learnings/LEARNINGS.md (类别:知识缺口) |
| 用户需要缺失功能 | 追加到 vault/60-learnings/FEATURE_REQUESTS.md |
条目格式 — 参见 references/logging-format.md
提升管道
当某个学习内容被证明具有广泛适用性时,将其提升:
| 学习类型 | 提升至 | 然后将状态设为 → 已提升 |
|---|
| 行为模式 | SOUL.md | |
| 工作流程改进 |
AGENTS.md | |
| 工具陷阱 | TOOLS.md | |
| 跨项目决策 | MEMORY.md | |
提升条件: 重复次数 ≥ 3,在 2 个以上任务中出现,且在 30 天窗口期内。
维基链接
始终连接相关内容:
markdown
详情参见 [[20-projects/my-app/overview|我的应用]]。
由 [[40-people/juan|Juan]] 构建。
前置元数据
每个仓库 markdown 文件需要:
yaml
title: 文档标题
type: note|project|reference|daily|decision
created: YYYY-MM-DD
permalink: agent-name/folder/filename
MEMORY.md 规则
- - 保持在约 5K 字符以内 (最大 10K)
- 包含:偏好、经验教训、项目索引、跨项目决策
- 排除:详细时间线、代码片段、日常事件
- 通过维基链接指向更深入的文档
- 完整规则:read references/memory-rules.md
心跳维护
在周期性心跳期间 (每隔几天):
- 1. 审查最近的 vault/60-learnings/ 条目
- 将适用的学习内容提升到大脑文件
- 审查最近的日志 → 必要时更新 MEMORY.md
- 检查 MEMORY.md 大小,将细节内容移至项目/知识文档
Discord 工作空间
Discord 取代 WhatsApp 成为主要频道,并带来重大升级:流式传输、语音、按钮、线程和频道隔离。
完整设置指南:read references/discord-setup.md
快速摘要
| 功能 | 作用 |
|---|
| 频道分离 | 每个项目一个频道 = 隔离会话,减少 token 浪费 |
| 流式传输 |
实时查看响应生成过程 |
| 语音频道 | 实时语音:Whisper STT → LLM → OpenAI TTS |
| 交互组件 | 按钮、选择器、表单,用于快速决策 |
| 线程绑定编码 | Codex/Claude Code 拥有自己的线程 |
| 反应 | 视觉确认 (可配置表情符号) |
| 自动在线状态 | 机器人状态显示健康状态 |
频道架构
🏠 主页 → #general, #tasks, #coding
🔊 语音 → 🎙 通用 (语音对话)
🏥 [您的组织] → #project-a, #project-b, ...
🤖 智能体 → #agents (线程绑定会话)
📋 运维 → #logs, #cron
🧪 研究 → #research
设置频道主题并附带仓库指针,用于项目路由:
项目 A 应用 | vault: 20-projects/project-a/ | repo: user/project-a | port: 3001
关键配置
json5
{
channels: {
discord: {
enabled: true,
token: 您的机器人令牌,
groupPolicy: allowlist,
dmPolicy: allowlist,
allowFrom: [您的用户ID],
guilds: {
您的服务器ID: {
requireMention: false,
users: [您的用户ID]
}
},
streaming: partial,
replyToMode: first,
historyLimit: 30,
threadBindings: { enabled: true, spawnSubagentSessions: true, spawnAcpSessions: true },
ackReaction: 🦅,
autoPresence: { enabled: true, healthyText: 在线 }
}
},
tools: {
profile: full,
exec: { security: full, ask: off }
},
messages: { ackReactionScope: all }
}
⚠️ 如果没有 guilds 块,机器人只能在私信中工作。 这是最常见的设置问题。
包含状态反应、自定义表情符号、语音、组件和故障排除的完整生产配置:read references/discord-setup.md
完整的 OpenClaw 配置参考:read references/openclaw-config.md
快速命令
bash
统计待处理的学习内容
grep -rh Status\
\: pending vault/60-learnings/*.md | wc -l
查找高优先级项目
g