# Claude History Sync

> 将用户指定的 Claude Code 或 Codex 历史导出、清洗并增量备份到已配置的 rclone remote；仅本地查看会话不触发上传。

- Skill: `ruosong320/claude-history-sync` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add ruosong320/claude-history-sync`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ruosong320/claude-history-sync/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Ruosong320 (https://skillmd.com/u/ruosong320)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/ruosong320/claude-history-sync

---


# 会话历史备份

用户明确指定 Claude 或 Codex 时仅处理指定来源；笼统要求两者同步时处理两者。沿用用户指定的 remote，未指定时使用本技能约定的 `syncspace` 并核对其已存在。目标为 `<remote>:claude-history/<host>/` 或 `<remote>:codex-history/<host>/`。

本地导出不等于授权上传；用户已经要求同步/上传到该目标时无需重复确认。脚本路径均相对本技能目录，不依赖另一份 `~/.claude/skills` 安装。

## 流程

1. 检查 `rclone`、Python、`uv` 及所需导出器。每次建立独立临时目录，原始导出和清洗产物分开放置。
2. Claude 使用已安装的 `claude-extract --all --format markdown --output <raw>`；Codex 使用 `python3 <skill>/scripts/export_codex.py --output <raw>`，日期筛选见其 `--help`。不读取或导出认证配置。
3. **两种来源均须清洗**：`uv run <skill>/scripts/filter_history.py <raw> <clean>`。该脚本结合结构过滤、密钥规则、可选 detect-secrets/Presidio 与 PII 正则；记录实际启用的检测层，缺失的层不得说成已执行。过滤不是无泄露保证，应抽查清洗结果，疑似残留时修正后再上传。
4. 上传前列举目标和本地清洗产物，区分不存在的目标目录与认证/网络失败。认证/网络失败不能当成空远端继续计算新增量。预览使用 `rclone copy <clean> <target> --dry-run`。
5. 使用 `rclone copy <clean> <target>` 同步新增及变更文件，避免 `sync` 删除远端内容。默认不要用 `--ignore-existing`，它会漏掉同一会话后续追加的消息；用户明确要求不可变归档时才采用仅新增策略并说明这一限制。
6. 核对传输退出状态及远端结果后报告来源、成功/失败、实际新增或更新情况。只允许上传清洗目录；不能用原始导出目录替代。

完成后清理本次产生的原始临时导出；失败时只保留排障必要材料并注明位置。现有 `scripts/report_sync.py` 按“仅新增、同名跳过”模型汇总，仅在采用该模式时使用；其差集不能证明变更同步成功。

