微信归档流水线
为什么需要它
聊天记录里躺着大量只有一次机会的信息:对面报的价、答应过的交期、改过的参数、谁说过什么话。
这些内容现在都在微信里,而微信的搜索只在你记得关键词的时候有用。真正的麻烦是你根本不知道该搜什么——三个月后要回溯「当时到底是谁说可以延期的」,你只能一屏一屏往上翻。
手工整理过一次的人都知道为什么坚持不下来:
- 导出一次很轻松,导出三十次不可能。
- 复制粘贴进 Obsidian 的文件会重复,第二周就分不清哪条是新的。
- 想每天自动跑,卡在「cron 没生效」「push 报权限」「库在 iCloud 里读不到」上,一卡就是几周。
这个 Skill 只解决这三件事:增量、幂等、能自己每天跑。
它做什么
一条命令,把本地明文聊天记录追加进 Obsidian 库,然后提交并推送到私有仓库。
本地明文 ──► Obsidian Markdown ──► git 私有仓库
json/md/sqlite 按会话+月份分文件 只提交归档目录
只追加,不重写 失败退避重试
核心是消息指纹去重:每条消息的指纹 = 会话 + 时间 + 发送人 + 内容。只要进过库,第二次跑就不会再写;所以你可以一天跑十次,也可以断更一个月再补,都不会出现重复条目。
开始用
1. 第一次配置
# 来源可以是:JSON 导出目录、Markdown 导出目录、明文 SQLite 目录
python3 scripts/vaultsync.py init \
--source ~/wechat-export \
--vault ~/Obsidian/my-vault \
--git-url git@github.com:you/wechat-archive.git \
--git-init
不填 --source-type 会自动判断。配置落在 ~/.wechat-vault-sync/config.json。
2. 先体检,再跑
python3 scripts/vaultsync.py doctor # 八类故障逐条查,有问题直接给改法
python3 scripts/vaultsync.py scan # 只统计,不写文件
python3 scripts/vaultsync.py run # 写入 + 提交 + 推送
run 的退出码:0 成功(含「没有新消息」),1 推送失败。这个退出码可以直接让定时任务报警。
3. 挂定时
python3 scripts/vaultsync.py schedule --kind launchd --time 09:07 # macOS,生成 plist
python3 scripts/vaultsync.py schedule --kind cron # 一行 crontab
python3 scripts/vaultsync.py schedule --kind workbuddy # 给 Agent 的提示词
三种任选一种,不要同时挂两个——重复跑不会坏数据,但会多出空提交和两条日志,排查时容易看错。
生成的文件长这样
微信归档/林工(华辰科技)/2026-11.md:
---
chat: 林工(华辰科技)
month: 2026-11
source: wechat-local
tags:
- 微信
- 归档
---
# 林工(华辰科技) · 2026-11
## 2026-11-01
- **09:12** 林工:样机今天下午发出,德邦单号 770xxxxxxx,预计周三到。
- **09:15** 我:收到。附件里那份验收清单是最终版吗?
配套还有一个 微信归档/_索引.md,列出每个会话的消息数、本月新增、最近一条时间,可以直接用 Obsidian 打开。
为什么按月分文件而不是按天:按天会产生几千个小文件,Obsidian 索引和 git 都会变慢;按月既能让单文件保持在可读范围,又能让 git diff 只看变化的那几行。
数据从哪来(重要边界)
这个工具不解密、不读进程内存、不碰微信客户端。 它读的是你指定的目录里的明文文件。
json—— 用导出工具导出的 JSON(最稳,推荐)md—— 已有的 Markdown 导出目录,兼容两种常见格式sqlite—— 已解密的明文库(含微信 4.x 明文库的最佳努力解析)
如果你的目录里还是加密库,doctor 会直接告诉你「读不出消息表」,而不是给你一堆空结果。拿到明文这一步需要你自己完成,本 Skill 不提供也不建议任何绕过加密的方式。
常见故障(doctor 覆盖的八类)
| 现象 | 原因 | 改法 |
|---|---|---|
| 条数比微信里少一截 | 消息体是 zstd 压缩 | pip install zstandard |
| 最新几条读不到 | 库旁边有未合并的 -wal |
正常退出微信后重新拷一份 |
| launchd 跑成功但库里没东西 | 库或来源在「桌面/文档/下载」 | 挪到普通目录,或给完全磁盘访问权限 |
| push 报权限 | 用了 HTTPS 但没配 token,或 SSH key 没加 | 二选一配好,doctor 会告诉你远端能不能连 |
| commit 失败 | 没配 git 用户名邮箱 | git config user.email/user.name |
| 推到奇怪的分支 | 本地分支名和配置不一致 | 统一分支名,或改 git.branch |
| 提交里混进了别的文件 | 手工 git add -A 过 |
本工具只 add 微信归档/,历史遗留的 cd 手动处理 |
| 昨天还在跑今天没了 | 定时任务被系统回收 | status 看「上次运行」,超 36 小时会警告 |
安全设计
- 只读来源:来源目录以只读方式打开,不写、不改、不删。
- 只提交自己的目录:
git add只加微信归档/,不会把你库里其他笔记一起提交。 - 单次提交上限:默认 50MB,超过就撤销并报错——防止第一次导入把仓库撑爆。
- 不联网:除了
git push用的远端,没有任何网络请求。
命令一览
| 命令 | 用途 |
|---|---|
init |
写配置(一次) |
scan |
只统计新消息,不落盘 |
render |
只写 Obsidian,不碰 git |
sync |
只提交推送,不读来源 |
run |
全流程(定时任务调这个) |
status |
已归档多少、上次什么时候跑的 |
doctor |
体检八类故障 |
schedule |
生成定时配置 |
所有命令都支持 --config 指定配置文件(多份配置互不干扰)、--limit N(调试时只处理 N 条)、--dry-run(只看会做什么)。
交付方式与边界
买断制,交付完整明文包:全部脚本、三份参考文档、一份可直接跑的示例数据。一次付款长期使用,没有订阅、没有联网校验、没有功能阉割版。
不含(这几条写在这里,是为了让你买之前就知道):
- 不解密、不提取密钥、不读微信进程内存 —— 输入必须是明文文件
- 不操作微信客户端,不需要你装任何插件或改任何设置
- 不上传云端,除
git push的远端外没有任何网络请求 - 不做 AI 摘要、不做语义分析 —— 这一层只负责「把对话变成可检索的 Markdown」
已知限制:微信 4.x 明文库的字段结构随版本变化,本工具做的是尽力解析(Msg_* + Name2Id + 联系人备注映射)。解析不出来时 doctor 会明确告诉你哪张表没读到,而不是返回空结果。JSON / Markdown 两种来源不受此影响。