--- name: install-mimi-remote description: 安装、配置、配对、迁移、升级、诊断、回滚或卸载 Mimi Remote;在 macOS 上安装和维护 Mimi Remote Mac 菜单栏 App / DMG,或通过 Homebrew、Linux user-systemd 部署 agentd;从源码构建 iPhone/iPad App;配置 Codex 主通道和可选 Claude Code 实验 Runtime。用户提出“安装 Mimi Remote”“安装或修复 Mac 菜单栏 App”“在 iPad/iPhone 上使用 Codex 或 Claude Code”“部署、迁移或修复 agentd”“升级、回滚、卸载 Mimi Remote”“构建 MimiRemote iOS App”或处理配对、私网连接、Runtime 故障时使用。 --- # 安装与维护 Mimi Remote ## 目标 把 Mimi Remote 安装成一个可验证、可恢复、权限最小化的本地闭环: 1. 在普通 macOS 用户场景中优先使用已签名、公证且内嵌 `agentd` 的 Mimi Remote Mac 菜单栏 App。 2. 通过 Tailscale 或同一局域网连接 iPhone / iPad,不部署公网中继。 3. 保持 Codex 为默认稳定 Runtime,仅在用户明确要求时启用 Claude Code 实验通道。 4. 保留现有配置、Token、Runtime 凭证、配对关系和源码改动。 Mimi Remote 是第三方开源客户端,不是 OpenAI、Anthropic 或 Tailscale 的官方产品。项目代码、Codex / Claude 凭证和完整会话继续留在用户自己的设备上。 ## 执行原则 - 先执行只读检查,再安装或修改;复用已有安装,不重复初始化。 - 优先使用正式 Release,不把开发分支、未固定 commit、snapshot 或 `devel` 二进制当作稳定版本。 - macOS 普通用户默认安装 `Mimi-Remote-Mac.dmg`;Homebrew 只用于命令行、服务器、自动化、旧安装维护或故障恢复。 - 不假设本 Skill 所在目录或调用时的当前目录就是源码仓库。源码和正式产物统一从 `https://github.com/gaixianggeng/mimi-remote` 获取。 - 不覆盖有未提交改动的源码目录,不在现有脏工作树中切换 tag 或执行清理。 - 不使用 `agentd setup --force`,除非用户明确要求轮换凭据并接受现有配对失效。 - 不输出、转述、上传或写入任务总结中的长期 Token、Authorization header、连接链接、二维码内容、完整 Endpoint、Tailscale IP 或私有项目路径。 - 不把 `agentd` 暴露到公网,不自动配置端口转发、反向代理或公网 Tunnel。 - 不通过关闭审批、设置 `danger-full-access`、启用 `CLAUDE_BRIDGE_BYPASS_PERMISSIONS` 或自动重试写操作来解决 Runtime 问题。 - 不运行 `tccutil reset`。macOS 文件权限、登录项审批和签名信任必须由用户在系统界面确认。 - Linux 安装和服务操作使用普通登录用户,不使用 `sudo` 运行安装脚本。 - 只有用户明确要求 Claude Code 时才启用该 Runtime;Claude 失败不能破坏 Codex 主通道或轮换现有 Token。 - 升级、回滚或卸载前阅读 [安装、升级与回滚](https://github.com/gaixianggeng/mimi-remote/blob/main/docs/install-upgrade-rollback.md)。 - Claude 相关操作前阅读 [Claude bridge 架构](https://github.com/gaixianggeng/mimi-remote/blob/main/docs/claude-bridge-architecture.md)。 - iOS 构建、签名或真机部署前阅读 [iOS 开发说明](https://github.com/gaixianggeng/mimi-remote/blob/main/ios/MimiRemote/README.md)。 ## 确定操作范围 选择能完成用户目标的最小路径: - **macOS App 安装**:下载 DMG,在菜单栏 App 内完成设置、配对、诊断和服务管理。这是默认路径。 - **Homebrew 后端**:只维护命令行 `agentd`,用于服务器、自动化、旧安装或恢复。 - **Linux 后端**:安装 Release 归档中的 `agentd` 和 user-systemd service。 - **iOS 源码构建**:仅在用户需要安装当前未公开上架的 iPhone/iPad App 或开发客户端时执行。 - **Runtime 维护**:检查 Codex,或显式启用、升级、诊断 Claude Code。 - **维护操作**:对现有安装执行迁移、升级、回滚或卸载,不重新生成 Token。 只询问会改变结果的信息: 1. 要授权的最小项目扫描根目录。 2. 目标是 Mac App、CLI/Linux 后端、iOS 构建还是 Runtime 配置。 3. 是否明确需要 Claude Code;未说明时只配置 Codex。 4. 是否存在需要由 Mac App 接管的 Homebrew 服务。 5. 用户要求固定版本时使用哪个 tag;未指定时选择最新正式 Release,并在修改前告知版本。 ## 执行预检 先执行不修改系统的检查: ```bash uname -s uname -m id -u command -v git command -v codex codex --version codex app-server --help ``` 确认 Codex CLI 已安装并登录。不要读取、复制或展示 Codex 凭证。若缺失,使用 OpenAI 当前官方安装说明,不凭记忆拼接安装命令。 确认 Mac 与移动设备位于同一私有网络。跨网络优先使用同一 Tailnet;同一局域网可以不安装 Tailscale。`tailscale` CLI 不在 `PATH` 时,允许用户通过 Tailscale App 确认状态。 macOS App 路径只要求 macOS 15 或更高版本和 Codex CLI;不要求 Homebrew、Go、Rust、Xcode 或 XcodeGen。仅在源码构建时检查相应工具链。 用户明确要求 Claude Code 时再检查: ```bash command -v claude claude --version ``` 让用户在 Mac 本机确认 Claude Code 已登录。不要读取、复制或展示 Claude 凭证文件、Keychain 内容或 OAuth Token。 ## 安装 Mimi Remote Mac 使用 `gaixianggeng/mimi-remote` 的最新正式 Release;用户指定版本时固定到对应 tag。下载: ```text Mimi-Remote-Mac.dmg Mimi-Remote-Mac.dmg.sha256 ``` 在同一目录严格校验: ```bash shasum -a 256 -c Mimi-Remote-Mac.dmg.sha256 ``` 校验失败时停止,不打开 DMG。让用户完成必须的人机操作: 1. 打开 DMG,把 **Mimi Remote Mac** 拖到“应用程序”。 2. 首次打开 App,在菜单栏进入设置。 3. 选择最小代码扫描根目录并启动服务。 4. macOS 显示登录项或文件访问审批时,在系统设置中确认;不要绕过。 App 内已包含 `agentd` 和兼容的 `alleycat-claude-bridge`,普通安装不需要 Homebrew 或单独 `cargo install`。 若检测到 `homebrew.mxcl.mimi-remote`: 1. 保持旧服务运行,不要先手工停止。 2. 在 Mac App 中执行接管,让 App 先跑 Doctor、停止 Homebrew service、注册内嵌 LaunchAgent 并等待就绪。 3. 接管失败时确认 App 已尝试恢复 Homebrew;不要让两个服务同时抢占端口。 4. 迁移成功后保留原配置、Token 和配对关系。 macOS App 安装成功必须满足: - 菜单栏显示服务就绪且 owner 为 `Mimi Remote Mac`。 - App 中的版本、Endpoint 和 Doctor 状态可读取。 - 登录启动状态符合用户选择。 - 配对页能生成短期二维码。 ## 安装 Homebrew 后端 仅在用户选择 CLI、服务器、自动化、旧安装维护或恢复时使用: ```bash brew update brew install gaixianggeng/tap/mimi-remote agentd version ``` 普通修复不要无条件升级。首次初始化通过 Agent 或自动化执行时必须隐藏配对信息,并使用用户确认的最小目录: ```bash agentd up --no-pair \ --scan-root "/absolute/path/to/projects" \ --browse-root "/absolute/path/to/projects" agentd status --json | grep -E '"(process_ok|service_ok|doctor_ok)"' agentd doctor ``` 只以 `service_ok=true` 作为成功条件。`process_ok=true` 只表示 HTTP 进程存活。 从当前 `agentd` 托管的远程任务重启时使用: ```bash agentd restart --no-pair ``` 不要执行 `brew services restart mimi-remote`,避免旧服务退出后无法完成启动步骤。 ## 安装 Linux 后端 使用 `gaixianggeng/mimi-remote` 的正式 Release,不从开发工作树安装 `devel` 二进制。根据架构选择归档: ```text mimi-remote_VERSION_linux_amd64.tar.gz mimi-remote_VERSION_linux_arm64.tar.gz ``` 下载目标归档和同一 Release 的 `checksums.txt`,严格校验 SHA-256 后解压。在 Release 根目录执行: ```bash bash ./scripts/install-linux.sh install ``` 安装器会原子维护: ```text ~/.local/bin/agentd ~/.config/systemd/user/mimi-remote.service ~/.local/share/mimi-remote/install-linux.sh ~/.config/mimi-remote/ ``` 不设置非默认 `AGENTD_CONFIG`,不在自定义 `XDG_CONFIG_HOME` 下套用固定模板。使用绝对路径验收: ```bash "$HOME/.local/bin/agentd" status --json | grep -E '"(process_ok|service_ok|doctor_ok)"' "$HOME/.local/bin/agentd" doctor ``` ## 构建 iOS/iPadOS App 仅在 macOS、Xcode 26 或更高版本、iOS 26 SDK 和 XcodeGen 可用时继续。确认当前目录是完整且干净的源码仓库;否则克隆到用户确认的新目录,并优先检出与后端匹配的正式 tag。 ```bash xcodegen generate \ --spec ios/MimiRemote/project.yml \ --project ios/MimiRemote bash ./scripts/ios-dev.sh build-for-testing open ios/MimiRemote/MimiRemote.xcodeproj ``` 测试构建始终使用统一脚本固定的 M5 Simulator。需要人工安装到真机时,让用户在 Xcode 中选择自己的 Development Team、已信任真机和 `MimiRemote` scheme;不要替用户选择未知 Team,不导出或上传签名证书,不关闭代码签名。日常命令行部署必须使用 `bash ./scripts/ios-dev.sh run`。 ## 完成配对与验收 Mac App 安装从菜单栏选择“配对设备…”。CLI/Linux 安装让用户在不会进入 Agent 日志的本机 Terminal 执行: ```bash agentd pair --qr-only ``` Linux 使用 `"$HOME/.local/bin/agentd" pair --qr-only`。 短期 Pair 链接是单次兑换票据,不直接包含长期 Token。失败、过期或已使用时重新生成;扫码不可用时才使用高级手动连接,不让用户把 Token 粘贴到模型对话中。 至少验证: 1. iOS App 能显示当前 Mac 和 `agentd` 版本。 2. App 能加载已授权项目列表。 3. App 能打开已有 Codex 会话或创建最小测试会话。 4. 用户启用 Claude 时,Runtime 选择器能显示 Claude,并能创建最小只读测试会话。 5. 断网后不重复提交写操作;恢复连接后会话能通过事件 replay 或权威历史恢复。 前三项完成后才判定基础安装成功;Claude 验收失败不能推翻已通过的 Codex 主通道。 ## 配置 Codex 与 Claude Runtime Codex 是默认 Runtime。不要写死模型版本;未显式选择模型时交给本机 Codex rollout。保持现有 Codex 登录态、app-server Token 和审批策略。 Claude Code 属于实验通道。Mimi Remote Mac 启动时会在本机检测随包 bridge、Claude CLI 和登录态:三项都通过且用户没有明确关闭时自动启用,否则保持关闭;设置页中的明确开关会覆盖后续自动检测。Homebrew / Linux 不执行这项 App 启动策略。它使用一个由 `agentd` 监督的 resident bridge;每个 Claude thread 对应一个 headless 进程。移动端断线不会自动重试 `turn/start`,重连使用 sequence replay 或 `thread/read`,避免重复写文件或执行命令。 启用 Claude 前确认用户接受以下边界: - 当前不支持 `goal`、`archive` 和 `fork`。 - 不提供 APNs 后台 push 或跨设备云同步。 - bridge、Mac 或 Claude Code 重启后的极短未落盘窗口仍可能无法恢复。 - 保持 `CLAUDE_BRIDGE_BYPASS_PERMISSIONS=false`,Claude 只声明 `read-only` 和 `workspace-write`。 按安装形态处理 bridge: - **Mimi Remote Mac**:使用 App 内置 bridge,不执行 `cargo install`,不写入其他机器的 bridge 绝对路径。App 通过 `agentd runtime --claude=auto|enabled|disabled` 原子更新 `claude.enabled`、`claude.activation` 和检测到的本机 Claude CLI 路径,保留其他字段与 `0600` 权限;不要打印完整配置文件。 - **Homebrew / Linux**:安装 `alleycat-claude-bridge >= 0.2.1`,把实际绝对路径写入 `claude.bridge_bin`。 CLI 外置 bridge 安装命令: ```bash cargo install --git https://github.com/gaixianggeng/mimi-remote.git \ --locked --force --bin alleycat-claude-bridge alleycat-claude-bridge command -v alleycat-claude-bridge ``` 配置文件含长期 Token。修改前创建权限为用户私有的本地备份,使用 JSON 解析器原子修改,只更新 `claude` 字段,保持文件权限为 `0600`;不要用 `cat`、日志或聊天展示完整内容。Mac App 优先使用设置页开关;用户明确关闭后,不得在后续启动中重新自动启用。 修改后从当前 service owner 的入口重启: - Mac App owner:从菜单栏选择“重新启动服务”。 - Homebrew owner:执行 `agentd restart --no-pair`。 - Linux owner:使用 user-systemd 安装器或 `systemctl --user restart mimi-remote.service`。 然后执行 Doctor,并在移动端确认 Claude channel、bridge 版本和模型列表可用。不要因为 Claude bridge 失败而修改 Codex 配置或轮换 Token。 ## 诊断失败 先从当前 service owner 收集最小、去敏的诊断,不要一开始就重装: - Mac App:查看菜单栏状态、Dashboard、Doctor 和 App 管理的日志。 - Homebrew: ```bash agentd status --json | grep -E '"(process_ok|service_ok|doctor_ok)"' agentd doctor agentd logs -n 200 brew services list ``` - Linux: ```bash "$HOME/.local/bin/agentd" status --json | grep -E '"(process_ok|service_ok|doctor_ok)"' "$HOME/.local/bin/agentd" doctor journalctl --user -u mimi-remote.service -n 200 --no-pager ``` 重点区分: - `process_ok=false`:服务未运行、端口不可达或 service manager 失败。 - `process_ok=true` 且 `service_ok=false`:配置、鉴权、版本或真实 Codex app-server 握手失败。 - macOS 上 launchd 每 3 秒重拉、agentd 每次都立刻退出码 1(App 报“自动重新登记仍未恢复”):先运行 `agentd check-config --json`;`code=config_requires_newer_version` 表示这份配置由更新版本写入,动作是安装最新发布包,不是重装或 `setup --force`。 - `file-access-preflight` warning:服务可能已连接,但部分 macOS 目录权限尚未确认。 - Claude channel 不可用:单独检查 `claude.enabled`、Claude CLI 登录和 bridge probe,不破坏 Codex。 - 移动端无法连接而本机就绪:检查私网、Endpoint 和 App 内凭据,不开放公网端口。 只在 Doctor 明确给出安全可修复项时运行 `doctor --fix`。先对日志去敏,再引用到聊天或 Issue。 ## 升级与回滚 升级前备份配置和 Token,备份目录保持用户私有,不上传到云盘、Issue、PR 或任务附件。 ### Mimi Remote Mac 1. 下载目标正式 DMG 和 SHA-256 文件并校验。 2. 不先删除旧 App;用新 App 覆盖“应用程序”中的现有版本。 3. 打开新版本,让它复用 Application Support 中的配置和配对数据。 4. 验证 service owner、版本、Doctor、Codex 和已启用的 Claude channel。 5. 失败时安装上一个已签名、公证的 DMG,优先恢复旧二进制;除非确认配置 schema 不兼容,否则不回滚配置。 首个 DMG 没有自动更新。不要把 snapshot 或未公证构建作为稳定回滚版本。 ### Homebrew 执行 `brew upgrade mimi-remote` 后使用 `agentd restart --no-pair`,验证 `service_ok=true`。失败时优先恢复旧 keg,不默认回滚配置。 ### Linux 在校验后的新 Release 根目录执行 `bash ./scripts/install-linux.sh upgrade`。需要主动回滚时执行: ```bash bash "$HOME/.local/share/mimi-remote/install-linux.sh" rollback "$HOME/.local/bin/agentd" status --json | grep -E '"(process_ok|service_ok|doctor_ok)"' ``` ## 卸载 默认只卸载程序并保留配置和 Token。永久删除凭据是独立破坏性操作,只有用户明确确认“接受现有配对永久失效”后才能执行。 - **Mimi Remote Mac**:先在菜单栏选择“退出并停止服务”。如果要回到 Homebrew,先在设置中执行“恢复 Homebrew”。确认服务停止或迁移完成后,再把 App 移到废纸篓。 - **Homebrew**:执行 `agentd stop` 和 `brew uninstall mimi-remote`。 - **Linux**:执行 `bash "$HOME/.local/share/mimi-remote/install-linux.sh" uninstall`。 不要自动删除: ```text ~/Library/Application Support/mimi-remote ~/.config/mimi-remote ``` 不要因为卸载后端而删除 iOS Keychain 数据、Xcode 工程、源码仓库或用户项目。 ## 报告结果 最终只报告: - 主机平台、架构、安装版本和 service owner。 - 执行的是新装、复用、迁移、升级、修复还是回滚。 - `service_ok`、Doctor 和仍需用户处理的 warning。 - Codex 是否可用;Claude 是否启用、bridge 是否健康及其剩余实验边界。 - iOS 工程、无签名构建、真机安装、配对和项目加载状态。 - 仍需用户完成的登录、系统权限、Xcode Team、App 拖放或扫码步骤。 不要报告 Token、二维码内容、完整 Endpoint、Tailscale IP、私有项目路径或未去敏日志。 ## 按需读取的参考资料 - 产品概览和快速开始:[README.zh-CN.md](https://github.com/gaixianggeng/mimi-remote/blob/main/README.zh-CN.md) - Mac 菜单栏 App:[Mimi Remote Mac](https://github.com/gaixianggeng/mimi-remote/blob/main/macos/MimiRemoteMac/README.md) - 安装、升级、停止和回滚:[install-upgrade-rollback.md](https://github.com/gaixianggeng/mimi-remote/blob/main/docs/install-upgrade-rollback.md) - Claude Runtime 生命周期和权限:[claude-bridge-architecture.md](https://github.com/gaixianggeng/mimi-remote/blob/main/docs/claude-bridge-architecture.md) - iOS 构建和验收:[iOS 开发说明](https://github.com/gaixianggeng/mimi-remote/blob/main/ios/MimiRemote/README.md) - Codex 协议边界:[codex-protocol-support.md](https://github.com/gaixianggeng/mimi-remote/blob/main/docs/codex-protocol-support.md) - Tailscale 运维:[tailscale-peer-relay-ops.md](https://github.com/gaixianggeng/mimi-remote/blob/main/docs/tailscale-peer-relay-ops.md) - 支持和去敏:[support.md](https://github.com/gaixianggeng/mimi-remote/blob/main/docs/support.md) - 安全问题报告:[SECURITY.md](https://github.com/gaixianggeng/mimi-remote/blob/main/SECURITY.md)