切换账号助手
这个技能解决什么问题
WorkBuddy 桌面端与 CodeBuddy IDE 都把会话列表与登录账号绑定:换一个账号登录后,看不到另一个账号的任务,于是"想接着上次的活干"就断线了。
但实际上,客户端早已把每个任务、每个会话的完整双方对话自动落盘到本机:
~/.workbuddy/projects/<工作区>/<会话ID>.jsonl # WorkBuddy 桌面端
~/.codebuddy/projects/<工作区>/<会话ID>.jsonl # CodeBuddy Code(CLI / Agent)
~/Library/Application Support/CodeBuddyExtension/Data/<uid>/CodeBuddyIDE/<uid>/history/
└── <工作区ID>/<会话ID>/messages/<消息ID>.json # CodeBuddy IDE
- WorkBuddy / CodeBuddy Code 的记录与账号无关,换账号不会清空;
- CodeBuddy IDE 的记录按账号 uid 分目录(路径里带 uid),换账号后 IDE 读到的是新目录,
但旧 uid 的会话仍留在磁盘上 —— 本技能会把它一并归档。
本技能做的事,就是把这些原始记录 翻译成人能读的 Markdown 存档 + 任务索引,并给出"读回上下文、继续任务"的标准流程。因此:
- 自动保存:由客户端自身完成(原始记录全量落盘),本技能不依赖任何额外配置;
- 本技能负责:归档成可读文件、建立索引、跨账号恢复与续接。
- 数据全部来自本地:
conversationId直接对应本地目录,无需请求服务端。详见references/data-format.md。
何时使用
出现下列任一意图时,立即使用本技能:
| 用户说法 | 对应动作 |
|---|---|
| "帮我保存/备份一下会话记录""归档一下我的任务" | 执行 archive |
| "我有哪些任务""做过什么""列一下历史会话" | 执行 list |
| "上次那个任务接着做""继续第 N 个任务""切换账号后怎么继续" | 先 resume,再据此继续 |
| "把某个会话的对话导出/给我看" | 执行 show |
| "换个账号就看不到之前的会话了" | 说明原理 + archive + resume |
核心工作流
脚本位于本技能的 scripts/session_archive.py(纯标准库,python3 可直接运行)。
下文用 SAA 代指脚本路径 <技能目录>/scripts/session_archive.py,所有命令统一写作
python3 "$SAA" <子命令>。执行前先定位技能目录,例如:
export SKILL_DIR="$HOME/.workbuddy/skills/switch-account-assistant" # 或 ${CODEBUDDY_SKILL_DIR}
export SAA="$SKILL_DIR/scripts/session_archive.py"
1. 归档(保存)
python3 "$SAA" archive # 增量归档全部来源、全部账号、全部工作区
python3 "$SAA" archive --force # 全量重建
python3 "$SAA" archive --since 2026-09-01 # 只归档该日期之后有活动的会话
python3 "$SAA" archive --source codebuddy-ide # 只归档 CodeBuddy IDE 的会话
- 来源(
--source):all(默认)/workbuddy/codebuddy-ide/codebuddy-cli。
按来源过滤时,其他来源的既有索引条目会被保留,不会丢。 - 默认存档目录:
~/.workbuddy/session-archive/(与账号无关;可用--out指定) - 产出:
sessions/<日期>_<会话ID前8位>.md—— 单个会话的双方完整对话index.md—— 人类可读的任务索引表(含来源列WB/IDE/CLI)index.json—— 结构化索引(供程序读取)- 增量逻辑:以文件
size+mtime为指纹,只有变化的会话才重新解析,可放心反复调用。 - 空会话(新建未使用)自动跳过,不污染索引。
归档规则(重要):每次完成实质性工作后,顺手跑一次 archive --quiet 刷新存档(增量,开销很小),确保"现在这一刻"的任务状态也被固化。用户如果需要保留当前进度,也应主动归档。
2. 查看
python3 "$SAA" list # 列出全部任务(按最后活动倒序)
python3 "$SAA" list --query 报表 # 关键词检索
python3 "$SAA" show 3 # 看第 3 个任务的完整对话
python3 "$SAA" show 3 --turns 2 # 只看最后 2 轮
python3 "$SAA" show b2709a10 # 也支持用会话 ID 前缀或标题关键词
3. 继续任务(跨账号的关键一步)
python3 "$SAA" resume last # 最近一个任务的接续摘要
python3 "$SAA" resume 5 --turns 8 # 指定任务、指定回溯轮数
python3 "$SAA" resume 5 --save ~/接续.md # 存成文件方便交接
resume 输出一份任务接续摘要:任务标题 / 工作区 / 全部用户需求 / 最近若干轮对话 / 关键工具调用 / 继续建议。标准做法是:
- 先运行
resume <目标>拿到摘要; - 把摘要的要点向用户复述确认(尤其是"做到哪一步了""还差什么");
- 按摘要里的工作区路径核对文件是否还在,然后直接继续执行。
> 用户换账号后,让他直接说一句「继续第 5 个任务」或「恢复上次任务」,即可走完上面三步。
4.(可选)完全自动存档
客户端默认已经全量落盘,本节只在用户明确希望"连 Markdown 存档也自动刷新"时使用。它会在 ~/.workbuddy/settings.json 写入 Stop / SessionEnd hook,每次助手响应结束或会话结束时自动增量归档:
python3 "$SAA" install-hook --dry-run # 先看会写什么
python3 "$SAA" install-hook # 安装(自动备份 settings.json.saa.bak)
python3 "$SAA" uninstall-hook # 卸载,恢复原样
注意:hook 属于 Beta 能力,部分客户端版本可能不生效;安装前先 --dry-run 给用户确认,安装后如果客户端异常,用 uninstall-hook 一键还原,或从 .saa.bak 恢复。
5. 状态检查
python3 "$SAA" status # 存档目录、任务数、数据来源、hook 状态
python3 "$SAA" status --json # 机器可读
约束与注意
- 只读原始会话:绝不修改、移动、删除客户端的会话目录
(projects/*.jsonl、memory/*.md、CodeBuddyExtension/Data/**/history/);本技能只做解析与另存。 - 存档与账号无关:存档写到
~/.workbuddy/session-archive/,换账号后依然在,这是本技能的核心价值。 - 敏感内容:会话里可能含隐私信息,归档结果属于本地文件,不要擅自上传或分享。
- 解析失败不中断:个别会话解析失败会打印告警并跳过,不影响其余归档。
- 不联网:全部数据来自本地磁盘,不向任何服务端请求会话内容。
- 数据格式与字段说明见
references/data-format.md。
命令速查
| 目标 | 命令 |
|---|---|
| 归档全部来源 | python3 "$SAA" archive |
| 只归档某个来源 | python3 "$SAA" archive --source codebuddy-ide |
| 列出任务 | python3 "$SAA" list |
| 查看对话 | python3 "$SAA" show <序号\|id\|关键词> |
| 生成接续摘要 | python3 "$SAA" resume <序号\|id\|关键词> |
| 查看状态 | python3 "$SAA" status |
| 自动存档开关 | python3 "$SAA" install-hook / uninstall-hook |