Cross Terminal Sync

MCP Tools

WorkBuddy 跨终端(Mac/Windows)无缝切换方案。双层架构:MCP API 直连 OneDrive 云端(优先跨终端搜索)+ 文件同步(日常主力)。支持跨终端任务搜索与接力执行。触发场景:用户提到"跨终端"、"另一台电脑"、"Windows 上做的任务在这台继续"、"同步 Skill/项目/配置"等。

Install

openclaw skills install cross-terminal-sync

Cross-Terminal Sync v2 — 双层跨终端方案

两层架构:MCP API 直连云端(快速搜索) + OneDrive 文件同步(日常主力)。 优先级:日常干活走文件同步(零延迟),紧急跨终端搜索走 MCP API(毫秒级),两种方式互补。

架构总览

                        Microsoft Graph API (云端)
                              ↑ 直连
                    ┌─────────┴─────────┐
                    │  MCP Server       │  ← 快路径(跨终端紧急搜索)
                    │  (onedrive-mcp)   │
                    └───────────────────┘
                              ↑
                    ┌─────────┴─────────┐
                    │     WorkBuddy     │
                    └─────────┬─────────┘
                              │ 读写(符号链接)
              ┌───────────────┴───────────────┐
              │     OneDrive 本地文件夹        │  ← 主路径(日常干活)
              │ OneDrive 本地同步文件夹 (平台相关) │
              └───────────────┬───────────────┘
                              │ OneDrive 客户端自动同步
                        Microsoft 云端存储

为什么双层?

  • 日常干活:文件同步就够了,你一般在一台机器上连续工作,不会突然切换
  • 偶尔需要查另一台的成果:MCP API 直接翻云端,不等 OneDrive 客户端同步
  • MCP 不需要管理员权限(纯用户态 Python 应用),公司电脑也能装

目录结构

OneDrive路径/WorkBuddySync/
├── mac/                    # Mac 终端数据(独立管理)
│   ├── IDENTITY.md         # Agent 身份(Mac 版)
│   ├── MEMORY.md           # 跨项目长期记忆(Mac 版)
│   ├── SOUL.md             # Agent 人格(Mac 版)
│   ├── USER.md             # 用户档案(Mac 版)
│   ├── skills/             # Mac 安装的 Skill
│   ├── projects/           # Mac 项目文件
│   └── workbuddy.db        # Mac 自动化任务配置
├── windows/                # Windows 终端数据(独立管理)
│   ├── IDENTITY.md         # Agent 身份(Windows 版)
│   ├── MEMORY.md           # 跨项目长期记忆(Windows 版)
│   ├── SOUL.md             # Agent 人格(Windows 版)
│   ├── USER.md             # 用户档案(Windows 版)
│   ├── skills/             # Windows 安装的 Skill
│   ├── projects/           # Windows 项目文件
│   └── workbuddy.db        # Windows 自动化任务配置
└── README.md               # 结构说明

> **注意**:Mac 和 Windows 的身份文件各自独立,不复用 shared/ 目录,
> 因为两台终端的 Agent 身份和工作偏好可能不同。

符号链接关系(以 Mac 为例):

~/.workbuddy/skills    → OneDrive路径/WorkBuddySync/mac/skills
~/.workbuddy/projects  → OneDrive路径/WorkBuddySync/mac/projects
~/.workbuddy/MEMORY.md → OneDrive路径/WorkBuddySync/mac/MEMORY.md
~/.workbuddy/IDENTITY.md → OneDrive路径/WorkBuddySync/mac/IDENTITY.md
~/.workbuddy/USER.md   → OneDrive路径/WorkBuddySync/mac/USER.md
~/.workbuddy/SOUL.md   → OneDrive路径/WorkBuddySync/mac/SOUL.md
~/.workbuddy/workbuddy.db → OneDrive路径/WorkBuddySync/mac/workbuddy.db

Mac OneDrive 路径注意:macOS 上 OneDrive 实际同步目录可能是 ~/Library/CloudStorage/OneDrive-ZURUINC/ 而非 ~/OneDrive - ZURU INC/。 务必先用 ls ~/OneDrive*ls ~/Library/CloudStorage/ 确认真实路径。


功能 0:安装 MCP Server(快速搜索通道,推荐)

MCP API 直连 OneDrive 云端,不需要管理员权限

为什么不需要管理员权限?

MrFixit96/onedrive-mcp-server 是纯用户态 Python 应用:

  • ❌ 不需要管理员权限
  • ❌ 不注册系统服务
  • ❌ 不修改注册表
  • ❌ 不安装证书
  • ✅ 作为普通进程运行,绑定高端口 (>1024)
  • ✅ 使用用户自己的 OS 密钥环存储凭据(不碰系统级安全策略)

公司电脑无管理员权限也可以装。

Mac 安装

# 1. 安装
pip install git+https://github.com/MrFixit96/onedrive-mcp-server.git

# 2. 配置 WorkBuddy MCP(添加到 ~/.workbuddy/mcp.json)
# HTTP 模式最省事,不需要 Azure 应用注册

~/.workbuddy/mcp.json 添加:

{
  "mcpServers": {
    "onedrive": {
      "type": "http",
      "url": "http://localhost:3001/mcp"
    }
  }
}

启动 MCP Server:

# HTTP 模式(推荐,零配置 SSO)
onedrive-mcp --http
# 默认端口 3001,WorkBuddy 自动处理 OAuth 认证

Windows 安装

# 1. 安装(不需要管理员权限)
pip install git+https://github.com/MrFixit96/onedrive-mcp-server.git

# 2. 启动
onedrive-mcp --http
# 同样零配置,WorkBuddy 自动处理认证

MCP 提供的 6 个工具

工具功能
list_files列出 OneDrive 任意路径的文件
search_files跨文件名和内容全文搜索
get_file_metadata获取文件大小、类型、修改时间
download_file下载文件(带路径安全保护)
upload_file上传文件(>4MB 支持断点续传)
create_sharing_link生成分享链接

什么时候用 MCP?

日常干活 → 走文件同步(符号链接 → OneDrive 本地文件夹)
跨终端紧急查找 → 走 MCP API(直连云端,不等同步)
OneDrive 客户端挂了 → MCP API 兜底

功能 1:初始化文件同步(首次执行)

在 Windows WorkBuddy 中加载此 Skill 后,先说"初始化跨终端同步",然后按以下步骤执行:

Step 1: 找到 OneDrive 路径

# 查找 OneDrive 路径
$env:OneDriveCommercial
# 或
$env:OneDrive
# 常见路径:C:\Users\<用户名>\OneDrive - ZURU INC\

Step 2: 检查目录结构是否已存在

检查 OneDrive根目录\WorkBuddySync\ 是否已存在:

  • 如果已存在(Mac 端已创建),跳过创建,直接进入 Step 4
  • 如果不存在,执行 Step 3

Step 3: 创建目录结构

$ONEDRIVE = "C:\Users\<你的用户名>\OneDrive - ZURU INC"  # 替换为实际路径
New-Item -ItemType Directory -Force -Path "$ONEDRIVE\WorkBuddySync\mac\skills"
New-Item -ItemType Directory -Force -Path "$ONEDRIVE\WorkBuddySync\mac\projects"
New-Item -ItemType Directory -Force -Path "$ONEDRIVE\WorkBuddySync\windows\skills"
New-Item -ItemType Directory -Force -Path "$ONEDRIVE\WorkBuddySync\windows\projects"

Step 4: 建立符号链接

Windows 创建符号链接的两种方式(都不需要真正的管理员权限):

方式 A(推荐):开启开发者模式

设置 → 更新和安全 → 开发者选项 → 开启"开发人员模式"
开启后 mklink 无需管理员权限

方式 B:使用目录联接 (Junction) 目录联接不需要管理员权限,效果和符号链接一样:

REM 先备份原目录
ren %USERPROFILE%\.workbuddy\skills skills.bak
ren %USERPROFILE%\.workbuddy\projects projects.bak

REM 创建目录联接(不需要管理员!)
mklink /J %USERPROFILE%\.workbuddy\skills "%ONEDRIVE%\WorkBuddySync\windows\skills"
mklink /J %USERPROFILE%\.workbuddy\projects "%ONEDRIVE%\WorkBuddySync\windows\projects"

REM 文件符号链接(身份文件放在 windows/ 下,各自独立管理)
ren %USERPROFILE%\.workbuddy\MEMORY.md MEMORY.md.bak
mklink %USERPROFILE%\.workbuddy\MEMORY.md "%ONEDRIVE%\WorkBuddySync\windows\MEMORY.md"
ren %USERPROFILE%\.workbuddy\IDENTITY.md IDENTITY.md.bak
mklink %USERPROFILE%\.workbuddy\IDENTITY.md "%ONEDRIVE%\WorkBuddySync\windows\IDENTITY.md"
ren %USERPROFILE%\.workbuddy\USER.md USER.md.bak
mklink %USERPROFILE%\.workbuddy\USER.md "%ONEDRIVE%\WorkBuddySync\windows\USER.md"
ren %USERPROFILE%\.workbuddy\SOUL.md SOUL.md.bak
mklink %USERPROFILE%\.workbuddy\SOUL.md "%ONEDRIVE%\WorkBuddySync\windows\SOUL.md"
ren %USERPROFILE%\.workbuddy\workbuddy.db workbuddy.db.bak
mklink %USERPROFILE%\.workbuddy\workbuddy.db "%ONEDRIVE%\WorkBuddySync\windows\workbuddy.db"

注意mklink /J(目录联接)不需要管理员权限。mklink(文件符号链接)在开启开发者模式后也不需要。

Windows 方式 C:安全软件拦截时的 robocopy 备选

如果公司安全软件阻止了所有文件符号链接(即使开发者模式已开启),使用定时 robocopy 同步:

  1. 创建同步脚本 ~/.workbuddy/scripts/sync-onedrive.ps1(按最后修改时间双向同步 5 个核心文件到 windows/ 目录)
  2. 创建 WorkBuddy 自动化,每小时执行一次该脚本
  3. 目录联接(skills/、projects/)不受影响,继续使用方式 B

此方案同步有延迟(最长 1 小时),但对 95% 的使用场景足够。

Step 5: 验证

Get-Item "$env:USERPROFILE\.workbuddy\skills" | Select-Object LinkType, Target
Get-Item "$env:USERPROFILE\.workbuddy\MEMORY.md" | Select-Object LinkType, Target

功能 2:自动等待 OneDrive 同步

在读取 OneDrive 文件前,确保文件已同步到最新。使用信号文件机制:

方法:写入信号文件 + 轮询等待

# === Mac(注意:确认正确 OneDrive 路径)===
# 先检测 OneDrive 实际路径
ONEDRIVE=$(ls -d ~/Library/CloudStorage/OneDrive-* 2>/dev/null || ls -d ~/OneDrive* 2>/dev/null | head -1)
SIGNAL_FILE="$ONEDRIVE/WorkBuddySync/.sync_signal_$(hostname -s)"

# 1. 写入信号文件
echo "$(date +%s)" > "$SIGNAL_FILE"

# 2. 等待 OneDrive 上传(最多等 30 秒)
for i in $(seq 1 30); do
  # 检查文件修改时间是否被同步回(说明云端已确认)
  if [ -f "$SIGNAL_FILE" ]; then
    MOD_TIME=$(stat -f %m "$SIGNAL_FILE" 2>/dev/null)
    if [ "$MOD_TIME" -gt "$(date -v-5S +%s)" ]; then
      echo "OneDrive sync OK"
      break
    fi
  fi
  sleep 1
done
# === Windows ===
$ONEDRIVE = "$env:USERPROFILE\OneDrive - ZURU INC\WorkBuddySync"
$SIGNAL_FILE = "$ONEDRIVE\.sync_signal_$env:COMPUTERNAME"

# 1. 写入信号文件
Get-Date -UFormat %s | Out-File -FilePath $SIGNAL_FILE

# 2. 等待同步(最多 30 秒)
for ($i=0; $i -lt 30; $i++) {
  if (Test-Path $SIGNAL_FILE) {
    $lastWrite = (Get-Item $SIGNAL_FILE).LastWriteTime
    if ($lastWrite -gt (Get-Date).AddSeconds(-5)) {
      Write-Host "OneDrive sync OK"
      break
    }
  }
  Start-Sleep -Seconds 1
}

关键原则

  • 在任何跨终端文件读取之前,先执行此同步等待
  • 超时 30 秒后仍继续执行,但提示用户"OneDrive 同步可能未完成"
  • 如果 OneDrive 客户端未运行,警告用户

功能 3:跨终端任务搜索与接力执行(双层搜索)

搜索优先级(核心逻辑)

用户说: "调用之前在 Windows 做的【多Agent生成视频工作流】的成果"

                    ┌─────────────────┐
                    │  Step 0: 本地搜索 │  ← 先搜本机(最快)
                    │  ~/.workbuddy/   │
                    └────────┬────────┘
                             │ 未找到
                    ┌────────▼─────────┐
                    │ Step 1: MCP API  │  ← 直连云端搜另一终端(毫秒级)
                    │ 如果 MCP 已安装  │
                    └────────┬────────┘
                             │ 未找到或 MCP 未装
                    ┌────────▼─────────┐
                    │ Step 2: 文件同步  │  ← 等 OneDrive 同步后搜(兜底)
                    │ 搜另一终端目录    │
                    └────────┬────────┘
                             │ 都未找到
                    ┌────────▼─────────┐
                    │ Step 3: 新任务    │  ← 从头开始
                    └──────────────────┘

详细逻辑

步骤方式速度适用场景
Step 0搜索本机 ~/.workbuddy/ + workspace diary即时日常主力路径
Step 1MCP API search_files 直连云端毫秒级紧急跨终端查找、OneDrive 客户端挂了
Step 2等 OneDrive 同步后搜另一终端目录秒~十秒MCP 未安装时的回退
Step 3报告"都未找到",询问是否开始新任务全新任务

Step 1 实现:MCP API 搜索(推荐)

# 伪代码:WB 通过 MCP 搜索另一终端
# MCP Server 提供的 search_files 工具直接搜 OneDrive 云端

# 假设当前在 Mac,搜索 Windows 终端做过的工作:
mcp_search(
    path="/WorkBuddySync/windows",  # 另一终端的目录
    query="多Agent 视频 工作流"       # 用户描述的关键词
)
# 返回云端文件列表,下载需要的文件到本地

优势:不依赖 OneDrive 客户端是否在运行、是否同步完成。直接问云端。

Step 2 回退:文件同步搜索

当 MCP 未安装或不可用时,走传统文件同步路径:

  • 先执行功能 2(同步等待)
  • 再搜索 OneDrive 本地目录中另一终端的文件

搜索关键词提取

从用户输入中提取搜索关键词:

  • 项目名:助农精选联盟、中登日记、1688、NeverLand、EntroCamp、虾评
  • 动作词:视频、拆书、多Agent、工作流、Pipeline、自动化
  • 文件类型:Skill、Project、日记、配置

实现参考

# Mac 端:MCP API 搜索(优先)
# 通过 MCP onedrive search_files 工具直连云端

# 回退:文件系统搜索另一终端
OTHER_TERM="windows"  # 或 "mac"
ONEDRIVE=$(ls -d ~/Library/CloudStorage/OneDrive-* 2>/dev/null || ls -d ~/OneDrive* 2>/dev/null | head -1)
grep -rl "$KEYWORD" "$ONEDRIVE/WorkBuddySync/$OTHER_TERM/" 2>/dev/null

功能 4:同步状态检查(补充功能)

检查两台终端的同步健康状态:

检查项:
├── OneDrive 客户端是否运行?
├── WorkBuddySync 目录是否存在?
├── mac/ 和 windows/ 目录内容是否最新?
├── 身份文件(IDENTITY/MEMORY/SOUL/USER)是否各终端独立?
├── 符号链接是否完好(未断链)?
└── 最近一次同步时间?

执行命令

# Mac(自动检测 OneDrive 路径)
ONEDRIVE=$(ls -d ~/Library/CloudStorage/OneDrive-* 2>/dev/null || ls -d ~/OneDrive* 2>/dev/null | head -1)
echo "=== OneDrive 状态 ===" && pgrep -l "OneDrive" && echo "=== 同步目录 ===" && ls -la "$ONEDRIVE/WorkBuddySync/" && echo "=== 符号链接 ===" && ls -la ~/.workbuddy/ | grep "^l"
# Windows
Write-Host "=== OneDrive 状态 ==="; Get-Process "OneDrive" -ErrorAction SilentlyContinue
Write-Host "=== 同步目录 ==="; Get-ChildItem "$env:USERPROFILE\OneDrive - ZURU INC\WorkBuddySync\"
Write-Host "=== 符号链接 ==="; cmd /c "dir /AL $env:USERPROFILE\.workbuddy"

功能 5:冲突预防(补充功能)

由于用户交替使用两台终端,通常不会同时操作。但需要防护:

  1. 写入前检查:在修改身份文件前,检查另一终端的信号文件时间戳
  2. 锁定机制:写入 mac/ 或 windows/ 目录前,在对应目录创建 .lock_<hostname> 文件,写完后删除
  3. 差异报告:如果检测到 mac/skills/ 和 windows/skills/ 有同名 Skill 但内容不同,报告差异让用户决定以哪个为准

当前已知的终端信息

终端OneDrive 典型路径角色Agent 名
Mac~/Library/CloudStorage/OneDrive-ZURUINC/~/OneDrive - ZURU INC/私人相关内容翻身
Windows%USERPROFILE%\OneDrive - ZURU INC\工作相关内容咸鱼

Mac 路径确认方法ls ~/Library/CloudStorage/ 找到真实 OneDrive 目录名, 优先使用 CloudStorage 下的路径(这是 macOS File Provider 的实际同步目录)。


补充考虑的场景

场景处理方式
某台终端 Skill 更新了OneDrive 自动同步 + MCP API 可快速拉取最新版本
设备离线时做了任务联网后 OneDrive 自动上传,MCP API 可主动拉取(不等客户端同步)
mac/MEMORY.md 和 windows/MEMORY.md 冲突各自独立维护,互不影响
mac/ 和 windows/ 有同名项目功能 5 差异报告,用户选择合并或保留
Windows 无管理员权限开启开发者模式或使用 mklink /J(目录联接,不需要管理员)
OneDrive 空间不足检查可用空间,建议排除 binaries/ 大文件
想新增第三台设备(如 Linux)在 WorkBuddySync/ 下新增 linux/ 目录 + MCP 照样用
公司防火墙拦截某些端口MCP 走 HTTPS (443),与浏览器相同,不会被拦截
MCP Server 进程挂了自动回退到文件同步路径,不影响干活
OneDrive 客户端未启动MCP API 不受影响,文件同步不可用但有 MCP 兜底
Mac OneDrive 路径不对(符号链接指向错误位置)ls ~/Library/CloudStorage/ 找出真实路径后重建符号链接
公司安全软件拦截文件符号链接使用方式 C(robocopy 定时同步)兜底

使用示例

示例 1:Windows 上初始化

用户: "初始化跨终端同步"
WB: 执行功能 1 → 创建目录 → 建立符号链接 → 验证

示例 2:调用另一终端成果

用户: "调用之前在 Mac 做的 Seedance 视频成果"
WB: Step1 本地搜 → 未找到
     Step2 OneDrive 搜 mac/projects → 找到 → 加载 → 继续执行

示例 3:检查同步状态

用户: "检查下两台终端的同步状态"
WB: 执行功能 4 → 输出状态报告

示例 4:跨终端执行后的记忆写入

在 Windows 上完成项目 X 后:
WB 写入 memory 到 windows/MEMORY.md
下次在 Mac 执行类似任务时,可搜索 windows/ 目录找历史上下文

注意事项

  1. mcp.json 不参与同步:路径因终端而异,各自维护
  2. binaries/ 不参与同步:Node/Python 运行时平台绑定
  3. workspace memory 日记不同步:workspace 级别的日记仅在当前 workspace 有效
  4. Windows 符号链接:开启开发者模式或使用 mklink /J(目录联接),都不需要管理员权限
  5. MCP Server 是可选加速包:没有也不影响使用,文件同步照样工作;装了能在跨终端搜索时更快
  6. OneDrive 免费空间 5GB:WorkBuddy 核心文件(不含 binaries)通常 < 100MB,足够
  7. 认证安全:MCP Server 使用 OS 密钥环存储凭据,OAuth 范围仅 Files.ReadWrite + User.Read,不访问邮件/日历/联系人
  8. Mac OneDrive 路径:macOS 上 OneDrive File Provider 的实际同步路径可能是 ~/Library/CloudStorage/OneDrive-XXX/,务必先确认真实路径再建符号链接
  9. 身份文件独立:mac/ 和 windows/ 各有自己的 IDENTITY.md/MEMORY.md/SOUL.md/USER.md,不复用 shared/ 目录