1. bsk 借已登录浏览器,模型调用交给 TaoToken 结算
如果你已经把 BrowserSkill 装好,bsk也能看到浏览器扩展,却在 Claude Code 或 Codex 里收到401 Unauthorized,别急着怀疑登录态。bsk 只解决“借用已登录标签页”,不解决 bsk 侧 Agent 的模型通道。先把模型通道切到 TaoToken:到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=browser_skill_bsk 拿 Key,Base URL 填 https://taotoken.net/api。这样 bsk 负责浏览器动作,TaoToken 负责结算,来源 csdn_ugc 的这次实践就是把这两条链路拆开后跑通的。
很多教程把 BrowserSkill 讲成“浏览器自动化神器”,但真正落地时会发现,它只是把浏览器借出去:bskCLI + 扩展 + 你日常已经登录的 Chrome/Edge,Agent 在独立窗口里操作标签页,遇到验证码或扫码会请求你接管。它没有承诺替你解决模型调用额度、API 端点、模型名映射。于是出现一个很典型的割裂:浏览器侧已经能打开后台,模型侧还在用默认 endpoint,任务跑到第一步就断。
这篇不重复讲“登录态多难”,而是给一份可跟做的接入清单:先让 bsk 稳定借到标签页,再把 bsk 所调用的 Agent(Claude Code、Codex、CC Switch 管理的其他入口)切到 TaoToken,最后产出 bsk 任务脚本与结算记录。你不需要重装浏览器,也不需要养测试账号;你只需要把两条链路分别验证。
先记住三个固定值:
- TaoToken 官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=bsk_agent_settlement
- Base URL:
https://taotoken.net/api - Key 占位符:
YOUR_API_KEY
后面所有配置都围绕这三个值展开。bsk 侧 Agent 无论是 Claude Code 还是 Codex,最终都要把模型请求发到 TaoToken,再由 TaoToken 结算到你的账户。
2. 先验证 bsk 链路:扩展、已登录标签页、独立 Agent 窗口
在改模型配置之前,先把浏览器侧跑通。顺序错了会很难排查:明明 Agent 报的是模型 401,你却在反复重装浏览器扩展,最后发现只是 Key 没写对。
建议按下面顺序做一次最小验证。
第一步,确认bskCLI 能在当前 shell 里执行。新开一个终端,执行:
bsk --help如果提示 command not found,说明安装脚本写入的 PATH 没被当前终端加载。重开终端,或在~/.zshrc、~/.bashrc里补上安装目录,然后source一下。不要急着改 Agent 配置,命令都找不到时,配置写得再对也没用。
第二步,确认浏览器扩展已连接。打开你日常用的 Chrome 或 Edge,保持目标平台已经登录。比如你要操作 CSDN 后台、知乎后台、微信公众号后台,就先把这些页面登录好,并保留一个可用标签页。BrowserSkill 的思路不是新建无头实例,而是借用你已经登录的浏览器会话。所以“已登录”是前提,不是安装后的自动结果。
第三步,让 bsk 侧 Agent 做一个只读任务。不要一上来就发布文章或导出全量数据。先让 Agent 打开一个后台页面,读取当前登录账号名称,或者读取页面标题,然后停下来。这个动作能同时验证三件事:
- bsk 能找到浏览器上下文;
- 扩展能把标签页借给 Agent;
- Agent 的模型通道能正常返回。
如果只读任务能完成,说明浏览器链路和模型链路基本通了。再做导出、填表、发布这类写操作,排障范围会小很多。
常见现象与处理:
现象:bsk 提示没有可用浏览器上下文 检查:扩展是否安装并启用;目标浏览器是否正在运行;是否已经登录目标站点 处理:重启浏览器和 bsk 守护进程,保持一个已登录标签页打开 现象:Agent 能启动,但打开的是空白页 检查:bsk 借用的标签页是否被关闭;浏览器是否切到了无痕模式 处理:在普通窗口登录目标平台,重新发起借用 现象:任务撞到验证码后一直停住 检查:是否配置了人工接管 处理:在 bsk 侧确认接管提示,手动完成验证码或扫码,再让任务继续bsk 的价值在于“可见 + 可接管”。它不是黑箱托管,所以你不需要追求完全无人值守。遇到扫码登录、短信验证、确认弹窗,让它停下来找你,比强行绕过更稳。
3. 把 bsk 侧 Agent 切到 TaoToken:Key 和 Base URL 放哪里
浏览器侧通了之后,重点就变成:bsk 调用的 Agent 到底在用哪个模型端点。
bsk 本身是浏览器技能层,它会把任务交给 Claude Code、Codex、Cursor 这类 Agent。Agent 再去请求模型。如果你不显式配置,Agent 可能还在用默认端点,或者用了一个已经失效的 Key。表现就是401、403、model not found、连接超时。
所以正确做法是:在 Agent 的配置层写入 TaoToken 的 Base URL 和 Key。TaoToken 的 Base URL 固定为:
https://taotoken.net/apiKey 从 TaoToken 控制台获取。如果你还没有 Key,可以从官网入口进入:
https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=bsk_agent_key
拿到 Key 后,不要直接写进脚本仓库。建议用环境变量或本地配置文件保存。本文所有示例都用YOUR_API_KEY占位,你替换成自己的 Key 即可。
这里要特别强调:Claude Code 和 Codex 的配置格式不同,不能把ANTHROPIC_*环境变量套到 Codex 上,也不能把 Codex 的config.toml直接复制给 Claude Code。两者协议、配置键、读取位置都不一样。下面分开写。
4. Claude Code:settings.json 写 ANTHROPIC_*,不要套给 Codex
Claude Code 读取的是 Anthropic 风格配置。常见做法是在settings.json里写env,或者直接在 shell 里导出ANTHROPIC_*环境变量。为了可复现,推荐把配置写进用户级settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_API_KEY": "YOUR_API_KEY", "ANTHROPIC_MODEL": "claude-sonnet-4-5" } }文件位置按你的 Claude Code 安装方式决定,通常在用户目录下的.claude/settings.json。如果已经存在该文件,不要整体覆盖,把env字段合并进去。
写完后新开一个终端,让环境变量生效。可以用下面命令快速检查当前 shell 里是否读到了 Base URL:
echo "$ANTHROPIC_BASE_URL"如果输出不是https://taotoken.net/api,说明你改的不是当前终端读取的文件,或者需要重启 IDE / Agent 进程。很多“配置明明写了却还报 401”的问题,都是因为老进程还在用旧环境。
Claude Code 侧验证时,不要直接跑 bsk 的写操作。先单独让 Claude Code 做一个最小对话请求,确认模型通道可用。然后再回到 bsk,把任务交给它。分层验证的好处是:一旦报错,你能立刻判断是模型配置错,还是浏览器借用失败。
另外,ANTHROPIC_MODEL不要凭感觉填。TaoToken 控制台里能看到可用模型列表,填控制台里实际存在的模型名。如果模型名写错,常见报错是model not found或invalid model,这不是 Key 的问题。
Claude Code 配置入口可参考:
https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=bsk_claude_code_doc
5. Codex:config.toml 写 provider,不要塞 ANTHROPIC_*
Codex 使用config.toml,配置模型供应商的方式和 Claude Code 完全不同。典型结构如下:
model = "gpt-5-codex" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "responses"然后在 shell 里提供 Key:
export TAOTOKEN_API_KEY="YOUR_API_KEY"如果你用~/.zshrc或~/.bashrc,可以写进去并source。但不要把 Key 提交到 Git 仓库,也不要在共享脚本里硬编码。需要多人协作时,用本地.env或系统密钥管理,把YOUR_API_KEY留给模板。
Codex 配置文件通常在~/.codex/config.toml。修改后重启 Codex 会话。验证顺序同样是先做最小请求,再交给 bsk。
这里最容易踩的坑是:看到 Claude Code 用ANTHROPIC_BASE_URL,就把同样变量写进 Codex 启动脚本。Codex 不会读它。结果就是 Claude Code 通了,Codex 还走默认端点,bsk 任务一半能跑、一半报错。正确做法是:
- Claude Code:
settings.json+ANTHROPIC_* - Codex:
config.toml+model_providers+env_key - 两者共用同一个 TaoToken Base URL:
https://taotoken.net/api - 两者分别使用各自的 Key 读取方式,不要交叉套用
如果你同时装了 Claude Code 和 Codex,建议给它们分别设置不同的本地 Key 备注,例如taotoken-claude、taotoken-codex。这样在 TaoToken 控制台看用量时,能快速判断是哪一个 Agent 产生的请求。
6. CC Switch 三件套:供应商、密钥、默认模型
如果你用 CC Switch 管理多个 Agent,配置入口会更集中。但它本质上还是三件事:供应商档案、密钥、默认模型。可以把它理解成“三件套”:
- 供应商:填写 TaoToken 的 Base URL,即
https://taotoken.net/api; - 密钥:填写
YOUR_API_KEY,并确认当前激活的是 TaoToken 档案; - 默认模型:从 TaoToken 控制台复制可用模型名,不要留空,也不要写一个控制台不存在的名字。
一个供应商档案可以抽象成下面这种结构,具体字段名以你本机 CC Switch 版本为准:
{ "id": "taotoken", "name": "TaoToken", "baseUrl": "https://taotoken.net/api", "apiKey": "YOUR_API_KEY", "defaultModel": "claude-sonnet-4-5", "providerType": "anthropic-compatible" }如果你还给 Codex 建档案,providerType要改成 OpenAI 兼容类型,并且不要在 Codex 档案里填 Anthropic 的模型名。CC Switch 的作用是切换,不是混合。一个档案对应一种协议,切换后要重启对应 Agent,否则旧进程可能还在用上一个供应商。
CC Switch 场景下最常见的故障是“切了但没生效”。处理步骤:
# 1. 确认当前激活档案 # 在 CC Switch 界面查看,或读取它管理的本地配置文件 # 2. 确认 Base URL 没有多余路径 # 正确:https://taotoken.net/api # 错误:https://taotoken.net/api/chat/completions 之类的手工拼接 # 3. 重启 Claude Code / Codex 会话 # 4. 再做一次最小对话请求如果你发现切换后 Claude Code 正常、Codex 报 401,优先检查 Codex 档案的env_key是否指向了正确的环境变量。CC Switch 可以帮你管理档案,但最终读取 Key 的还是 Agent 本身。
需要创建或查看 Key 时,从这里进:
https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=cc_switch_key
7. bsk 任务脚本与结算记录:让每次借用都有迹可循
bsk 解决浏览器借用,TaoToken 解决模型结算。两者接起来之后,建议给每次任务加一个task_id,并生成一份本地结算记录。这样你既知道浏览器帮了什么忙,也知道模型花了多少。
下面是一个可运行的本地包装脚本。它不调用未公开的 bsk 子命令,只负责准备环境、生成任务标记、输出任务描述,并留下结算记录入口。你把它保存成run-bsk-task.sh,按本机 bsk 的实际用法把任务交给 Agent 即可。
#!/usr/bin/env bash set -euo pipefail export TAOTOKEN_API_KEY="YOUR_API_KEY" export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY" TASK_ID="bsk-$(date +%Y%m%d-%H%M%S)" RECORD_DIR=".bsk" RECORD_FILE="${RECORD_DIR}/settlement-${TASK_ID}.jsonl" mkdir -p "$RECORD_DIR" printf '{"task_id":"%s","provider":"taotoken","base_url":"https://taotoken.net/api","agent":"claude-code","started_at":"%s"}\n' \ "$TASK_ID" "$(date -Iseconds)" >> "$RECORD_FILE" cat <<'TASK' 请把下面任务交给 bsk 侧 Agent: 借用当前已登录的 Chrome 标签页,打开目标后台,导出本月报表到 ~/Downloads。 遇到验证码、短信、扫码登录、确认弹窗时请求我接管。 任务结束后,在 TaoToken 控制台核对本次用量。 TASK printf '{"task_id":"%s","status":"pending_console_check","console":"https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=bsk_settlement"}\n' \ "$TASK_ID" >> "$RECORD_FILE" echo "任务标记:$TASK_ID" echo "本地结算记录:$RECORD_FILE"运行:
chmod +x run-bsk-task.sh ./run-bsk-task.sh脚本会输出一段任务描述,你把它交给 bsk 侧 Agent。Agent 干活期间,bsk 会借用你已登录的标签页;遇到人工接管点,你处理完它继续。任务结束后,回到 TaoToken 控制台,按时间范围查看本次请求的模型、输入输出用量和费用,再把结果追加到同一份 JSONL 里。
一条结算记录可以长这样:
{ "task_id": "bsk-20260905-001", "agent": "claude-code", "model": "claude-sonnet-4-5", "browser_action": "borrow_login_tab", "target": "https://example.com/admin/export", "takeover": ["captcha", "qr_login"], "input_tokens": 1234, "output_tokens": 567, "cost": "以控制台显示为准", "status": "done" }不要编造用量数字。input_tokens、output_tokens、cost都从 TaoToken 控制台读取。这份记录的价值不是做账,而是让你在任务变多之后还能回答三个问题:哪个 Agent 在用、哪个任务超了、哪个 Key 该轮换。
如果你一次跑多个平台,建议把target写成平台名 + 页面类型,例如csdn:article_publish、wechat:qr_login、zhihu:draft_save。这样月底回看时,能直接把模型消耗和浏览器任务对应起来。
8. 排障表:401、404、借不到标签页、结算对不上
下面这张表按“先分层、再定位”的顺序整理,建议收藏。
| 现象 | 优先检查 | 处理方式 |
|---|---|---|
401 Unauthorized | Agent 是否读到 TaoToken Key | 检查settings.json/config.toml/ CC Switch 当前档案;重开终端和 Agent |
403 Forbidden | Key 权限、模型权限、账户状态 | 确认 Key 未失效;确认模型在控制台可用;换一个可用模型测试 |
model not found | 模型名是否写错 | 从 TaoToken 控制台复制模型名;不要凭记忆拼写 |
bsk: no browser context | 扩展、浏览器、登录态 | 重启浏览器和 bsk;保持普通窗口已登录标签页 |
| Agent 打开空白页 | 借用的标签页是否被关闭 | 重新登录目标平台;避免无痕窗口;重新发起任务 |
| 任务卡在验证码 | 人工接管是否开启 | 在 bsk 侧完成接管;不要强行跳过 |
| 结算记录对不上 | 多 Agent 共用 Key、无 task_id | 给 Claude Code 和 Codex 分开 Key;每次任务写task_id |
| Claude Code 通了、Codex 报错 | 是否把ANTHROPIC_*套给 Codex | Codex 改回config.toml+model_providers |
排障时记住一个原则:bsk 报错先看浏览器,Agent 报错先看模型。两者同时报错时,先修模型通道,再修浏览器借用。因为模型通道可以用最小对话验证,浏览器借用需要保持登录态,变量更多。
9. 安全边界与最小权限清单
BrowserSkill 借的是你真实登录的浏览器,所以用它做自动化时,边界要比普通脚本更清楚。
建议至少做到:
- 只借指定标签页,任务结束归还,不碰其他窗口;
- 遇到验证码、扫码、确认弹窗,必须人工接管;
- 涉及资金、隐私、对外发布的账号,先跑只读任务;
- API Key 不写进仓库,不截屏泄露,不放在共享脚本;
- 给 Claude Code 和 Codex 使用不同的本地 Key 备注;
- 每次任务写
task_id,并在 TaoToken 控制台核对用量; - bsk 任务脚本只在本地执行,不把生产库连接串放进 Agent 任务;
- 如果任务需要读数据库,先导出脱敏文件,再由本地脚本处理。
TaoToken 在这里承担的是模型结算层。它不改变 bsk 的浏览器权限,也不替你决定哪些页面能操作。所以“可见 + 可接管”仍然是底线:AI 在独立窗口里干活,你能看到;遇到它过不去的步骤,它停下来;你确认之后,它继续。
10. 文末 CTA:按顺序跑通模型对话、Coding Plan、创建 Key 与 Claude Code 文档
如果你还没有开始配置,建议按下面顺序走,不要跳步。
第一步,先验证模型对话是否可用,确认 Base URL 和 Key 能正常返回:
https://taotoken.net/models/detail/chat?utm_source=taotoken_aicg_blog_end&utm_content=browser_skill_bsk_chat
第二步,如果你准备把 Claude Code、Codex 或 bsk 侧 Agent 长期用于编码和浏览器任务,查看 Coding Plan:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=browser_skill_bsk_plan
第三步,创建或管理 API Keys,把YOUR_API_KEY替换成你自己的 Key:
https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=browser_skill_bsk_keys
第四步,Claude Code 的详细配置和文档在这里:
https://taotoken.net/doc/ClaudeCodeAnthropic?utm_source=taotoken_aicg_blog_end&utm_content=browser_skill_bsk_cc
最后再回到本文的主线:bsk 把已登录浏览器借给 AI,TaoToken 给 bsk 侧 Agent 做模型结算。先把 Claude Code 或 Codex 的 Base URL 改成https://taotoken.net/api,再把 Key 换成YOUR_API_KEY对应的真实值,然后用第 7 节的脚本给每个任务打上task_id。这样你得到的不只是一次自动化跑通,而是一套可回查、可结算、可接管的浏览器任务流水线。