> ## Documentation Index
> Fetch the complete documentation index at: https://docs.okcheese.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 设备与工作电脑 {#devices}

每个 AI 队友在一台工作电脑上运行任务：它在那里读写文件、跑命令、打开浏览器。工作电脑可以是云端沙箱（平台提供，每个 AI 队友一个，背后是哪台机器由平台安排），可以是整台云虚拟机（平台提供，每个 AI 队友一台，有管理员权限，能跑 Docker），也可以是你自己的电脑或服务器（接入后叫「自有设备」）。

云端沙箱里用不了 Docker 和 sudo。要跑 Docker、要虚拟化或要装系统软件的房间，在「这个话题的工作电脑」里选「其他配置与设备 → 整台云虚拟机」。每个 AI 队友第一次干活时平台开一台，要等几分钟；队友闲置 30 分钟后，改动先推送到分支，再把虚拟机删掉，下次干活时再开一台新的。部署没有提供这一项时，选项里不出现。

## 接入这台电脑（Mac、Windows） {#desktop}

桌面端接入不需要打开终端：

1. 点右上角头像，打开「设置 → 设备」，点「添加设备」。
2. 在「Mac 或 Windows 电脑」下载桌面端并安装。第一次打开若被系统拦下：Mac 到「系统设置 → 隐私与安全性」点「仍要打开」；Windows 点「更多信息 → 仍要运行」。
3. 在桌面端登录知是，打开「设置 → 设备 → 添加设备」，点「接入这台电脑」。

完成后：这台电脑出现在「设置 → 设备」里，显示「在线」。

桌面端每次启动都会检查新版本，下载完成后自动安装并重启。需要重新安装时，在「设置 → 设备 → 添加设备」的「Mac 或 Windows 电脑」下再下载一次。

## 接入服务器或其他机器 {#add-device}

服务器、Linux 机器，或不想装桌面端的电脑，用命令行接入：

1. 在「设置 → 设备 → 添加设备」的「服务器，或不装桌面端的电脑」下，复制对应系统的安装命令，在要接入的机器上运行。它会装好连接程序 `cheesehost`。
2. 运行 `cheesehost link connect`（安装命令结束时会打印带站点地址的完整命令，照抄即可）。它会给出一个链接。
3. 在浏览器里打开这个链接，进入「批准这台设备」页面，核对设备名称，点「批准并绑定到我」。
4. 回到命令行，同一条命令会接着完成接入，并保持连接。

![「设置 → 设备」页面：还没有设备时，显示 Mac/Linux 和 Windows 的安装命令，以及「添加设备」按钮](https://docs.okcheese.com/images/devices.jpg)

完成后：设备出现在「设置 → 设备」里，显示「在线」。设备名旁可以重命名，设备行可以「解绑」。

命令行随时可以用 `cheesehost status` 查看登录和连接状态。

## 把设备给团队用 {#team-device}

自有设备可以加进团队，供团队的项目使用：

1. 在团队侧栏打开「工作电脑」，找到「自有设备」区域。
2. 点「添加自有设备」，选择一台已接入的设备。

完成后：设备出现在团队的设备列表里，这一栏同时显示设备数和在线数。

想让自己名下的项目用这台设备，在侧栏你的名字下面打开「工作电脑」，同样点「添加自有设备」。

只加给某个项目、没有加进团队的自有设备，也列在团队的设备列表里，并写明仅供哪些项目使用。

有 AI 队友开始在你的设备上工作时，你会收到一条通知，写明是哪个项目、哪个房间、哪个 AI 队友，以及它能不能访问整台机器。每个 AI 队友开工时通知一次，之后每轮不再通知；你自己在那个房间里时不通知，名册上已经写着。

团队的设备列表里，你自己的设备下面列出现在谁在用：「正在用：项目 · 房间 · AI 队友」。这一行只有设备的主人看得到。

## 选择工作电脑 {#topic-environment}

新房间里的 AI 队友默认用项目设的工作电脑，在「项目设置 → 工作电脑 → 默认工作电脑」的「新 AI 队友默认使用」里改。改了只影响尚未开始运行的 AI 队友。

已经开工的 AI 队友在哪台，看同一处的「现在的分布」：按云端和每台自有设备列出人数；有房间被给了整台机器的自有设备，后面写着「能访问整台机器」。项目负责人可以点自有设备那一行的「查看并更换…」：

- 列出这台设备上的 AI 队友（房间、名字、最近活动），勾选一些或全选，选好换到哪台后点「推送并更换」。
- 每个 AI 队友走和成员名册里一样的更换：先推送，推送失败的不换，并逐个写明原因。
- 原来那台连不上的，由你逐个决定要不要「不推送，直接更换」。
- 正在运行任务的 AI 队友会跳过，写着「正在运行任务，稍后再换」。
- 你打不开的房间只计数，不列出。

每个 AI 队友用哪台，写在房间的成员名册里：点房间顶部的成员头像打开名册。

- 名册底部那一行写着「本话题运行在：设备名」。点「改」打开「这个话题的工作电脑」另选一台，选好后点「推送并更换」。
- 更换时平台先把房间里每个 AI 队友的改动推送到各自的分支。全部推上去才换，新电脑从分支拉代码继续；有一个推不上去就整个不换，并说明原因。
- 原来那台连不上时，对话框会说明，你可以选「不推送，直接更换」，那台上没推送的改动不会跟过去。AI 队友自己也能换，同样先推送，原来那台连不上时要请房间里的人来换。
- 选项里标着「项目默认」的是项目的默认工作电脑；「自有设备 · 自动选择」表示开工时挑一台在线的自有设备。
- 房间里所有 AI 队友共用这一台，之后加入的队友也用它，不再各选一台。

房间被给了整台机器时，那一行后面写着「能访问整台机器」：AI 队友能操作这台机器上的服务和其他房间。只要房间是这样，房间顶部也一直显示这句提醒。

## 自有设备上 AI 队友能看到什么 {#machine-access}

房间用自有设备时，AI 队友默认在这台设备上的**隔离环境**里干活：

- 看得到、写得了的：房间自己的工作目录，和本项目的包缓存。
- 看得到、改不了的：系统里装的东西，比如 `/usr/bin` 下的 `git`、`python3`、`node`。
- 看不到的：设备主人用户目录里的一切（`~/.ssh`、各种凭据、文档），别的房间，`/mnt`、`/media` 下挂的盘。
- 用不了的：装在用户目录里的工具，比如 nvm 装的 Node、`~/.cargo/bin`、`~/.local/bin` 下的命令。AI 队友要用的工具请装到系统里，或者写进项目的环境安装脚本。

设备主人也可以给某个房间**整台机器**：AI 队友以主人的身份运行，能看到、改动这台机器上的一切，包括别的房间。在房间名册底部点「改」，在「这个房间在某某设备上能看到什么」下面选「整台机器」。只有设备主人本人登录后能选；房间里的其他人和 AI 队友自己都能把它改回「隔离环境」，不能改成整台机器。

隔离环境对设备的要求：

- **Linux**：要装 bubblewrap（Debian、Ubuntu：`sudo apt install bubblewrap`；Fedora：`sudo dnf install bubblewrap`；Arch：`sudo pacman -S bubblewrap`），并允许普通用户创建用户命名空间。Ubuntu 23.10 起 AppArmor 默认禁止这件事，可以给 bubblewrap 加一份允许它的 AppArmor 配置，或者运行 `sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0`（写进 `/etc/sysctl.d/` 下的文件才能重启后保留）。缺了哪一样，AI 队友开工时会收到说明，写明要装什么、改什么。
- **macOS**：不用装任何东西，用的是系统自带的 `sandbox-exec`。和 Linux 一样看不到用户目录里装的工具；另外，隔离环境里的程序只能写自己的目录，`/tmp` 换成了房间自己的临时目录，也连不上这台 Mac 上其他程序开的本地 socket（比如你自己的 tmux）。
- **Windows**：没有隔离环境。在 Windows 上装 WSL，把 WSL 里的 Linux 按上面的「接入服务器或其他机器」接入，用它；或者设备主人给房间选「整台机器」。

隔离环境出现之前就在自有设备上运行过的房间，保持原来的整台机器：名册那一行和房间顶部照旧写着「能访问整台机器」，设备主人在「改」里看到选中的是「整台机器」，可以改成「隔离环境」。用过几台自有设备的房间，只在最近用的那台上保持；回到别的那台，从隔离环境开始。
