---
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)
