适用版本:CLI 0.1.0a39,插件 tag v0.1.0-alpha.39。CLI、MCP 与宿主 hook 是三个需要分别验证的层次。
| 场景 | 安装在哪 | 额外条件 |
|---|---|---|
| 个人/同机多个会话 | 本机一份 CLI,每项目单独注册 | 不需要后台服务 |
| 跨成员共享私有 Issue/PR | 各自本机 CLI/MCP + tea 登录,同一 Gitea 仓库 | 无 Continuity 服务/共享数据库;配置边界 |
| Claude Code 或 Codex 自动接续 | CLI + 对应插件/hook | 宿主实际加载、信任并触发 hook |
| 控制端与状态端分离 | 状态端 CLI/MCP,控制端 SSH bridge | 明确 SSH alias、两端项目路径与目标 profile |
| 强一致 State 服务 | 显式部署相应 adapter/service | 不是默认一键能力,见 State |
不需要为普通任务卡先部署数据库、登录另一家 provider,或启用主控 fence。
需要 Python 3.11+;检索 Git tracked 文件需要 Git。Agent 客户端另行安装并在所属机器完成自己的登录。
python3 -m venv .venv
.venv/bin/python -m pip install 'continuity-plane==0.1.0a39'
.venv/bin/continuity --versionWindows PowerShell 对应 py -3 -m venv .venv、.venv\Scripts\python.exe 和 .venv\Scripts\continuity.exe,无需强制改变 PowerShell 执行策略。最新文档的验证矩阵不等于本轮重新完成了每个 OS 的现场安装。
希望全局使用时可选 pipx:
pipx install 'continuity-plane==0.1.0a39'
pipx upgrade continuity-plane --pip-args=--pre升级后检查 continuity --version 与 pipx list。GitHub 的 Release 分类不改变 PyPI 的 alpha 排序;精确 pin 或 --pre 仍必要。
已有 pipx/uv 环境无法重建时,更新原解释器,不使用破坏性重装:
uv pip install --python /path/to/pipx/venvs/continuity-plane/bin/python --reinstall-package continuity-plane 'continuity-plane==0.1.0a39'pipx 的显示元数据可能仍需其正常 upgrade 流程刷新。网络失败时可用已核对摘要的 wheel 离线安装;不要关闭 TLS 验证,也不要把临时离线参数永久留给后续升级。
Continuity 在独立的后台进程中查询包索引是否有新版本,每 24 小时最多一次,结果写入数据根目录。命令只读取这份缓存,不会等待网络。请求只包含包名,不带项目、用户或使用数据。私有构建、源码安装和 editable 安装不会检查。设置 CONTINUITY_UPDATE_CHECK=0 可关闭检查发出的全部网络请求。
有新版本时,交互终端每天最多在 stderr 出现一行提示(stdout 与 JSON 输出不变);continuity_start 返回 update_available 字段;SessionStart 每个版本、每个会话一行;continuity doctor 同时列出 CLI、MCP 启动器与插件版本及其不一致之处。
升级始终是显式命令:
continuity self-update --dry-run # 打印本安装对应的命令
continuity self-update它识别 pipx、uv 与普通虚拟环境安装并执行对应升级;editable、源码和系统解释器安装会被拒绝并说明做法。本机有 worker 作业运行时以状态码 3 退出且不改动任何内容,因为运行中的 supervisor 惰性导入模块,可能加载到两个版本的混合;--force 可覆盖。升级后 MCP 服务随之退出,宿主在下一次调用时重连;插件需在宿主的插件管理器中更新并重连。Agent 仅在用户允许时运行 self-update。CONTINUITY_AUTO_UPDATE=1 可选择在本机没有 worker 运行时于 SessionStart 后台升级,默认关闭。
Gitea 模式先读仓库与全局配置规范:Issue/PR 是共享权威,仓库仅提交声明和规则;本机 State/注册表不成为远端任务账本。~/.continuity 仅在显式选作数据根时生效,并非隐式全局配置文件。
| 数据 | 默认位置/选择方式 | 备份范围 |
|---|---|---|
| 项目 State 与治理模板 | 项目 .continuity/ |
SQLite、checkpoint 引用、模板及产物 |
| 项目注册、卡、消息、规则、worker 记录 | 用户数据根;通常 ~/.local/share/continuity |
整个所选数据根及外部附件 |
| 可恢复工作目录 | 数据根下 work 或持久用户状态目录 | 自定义 CONTINUITY_WORK_ROOT 也要覆盖 |
| 代码索引 | 用户缓存,按仓库隔离 | 可重建,不代替源码备份 |
| 原生账号/会话 | provider 自己的 profile | 不属于 Continuity 的跨机同步范围 |
协作命令可用 --data-root,或统一设 CONTINUITY_DATA_ROOT;先查具体命令 help。不要把任意内存盘当作持久数据根:
continuity storage inspect --path /path/to/persistent/work备份前协调写入者,使用 SQLite 认可的备份方式或一致性停写窗口;不要复制一半正在变化的数据集。export/import/rollback 的 State bundle 不覆盖整套外部协作注册表。
这些设置只作用于当前主机与当前数据根,不跨机器同步,也不证明 provider 账号额度:
# 当前 host 所有已注册项目共享的 operator 声明容量
continuity controller host-capacity --project-id demo \
--owner controller --token "$CONTROLLER_TOKEN" \
--host-client-limit total=8
# 只在同会话 transient retry 耗尽后尝试的已配置 adapter
continuity worker fallback-policy set --project-id demo \
--model primary --candidate secondary
# 可选:worker 对 canonical checkout 的 Git ref 写入防护
continuity collaboration context-set --project-id demo \
--integration-root /workspace/demo --integration-base main \
--worker-write-policy canonical-read-only \
--canonical-repository-root /workspace/demohost capacity 是本地运行门,不是账号总额度。Git wrapper 位于本机持久数据的 worker-git-guard/,只拦截通过 PATH 调用的普通 push/update-ref/receive-pack;不是 mount/namespace 沙箱。需要强隔离时使用独立 OS 用户、只读挂载或虚拟机。完成钩子用 worker completion-hook set --argv-json ... 配置本机 argv,日志与 receipt 写进 job 目录;它不是远程唤醒渠道。
先安装 CLI。添加 marketplace,再选择插件:
codex plugin marketplace add skyhua0224/continuity-plane --ref v0.1.0-alpha.39
codex plugin add continuity-plane@continuity-plane需要检索或完整 State MCP 时,分别选择对应插件。支持 plugin add 的 CLI 可执行:
codex plugin add continuity-plane-search@continuity-plane
codex plugin add continuity-plane-state@continuity-plane没有该子命令的宿主使用插件浏览器选择相同条目;不要为了安装而覆盖配置文件。
宿主也可从 /plugins 选择相同 marketplace。检索插件 continuity-plane-search 可独立启用;continuity-plane-state 才注册完整 State MCP。core 默认只有恢复/hook,不是所有 MCP 功能都自动出现。
只想显式连接协作工具时,通用 stdio server 命令是 continuity-mcp;检索是 continuity-search-mcp。不要再与已提供相同服务的插件重复注册。continuity_plan、continuity_help、continuity_inbox 等元数据操作无需先调用 State resume。
固定在旧 tag 的 marketplace 不会因为普通刷新自动换成新 tag;升级时先核对并按宿主支持的方式选择目标 ref。随后需要宿主刷新/新会话。通过 /hooks 审核当前 hook 定义,并检查:
若重新 add 提示已登记不同来源,先备份本机 Codex 配置,再只重设这一项市场登记,不卸载插件或删除账号资料:
# 仅切换 Continuity 市场的固定版本
codex plugin marketplace remove continuity-plane
codex plugin marketplace add skyhua0224/continuity-plane --ref v0.1.0-alpha.39
codex plugin marketplace upgrade continuity-plane然后重新执行本节中已选用插件的 add 命令,核对真实安装缓存,不能只看 pip 版本:
codex plugin list --marketplace continuity-plane --jsoncontinuity doctor --root . --codex-home /path/to/codex-profile分清配置已安装、宿主已信任、原生事件已观测三个状态。不要通过整体替换 Codex 配置、迁移 auth 文件或更改模型路由来修复插件。
官方参考:Codex 插件与 marketplace。
在你实际运行的 profile 下安装,而不是只装在另一台机器的默认目录:
claude plugin marketplace add skyhua0224/continuity-plane
claude plugin install continuity-plane@continuity-plane --scope user
claude plugin list本地插件使用安装包的 continuity-host-hook,包括 SessionStart、SessionEnd、PreCompact、PostCompact、UserPromptSubmit、PostToolUse、Stop、SubagentStart、SubagentStop。新开会话后核对事件记录。
Claude PostCompact 只验证,SessionStart(compact) 才注入上下文。原生子代理 start/stop 只是观察,不能据此推断测试成功、退出码或完整报告。安装检查通过不代表自然发生的子代理生命周期已经实测。
每个实际使用的 profile 分别安装和更新;路径只作示例,不能把另一个 profile 的凭据、会话或完整配置复制过来:
# 在这个 profile 的所属机器执行;其他 profile 分别重复
CLAUDE_CONFIG_DIR=/path/to/profile-a claude plugin marketplace update continuity-plane
CLAUDE_CONFIG_DIR=/path/to/profile-a claude plugin update continuity-plane@continuity-plane --scope user再用同一 CLAUDE_CONFIG_DIR 调用 claude plugin list,重连/新会话后确认加载。若采用下方 SSH bridge 模式,不要同时启用重复的本地插件 hook:每个 profile 保留自己的 bridge 配置、明确项目映射,分别执行 bridge install。该模式以 hook 的 runtime 路径和新 MCP serverInfo.version 验收,不要求 plugin list 出现重复插件。共享公开程序包不等于共享原生账号或会话状态。
不要同时启用同一套插件 hook 与手写重复 hook。自动 hook 需由宿主实际触发,CLI 可执行不构成采用证据。官方参考:Claude Code plugins。
在状态端安装 CLI,确认已注册项目;在控制端配置现有 SSH alias。先做只读检查:
continuity --remote state-host --remote-root /srv/project --remote-endpoint /opt/continuity/bin/continuity-remote-cli --version
continuity --remote state-host --remote-root /srv/project --remote-endpoint /opt/continuity/bin/continuity-remote-cli collaboration task list --project-id demo --format brief路径与 alias 是占位符。远端数据根属于远端进程环境;不要把 --data-root 当作 SSH URL 或依赖跨机直接读写 SQLite。卡片 worktree、适配器和原生会话必须属于实际执行的主机/profile。
控制端写一个私有 bridge JSON;不把它提交到公共仓库:
{
"host": "state-host",
"remote_endpoint": "/opt/continuity/bin/continuity-remote-receive",
"mcp_endpoints": {
"continuity": "/opt/continuity/bin/continuity-mcp",
"continuity-search": "/opt/continuity/bin/continuity-search-mcp"
},
"forward_checklists": false,
"mappings": [
{"local_root": "/workspace/project", "remote_root": "/srv/project"}
]
}安装时只指定你拥有的目标 profile,使用规范的 remote-hook 入口:
continuity bridge install --profile /path/to/claude-profile --config-file /path/to/bridge.json --executable /opt/continuity/bin/continuity-remote-hook该命令保留原字节备份、只管理指定 bridge 的 hook,重复执行应无变更。检查 8 类 hook 各一份,并验证实际配置的 SSH MCP 握手。切换旧 bridge 配置路径时,通过 supersedes_config_files 明确列出要替换的路径。
bridge 默认可转发有界的当前显式清单指令;上例关闭了这一项。转发内容不是整个历史 transcript。私有凭据、原生 session 库与 transcript 路径不应跨机器搬运。
直接把宿主的 MCP 命令写成 ssh STATEHOST continuity-mcp 时,SSH 一断,宿主就看到工具列表变化或服务掉线;宿主会重建提示缓存,Agent 也常退回 CLI。改为在宿主本机启动代理,由代理保持工具列表稳定:
{
"mcpServers": {
"continuity": {"command":"continuity-mcp","args":["--proxy","ssh://state-host"]},
"continuity-search": {"command":"continuity-search-mcp","args":["--proxy","ssh://state-host"]}
}
}state-host 是 ~/.ssh/config 里的 alias(端口与跳板写在那里)。远端程序不在 PATH 时,用 ssh://state-host/opt/continuity/bin/continuity-mcp;需要给远端进程设环境变量时,路径写成百分号编码的 /env%20CONTINUITY_DATA_ROOT=/srv/data%20/opt/continuity/bin/continuity-mcp,最后一个词必须仍是 continuity-mcp(检索代理为 continuity-search-mcp)。
- 代理首次连上远端时取回
initialize与tools/list,按「主机 + 远端serverInfo.version」缓存到本机数据根的mcp-proxy-cache/,整个会话内逐字节不变;远端暂时不可达时,新会话用磁盘缓存启动。 tools/call经ssh -T(BatchMode、ServerAliveInterval=15、ServerAliveCountMax=3、ControlMaster)转发。连接断开后代理立即重连,失败则按 0.5 秒起翻倍、上限 10 秒退避,期间宿主的请求最多等待 30 秒;超时返回transport_unavailable(调用未发出,可稍后重试)。- 调用进行中连接断开:只读工具(
readOnlyHint)或参数带operation_id的调用会重试一次;其他调用返回failed_gate: "transport_interrupted",说明它可能已执行,并指明用哪个只读工具核对,不会盲目重发。 - 重连后远端版本不同:本会话继续使用缓存列表,只向 stderr 写一次警告;重启宿主会话才采用新列表。
代理只转发到 Continuity 自己的 MCP 入口,不提供任意远端命令;状态仍只在远端,本机不读写远端 SQLite。
MCP 可以通过 SSH 在状态端启动 continuity-search-mcp,此时 root 是远端仓库。Alpha29 引入并由 Alpha35 保留本机 search MCP 的显式 bridge_config,或启动环境 CONTINUITY_BRIDGE_CONFIG=/path/to/bridge.json:仅把精确匹配的 local_root 映射到 remote_root,经 continuity-remote-cli 执行检索。配置可选 remote_cli_endpoint、lookup_timeout_seconds 和所属机器的 remote_data_root。未匹配、多重匹配或传输失败时明确报错,不回退本机;远端模式拒绝本机 cache_path/data_root。没有任意远端文件/进程管理接口。此路由有合成协议测试,尚未作为 Alpha35 在真实双机环境重新实测。
MCP 使用稳定执行者身份:在 server 环境设置 CONTINUITY_ASSIGNEE=worker-a,或每次 continuity_plan 传同一 executor_id。task add/update/claim 和 todo activate 自动沿用它;其他执行者的冲突仍被拒绝。session_id 只用于恢复,不再改写卡片 assignee。这是协作身份声明,不是原生账号认证;不要把所有 worker 配成同一身份。
主控设置 CONTINUITY_ROLE=controller 后,未显式传 executor_id/assignee 的 task update 只更新元数据,不把卡片改派给主控;显式 executor_id 仍执行归属检查。这个路由约定不增加外部操作权限。
| 表现 | 先检查 |
|---|---|
| CLI 新、MCP 旧/工具缺失 | 新建 MCP 连接,核对 serverInfo.version 与实际工具表,不重建项目 State |
| 主机 kill/重启后 MCP 不在 | MCP 由宿主管理且不跨重启存活;新开宿主 MCP,或在重连前走 CLI/显式 SSH remote。用 collaboration doctor 查看生命周期提示 |
| 压缩后没接续 | 当前机器、实际 profile、hook 信任、PreCompact/恢复成对记录;不能只查包版本 |
| 消息或结束事件没看到 | 收件人、task id、游标分页、wait 超时;不要跳到 high-water 跳过未交付页 |
| worker 结束但监控没醒 | 用 worker events --since-cursor … --follow 从原 cursor 续读;checkpoint 与 hook 都不替代持续事件流 |
| job.json 没有 status/exit_code | Alpha35 起新 job 会同步终态;旧 job 只用 result.json 对账,不补造缺失事实 |
| 规则正文缺失 | 用 rules export;长文检查附件 hash,不接受静默截断 |
| 更换 MCP 连接后自己的卡被拒 | 核对 CONTINUITY_ASSIGNEE/executor_id 与原 assignee 是否一致;不自动把旧连接身份转换为新身份 |
| worker 提前改卡后报告未挂卡 | Alpha29 起已修;核对是否是旧运行、旧 MCP、过期 attempt 或换过执行者,已有历史文件仍可显式挂载 |
| dispatch/resume 持续高 CPU | Alpha35 起先核对当前 execution bindings;无运行 attempt 不重放历史。再查 dispatch-safety-index.json 与 change log 尾部偏移;不要删除 change log |
| host 容量显示 paused/expired 混乱 | Alpha35 的 show 会现算 expired,派发在 reset 后不再被旧记录挡住;clear 可只给 model 并按 --all-matching 处理多个 provider 记录 |
| worker 误 push 到 canonical 仓库 | 先核对是否真的启用 canonical-read-only 与 root;绝对 git 路径或其他程序可绕过 wrapper,改用 OS 隔离而不是声称已有沙箱 |
| HTTP 403/Cloudflare 被标成 policy-review | 先核对原始 output_tail;若没有明确模型安全标记,resume 会按 HTTP/鉴权证据重分类。仍无法自动判断时,复核精确 job 后使用 worker clear-policy-review --reason … |
| hook 故障影响体验 | 临时 CONTINUITY_DISABLED=1,保留日志与原配置;不要删除账号数据 |
升级前保存软件版本、配置备份、注册表与自定义产物位置。回滚软件后恢复对应 hook/MCP 入口并重连。启用 guarded ledger v4 的项目不能指望旧 dispatcher 继续读取;保留升级前备份,先协调参与者,不擅自把新 schema 改回旧值。主机重启后的遗留 reservation 用 controller reservations --state stale 查看,并在持有租约时执行 controller reconcile-host --apply --reason …。
卸载插件或 CLI 不会自动清空项目记录。不要使用递归删除命令清理整个用户数据根或 provider profile。