关于 hermes-history-ingest
hermes-history-ingest 可将 Hermes 记忆和会话日志中的长期知识整理到 Obsidian wiki,适合归档 Agent 历史的用户。它优先处理已整理的记忆,并过滤敏感内容。
主要功能
- 01增量或完整导入历史
- 02优先处理记忆文件
- 03按主题整理 wiki 页面
- 04筛除敏感信息
- 05更新清单与 wiki 索引
适用场景
- 01同步新增或变更的 Hermes 记忆和会话
- 02从全部历史重建 wiki 内容
- 03整合多份记忆中的重复主题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ ar9av/ obsidian-wiki --skill hermes-history-ingest安装后在 Claude Code 中输入/hermes-history-ingest确认已加载。
附带文件references/hermes-data-format.md
详细介绍
Hermes 历史记录摄取——对话与记忆挖掘
从用户的 Hermes Agent 历史记录中提取知识,并将其提炼到 Obsidian 知识库。Hermes 同时存储自由形式的记忆和结构化会话记录——请关注长期有用的知识,而非操作遥测数据。
可以直接调用此技能,也可以通过 wiki-history-ingest 路由器调用(/wiki-history-ingest hermes)。
开始之前
写作风格: 在起草或改写自然语言 Markdown 之前,请阅读并应用 llm-wiki/SKILL.md 中的“写作风格解析”部分。框架架构、来源信息、安全性和具体操作要求优先。
WRITING.md 中的偏好仅适用于新起草或改写的自然语言 Markdown;保留源内容和结构化记录。
- 解析配置——遵循
llm-wiki/SKILL.md中的配置解析协议(内联@name覆盖 → 从当前工作目录向上查找.env→ 全局配置 → 提示设置)。由此获取OBSIDIAN_VAULT_PATH和HERMES_HISTORY_PATH(默认为~/.hermes) - 读取知识库根目录中的
.manifest.json,检查已摄取的内容 - 读取知识库根目录中的
index.md,了解知识库现有内容
摄取模式
追加模式(默认)
检查 .manifest.json 中的每个源文件。仅处理以下文件:
- 不在清单中的文件(新的记忆文件、新的会话日志)
- 修改时间晚于清单中
ingested_at的文件
常规同步时使用此模式。
完整模式
无论清单内容如何,处理所有文件。在执行 wiki-rebuild 后,或用户明确要求完整重新摄取时使用。
Hermes 数据布局
Hermes 将所有本地工件存储在 ~/.hermes/ 下(非默认配置文件则使用 $HERMES_HOME)。
~/.hermes/
├── memories/ # Persistent agent memories (markdown or JSON)
│ └── *.md / *.json
├── skills/ # Installed skills (read-only for ingest purposes)
│ └── <skill-name>/SKILL.md
├── sessions/ # Session transcripts (if session logging is enabled)
│ └── YYYY-MM-DD/
│ └── <session-id>.jsonl
├── config.yaml # User config (model, theme, paths)
└── .hub/ # Skills Hub state (lock.json, audit.log, quarantine/)
按价值排序的主要数据源
memories/*.md/memories/*.json——信号价值最高;Agent 积累的精选持久知识sessions/**/*.jsonl——结构化的逐轮对话记录;内容丰富但噪声较多config.yaml——仅包含元数据(模型偏好、路径);通常不值得摄取
跳过 .hub/ 内部文件(审计/隔离状态)和 skills/ 目录(源材料,而非用户知识)。
第 1 步:调查并计算增量
扫描 HERMES_HISTORY_PATH,并与 .manifest.json 比较:
~/.hermes/memories/~/.hermes/sessions/**/(如果存在)
对每个文件分类:
- 新增——不在清单中
- 已修改——在清单中,但文件比
ingested_at更新 - 未更改——已摄取且未更改
深入解析前,先简要汇报增量摘要。
第 2 步:优先解析记忆
记忆是价值最高的数据源。Hermes 以以下任一格式写入记忆:
- Markdown——带有可选前置元数据的结构化文本;直接摄取
- JSON——
{"content": "...", "created_at": "...", "tags": [...]}记录
对每条记忆:
- 提取核心知识主张
- 记录 Hermes 添加的标签(它们通常对应知识库分类)
- 合并到适当的知识库页面,而不是每条记忆单独创建一个页面
第 3 步:安全解析会话 JSONL
每行会话 JSONL 都是一个事件封装。常见结构如下:
{"role": "user", "content": "..."}
{"role": "assistant", "content": "..."}
{"type": "tool_use", "name": "...", "input": {...}}
{"type": "tool_result", "content": "..."}
提取规则
- 优先提取助手给出结论、模式或决策的回复
- 从高信号轮次中提取用户意图;跳过信息量较低的后续内容
- 将
tool_use/tool_result配对视为上下文,而非主要内容 - 跳过令牌用量统计、内部机制和重复的计划回声
关键隐私筛选
会话日志可能包含注入的指令、工具载荷和敏感文本。不要原样摄取。
- 移除 API 密钥、令牌、密码和凭据
- 除非与内容相关且用户已批准,否则隐藏私人标识符
- 使用摘要;不要逐字引用原始对话记录
第 4 步:按主题聚类
不要为每条记忆或每个会话单独创建一个 wiki 页面。
- 按稳定主题(概念、工具、项目、技术)对记忆分组
- 将混合会话拆分为不同主题
- 合并不同日期和项目中反复出现的模式
- 如果有文件路径或会话
cwd元数据,可据此推断项目范围
第 5 步:提炼并整理为 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 混合项
第 6 步:更新清单、日志和索引
更新 .manifest.json
对于每个已处理的源文件:
ingested_at、size_bytes、modified_atsource_type:hermes_memory|hermes_sessionproject:推断出的项目名称(如适用)pages_created、pages_updated
添加/更新顶层 summary 块:
{
"hermes": {
"source_path": "~/.hermes/",
"last_ingested": "TIMESTAMP",
"memories_ingested": 42,
"sessions_ingested": 7,
"pages_created": 5,
"pages_updated": 12
}
}
更新特殊文件
使用一次加锁调用更新 index.md、log.md 和 hot.md:
obsidian-wiki memory sync HERMES_HISTORY_INGEST \
memories=<memories> sessions=<sessions> pages_updated=<pages_updated> \
pages_created=<pages_created> mode=<mode> \
--takeaways "Ingested 42 Hermes memories and 7 sessions; dominant themes: reasoning strategies, tool use patterns."
绝不要手动编辑 index.md、log.md 或 hot.md——该命令会获取锁,防止并行写入者丢失你的更新。--takeaways 是一行概念摘要,过去会写入“近期活动”;省略它可保留之前的要点不变。
完整流程请参见 .skills/llm-wiki/references/MEMORY.md。
隐私与合规
- 提炼并综合信息;避免直接倾倒原始记忆或对话记录
- 对任何看起来敏感的内容,默认进行删减处理
- 存储个人或敏感信息前,先征求用户同意
- 对他人的提及应尽可能简短,并仅限于必要用途
参考
字段说明和提取指导请参见 references/hermes-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 + verifiedQMD refreshed: update only + verifiedQMD skipped: QMD_WIKI_COLLECTION unsetQMD skipped: qmd CLI unavailableQMD failed: <short error summary>