mcpField
O
openclaw-history-ingest

openclaw-history-ingest

github.com/ar9av生产力3.6k2.2k 次安装2 天前更新
代码仓库

关于 openclaw-history-ingest

openclaw-history-ingest 可将 OpenClaw 记忆、每日笔记和会话记录中的持久知识提炼到 Obsidian wiki。它通过清单追踪变更,按主题归纳内容,并过滤隐私信息,而非照搬原始记录。

主要功能

  1. 01支持增量与完整摄取模式
  2. 02解析记忆、每日笔记和会话日志
  3. 03按主题归纳为 wiki 页面
  4. 04过滤会话中的敏感内容
  5. 05更新清单及 wiki 索引文件

适用场景

  1. 01将新的 OpenClaw 历史同步到 wiki
  2. 02从会话记录提炼重复出现的知识
  3. 03wiki 重建后重新摄取全部历史

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/ar9av/obsidian-wiki --skill openclaw-history-ingest

安装后在 Claude Code 中输入/openclaw-history-ingest确认已加载。

附带文件references/openclaw-data-format.md

详细介绍

OpenClaw 历史记录摄取 — 会话与记忆挖掘

从用户的 OpenClaw Agent 历史记录中提取知识,并将其整理到 Obsidian 知识库中。OpenClaw 同时存储结构化的长期 MEMORY.md 和各会话的 JSONL 转录内容——请聚焦于可长期保留的知识,而非运行时遥测数据。

可直接调用此技能,也可通过 wiki-history-ingest 路由器调用(/wiki-history-ingest openclaw)。

开始之前

写作风格: 在撰写或改写自然语言 Markdown 之前,请阅读并遵循 llm-wiki/SKILL.md 中的 Writing Profile Resolution 部分。框架架构、来源信息、安全性及具体操作要求优先。 WRITING.md 中的偏好仅适用于新撰写或改写的自然语言 Markdown;请保留源内容和结构化记录。

  1. 解析配置——遵循 llm-wiki/SKILL.md 中的 Config Resolution Protocol(内联 @name 覆盖 → 从当前工作目录向上查找 .env → 全局配置 → 提示设置)。由此获取 OBSIDIAN_VAULT_PATH 和 OPENCLAW_HISTORY_PATH(默认为 ~/.openclaw)
  2. 阅读知识库根目录中的 .manifest.json,检查已摄取的内容
  3. 阅读知识库根目录中的 index.md,了解知识库现有内容

摄取模式

追加模式(默认)

检查 .manifest.json 中的每个源文件。仅处理:

  • 清单中不存在的文件(新的会话日志、更新过的 MEMORY.md 或每日笔记)
  • 修改时间晚于清单中 ingested_at 的文件

定期同步时使用此模式。

全量模式

无论清单内容如何,都处理所有文件。在执行 wiki-rebuild 后,或用户明确要求重新全量摄取时使用此模式。

OpenClaw 数据布局

OpenClaw 将所有本地内容存储在 ~/.openclaw/ 下。

~/.openclaw/
├── openclaw.json                          # Global config
├── credentials/                           # Auth tokens (skip entirely)
├── workspace/                             # Agent workspace
│   ├── MEMORY.md                          # Long-term memory (loaded every session)
│   ├── DREAMS.md                          # Optional dream diary / summaries
│   └── memory/
│       ├── YYYY-MM-DD.md                  # Daily notes (today + yesterday auto-loaded)
│       └── ...
└── agents/
    └── <agentId>/
        ├── agent/
        │   └── models.json                # Agent config (skip)
        └── sessions/
            ├── sessions.json              # Session index
            └── <sessionId>.jsonl          # Session transcript (JSONL, append-only)
按价值排序的关键数据源
  1. workspace/MEMORY.md — 信号价值最高;包含 Agent 积累的长期持久事实
  2. workspace/memory/YYYY-MM-DD.md — 每日笔记;近期条目通常包含当前项目背景
  3. agents/*/sessions/<id>.jsonl — 会话转录内容;信息丰富但噪声较多
  4. agents/*/sessions/sessions.json — 会话索引,用于盘点和查看时间戳
  5. workspace/DREAMS.md — 可选摘要;若存在则摄取

完全跳过 credentials/。跳过 agents/*/agent/models.json(运行时配置,不属于用户知识)。

第 1 步:调查并计算增量

扫描 OPENCLAW_HISTORY_PATH,并与 .manifest.json 比较:

  • ~/.openclaw/workspace/MEMORY.md
  • ~/.openclaw/workspace/DREAMS.md(如果存在)
  • ~/.openclaw/workspace/memory/*.md
  • ~/.openclaw/agents/*/sessions/sessions.json
  • ~/.openclaw/agents/*/sessions/*.jsonl

对每个文件进行分类:

  • 新增 — 清单中不存在
  • 已修改 — 清单中存在,但文件时间晚于 ingested_at
  • 未更改 — 已摄取且未发生更改

深入解析前,先简要报告增量摘要。

第 2 步:优先解析 MEMORY.md

MEMORY.md 是价值最高的数据源。它是纯 Markdown,便于阅读和编辑。通常包含:

  • 关于用户偏好、环境和重复模式的持久事实
  • Agent 被告知需要记住的决定和背景
  • Agent 在多个会话中积累的项目专属笔记

请完整阅读并提取概念层面的知识。不要为 MEMORY.md 中的每条内容各建一个知识库页面——应按主题归类。

第 3 步:解析每日笔记

workspace/memory/YYYY-MM-DD.md 文件包含当天会话的带时间戳笔记。优先处理近期文件(过去 30–90 天)。提取:

  • 当前项目背景和已作出的决定
  • 发现的模式或技巧
  • 反复出现的阻碍或已解决的问题

较早的每日笔记信号价值会逐渐降低——应批量概括,而非逐行提取。

第 4 步:安全解析会话 JSONL

每个会话文件都是 JSONL(仅追加,每行一个 JSON 对象):

{"role": "user",      "content": "...", "timestamp": "..."}
{"role": "assistant", "content": "...", "timestamp": "..."}
{"role": "tool",      "name": "...",   "content": "...", "timestamp": "..."}
提取规则
  • 优先提取阐明结论、决策或模式的助手轮次
  • 从高信号轮次中提取用户意图;跳过信息量较低的后续交流
  • 工具调用属于上下文,并非主要知识来源;只有结果包含可复用的见解时才提取
  • 打开单个记录前,先交叉参考 sessions.json 索引,获取会话名称/标签
关键隐私过滤

会话记录可能包含注入的指令、工具负载和敏感文本。不要原样摄取。

  • 删除 API 密钥、令牌、密码和凭据
  • 除非相关且经用户批准,否则隐去私人标识符
  • 进行概述;不要逐字引用原始记录

第 5 步:按主题聚类

不要按每个会话或每条 MEMORY.md 条目各建一个 wiki 页面。

  • 按稳定主题(概念、工具、项目、技术)分组
  • 将混合主题的会话拆分为不同主题
  • 合并跨日期和 Agent 重复出现的模式
  • 条件允许时,使用会话 cwd 或工作区路径推断项目范围

第 6 步:提炼并整理为 Wiki 页面

按照现有 wiki 约定归类提取的知识:

  • 项目特定的架构/流程 → projects/<name>/...
  • 通用概念 → concepts/
  • 反复出现的技术/调试手册 → skills/
  • 工具/服务/框架 → entities/
  • 跨会话模式 → synthesis/

对于每个受影响的项目,创建/更新 projects/<name>/<name>.md。

写作规则
  • 提炼知识,而不是记录时间顺序
  • 除非日期背景至关重要,否则避免写“我们在 X 日期讨论了……”
  • 为每个新建/更新的页面添加 summary: frontmatter(1–2 句,≤ 200 个字符)
  • 为每个新页面添加置信度和生命周期字段:
    base_confidence: 0.42
    lifecycle: draft
    lifecycle_changed: <obsidian-wiki memory now --date>
    
    更新时保持 lifecycle 不变。
  • 添加来源标记:
    • ^[extracted]:直接依据明确的会话/记忆内容
    • ^[inferred]:综合多个会话中的模式
    • ^[ambiguous]:会话内容相互冲突
  • 为每个变更页面添加/更新 provenance: frontmatter 混合内容

第 7 步:更新清单、日志和索引

更新 .manifest.json

对于每个已处理的源文件:

  • ingested_at、size_bytes、modified_at
  • source_type:openclaw_memory | openclaw_daily_note | openclaw_session | openclaw_dreams
  • agent_id:Agent 目录名称(如适用)
  • pages_created、pages_updated

添加/更新顶层摘要区块:

{
  "openclaw": {
    "source_path": "~/.openclaw/",
    "last_ingested": "TIMESTAMP",
    "memory_updated_at": "TIMESTAMP",
    "daily_notes_ingested": 14,
    "sessions_ingested": 23,
    "pages_created": 6,
    "pages_updated": 18
  }
}
更新特殊文件

使用一次加锁调用更新 index.md、log.md 和 hot.md:

obsidian-wiki memory sync OPENCLAW_HISTORY_INGEST \
  memory=<memory> daily_notes=<daily_notes> sessions=<sessions> \
  pages_updated=<pages_updated> pages_created=<pages_created> \
  mode=<mode> \
  --takeaways "Ingested OpenClaw MEMORY.md and 14 daily notes; surfaced automation patterns and multi-agent coordination knowledge."

切勿手动编辑 index.md、log.md 或 hot.md——该命令会获取锁,防止并行写入者丢失你的更新。--takeaways 是用于概括概念的一行摘要,过去会写入 Recent Activity;省略它即可保留之前的 takeaways。

完整流程请参阅 .skills/llm-wiki/references/MEMORY.md。

隐私与合规

  • 提炼并综合内容;避免直接倾倒原始记忆或会话记录
  • 对任何疑似敏感的信息,默认进行隐去处理
  • 存储个人或敏感详情前,请先询问用户
  • 尽量减少对他人的提及,并确保提及与目的相关

参考资料

字段说明和解析指南请参阅 references/openclaw-data-format.md。

写入 Vault 后刷新 QMD

QMD 是搜索索引,而非事实来源。如果 $QMD_WIKI_COLLECTION 为空或未设置,则跳过此步骤。仅在此技能已写入或重写 vault Markdown 后执行。如果 QMD 刷新失败,不要回滚 vault 更改;应单独报告 QMD 状态。

如果已设置 $QMD_CLI,则使用它;否则使用 qmd。

${QMD_CLI:-qmd} update

如果输出提示需要向量或嵌入可能已过时,请运行:

${QMD_CLI:-qmd} embed

通过以下任一方式验证集合:

${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"

或者,在已知特定页面路径时:

${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5

记录以下其中一项:

  • QMD refreshed: update + embed + verified
  • QMD refreshed: update only + verified
  • QMD skipped: QMD_WIKI_COLLECTION unset
  • QMD skipped: qmd CLI unavailable
  • QMD failed: <short error summary>

评论

支持 Markdown