BOTBUS / 博客

用 API key 或中转站跑 Claude Code,怎么在手机上远程控制

官方 Remote Control 不支持 API key、Bedrock 和自定义 ANTHROPIC_BASE_URL。这篇讲几种可行办法,以及用 BotBus 时为什么要把中转地址写进 settings.json 的 env。

·

先说结论

如果你的 Claude Code 用的是 API key、中转站、国产模型网关,或者 Amazon Bedrock,官方 Remote Control 用不了:它只认 claude.ai 订阅登录,并且只在请求直连 api.anthropic.com 时可用。想在手机上看任务、审批、续聊,可以走 SSH + tmux、hooks 推送小工具,或者 BotBus 这类跑在电脑上的应用。用 BotBus 时有一个容易踩的坑:手机发起的那一轮由 BotBus 在电脑上启动 claude,它读不到你写在 ~/.zshrc 里的 export,中转地址和 key 要写进 ~/.claude/settings.json 的 env,手机那一轮才用得上。

下面关于 Claude Code 的说法,是 2026 年 10 月 4 日对照 Claude Code 官方文档(Remote Control、环境变量、设置三页)核对的;它更新很快,以官方文档为准。官方 Remote Control 本身怎么用、和其他方案怎么比,前一篇Claude Code Remote Control 的替代方案已经写过,这里不重复。

为什么官方 Remote Control 用不了

Remote Control 文档的「要求」一节写得很直接:

环境变量参考里也写着,从 v2.1.196 起,ANTHROPIC_BASE_URL 指向非官方主机时 Remote Control 会被关掉。哪怕你同时登录着 claude.ai,只要环境里有 ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN 或 apiKeyHelper 在起作用,它也会报“需要 claude.ai 订阅鉴权”。

所以这不是配置没弄对,而是官方方案本来就不覆盖这些接入方式。用中转站、国产模型或者公司网关的人,得另找办法。

几种可行的办法

SSH + tmux。 在 tmux 里跑 claude,手机用 SSH 客户端连回来接上窗口。它用的就是你的登录 shell,.zshrc 里的中转配置原样生效,什么接入方式都行。代价是要自己解决电脑的可达性(VPN、内网穿透),手机键盘上操作终端很累,也没有推送:agent 停下来等你,你不去看就不会知道。

hooks 推送小工具。 借 Claude Code hooks 把权限请求和完成事件发到 ntfy、Telegram 之类的服务。hooks 跑在你自己启动的 claude 进程里,和接入方式无关,所以中转用户也能用。适合只想解决“审批卡住”的人;挑的时候看清消息经过谁的服务器,以及超时是放行还是拒绝。

BotBus。 装在 Mac 上的菜单栏应用,把本机 Claude Code、Codex 等 agent 的任务同步到 iPhone 和 Apple Watch,内容端到端加密。它不检查你的 Claude Code 怎么登录,调用的是你本机已经装好的 claude。下面重点讲它在中转场景下怎么配。

BotBus 下的两条路:终端会话和手机发起的会话

理解这一点就不会踩坑:BotBus 里的 Claude Code 任务来自两个地方,环境变量的来源不一样。

你在终端里开的会话。 在 BotBus 设置里装上 hooks 后,你照常在终端跑 claude,会话状态和权限请求经 hooks 同步到手机。这个进程是你的 shell 起的,.zshrc 里的 ANTHROPIC_BASE_URL、key 都在,中转照常工作,不用改任何东西。

手机上新建或续聊的那一轮。 BotBus 在电脑上用非交互模式起一个 claude -p,这一轮的审批经它的标准输入输出回到手机。这个子进程继承的是 BotBus 自己的进程环境,而从 Dock、启动台或登录项打开的 Mac app 不会执行你的 ~/.zshrc。结果就是:终端里一切正常,手机发起的那一轮却连到官方地址、找不到 key,报“没登录”或“API key 无效”。手机上看到的就是这一类登录失败的提示。

Claude Code 官方给了不依赖 shell 的办法:环境变量参考写明,把变量写进 settings.json 的 env,Claude Code 直接从文件读,不管 claude 是怎么启动的都会生效。

配置步骤

1. 先确认终端里能跑

在终端里跑一次 claude -p "回复 ok",确认中转、key 和模型都通。这一步不通,手机上也不会通。

2. 把 export 搬进 settings.json 的 env

打开 ~/.claude/settings.json(没有就新建;装过 BotBus 的 hooks 的话,里面已经有 hooks 一节,保留它),加上或合并 env。以中转站为例:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://你的中转地址",
    "ANTHROPIC_AUTH_TOKEN": "你的 token",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "中转上的模型名",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "中转上的模型名",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "中转上的模型名"
  }
}

几个变量按官方文档的含义选:ANTHROPIC_AUTH_TOKEN 会作为 Authorization: Bearer 头发出去;ANTHROPIC_API_KEY 作为 X-Api-Key 头发出去,而且文档说明在 -p 模式下只要有它就一定用它,会盖过你的订阅登录。你的中转要求哪种头,就写哪个,别两个都写。用 Bedrock 的,写 CLAUDE_CODE_USE_BEDROCK 为 1 和 AWS_REGION;如果平时靠 AWS_PROFILE 选凭据,也一并写进来。

3. 只想让某个项目走中转

写在 ~/.claude/settings.json 里的 env 对你所有的 Claude Code 会话生效,终端里的也一样。只想让某个项目走中转,就写进那个项目的 .claude/settings.local.json:它是“你自己、这个项目”这一层,BotBus 在手机上起的那一轮就在项目目录里运行,同样会读到。不要把 key 写进项目的 .claude/settings.json,那个文件通常会提交进仓库。

4. 不想把 key 明文放在文件里

settings.json 是明文。官方的 apiKeyHelper 设置可以指定一个你自己的命令来生成凭据,比如从钥匙串里取出来再打印。这样文件里只有命令路径,没有 key 本身。

5. 模拟一次“没有 shell 配置”的启动

想在拿起手机前先验证,可以在终端里用一个几乎空的环境跑一次:

env -i HOME="$HOME" "$(command -v claude)" -p "回复 ok"

这条命令只带 HOME,你的 .zshrc 里的变量都不在,和 BotBus 起进程时的处境接近。它能回复,说明配置已经不依赖 shell;手机上再新建一个任务试试即可。

手机上选模型、发图片时要知道的

BotBus 手机端续聊或新建时可以选模型和思考强度。Claude Code 没有列模型的接口,所以手机上列的是 --model 认的几个别名(Fable、Opus、Sonnet、Haiku),选了就把别名传给 claude。在中转场景下,别名最终指向什么,由你在 env 里写的 ANTHROPIC_DEFAULT_*_MODEL 决定;不在手机上选,就不传 --model,沿用你配置里的默认模型。思考强度的档位读的是本机 claude --help,中转后端会不会照这个档位执行,要看你接的服务。

手机上可以给 Claude Code 发图片,BotBus 把图片放进这一轮的消息里交给 claude。你的后端模型不支持看图,这一轮就会出错,这不是 BotBus 能替你补上的。

限制与边界

想试的话,可以在官网下载电脑端;只关心审批这件事的,可以接着看在手机上审批 Claude Code 权限请求。

常见问题

我在 .zshrc 里 export 了中转地址,终端里好好的,为什么手机发起的任务报没登录?

手机发起的那一轮由 BotBus 起 claude -p,继承的是 BotBus 这个 Mac app 的环境,不会执行 .zshrc。把变量写进 ~/.claude/settings.json 的 env,Claude Code 会直接从文件读。

写进 settings.json 以后,终端里的会话也会走中转吗?

会。用户级的 env 对所有会话生效。只想某个项目走中转,写进那个项目的 .claude/settings.local.json。

同时登录了 claude.ai 订阅,又在 env 里写了 API key,用的是哪个?

官方文档说明 ANTHROPIC_API_KEY 在 -p 模式下只要存在就一定使用,会盖过订阅登录;交互模式下会先问你一次。手机发起的那一轮是 -p 模式,所以会用 key 计费。

用中转站,还能在手机上审批终端里那个会话的权限请求吗?

能。终端里的会话经 BotBus 装的 hooks 把权限请求转到手机,和你用什么方式接模型无关。

BotBus 会拿到我的 API key 吗?

BotBus 不使用你的 key,它只是在电脑上启动你的 claude,key 由 Claude Code 自己从配置里读,也不会经过 BotBus 的服务器。装 hooks 时 BotBus 会改写 settings.json 里属于它的那几条 hooks,env 等其他设置原样保留。

← 全部文章