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

# 搭配 OpenCode 使用

> OpenCode 的会话通过同一份配对到达你的手机。哪些一样、哪些和 Claude Code 与 Codex 不同，以及为什么。

OpenCode 的会话出现在同一个列表里、同一个灵动岛上，走同一份配对。不过 OpenCode 的构造和另外两个智能体不一样——没有 hook，也没有自己的终端窗口——所以有几处到了手机上会不太一样。

Nomo 一以贯之的原则是：绝不提供一个 Mac 兑现不了的按钮。所以凡是手机上做不到的事，你拿到的不是一个会悄悄失效的控件，而是一句老实话——“这件事去电脑上做”。

<Note>
  OpenCode 没有单独的配对。同一台电脑上的三个智能体读的是同一份配置——你只需从其中任意一个[配对这台机器](/zh-Hans/setup/pairing)一次。在传输层面上，唯一的差别是一个标明它属于哪个智能体的标签。
</Note>

<h2 id="what-works-the-same">
  与其他智能体相同的部分
</h2>

* 会话、状态、文件夹，以及灵动岛。
* 权限请求——shell 命令、文件编辑、读取、抓取和网页搜索——可以在灵动岛或 App 里**允许**、**始终允许**和**拒绝**。
* 提问连同选项一起送达，点一个就能回答。
* 会话的待办清单，在计划阅读界面里。

<h2 id="the-cli-and-the-desktop-app">
  CLI 和桌面应用
</h2>

两边都能用，Nomo 在两边的表现也一样。桌面应用把 OpenCode 自己的服务器跑在自己内部，而那个服务器读取 `~/.config/opencode/plugins/` 里的插件，和 CLI 完全一样——所以你在应用里开的会话同样会到达手机，带着标题、模型、正在忙还是空闲的状态，权限请求也照样能在灵动岛或 App 里答复。

桌面应用没有单独的安装，[安装](/zh-Hans/setup/install)里写的那一套两边通用。重启也一样：插件只在服务器启动时导入一次，没有热重载，所以安装时已经开着的那个应用，也得退出再重新打开。

唯一不变的是“在 Mac 上打开”——它在 OpenCode 的会话上依然不出现，桌面应用也一样，原因就在[下面](#no-open-on-mac)。

<Note>
  OpenCode 桌面应用仍处于 beta 阶段。如果你在应用里开的会话没有到达手机，先检查上面那次重启。
</Note>

<h2 id="commands-have-no-prefix">
  命令没有前缀
</h2>

Claude Code 把 Nomo 的命令放进 `nomo-cc:` 命名空间，Codex 则把它们当作 `$` skill 运行。OpenCode 两样都不做：它的命令名是扁平且全局的，所以 Nomo 的这五条就是 `/nomo-pair`、`/nomo-status`、`/nomo-approvals`、`/nomo-reset` 和 `/nomo-unpair`。没有前缀要加，也没有菜单要翻。

`/nomo-pair` 在 OpenCode 里可以独立使用——一台从未配对过的机器可以从这里完成配对。如果你已经在 Claude Code 或 Codex 里配对过它，那就什么都不用做：你的 OpenCode 会话会直接出现。

五条命令全都列在[命令](/zh-Hans/sessions/commands)里。

<Note>
  `/nomo-approvals` 是这台机器的开关，和 Claude Code、Codex 共用。从 OpenCode 里把它关掉，三个智能体就一起关掉了。
</Note>

<h2 id="restart-after-pairing">
  配对之后要重启
</h2>

插件只在 OpenCode 的服务器启动时读一次配对。给一台此前未配对的电脑做完配对，正在运行的那个 OpenCode 早已认定自己该保持沉默——退出再重开，会话就会开始镜像过来。这就是[安装](/zh-Hans/setup/install)里要求的那次重启，也是一台刚配对好的机器什么都不显示时第一个该检查的地方。

<h2 id="deny-is-a-decision-about-the-turn">
  拒绝针对的是整轮对话
</h2>

OpenCode 把一次被驳回的权限当作对智能体正在做的这件事的答复，而不是对某一个工具的答复。所以你在手机上拒绝，也会一并驳回**这个会话正在等待的其他每一个权限**——它们的卡片会自行了结，并从你手机上消失。

回绝一个提问会结束这一轮，而不是再问你一遍。

**允许**和**始终允许**则只会了结你点的那一张卡片。

<h2 id="no-open-on-mac">
  没有“在 Mac 上打开”
</h2>

这个按钮不会出现在 OpenCode 的会话上。OpenCode 的会话属于编辑器自己的服务器进程，而不是某个终端窗口，所以没有窗口可以让你的手机调到最前——在 `opencode serve` 下甚至可能根本没有窗口。

卡片上的其他一切照常工作，只是少了一条回到电脑的捷径。

<h2 id="opencode-asks-for-less">
  OpenCode 本来就问得少
</h2>

审批是通的。OpenCode 只是比 Claude Code 问得少，所以手机安静，通常意味着根本没人问过，而不是哪里坏了。

默认设置下，会来问你的只有四件事：

* 碰项目文件夹之外的文件。
* 读 `.env` 文件。
* OpenCode 自己的死循环防护，当它认定智能体在原地打转时。
* 智能体向你提的问题。

其余的一律不问就跑，shell 命令也在其中。

这是 OpenCode 的默认配置，不是一条改不动的规矩，要不要改在你。在项目的 `.opencode/opencode.json` 里、或者要对所有项目生效就在 `~/.config/opencode/opencode.json` 里，把某个工具设成 `ask`，它就重新回到你面前，也就回到你手机上：

```json theme={null}
{ "permission": { "bash": "ask", "edit": "ask" } }
```

至于你要不要这样，那是你习惯怎么干活的问题。Nomo 只是把你的智能体问的东西原样转过来，自己不多加什么。

如果这些都解释不了这份安静，还有一个看起来一模一样的原因：就在下面的[自动批准](#auto-approve-isnt-shown)。

<h2 id="auto-approve-isnt-shown">
  自动批准不会显示
</h2>

OpenCode 在自己的界面里处理 `--yolo`，从不把这件事告诉插件。所以 App 没法显示某个会话是不是在关闭审批的情况下跑的——它看起来和别的会话没有区别。

如果你预期会来的请求始终没到手机上，那就该查这一点：一个以自动批准模式启动的会话谁也不问，包括你。

<h2 id="plan-mode">
  计划模式
</h2>

切换到 plan 智能体——在 OpenCode 里按 <kbd>Tab</kbd>——你的手机就会把这个会话标记为正在规划，只要它还停在那个模式里。

计划本身留在你的电脑上。只有设置了 `OPENCODE_EXPERIMENTAL_PLAN_MODE`，OpenCode 才会写出计划文件，而它默认是关的，所以通常没有文档可以发给你。对 OpenCode 会话来说，计划阅读界面显示的就是它的待办清单，和普通的一轮完全一样。

把这个变量打开，还会多一样东西到达你的手机：计划写完时，OpenCode 自己那句\*“切换到 build 智能体并开始实现？”\*的提问会作为一条审批送来，你点一下就能回答。它同时也会开始把计划文件写进你存储库里的 `.opencode/plans/`，那个目录你多半会想加进 `.gitignore`。

<h2 id="reset-needs-opencode-closed">
  重置前需要关闭 OpenCode
</h2>

`/nomo-reset` 清理的是进程已经不在的会话行。对 OpenCode 来说，那个进程是**服务器**，不是你敲命令的那个终端——所以属于一个正在运行的 OpenCode 的会话行不会被清掉，这是有意为之。如果某一行看着陈旧却怎么都不肯走，先退出 OpenCode。

<h2 id="update-the-app">
  更新 App
</h2>

每个会话都带着一个标明它由哪个智能体产生的标签。早于 OpenCode 支持的那些 Nomo App 版本认不出这个标签，会退回到 Claude Code 的标记：会话一个不少，一切照常工作，只是徽标戴错了。把手机上的 App 更新一下就是全部的修复——电脑上什么都不用改。
