Claude History Sync

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

Ruosong320 Updated

File contents

会话历史备份

用户明确指定 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 按“仅新增、同名跳过”模型汇总,仅在采用该模式时使用;其差集不能证明变更同步成功。

Ruosong320/my-codex-working-skills/tree/main/skills/claude-history-sync commit d92bda4d28

Frequently asked questions

npx skillmds@latest add ruosong320/claude-history-sync