以下是基于你的 **Windows (主力开发) + macOS (Agent 执行中枢)** 架构的完整 Mutagen 双端配置方案。 *** ## 整体架构说明 核心思路是:macOS 作为永不停机的 Agent 执行节点,Windows 上的 IDEA/Antigravity 负责人工编辑,Mutagen 在两端之间保持代码实时双向同步。 `.git` 目录仅保留在 macOS 侧(Agent 提交端),Windows 侧只同步 working tree。 ``` Windows (IDEA/Antigravity 编辑) ↕ Mutagen SSH 双向同步 (two-way-resolved) macOS (Codex / ClaudeCode Agent 执行中枢,永不停机) ``` *** ## 安装 Mutagen **macOS 端:** ```bash brew install mutagen-io/mutagen/mutagen # 注册为登录项,实现永不停机自启 mutagen daemon register mutagen daemon start ``` **Windows 端(PowerShell,推荐 Scoop):** ```powershell scoop bucket add mutagen https://github.com/mutagen-io/mutagen-scoop scoop install mutagen # 注册为 Windows 登录自启动 mutagen daemon register mutagen daemon start ``` Mutagen daemon 支持通过 `mutagen daemon register` 命令在 macOS(launchd)和 Windows(登录启动项)上注册系统级自动启动 ,无需手动编写 plist 或注册表。 [mutagen](https://mutagen.io/documentation/introduction/daemon/) *** ## SSH 互信配置 Mutagen 通过 SSH 建立连接,Windows 侧作为发起端(client),macOS 侧作为服务端。 **macOS 端开启 SSH:** ```bash # 系统偏好设置 → 共享 → 远程登录 开启 # 或命令行 sudo systemsetup -setremotelogin on # 确认监听 sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist ``` **Windows 端配置 SSH 密钥免密登录:** ```powershell # 生成密钥(若已有可跳过) ssh-keygen -t ed25519 -C "mutagen-win-to-mac" # 将公钥追加到 macOS 的 authorized_keys # 在 Windows PowerShell 中: type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh robert@ "cat >> ~/.ssh/authorized_keys" ``` 验证免密连通性: ```powershell ssh robert@ "echo ok" ``` *** ## 全局配置文件(两端均建议配置) 在 **macOS** 和 **Windows** 的 `~/.mutagen.yml`(Windows 为 `%USERPROFILE%\.mutagen.yml`)中写入: ```yaml sync: defaults: mode: two-way-resolved maxEntryCount: 1000000 scanMode: accelerated watch: mode: portable # ✅ 正确:嵌套在 watch 下 ignore: vcs: true paths: - ".idea/**" - "*.class" - "*.pyc" - "__pycache__/**" - "node_modules/**" - ".venv/**" - "venv/**" - "dist/**" - "build/**" - "*.log" - ".DS_Store" - "Thumbs.db" symlink: mode: portable permissions: defaultFileMode: 0644 defaultDirectoryMode: 0755 ``` `two-way-resolved` 模式在冲突时以修改时间较新的一方为准,适合人工编辑(Windows)与 Agent 自动生成(macOS)并行的场景 。`--ignore-vcs` 保证 `.git` 目录只留在 macOS Agent 端,Windows 只是纯 working tree 。 [github](https://github.com/mutagen-io/mutagen/issues/235) *** ## 创建同步会话 在 **Windows PowerShell** 中执行(由 Windows 侧发起 Session): ```powershell # 主项目同步 mutagen sync create ` --name="RMDC-CLOUD-SYNC" ` --mode=two-way-resolved ` --ignore-vcs ` --ignore=".idea/**" ` --ignore="*.class" ` --ignore="__pycache__/**" ` --ignore="node_modules/**" ` --ignore=".venv/**" ` --ignore="*.log" ` --symlink-mode=portable ` "C:\Users\wdd\Documents\IdeaProjects\RMDC-CLOUD" ` "wdd@192.168.1.30:/Users/wdd/Documents/IdeaProjects/RMDC-CLOUD" ``` 如果有多个项目,可以为每个项目单独创建 session,用 `--name` 区分: ```powershell mutagen sync create ` --name="AGI-PROMPT-SYNC" ` --mode=two-way-resolved ` --ignore-vcs ` --ignore=".idea/**" ` --ignore="*.class" ` --ignore="__pycache__/**" ` --ignore="node_modules/**" ` --ignore=".venv/**" ` --ignore="*.log" ` --symlink-mode=portable ` "C:\Users\wdd\Documents\IdeaProjects\ProjectAGiPrompt" ` "wdd@192.168.1.30:/Users/wdd/Documents/IdeaProjects/ProjectAGiPrompt" ``` *** ## 使用 Mutagen Project 编排多项目(推荐) 在项目根目录创建 `mutagen.yml`,方便一键启停所有 session: ```yaml # Windows 项目根目录下的 mutagen.yml sync: backend: alpha: "." beta: "robert@:~/Projects/myproject" mode: "two-way-resolved" ignore: vcs: true paths: - ".idea/**" - "__pycache__/**" - "node_modules/**" - ".venv/**" - "*.log" - "dist/**" - "build/**" symlink: mode: "portable" watch: mode: "portable" ``` 使用方式: ```powershell cd C:\Users\Robert\Projects\myproject mutagen project start # 启动所有 session mutagen project list # 查看状态 mutagen project flush # 强制立即同步一次 mutagen project pause # 暂停 mutagen project terminate # 终止 ``` *** ## macOS 永不停机配置 除了 `mutagen daemon register` 之外,还需要防止 macOS 休眠中断同步: ```bash # 禁止 macOS 休眠(适合作为 Agent 服务器) sudo pmset -a sleep 0 sudo pmset -a disksleep 0 sudo pmset -a displaysleep 30 # 屏幕可以睡,系统不睡 sudo pmset -a powernap 1 # 开启 Power Nap 保持网络 ``` 确认当前电源策略: ```bash pmset -g ``` *** ## 关键使用注意事项 ### ⚠️ 冲突处理规则 `two-way-resolved` 会以**修改时间较新**的文件覆盖较旧的,Agent 批量生成文件时速度很快,如果你在 Windows 同时手动编辑同一文件,存在覆盖风险。建议: - Agent 执行期间,避免在 Windows 上同时修改 Agent 正在处理的文件 - 利用 `mutagen sync pause --name=agent-project-sync` 在需要时临时暂停 ### ⚠️ `.git` 目录仅留 macOS 侧 由于配置了 `--ignore-vcs`,Windows 侧没有 `.git`,**不能在 Windows 侧执行 git 操作**,所有 commit / branch 操作需要在 macOS 上进行(或通过 SSH 远程到 macOS 执行)。 [mutagen](https://mutagen.io/documentation/synchronization/version-control-systems/) ### ⚠️ 大文件 / 二进制文件 模型权重、数据集等大文件不应纳入同步范围,在 `ignore` 中明确排除: ```yaml - "models/**" - "*.bin" - "*.safetensors" - "*.gguf" - "data/**" ``` ### ⚠️ 网络中断恢复 Mutagen 会自动重连,SSH 断线后 daemon 保持 session 状态,重新连接后会自动 reconcile。可以通过以下命令检查 session 健康状态: ```powershell mutagen sync list # 查看所有 session 状态 mutagen sync monitor agent-project-sync # 实时监控某个 session ``` ### ⚠️ Windows 路径与权限 Windows 侧文件默认没有 POSIX 权限概念,Mutagen 会使用 `--default-file-mode` 和 `--default-directory-mode` 来为同步到 macOS 的文件设置权限: ```powershell mutagen sync create ` --default-file-mode=0644 ` --default-directory-mode=0755 ` ... ``` *** ## 日常操作速查 | 操作 | 命令(Windows PowerShell) | |---|---| | 查看所有 session | `mutagen sync list` | | 实时监控同步状态 | `mutagen sync monitor ` | | 强制立即同步 | `mutagen sync flush ` | | 暂停同步 | `mutagen sync pause ` | | 恢复同步 | `mutagen sync resume ` | | 重置冲突 | `mutagen sync reset ` | | 停止并删除 session | `mutagen sync terminate ` | | 守护进程状态 | `mutagen daemon stop && mutagen daemon start` | Mutagen daemon 升级后需要重启:先 `mutagen daemon stop` 再 `mutagen daemon start`,直接升级不重启会有 API 版本不匹配警告 。 [mutagen](https://mutagen.io/documentation/introduction/getting-started/)