Skip to main content
OpenCode 的会话出现在同一个列表里、同一个灵动岛上,走同一份配对。不过 OpenCode 的构造和另外两个智能体不一样——没有 hook,也没有自己的终端窗口——所以有几处到了手机上会不太一样。 Nomo 一以贯之的原则是:绝不提供一个 Mac 兑现不了的按钮。所以凡是手机上做不到的事,你拿到的不是一个会悄悄失效的控件,而是一句老实话——“这件事去电脑上做”。
OpenCode 没有单独的配对。同一台电脑上的三个智能体读的是同一份配置——你只需从其中任意一个配对这台机器一次。在传输层面上,唯一的差别是一个标明它属于哪个智能体的标签。

与其他智能体相同的部分

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

CLI 和桌面应用

两边都能用,Nomo 在两边的表现也一样。桌面应用把 OpenCode 自己的服务器跑在自己内部,而那个服务器读取 ~/.config/opencode/plugins/ 里的插件,和 CLI 完全一样——所以你在应用里开的会话同样会到达手机,带着标题、模型、正在忙还是空闲的状态,权限请求也照样能在灵动岛或 App 里答复。 桌面应用没有单独的安装,安装里写的那一套两边通用。重启也一样:插件只在服务器启动时导入一次,没有热重载,所以安装时已经开着的那个应用,也得退出再重新打开。 唯一不变的是“在 Mac 上打开”——它在 OpenCode 的会话上依然不出现,桌面应用也一样,原因就在下面
OpenCode 桌面应用仍处于 beta 阶段。如果你在应用里开的会话没有到达手机,先检查上面那次重启。

命令没有前缀

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 会话会直接出现。 五条命令全都列在命令里。
/nomo-approvals 是这台机器的开关,和 Claude Code、Codex 共用。从 OpenCode 里把它关掉,三个智能体就一起关掉了。

配对之后要重启

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

拒绝针对的是整轮对话

OpenCode 把一次被驳回的权限当作对智能体正在做的这件事的答复,而不是对某一个工具的答复。所以你在手机上拒绝,也会一并驳回这个会话正在等待的其他每一个权限——它们的卡片会自行了结,并从你手机上消失。 回绝一个提问会结束这一轮,而不是再问你一遍。 允许始终允许则只会了结你点的那一张卡片。

没有“在 Mac 上打开”

这个按钮不会出现在 OpenCode 的会话上。OpenCode 的会话属于编辑器自己的服务器进程,而不是某个终端窗口,所以没有窗口可以让你的手机调到最前——在 opencode serve 下甚至可能根本没有窗口。 卡片上的其他一切照常工作,只是少了一条回到电脑的捷径。

OpenCode 本来就问得少

审批是通的。OpenCode 只是比 Claude Code 问得少,所以手机安静,通常意味着根本没人问过,而不是哪里坏了。 默认设置下,会来问你的只有四件事:
  • 碰项目文件夹之外的文件。
  • .env 文件。
  • OpenCode 自己的死循环防护,当它认定智能体在原地打转时。
  • 智能体向你提的问题。
其余的一律不问就跑,shell 命令也在其中。 这是 OpenCode 的默认配置,不是一条改不动的规矩,要不要改在你。在项目的 .opencode/opencode.json 里、或者要对所有项目生效就在 ~/.config/opencode/opencode.json 里,把某个工具设成 ask,它就重新回到你面前,也就回到你手机上:
至于你要不要这样,那是你习惯怎么干活的问题。Nomo 只是把你的智能体问的东西原样转过来,自己不多加什么。 如果这些都解释不了这份安静,还有一个看起来一模一样的原因:就在下面的自动批准

自动批准不会显示

OpenCode 在自己的界面里处理 --yolo,从不把这件事告诉插件。所以 App 没法显示某个会话是不是在关闭审批的情况下跑的——它看起来和别的会话没有区别。 如果你预期会来的请求始终没到手机上,那就该查这一点:一个以自动批准模式启动的会话谁也不问,包括你。

计划模式

切换到 plan 智能体——在 OpenCode 里按 Tab——你的手机就会把这个会话标记为正在规划,只要它还停在那个模式里。 计划本身留在你的电脑上。只有设置了 OPENCODE_EXPERIMENTAL_PLAN_MODE,OpenCode 才会写出计划文件,而它默认是关的,所以通常没有文档可以发给你。对 OpenCode 会话来说,计划阅读界面显示的就是它的待办清单,和普通的一轮完全一样。 把这个变量打开,还会多一样东西到达你的手机:计划写完时,OpenCode 自己那句*“切换到 build 智能体并开始实现?”*的提问会作为一条审批送来,你点一下就能回答。它同时也会开始把计划文件写进你存储库里的 .opencode/plans/,那个目录你多半会想加进 .gitignore

重置前需要关闭 OpenCode

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

更新 App

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