1. 为什么浏览器 Agent 总是卡在 Key 上
OpenCode 这个项目最近在 GitHub 上冲到 19 万 Star,核心卖点很直接:它是一个开源的编码 Agent,能通过 Chrome 的 CDP 协议直接接管浏览器,自己打开页面、自己输入、自己点击。你只要说一句「帮我启动调试模式的 Chrome,跳转到某站点搜一下最近的新闻」,它真的会照做。配合 Oh My OpenAgent(OMO)插件,还能把单个 Agent 拆成主编排、架构师、执行者多角色协作,任务自动拆解分发。
但真正上手之后,很多人会卡在同一个地方:Key 太散了。OpenCode 本体要配一个模型供应商,OMO 里每个子 Agent(Sisyphus、Prometheus、Atlas、Explore 等)又各自要指定模型,浏览器 Agent 跑长任务时还会反复调用模型。如果你手上有好几家供应商的 Key,配置就会变成一场灾难——settings.json 里塞一份、config.toml 里塞一份、OMO 的 jsonc 里再塞一份,改一个模型要翻三个文件。
这篇要解决的就是这件事:用 TaoToken 的统一 Key 和 API 通道,把 OpenCode 本体、OMO 多 Agent、浏览器自动化链路全部收敛到一套配置上。适合谁?已经在用 Claude Code 或 Codex、想试试 OpenCode 浏览器 Agent、但不想被多供应商 Key 管理拖住的人。下面给的是可以直接复制的配置骨架,以及一次跑通浏览器操控的验证步骤。
2. TaoToken 前置:统一 Key 与 API 通道
TaoToken 在这里扮演的角色是「一个 Key 打通所有模型调用」。你不需要在 OpenCode 里分别填硅基流动、Anthropic、OpenAI 的 Key,而是把 TaoToken 当成统一的 API 入口,OpenCode 和 OMO 都指向它。
先拿到 Key。访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台创建 API Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。API 基础地址统一用 https://taotoken.net/api (这个不加 UTM)。
注意:Key 只在创建时完整显示一次,复制后先存到本地环境变量或密码管理器,别直接写进会提交到 Git 的配置文件。
TaoToken 的 API 兼容 OpenAI 风格的/v1/chat/completions和 Anthropic 风格的/v1/messages,所以 OpenCode 里无论是走 OpenAI 兼容 provider 还是 Anthropic provider,都能指向同一个 base URL。这一点对 OMO 特别关键——OMO 的不同 Agent 可以挂不同模型,但它们共享同一个 Key 和同一个入口,配置量直接砍半。
如果你还没装 OpenCode,先去 https://opencode.ai/zh 下载对应系统的版本,CLI 和桌面版都行。但要用 OMO 的话,建议用 CLI 版,插件生态在 CLI 下更完整。
3. 可复制配置:settings.json / config.toml / CC Switch
OpenCode 的配置分几层:全局配置、provider 配置、OMO 的 Agent 配置。下面按文件给骨架,你按自己系统改路径即可。
3.1 环境变量(先做这一步)
把 Key 和 base URL 写进 shell 配置,避免硬编码:
# ~/.zshrc 或 ~/.bashrc export TAOTOKEN_API_KEY="sk-你的TaoTokenKey" export TAOTOKEN_BASE_URL="https://taotoken.net/api"改完执行source ~/.zshrc生效。这样 OpenCode 和 OMO 都能读到同一个 Key。
3.2 OpenCode 的 settings.json 骨架
OpenCode 的 provider 配置支持 OpenAI 兼容格式。在配置目录下建settings.json(Windows 在%APPDATA%\opencode,macOS/Linux 在~/.config/opencode):
{ "provider": { "taotoken": { "type": "openai", "baseURL": "https://taotoken.net/api/v1", "apiKey": "{env:TAOTOKEN_API_KEY}", "models": { "claude-sonnet": { "name": "claude-sonnet-4" }, "gpt-4o": { "name": "gpt-4o" }, "glm": { "name": "glm-4-plus" } } } }, "defaultModel": "taotoken/claude-sonnet" }{env:TAOTOKEN_API_KEY}是 OpenCode 的环境变量插值语法,这样 Key 不会明文躺在文件里。baseURL末尾的/v1别漏,OpenAI 兼容接口需要它。
3.3 config.toml 骨架(CLI 用户)
部分 OpenCode CLI 版本读config.toml,结构等价:
[provider.taotoken] type = "openai" base_url = "https://taotoken.net/api/v1" api_key = "${TAOTOKEN_API_KEY}" [provider.taotoken.models.claude-sonnet] name = "claude-sonnet-4" [provider.taotoken.models.glm] name = "glm-4-plus" [default] model = "taotoken/claude-sonnet"3.4 CC Switch 配置片段
如果你之前用 CC Switch 管理 Claude Code 的多供应商,可以复用它的切换逻辑,把 TaoToken 加成一个 profile:
{ "profiles": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKeyEnv": "TAOTOKEN_API_KEY", "provider": "anthropic", "models": { "default": "claude-sonnet-4", "fast": "claude-haiku" } } }, "active": "taotoken" }这样在 Claude Code 和 OpenCode 之间切换时,指向的是同一个 Key 和同一个入口,不用来回改环境变量。
3.5 OMO 的 Agent 配置
OMO 的配置文件在~/.config/opencode/oh-my-openagent.jsonc,推荐用.jsonc后缀,支持注释。核心是把每个 Agent 的 model 指向 TaoToken 下的模型:
{ "$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-openagent/dev/assets/oh-my-opencode.schema.json", "agents": { // 主编排器,任务拆解分发,用强模型 "sisyphus": { "model": "taotoken/claude-sonnet" }, "prometheus": { "model": "taotoken/claude-sonnet" }, "atlas": { "model": "taotoken/claude-sonnet" }, // 探索类,用快模型省成本 "explore": { "model": "taotoken/glm" }, "librarian": { "model": "taotoken/glm" }, "multimodal-looker": { "model": "taotoken/glm" } }, "categories": { "ultrabrain": { "model": "taotoken/claude-sonnet" }, "quick": { "model": "taotoken/glm" }, "writing": { "model": "taotoken/glm" } } }模型名要和你settings.json里models定义的 key 对应。OMO 安装可以直接在 OpenCode CLI 里让它执行官方安装指令,过程中问是否有 ChatGPT/Claude 订阅时全选 No,因为模型走 TaoToken。
4. 验证:让 Agent 自主操控浏览器
配置写完,先验证模型通道通不通,再验证浏览器操控。
4.1 验证 API 通道
用 curl 打一发,确认 Key 和 base URL 正确:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4", "messages": [{"role": "user", "content": "回复 OK 两个字母"}] }'返回里有choices[0].message.content且内容是 OK,说明通道没问题。如果返回 401,检查 Key;返回 404,检查/v1有没有漏。
4.2 验证 OpenCode 能读到模型
在 OpenCode CLI 里输入/models,应该能看到taotoken/claude-sonnet等条目。选中它,随便问一句,能正常回复就说明 provider 配置生效。
4.3 验证浏览器 Agent
这是关键一步。在 OpenCode 会话里直接说:
帮我启动一个调试模式的 Chrome,跳转到百度,搜索一下 OpenCode 浏览器 Agent 的新闻。
OpenCode 会通过 CDP 启动一个带调试端口的 Chrome 实例,然后接管它。你应该看到浏览器自己打开、地址栏自己输入、搜索结果自己出现。整个过程你不需要碰鼠标。
如果它只是回复文字而没有真的开浏览器,通常是 CDP 没连上。检查两点:一是本机 Chrome 是否允许远程调试,二是 OpenCode 的浏览器工具是否启用。可以在会话里问它「你现在能控制浏览器吗」,它会自检并告诉你缺什么。
4.4 验证 OMO 多 Agent
在会话第一个提示词前加ulw(ultra work),Sisyphus 会以最大深度理解你的需求。比如:
ulw 帮我分析当前项目的依赖,找出可以升级的包,并给出升级后的兼容性风险。
你会看到任务被拆解、分发给不同子 Agent 并行处理。这一步能跑通,说明 OMO 的 Agent 配置和 TaoToken 模型映射都对了。
5. 本篇常见错排查
报错一:401 Unauthorized。九成是 Key 没读到。检查环境变量是否source生效,echo $TAOTOKEN_API_KEY有没有值。如果用了{env:...}插值,确认 OpenCode 版本支持这个语法。
报错二:404 Not Found。base URL 少了/v1。OpenAI 兼容接口必须是https://taotoken.net/api/v1,而 Anthropic 风格是https://taotoken.net/api,两者别混。
报错三:模型名不存在。OMO 里写的taotoken/xxx必须在settings.json的models里定义过。没定义就会报 model not found。改完配置记得重启 OpenCode。
报错四:浏览器没反应。CDP 端口被占用或 Chrome 已在运行。先完全退出 Chrome,再让 OpenCode 启动。macOS 上可以用pkill -f "Google Chrome"清干净。
报错五:OMO Agent 全部用同一个模型导致慢。这是配置问题不是 bug。把 explore、librarian 这类探索型 Agent 换成快模型,主编排器保留强模型,速度和成本都更合理。
报错六:多会话并行时互相干扰。OpenCode 支持同项目多 Agent 并行,但每个会话要独立的工作目录或分支。别让两个 Agent 同时改同一个文件。
6. 把链路固定下来
跑通之后,建议把配置固化:环境变量写进 shell 配置,settings.json和oh-my-openagent.jsonc纳入 dotfiles 管理,Key 用环境变量注入而不是明文。这样换机器时三条命令就能恢复整条链路。
后续想验证新模型,直接去模型对话页试 https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite ;长期跑编码和 Agent 任务,用 Coding Plan 更划算 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ;接入细节和参数说明看文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。Claude Code 用户想复用同一套 Key,参考 https://taotoken.net/claude-code?utm_source=taotoken_aicg_blog_end&utm_content=claudecode&utm_campaign=rewrite 。
浏览器 Agent 这条链路一旦跑顺,最爽的场景是那些需要登录、需要点按钮的网页操作——比如配置 Discord Bot 的权限、在后台开通某个服务、抓取需要身份认证的页面。这些以前 webfetch 搞不定的活,现在交给 OpenCode 自己开浏览器点完,你只需要在最后检查一下结果。