Skill: zenyang-x/cross-terminal-sync (version 2.2.0)

--- name: cross-terminal-sync description: WorkBuddy 跨终端（Mac/Windows）无缝切换方案。双层架构：MCP API 直连 OneDrive 云端（优先跨终端搜索）+ 文件同步（日常主力）。支持跨终端任务搜索与接力执行。触发场景：用户提到"跨终端"、"另一台电脑"、"Windows 上做的任务在这台继续"、"同步 Skill/项目/配置"等。 visibility: public version: 2.2.0 agent_created: true --- # 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 安装 ```bash # 1. 安装 pip install git+https://github.com/MrFixit96/onedrive-mcp-server.git # 2. 配置 WorkBuddy MCP（添加到 ~/.workbuddy/mcp.json） # HTTP 模式最省事，不需要 Azure 应用注册 ``` `~/.workbuddy/mcp.json` 添加： ```json { "mcpServers": { "onedrive": { "type": "http", "url": "http://localhost:3001/mcp" } } } ``` 启动 MCP Server： ```bash # HTTP 模式（推荐，零配置 SSO） onedrive-mcp --http # 默认端口 3001，WorkBuddy 自动处理 OAuth 认证 ``` ### Windows 安装 ```powershell # 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 路径 ```powershell # 查找 OneDrive 路径 $env:OneDriveCommercial # 或 $env:OneDrive # 常见路径：C:\Users\<用户名>\OneDrive - ZURU INC\ ``` ### Step 2: 检查目录结构是否已存在 检查 `OneDrive根目录\WorkBuddySync\` 是否已存在： - 如果已存在（Mac 端已创建），跳过创建，直接进入 Step 4 - 如果不存在，执行 Step 3 ### Step 3: 创建目录结构 ```powershell $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)** 目录联接不需要管理员权限，效果和符号链接一样： ```cmd 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: 验证 ```powershell Get-Item "$env:USERPROFILE\.workbuddy\skills" | Select-Object LinkType, Target Get-Item "$env:USERPROFILE\.workbuddy\MEMORY.md" | Select-Object LinkType, Target ``` --- ## 功能 2：自动等待 OneDrive 同步 在读取 OneDrive 文件前，确保文件已同步到最新。使用信号文件机制： ### 方法：写入信号文件 + 轮询等待 ```bash # === 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 ``` ```powershell # === 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 1 | MCP API `search_files` 直连云端 | 毫秒级 | 紧急跨终端查找、OneDrive 客户端挂了 | | Step 2 | 等 OneDrive 同步后搜另一终端目录 | 秒~十秒 | MCP 未安装时的回退 | | Step 3 | 报告"都未找到"，询问是否开始新任务 | — | 全新任务 | ### Step 1 实现：MCP API 搜索（推荐） ```python # 伪代码：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、日记、配置 ### 实现参考 ```bash # 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）是否各终端独立？ ├── 符号链接是否完好（未断链）？ └── 最近一次同步时间？ ``` ### 执行命令 ```bash # 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" ``` ```powershell # 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/ 目录


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal:  | SkillSpector: clean (LOW)