Community写作与编辑github.com

Amiyadesi/agent-session-bridge

在 Codex、Pi、DeepSeek Harness、OpenCode、Qwen Code、Claude Code、WorkBuddy、Antigravity CLI(agy)和桌面 IDE 之间复制或剪切对话上下文,借助本地 agent-session-bridge CLI 实现。支持按记录文件、精确会话 ID 或项目批量迁移,包括原生数据库索引;排除凭据和代理配置。

agent-session-bridge 是什么?

agent-session-bridge(asb)是一个 CLI 工具,专门用于在不同 AI 编码助手和聊天代理之间迁移对话会话。它支持 Codex、Pi、DeepSeek Harness、OpenCode、Qwen Code、Claude Code、WorkBuddy 以及 Antigravity CLI(agy)和桌面 IDE 等主流平台。该工具完全本地运行,不调用任何模型 API,也绝不上传对话记录,确保隐私安全。迁移时自动过滤工具调用、系统/运行时记录和思考过程,仅保留用户/助手消息、压缩摘要和部分用户图像。支持精确会话 ID、项目目录批量处理以及导出目录等多种选择方式,并提供 `--move` 和 `--apply` 参数控制是否删除源会话。它还会验证写入内容、解析目标格式并注册必要的原生数据库行,确保迁移的完整性和可恢复性。

兼容平台✓Claude Code✓Codex CLI~Cursor✓Antigravity✓Gemini CLI✓OpenCode
npx skills add https://github.com/Amiyadesi/agent-session-bridge/tree/HEAD/skills/migrate-agent-session

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

迁移代理会话

使用 asb / agent-session-bridge;JSON stdout 是机器接口。 CLI 使用本地文件,不进行任何模型调用,也绝不上传对话记录。 复制和移动操作只包含对话上下文:用户/助手消息、压缩摘要和支持的用户图像。工具调用/结果、思考过程和系统/运行时记录会被自动过滤。计数会在清单中显示为 filtered:*,无需额外标志。 在目标支持的情况下保留源标题。原生 Codex 标题来自匹配的数据库行(name,然后是 title);独立导出需要在日志中提供标题。源模型/提供商和思考设置被排除在外。 使用已安装的命令或本仓库下的 .venv/Scripts/asb.exe(Windows) / .venv/bin/asb(POSIX)。 如果未安装,本项目需要 Python 3.14+;创建项目虚拟环境并在其中运行 python -m pip install -e .。

选择会话

  • 单个文件:asb inspect <file> 然后 asb convert <file> --to pi。
  • 精确 ID:asb convert --from codex --session <full-id> --to pi。
  • 项目:asb list --from codex --project <absolute-directory>,然后 asb convert --from codex --to pi --project <absolute-directory>。
  • 导出目录:asb convert <directory> --from codex --to pi。
  • 项目过滤器匹配记录的 cwd 及其子目录(按路径边界)。它不搜索消息文本。
  • --source-root 覆盖源存储位置;--target-home 是目标代理的主目录(不是其 sessions 目录)。
  • 仅在用户打算重定位工作目录时使用 --cwd。
  • Pi 需要目标模型,因为它从历史助手消息中恢复模型选择。CLI 优先从目标主目录下的 settings.json 读取默认值,然后从目标 cwd 下的 .pi/settings.json 读取;--provider / --model 可以覆盖它们。如果没有完整的目标默认值,请提供预期的目标配对。切勿替换源模型。不修改任何设置文件。

支持的名字:codex、pi、dsh、opencode、qwen、claude、workbuddy、antigravity、antigravity-desktop。 使用 asb formats / asb convert --help 查看可用选项。

执行

先不加 --apply 运行。查看 count、errors、source、target、dropped_events 和 warnings。 报告所选集合和丢失内容,但不要打印对话正文。 解决意外的匹配或不受支持的内容后,再执行破坏性的移动操作。

  • 用户要求复制,或未明确说明保留策略:追加 --apply;保留源会话。
  • 用户明确要求迁移后移动/剪切/删除这些源会话:追加 --move --apply。
  • 保留已授予的授权。仅在删除意图或所选集合不明确时询问。
  • 移动前停止正在进行的源对话。CLI 会拒绝在转换期间发生更改的源会话,但无法阻止其他客户端写入。
  • 切勿使用手动的 rm、del 或递归删除来替代 CLI 的已验证移动。
  • 检查批次中的每个结果/错误。非零退出码可能表示部分成功;不要盲目重试已成功的项,因为它们会获得新 ID。

CLI 在删除前会验证写入的字节数、解析目标并注册所需的本机数据库行。源清理只针对所选会话 ID、匹配的记录和已知索引。此检查不调用模型。 使用返回的 resume argv 作为命令建议;原生 ID 查找假设使用正常的目标主目录。 对于自定义目标主目录,使用相应的 home 环境变量覆盖来启动客户端。

格式限制

  • 原生 OpenCode 选择:asb convert --from opencode --session <id> --to pi --move --apply。默认选择读取其数据库;--source-root 可以指向包含 opencode.db 的目录。手动提供的 JSON 导出是独立文件;剪切该导出不会删除其原始数据库中的会话。
  • Codex / WorkBuddy / OpenCode / Antigravity 的原生目标主目录中必须已包含客户端初始化的数据库。未知模式或必填字段会清晰地报错失败。使用 --output-dir 生成可移植文件,无需注册数据库。
  • 对于 Git 项目,在预期的项目目录中启动一次 OpenCode 以初始化其项目索引,然后再进行导入。
  • WorkBuddy 处理本地会话及其数据库/缓存。多个目标账户需要 --workbuddy-user-id。从 WorkBuddy 的会话列表中恢复。Blob 图像被忽略并计入计数。
  • DSH 读取 v4 JSONL/zstd 格式。较旧的日志必须首先由 DSH 升级。多代日志会阻止移动操作。
  • DSH 图像目前被忽略并计入计数。摘要成为带标签的用户上下文。
  • Antigravity 指的是 agy CLI SQLite 格式,而非直接操作桌面 .pb 或加密存储。其主目录为 ~/.gemini/antigravity-cli;使用 --source-root / --target-home 覆盖。在进行原生写入或剪切前,关闭使用该主目录的客户端。活跃的存在锁和 WAL/SHM/journal 文件会阻止剪切操作。
  • Antigravity 使用每个会话的数据库、共享的 conversation_summaries.db、jetbox_summaries_proto.pb、annotations/<id>.pbtxt 和最后一个对话缓存。CLI 一起写入和删除所选记录。将可移植的 .db 和 .manifest.json 文件放在一起以保留标题/cwd 元数据。摘要成为带标签的用户上下文,图像被忽略并计入计数。
  • antigravity-desktop 支持 IDE 2.5.5 SQLite .db 会话,源/目标主目录为 ~/.gemini/antigravity-ide(旧版 SQLite 主目录为 ~/.gemini/antigravity)。示例:asb convert --from codex --to antigravity-desktop --project <directory> --apply。像其他格式一样选择桌面 ID 或项目。桌面和 agy CLI 使用其不同的格式名称相互转换。
  • 桌面原生写入/剪切会更新已知的 state.vscdb 历史索引、现有的 protobuf 缓存、标题注释和所选对话数据库。标准配置文件路径会自动推断;对于自定义主目录,请传递 --source-state-db 或 --target-state-db 以及对应的 globalStorage/state.vscdb。先关闭桌面客户端;运行中的语言服务或 SQLite sidecars 会阻止修改。相同 ID 的旧版 .pb 文件会阻止剪切。共享的状态数据库和相邻会话不受影响。
  • 桌面没有返回的 resume 命令:通过其原生历史记录 UI 打开。经过官方语言服务读取回查的验证由 ID 确认;GUI 历史发现和模型继续操作未经验证。不要仅凭文件解析或数据库注册就声称 GUI 检查通过。
  • 旧版桌面 .pb 或加密历史必须首先由官方客户端升级/导入到 SQLite 中。或者,通过 agy /resume → Antigravity 克隆它,然后转换该 CLI 副本;移动副本不会删除桌面原始文件。
  • 剪切操作会删除所选记录/桥接清单、原生会话数据库行以及已知的历史/列表条目。共享项目、附件、备份、认证和运行时设置会被保留。源清理期间的失败可能导致目标有效而源保留:在重试前检查错误。
  • 可移植的 --output / --output-dir 文件需要本机安装/导入才能通过 ID 恢复。Pi 可以通过 pi --session <file> 打开任何已生成的 Pi 文件。
  • 压缩边界依然有效:Pi 从最新的摘要和后续消息继续;之前的消息保留在其会话历史中。摘要可以描述过去的操作;原始工具执行记录被排除在外。

相关技能