Install
openclaw skills install cross-terminal-syncWorkBuddy 跨终端(Mac/Windows)无缝切换方案。双层架构:MCP API 直连 OneDrive 云端(优先跨终端搜索)+ 文件同步(日常主力)。支持跨终端任务搜索与接力执行。触发场景:用户提到"跨终端"、"另一台电脑"、"Windows 上做的任务在这台继续"、"同步 Skill/项目/配置"等。
openclaw skills install cross-terminal-sync两层架构:MCP API 直连云端(快速搜索) + OneDrive 文件同步(日常主力)。 优先级:日常干活走文件同步(零延迟),紧急跨终端搜索走 MCP API(毫秒级),两种方式互补。
Microsoft Graph API (云端)
↑ 直连
┌─────────┴─────────┐
│ MCP Server │ ← 快路径(跨终端紧急搜索)
│ (onedrive-mcp) │
└───────────────────┘
↑
┌─────────┴─────────┐
│ WorkBuddy │
└─────────┬─────────┘
│ 读写(符号链接)
┌───────────────┴───────────────┐
│ OneDrive 本地文件夹 │ ← 主路径(日常干活)
│ OneDrive 本地同步文件夹 (平台相关) │
└───────────────┬───────────────┘
│ OneDrive 客户端自动同步
Microsoft 云端存储
为什么双层?
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/确认真实路径。
MCP API 直连 OneDrive 云端,不需要管理员权限。
MrFixit96/onedrive-mcp-server 是纯用户态 Python 应用:
公司电脑无管理员权限也可以装。
# 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 认证
# 1. 安装(不需要管理员权限)
pip install git+https://github.com/MrFixit96/onedrive-mcp-server.git
# 2. 启动
onedrive-mcp --http
# 同样零配置,WorkBuddy 自动处理认证
| 工具 | 功能 |
|---|---|
list_files | 列出 OneDrive 任意路径的文件 |
search_files | 跨文件名和内容全文搜索 |
get_file_metadata | 获取文件大小、类型、修改时间 |
download_file | 下载文件(带路径安全保护) |
upload_file | 上传文件(>4MB 支持断点续传) |
create_sharing_link | 生成分享链接 |
日常干活 → 走文件同步(符号链接 → OneDrive 本地文件夹)
跨终端紧急查找 → 走 MCP API(直连云端,不等同步)
OneDrive 客户端挂了 → MCP API 兜底
在 Windows WorkBuddy 中加载此 Skill 后,先说"初始化跨终端同步",然后按以下步骤执行:
# 查找 OneDrive 路径
$env:OneDriveCommercial
# 或
$env:OneDrive
# 常见路径:C:\Users\<用户名>\OneDrive - ZURU INC\
检查 OneDrive根目录\WorkBuddySync\ 是否已存在:
$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"
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 同步:
~/.workbuddy/scripts/sync-onedrive.ps1(按最后修改时间双向同步 5 个核心文件到 windows/ 目录)此方案同步有延迟(最长 1 小时),但对 95% 的使用场景足够。
Get-Item "$env:USERPROFILE\.workbuddy\skills" | Select-Object LinkType, Target
Get-Item "$env:USERPROFILE\.workbuddy\MEMORY.md" | Select-Object LinkType, Target
在读取 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
}
用户说: "调用之前在 Windows 做的【多Agent生成视频工作流】的成果"
┌─────────────────┐
│ Step 0: 本地搜索 │ ← 先搜本机(最快)
│ ~/.workbuddy/ │
└────────┬────────┘
│ 未找到
┌────────▼─────────┐
│ Step 1: MCP API │ ← 直连云端搜另一终端(毫秒级)
│ 如果 MCP 已安装 │
└────────┬────────┘
│ 未找到或 MCP 未装
┌────────▼─────────┐
│ Step 2: 文件同步 │ ← 等 OneDrive 同步后搜(兜底)
│ 搜另一终端目录 │
└────────┬────────┘
│ 都未找到
┌────────▼─────────┐
│ Step 3: 新任务 │ ← 从头开始
└──────────────────┘
| 步骤 | 方式 | 速度 | 适用场景 |
|---|---|---|---|
| Step 0 | 搜索本机 ~/.workbuddy/ + workspace diary | 即时 | 日常主力路径 |
| Step 1 | MCP API search_files 直连云端 | 毫秒级 | 紧急跨终端查找、OneDrive 客户端挂了 |
| Step 2 | 等 OneDrive 同步后搜另一终端目录 | 秒~十秒 | MCP 未安装时的回退 |
| Step 3 | 报告"都未找到",询问是否开始新任务 | — | 全新任务 |
# 伪代码:WB 通过 MCP 搜索另一终端
# MCP Server 提供的 search_files 工具直接搜 OneDrive 云端
# 假设当前在 Mac,搜索 Windows 终端做过的工作:
mcp_search(
path="/WorkBuddySync/windows", # 另一终端的目录
query="多Agent 视频 工作流" # 用户描述的关键词
)
# 返回云端文件列表,下载需要的文件到本地
优势:不依赖 OneDrive 客户端是否在运行、是否同步完成。直接问云端。
当 MCP 未安装或不可用时,走传统文件同步路径:
从用户输入中提取搜索关键词:
# 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
检查两台终端的同步健康状态:
检查项:
├── 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"
由于用户交替使用两台终端,通常不会同时操作。但需要防护:
.lock_<hostname> 文件,写完后删除| 终端 | 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 定时同步)兜底 |
用户: "初始化跨终端同步"
WB: 执行功能 1 → 创建目录 → 建立符号链接 → 验证
用户: "调用之前在 Mac 做的 Seedance 视频成果"
WB: Step1 本地搜 → 未找到
Step2 OneDrive 搜 mac/projects → 找到 → 加载 → 继续执行
用户: "检查下两台终端的同步状态"
WB: 执行功能 4 → 输出状态报告
在 Windows 上完成项目 X 后:
WB 写入 memory 到 windows/MEMORY.md
下次在 Mac 执行类似任务时,可搜索 windows/ 目录找历史上下文
mklink /J(目录联接),都不需要管理员权限Files.ReadWrite + User.Read,不访问邮件/日历/联系人~/Library/CloudStorage/OneDrive-XXX/,务必先确认真实路径再建符号链接