<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>FAQ on AI博士 万戈</title>
        <link>https://www.yesmiracle.net/tags/faq/</link>
        <description>AI博士万戈的技术博客，聚焦 Agentic AI、AI Infra 与 Agent Security，分享 AI 基础设施与工程落地实践。</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <managingEditor>admin@yesmiracle.net (万戈)</managingEditor>
        <webMaster>admin@yesmiracle.net (万戈)</webMaster>
        <lastBuildDate>Tue, 06 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.yesmiracle.net/tags/faq/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>OpenCode 报错排查完全指南：启不来、连不上、模型找不到，一次讲透！</title>
        <link>https://www.yesmiracle.net/post/20261006-opencode-troubleshooting-faq/</link>
        <pubDate>Tue, 06 Oct 2026 00:00:00 +0000</pubDate>
        <author>admin@yesmiracle.net (万戈)</author>
        <guid>https://www.yesmiracle.net/post/20261006-opencode-troubleshooting-faq/</guid>
        <description>&lt;img src="https://www.yesmiracle.net/post/20261006-opencode-troubleshooting-faq/cover.svg" alt="Featured image of post OpenCode 报错排查完全指南：启不来、连不上、模型找不到，一次讲透！" /&gt;&lt;p&gt;OpenCode 装好之后，真正让人挠头的不是它会不会写代码，而是它偶尔一声不吭地甩给你一行报错，然后什么都不干。&lt;/p&gt;
&lt;p&gt;前面几篇我把它的源码、装法、和别家怎么做对比都写过了。这一篇补上最后一块：&lt;strong&gt;报错&lt;/strong&gt;。素材分两半，一半来自官方 troubleshooting 页，一半是我自己踩过的、以及在 GitHub issues 里翻到的真实案例。我按「症状 → 原因 → 修复」理一遍，目标是让你下次看到那几行英文的时候，不用再去翻帖子。&lt;/p&gt;
&lt;p&gt;先把最常见的几个症状摆出来：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;opencode: command not found&lt;/code&gt;——明明装成功了&lt;/li&gt;
&lt;li&gt;一启动就崩：&lt;code&gt;Failed to initialize OpenTUI render library&lt;/code&gt;（终端 UI 的原生渲染库加载失败）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ProviderModelNotFoundError&lt;/code&gt;——模型名格式或来源不对&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ProviderInitError&lt;/code&gt;——配置 / 凭证像坏掉了&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AI_APICallError&lt;/code&gt; 或 &lt;code&gt;Failed to fetch models.dev&lt;/code&gt;——调用、拉取模型列表时报错&lt;/li&gt;
&lt;li&gt;桌面版弹 &lt;code&gt;Connection Failed&lt;/code&gt;，或者一直卡在启动画面&lt;/li&gt;
&lt;li&gt;Linux 上复制粘贴没反应&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你还没装上，先看 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20261004-opencode-installation-guide/&#34; &gt;《OpenCode 安装完全指南：从一行 curl 到 v2 共享服务，附 v1 迁移！》&lt;/a&gt;；想先搞清楚它内部在跑什么，看 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-opencode-architecture/&#34; &gt;《OpenCode 源码深度拆解：Effect TS 代数效应系统构建的智能编码 Agent》&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;先记一条铁律v1-和-v2-别混&#34;&gt;先记一条铁律：v1 和 v2 别混&lt;/h2&gt;
&lt;p&gt;排错前先确认你在哪条版本线上。这是最容易把人绕晕的一件事，因为&lt;strong&gt;两套文档、两个包名、两套服务模型是同名的&lt;/strong&gt;。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;v1（旧）&lt;/th&gt;
          &lt;th&gt;v2（当前默认）&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;npm 包&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;opencode-ai&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;@opencode/cli&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Homebrew&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;anomalyco/tap/opencode&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;anomalyco/tap/opencode-v2&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;架构&lt;/td&gt;
          &lt;td&gt;每终端各自为政&lt;/td&gt;
          &lt;td&gt;共享后台服务 + 多客户端&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Windows 包管理器&lt;/td&gt;
          &lt;td&gt;支持&lt;/td&gt;
          &lt;td&gt;不支持&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一个很典型的场景：你在搜到一篇讲 &lt;code&gt;opencode-ai&lt;/code&gt; 的帖子，照着它的办法清 &lt;code&gt;~/.local/share/opencode&lt;/code&gt;，结果发现自己装的是 v2，服务还挂着，清了也没用。&lt;strong&gt;先跑 &lt;code&gt;opencode --version&lt;/code&gt;。&lt;/strong&gt; 看版本号是 1.x 还是 2.x，再去对应的文档里找答案。这篇默认讲 v2，遇到 v1 单独标出来。&lt;/p&gt;
&lt;h2 id=&#34;装完找不到命令先别急着重装&#34;&gt;装完找不到命令：先别急着重装&lt;/h2&gt;
&lt;p&gt;最气人的一种失败——安装命令回了个「成功」，一敲 &lt;code&gt;opencode&lt;/code&gt; 却是 &lt;code&gt;command not found&lt;/code&gt;。原因通常有两个。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一是 PATH 没刷新。&lt;/strong&gt; 用官方脚本或 brew 装完，当前这个终端进程还拿着老的 PATH。重开一个终端再试，八成就好了。如果你当时用了 &lt;code&gt;--no-modify-path&lt;/code&gt;（比如给 Ansible、Nix 托管环境用），那得你自己把二进制目录加进 PATH。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;二是 Bun / pnpm 把 postinstall 拦了。&lt;/strong&gt; 这个是 npm 包装法的经典坑：&lt;code&gt;@opencode/cli&lt;/code&gt; 靠一个 postinstall 脚本去挑对应平台的原生二进制，而 Bun 和 pnpm 默认会拦掉生命周期脚本。结果就是包「装上了」，真正的二进制没落下来，&lt;code&gt;opencode&lt;/code&gt; 一跑就找不到文件。&lt;/p&gt;
&lt;p&gt;修复办法是重装时显式放行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Bun&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bun install -g --trust @opencode/cli
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# pnpm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pnpm add -g --allow-build&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;@opencode/cli @opencode/cli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;yarn、Vite+（&lt;code&gt;vp install -g @opencode/cli&lt;/code&gt;）、npm 不需要额外参数。装完先确认一下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;which opencode
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;一启动就崩opentui-render-library&#34;&gt;一启动就崩：OpenTUI render library&lt;/h2&gt;
&lt;p&gt;如果你看到的是这一行，说明程序进了启动阶段，但终端 UI 的原生渲染库没能加载：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ERROR service=default e=Failed to initialize OpenTUI render library:
Failed to open library &amp;#34;…/opentui-xxxx.dll&amp;#34;: error code 126
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这是 v1.0 之后 OpenCode 改用 OpenTUI 渲染 TUI 后引入的一类问题，GitHub 上有好几个变体。分平台看：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linux（很隐蔽的一种）：&lt;code&gt;/tmp&lt;/code&gt; 被挂成了 &lt;code&gt;noexec&lt;/code&gt;。&lt;/strong&gt; OpenCode 会往临时目录里解压并加载 &lt;code&gt;.so&lt;/code&gt;，如果 &lt;code&gt;/tmp&lt;/code&gt; 禁止执行，库加载就会失败。查一下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mount | grep /tmp        &lt;span style=&#34;color:#75715e&#34;&gt;# 看有没有 noexec&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有的话，把临时目录指到一个允许执行的路径，或者让运维去掉 &lt;code&gt;noexec&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export TMPDIR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/var/tmp    &lt;span style=&#34;color:#75715e&#34;&gt;# 或者你项目下任意可执行的目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Windows：DLL 打不开（error code 126）。&lt;/strong&gt; 这种多半是安装包损坏或杀软拦截了动态库。重新下一次独立二进制，或者换个版本装。顺便说一句，v2 在 Windows 上&lt;strong&gt;没有包管理器配方&lt;/strong&gt;——别去翻 Chocolatey / Scoop / Winget，装独立二进制或者干脆进 WSL。&lt;/p&gt;
&lt;p&gt;不管哪个平台，第一步都该是让错误打在终端上，而不是只写进日志：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode --print-logs
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode --log-level DEBUG
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;--print-logs&lt;/code&gt; 会把日志同时输出到终端，比事后去翻日志文件快得多。&lt;/p&gt;
&lt;h2 id=&#34;模型找不到providermodelnotfounderror&#34;&gt;模型找不到：ProviderModelNotFoundError&lt;/h2&gt;
&lt;p&gt;报错长这样：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ProviderModelNotFoundError
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;意思只有一句：&lt;strong&gt;你引用了一个不存在（或名字写错）的模型。&lt;/strong&gt; 两个检查点。&lt;/p&gt;
&lt;p&gt;第一，&lt;strong&gt;格式必须是 &lt;code&gt;&amp;lt;providerId&amp;gt;/&amp;lt;modelId&amp;gt;&lt;/code&gt;&lt;/strong&gt;。官方给的例子：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;openai/gpt-4.1
openrouter/google/gemini-2.5-flash
opencode/kimi-k2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;注意 OpenRouter 这种中间商是两段斜杠：&lt;code&gt;provider&lt;/code&gt; 是 &lt;code&gt;openrouter&lt;/code&gt;，后面跟的是上游的 &lt;code&gt;google/gemini-2.5-flash&lt;/code&gt;。手填很容易漏一段。&lt;/p&gt;
&lt;p&gt;第二，&lt;strong&gt;就算 provider 那边确实有这个模型，OpenCode 也可能不认&lt;/strong&gt;。因为它依赖 models.dev 维护的模型清单，清单里没有的模型，即使 OpenRouter 自己接受，也会报 &lt;code&gt;ProviderModelNotFoundError&lt;/code&gt;（GitHub issue #916 就是这个情况——&lt;code&gt;mistralai/mixtral-8x7b-instruct&lt;/code&gt; 不在 models.dev 的 openrouter 列表里）。&lt;/p&gt;
&lt;p&gt;所以正确姿势是先让它把可用模型列出来，照抄名字：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode models              &lt;span style=&#34;color:#75715e&#34;&gt;# 列出所有模型，格式 provider/model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode models anthropic    &lt;span style=&#34;color:#75715e&#34;&gt;# 只看某一家&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode models --refresh    &lt;span style=&#34;color:#75715e&#34;&gt;# 强制刷新模型缓存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果模型确实存在但列表里没有，那就是 models.dev 还没收录——换一个等价模型，或者等清单更新，别跟报错死磕。&lt;/p&gt;
&lt;h2 id=&#34;provideriniterror配置或凭证坏了&#34;&gt;ProviderInitError：配置或凭证坏了&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ProviderInitError
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;官方对它的定性很直接：&lt;strong&gt;你的 provider 配置无效或已损坏。&lt;/strong&gt; 排查分两步。&lt;/p&gt;
&lt;p&gt;先按 provider 文档核对一遍配置对不对（baseURL、API Key、模型白名单这些）。如果配置看着没问题还是报错，就轮到「清掉本地存储重来」这一步：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf ~/.local/share/opencode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;⚠️ 动手前想清楚：这个目录里除了损坏的配置，还有 &lt;code&gt;auth.json&lt;/code&gt;（你的 API Key、OAuth token）和 &lt;code&gt;project/&lt;/code&gt;（会话与消息历史）。&lt;strong&gt;删了会话就没了。&lt;/strong&gt; 稳妥的做法是先备份，或者只想修凭证的话，单独处理 &lt;code&gt;auth.json&lt;/code&gt; 再跑一次 &lt;code&gt;/connect&lt;/code&gt;。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;清完重启，在 TUI 里重新连一次：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/connect
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ai_apicallerror-和-failed-to-fetch-modelsdev&#34;&gt;AI_APICallError 和 Failed to fetch models.dev&lt;/h2&gt;
&lt;p&gt;这两个都属于「能启动、能进界面，但一调用就出问题」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;AI_APICallError&lt;/code&gt;，或者模型参数相关的报错&lt;/strong&gt;，多数是 provider 包版本旧了。OpenCode 是&lt;strong&gt;按需动态下载 provider 包并本地缓存&lt;/strong&gt;的，旧缓存在 provider 改了接口之后就会对不上。清缓存让它重拉：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;rm -rf ~/.cache/opencode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重启后它会重新装最新一版 provider 包，兼容性问题通常就此消失。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Failed to fetch models.dev&lt;/code&gt;&lt;/strong&gt; 是另一回事——它连不上模型清单这个源。常见于&lt;strong&gt;离线网络或公司内网&lt;/strong&gt;（GitHub issue #10766 就是内网环境报的）。这时候清缓存没用，要在网络层解决：走代理，或者在企业版里配好离线的模型清单来源。判断方法很简单，看这台机器能不能直连外网；不能，就是这个问题。&lt;/p&gt;
&lt;p&gt;注意别把 &lt;code&gt;~/.cache/opencode&lt;/code&gt;（provider 包缓存）和 &lt;code&gt;~/.local/share/opencode&lt;/code&gt;（配置、凭证、会话）搞混——前者删了无损，后者删了丢数据。&lt;/p&gt;
&lt;h2 id=&#34;桌面版连不上connection-failed&#34;&gt;桌面版连不上：Connection Failed&lt;/h2&gt;
&lt;p&gt;桌面版和 CLI 共用同一个后台服务，所以它有自己专属的一类故障：&lt;strong&gt;弹出 &lt;code&gt;Connection Failed&lt;/code&gt;，或者永远卡在启动画面。&lt;/strong&gt; 根因通常是桌面端被指到了一个连不上的服务地址。按顺序排：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;清掉桌面端记的服务器 URL。&lt;/strong&gt; 在 Home 页点那个带状态点的服务名，打开 Server picker，在 Default server 一栏点 Clear。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;把配置里的 &lt;code&gt;server&lt;/code&gt; 段摘掉。&lt;/strong&gt; 如果你的 &lt;code&gt;opencode.json(c)&lt;/code&gt; 里有 &lt;code&gt;server.port&lt;/code&gt; / &lt;code&gt;server.hostname&lt;/code&gt;，先临时删掉再重启。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;检查 &lt;code&gt;OPENCODE_PORT&lt;/code&gt; 环境变量。&lt;/strong&gt; 设了这个变量，桌面端会拿它当本地服务端口；端口被占或不通就起不来。unset 掉或换一个空闲端口。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;macOS 还有个界面层面的小技巧：菜单里的 &lt;strong&gt;Reload Webview&lt;/strong&gt;，界面空白或卡住时先点它，比重启整个 App 快。&lt;/p&gt;
&lt;h2 id=&#34;linux-复制粘贴失灵--无头环境&#34;&gt;Linux 复制粘贴失灵 / 无头环境&lt;/h2&gt;
&lt;p&gt;在 Linux 上选中文字、按复制没反应，多半不是 OpenCode 的问题，而是&lt;strong&gt;系统根本没装剪贴板工具&lt;/strong&gt;。官方要求按会话类型装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# X11&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install -y xclip
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 或&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install -y xsel
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Wayland&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install -y wl-clipboard
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;OpenCode 会检测你是不是在用 Wayland，是就优先用 &lt;code&gt;wl-clipboard&lt;/code&gt;，否则按 &lt;code&gt;xclip&lt;/code&gt;、&lt;code&gt;xsel&lt;/code&gt; 的顺序找。&lt;/p&gt;
&lt;p&gt;**无头环境（CI、容器、SSH）**连显示都没有，得先起一个虚拟显示：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;apt install -y xvfb
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Xvfb :99 -screen &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; 1024x768x24 &amp;gt; /dev/null 2&amp;gt;&amp;amp;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &amp;amp;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export DISPLAY&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;:99.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;v2-独有的坑共享后台服务卡住&#34;&gt;v2 独有的坑：共享后台服务卡住&lt;/h2&gt;
&lt;p&gt;v2 把会话、权限、工具执行都收归一个&lt;strong&gt;共享后台服务&lt;/strong&gt;管，好处是多客户端（TUI / 桌面 / Web / Docker）能接同一份状态。代价是：服务一旦卡住，所有客户端一起遭殃，表现还挺像「程序坏了」。&lt;/p&gt;
&lt;p&gt;先看状态，再考虑重启：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode service status
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode service restart      &lt;span style=&#34;color:#75715e&#34;&gt;# 卡住就重启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;临时想绕开共享服务、让这个终端用一份干净的服务，加 &lt;code&gt;--standalone&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode --standalone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不想让它默认起共享服务，可以显式关掉：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode service set disabled true
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但记住两点：关掉之后 Web 端的 &lt;code&gt;opencode pair&lt;/code&gt; 就不能用了（它依赖共享服务）；&lt;code&gt;--server&lt;/code&gt; 和手动 &lt;code&gt;opencode service start&lt;/code&gt; 仍然可用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ 排错时&lt;strong&gt;不要&lt;/strong&gt;手贱去删或改 &lt;code&gt;~/.local/state/opencode/service.json&lt;/code&gt;、&lt;code&gt;~/.config/opencode/service.json&lt;/code&gt;，也别去动 &lt;code&gt;~/.local/share/opencode/opencode.db&lt;/code&gt;。这些是服务的注册信息和会话数据库，乱动只会把好好的会话搞坏。要清就整个用 &lt;code&gt;opencode uninstall&lt;/code&gt; 走正规流程。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;三个平台的差异&#34;&gt;三个平台的差异&lt;/h2&gt;
&lt;p&gt;同一行报错，在不同系统上的含义可能完全不一样。记一张表比死记命令有用：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;平台&lt;/th&gt;
          &lt;th&gt;高频坑&lt;/th&gt;
          &lt;th&gt;处理方向&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;macOS&lt;/td&gt;
          &lt;td&gt;桌面版界面空白/冻结&lt;/td&gt;
          &lt;td&gt;菜单 Reload Webview；默认存储 &lt;code&gt;~/.local/share/opencode&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Linux&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;/tmp&lt;/code&gt; noexec、剪贴板工具缺失、Wayland/X11&lt;/td&gt;
          &lt;td&gt;改 &lt;code&gt;TMPDIR&lt;/code&gt;、装 xclip/wl-clipboard、必要时 &lt;code&gt;OC_ALLOW_WAYLAND=1&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Windows&lt;/td&gt;
          &lt;td&gt;不能用包管理器装；桌面版要 WebView2；DLL 加载失败&lt;/td&gt;
          &lt;td&gt;下独立二进制或进 WSL；装/更新 WebView2&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Docker&lt;/td&gt;
          &lt;td&gt;容器内无显示、无剪贴板&lt;/td&gt;
          &lt;td&gt;用版本化 tag；无头场景按上节起 Xvfb&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Linux 桌面版在 Wayland 下窗口空白或 compositor 报错时，可以试：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;OC_ALLOW_WAYLAND&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; opencode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果这样反而更糟，就摘掉这个变量，改用 X11 会话启动。&lt;/p&gt;
&lt;h2 id=&#34;不要踩的坑&#34;&gt;不要踩的坑&lt;/h2&gt;
&lt;p&gt;一张清单，都是我在上面各节里踩过、或看到别人反复踩的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;别同时装多条安装路径。&lt;/strong&gt; curl、brew、npm 各往 PATH 里塞一个叫 &lt;code&gt;opencode&lt;/code&gt; 的二进制，混装之后你根本不知道跑的是哪个。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;别把 v1 的报错当 v2 解。&lt;/strong&gt; 包名、服务模型都变了，&lt;code&gt;opencode-ai&lt;/code&gt; 时代的经验经常不适用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;别删 &lt;code&gt;service.json&lt;/code&gt; / &lt;code&gt;opencode.db&lt;/code&gt;。&lt;/strong&gt; 那是服务的注册与会话数据，不是缓存。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;别把 &lt;code&gt;~/.local/share/opencode&lt;/code&gt; 当缓存删。&lt;/strong&gt; 它含凭证和会话，清之前一定备份。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;别信第三方对比博客里的命令。&lt;/strong&gt; 它们的版本号和包名常年过时，命令一律以 &lt;code&gt;opencode.ai&lt;/code&gt; 官方文档和 &lt;code&gt;registry.npmjs.org&lt;/code&gt; 为准。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;别在 Windows 上找包管理器配方。&lt;/strong&gt; v2 明确没有 Chocolatey / Scoop / Winget。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;修好之后怎么验证&#34;&gt;修好之后怎么验证&lt;/h2&gt;
&lt;p&gt;链接通了、模型能列出来了，用这几条确认整条链路是活的：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode --version                 &lt;span style=&#34;color:#75715e&#34;&gt;# 装的是哪个版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode service status            &lt;span style=&#34;color:#75715e&#34;&gt;# 共享服务在不在&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode models | head             &lt;span style=&#34;color:#75715e&#34;&gt;# 能不能列出模型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode run &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;只回一句话：pong&amp;#34;&lt;/span&gt;     &lt;span style=&#34;color:#75715e&#34;&gt;# 真打一次模型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最后一条 &lt;code&gt;opencode run&lt;/code&gt; 最关键——它绕开 TUI，直接跑一次真实的模型调用，能一次区分「界面渲染问题」和「后端调用问题」。如果你的问题是前者，它会正常返回；是后者，报错会直接打在终端上。&lt;/p&gt;
&lt;p&gt;需要看细节时，日志在 &lt;code&gt;~/.local/share/opencode/log/&lt;/code&gt;（最近留 10 个文件）。v2 的日志每行都带 &lt;code&gt;run=&lt;/code&gt; 和 &lt;code&gt;role=&lt;/code&gt; 字段，只看服务侧：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;role=server&amp;#39;&lt;/span&gt; ~/.local/share/opencode/log/opencode.log | tail -50
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;faq&#34;&gt;FAQ&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q：日志到底在哪？怎么开详细日志？&lt;/strong&gt;
A：macOS/Linux 是 &lt;code&gt;~/.local/share/opencode/log/&lt;/code&gt;；Windows 按 &lt;code&gt;WIN+R&lt;/code&gt; 填 &lt;code&gt;%USERPROFILE%\.local\share\opencode\log&lt;/code&gt;。想更细就加 &lt;code&gt;--log-level DEBUG&lt;/code&gt;，想直接打在终端就加 &lt;code&gt;--print-logs&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q：&lt;code&gt;ProviderInitError&lt;/code&gt; 清了存储，我的会话还在吗？&lt;/strong&gt;
A：不在。&lt;code&gt;~/.local/share/opencode&lt;/code&gt; 里既有损坏配置也有 &lt;code&gt;auth.json&lt;/code&gt; 和会话数据，&lt;code&gt;rm -rf&lt;/code&gt; 是一锅端。要保会话就只处理凭证，别整目录删。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q：为什么模型 provider 明明有，OpenCode 却说找不到？&lt;/strong&gt;
A：它靠 models.dev 的清单，清单没收录就没法引用（issue #916）。用 &lt;code&gt;opencode models&lt;/code&gt; 看实际有哪些，照抄名字最保险。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q：卸载想保留配置和会话怎么办？&lt;/strong&gt;
A：先预览再执行，要留就加参数：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode uninstall --dry-run
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;opencode uninstall --keep-config --keep-data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Q：桌面版和 CLI 能同时用吗？&lt;/strong&gt;
A：能，它们连的是同一个共享后台服务——这也正是「CLI 好好的、桌面版却 Connection Failed」的原因：问题不在服务本身，在桌面端配的地址。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q：新项目到底该装 v1 还是 v2？&lt;/strong&gt;
A：新装一律 v2。还在跑 v1 且依赖某个 v1 插件的话，先在隔离环境验证插件在 v2 上能跑，再换生产机器。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q：这机器连不上外网，OpenCode 还能用吗？&lt;/strong&gt;
A：能用，但走的是内部模型 API 的话，&lt;code&gt;Failed to fetch models.dev&lt;/code&gt; 会跟着你——要么走代理，要么在企业版里配离线清单。&lt;/p&gt;
&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;/h2&gt;
&lt;p&gt;把 OpenCode 这一路用下来，我的感受是：它的报错其实并不算多，就是&lt;strong&gt;面铺得广&lt;/strong&gt;——原生渲染、动态 provider 包、共享服务、多客户端，每一层都能单独出问题。所以排错的关键不是背命令，而是先定位你卡在哪一层：是启动阶段（OpenTUI / 配置），是模型层（ProviderModelNotFoundError / AI_APICallError），还是连接层（共享服务 / 桌面端地址）。&lt;/p&gt;
&lt;p&gt;先看 &lt;code&gt;opencode --print-logs&lt;/code&gt; 把错误打到眼前，再对着这张表往下走，大部分问题三步之内能修好。&lt;/p&gt;
&lt;p&gt;（相关阅读：本系列已经写完的三篇——&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260719-opencode-architecture/&#34; &gt;《OpenCode 源码深度拆解：Effect TS 代数效应系统构建的智能编码 Agent》&lt;/a&gt;、&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20261004-opencode-installation-guide/&#34; &gt;《OpenCode 安装完全指南：从一行 curl 到 v2 共享服务，附 v1 迁移！》&lt;/a&gt;、&lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20261005-opencode-vs-claude-code-vs-cursor/&#34; &gt;《OpenCode vs Claude Code vs Cursor：三种 Coding Agent 哲学，你该把方向盘交给谁！》&lt;/a&gt;。如果你偏爱「状态码速查表」那种写法，可以对照 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20261003-jev-api-error-troubleshooting/&#34; &gt;《Jev 报错排查完全指南：401、422、429、529 一次讲透！》&lt;/a&gt;。）&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a class=&#34;link&#34; href=&#34;https://github.com/anomalyco/opencode&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/anomalyco/opencode&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
