1. 手机指挥上千 Agent 到底在指挥什么
Claude Code 之父 Boris Cherny 在访谈里提到一个状态:模型写了他 100% 的代码,他每天提交几十个 PR,甚至有一天提交了 150 个。更关键的是,他说自己已经不开电脑了,直接在手机上的 Claude 应用里进入代码标签页,同时挂着 5 到 10 个主会话,每个会话背后是几百个并行 Agent。支撑这套玩法的核心机制是一个叫\loop的循环命令,配合类似 cron 的定时调度,让 Agent 在未来某个时间点或按固定频率反复执行任务。
这件事对普通开发者的启示不是「我也要一天 150 个 PR」,而是:指挥链路的骨架是可以复制的。你不需要上千个 Agent,但你可以先跑通「一个统一入口 + 一份配置文件 + 一个循环触发 + 一个 PR 验证」的最小闭环。这篇就围绕这个最小闭环展开,交付可复制的settings.json/config.toml骨架、TaoToken 统一 Key 的接入方式,以及手机端触发 Agent loop 并产出 PR 的验证动作。
适合谁看:已经在用 Claude Code 或准备接入 MCP 的开发者;想让多个 Agent 并行跑任务但还没理清配置结构的人;以及想用手机做轻量指挥、不想被 IDE 绑住的人。下面所有配置都可以直接复制改参数,我会把每一步的预期结果也写清楚,方便你对照排查。
2. 前置:TaoToken 统一 Key 与 MCP 接入准备
在跑通多 Agent 指挥链路之前,先把「入口」统一掉。多 Agent 场景最怕的就是每个 Agent 各配一套 Key、各写一份 base_url,改起来到处漏。TaoToken 在这里的作用是提供一个统一的 API 入口,你只需要维护一份 Key,Claude Code、MCP server、以及后续的循环任务都指向同一个地址。
先拿到 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_medium=csdn&utm_campaign=rewrite&utm_content= ,Key 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。创建时建议按用途命名,比如claude-code-loop、mcp-agent-01,后面排查问题时能一眼看出是哪个任务在用。
API 的基础地址是https://taotoken.net/api,注意这个地址不带 UTM 参数,配置里直接写这个就行。Key 的形态通常是一串以sk-开头的字符串,复制后先存到环境变量里,不要硬编码进配置文件,尤其是你打算把配置同步到手机端或云端的时候。
export TAOTOKEN_API_KEY="sk-你的Key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"验证 Key 是否可用,最直接的方式是发一个最小请求。用 curl 测一下:
curl -s https://taotoken.net/api/v1/models \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ | head -c 500如果返回里能看到模型列表的 JSON,说明 Key 和网络都通了。如果返回 401,检查 Key 是否复制完整、有没有多余空格;如果返回 404,检查 base_url 是不是写成了带路径的完整地址。这一步过了再往下走,否则后面所有配置都会卡在同一个地方。
注意:环境变量在手机端或云端任务里不一定自动继承,循环任务里建议显式读取,或者用任务平台的 secrets 功能注入。别假设
export一定生效。
3. 可复制配置:settings.json 与 config.toml 骨架
Claude Code 的配置分两层:一层是settings.json,管权限、环境变量、MCP server 注册;另一层是config.toml,管模型、循环任务、Agent 行为。下面给的是最小可用骨架,你可以直接复制,把 Key 和路径替换成自己的。
先看settings.json。放在项目根目录的.claude/settings.json,或者用户级的~/.claude/settings.json。项目级优先,适合把 Agent 配置跟代码库绑在一起。
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key" }, "permissions": { "allow": [ "Bash(git:*)", "Bash(gh pr create:*)", "Read", "Edit", "Write" ], "deny": [ "Bash(rm -rf:*)", "Bash(curl:* | sh)" ] }, "mcpServers": { "taotoken-tools": { "command": "npx", "args": ["-y", "@taotoken/mcp-server"], "env": { "TAOTOKEN_API_KEY": "sk-你的Key", "TAOTOKEN_BASE_URL": "https://taotoken.net/api" } } } }这里有几个点值得说明。env里把 base_url 指向 TaoToken,这样 Claude Code 的所有模型请求都走统一入口。permissions.allow里放的是循环任务需要的最小权限:git 操作、创建 PR、读写文件。deny里挡掉危险命令,尤其是rm -rf和管道执行远程脚本,多 Agent 并行时一个失控命令会波及整个工作区。mcpServers注册了一个 MCP server,名字叫taotoken-tools,后面循环任务里会引用它。
再看config.toml。放在~/.claude/config.toml或项目级.claude/config.toml。
[model] provider = "anthropic" name = "claude-sonnet-4-5" base_url = "https://taotoken.net/api" max_tokens = 8192 [agent] max_parallel = 8 timeout_seconds = 900 working_dir = "./workspace" [loop] enabled = true default_interval = "30m" max_iterations = 50 [[loop.tasks]] name = "ci-fix" schedule = "*/15 * * * *" prompt = "检查最近一次 CI 失败,定位报错文件,修复后创建 PR" mcp = ["taotoken-tools"] [[loop.tasks]] name = "test-flake" schedule = "0 */2 * * *" prompt = "扫描最近 2 小时内的不稳定测试,标记并尝试修复" mcp = ["taotoken-tools"] [[loop.tasks]] name = "feedback-digest" schedule = "*/30 * * * *" prompt = "抓取指定渠道的用户反馈,分类整理后输出摘要" mcp = ["taotoken-tools"]max_parallel控制并行 Agent 数量,先设 8,跑稳了再往上加。loop.tasks里每个任务就是一个循环单元,schedule用标准 cron 表达式,prompt是给 Agent 的指令,mcp指定这个任务能用哪些 MCP server。这三个任务对应访谈里提到的典型场景:CI 修复、测试波动清理、反馈抓取。你可以先只留一个,跑通再加。
提示:
working_dir建议指向一个独立的 git 工作区,不要让循环任务直接在主分支上操作。多 Agent 并行时,分支冲突是最常见的翻车点。
4. 验证请求:手机端触发 Agent loop 与 PR
配置写完之后,先别急着上手机。在本地跑一次单次循环,确认链路通。用 Claude Code 的 CLI 触发一个任务:
claude --config .claude/config.toml \ --task ci-fix \ --once--once表示只跑一次,不进入循环。预期结果是:Agent 读取配置、连接 TaoToken、调用 MCP server、执行 prompt 里的指令,最后在终端输出它做了什么。如果它创建了 PR,你会看到gh pr create的输出和 PR 链接。
本地通了之后,再上手机端。手机端触发的方式有两种:一种是通过 Claude 应用的代码标签页,手动发起一个会话并指定任务名;另一种是让循环任务在服务端后台跑,你只在手机上看结果。访谈里 Boris 用的是后者,服务端日常任务上线后连手机都不用开。但作为验证,先用前者确认手机能连上。
手机端操作路径大致是:打开 Claude 应用,进入代码标签页,新建会话,在输入框里写触发指令,比如:
运行 ci-fix 任务,检查最近一次 CI 失败并创建 PR预期结果是手机端返回一个会话 ID,以及 Agent 的执行摘要。如果配置了 MCP,摘要里会包含 MCP 工具的调用记录。PR 创建成功后,你可以在手机的 GitHub 应用或浏览器里看到这个 PR。
验证成功的标志有三个:一是终端或手机端能看到 Agent 的执行日志;二是 git 仓库里多了一个新分支和一次提交;三是 PR 列表里出现了 Agent 创建的 PR。三个都满足,说明最小闭环跑通了。
# 查看 Agent 创建的分支和 PR git branch -a | grep agent gh pr list --author "@me" --limit 5如果 PR 没出现,先看分支有没有创建。分支有但 PR 没有,多半是gh没登录或权限不够。分支都没有,说明 Agent 没执行到 git 那一步,回去看日志里的报错。
5. 本篇常见错排查
配置跑不通,绝大多数问题集中在四个地方:Key、base_url、权限、MCP 连接。下面按报错现象倒推。
401 Unauthorized:Key 错了或没传进去。检查settings.json里的ANTHROPIC_API_KEY和环境变量是否一致。手机端和云端任务不会继承你本地的export,要在任务平台的 secrets 里单独配。另外注意 Key 有没有过期,控制台里可以重新生成。
404 Not Found:base_url 写错了。正确写法是https://taotoken.net/api,不要在后面加/v1或/v1/messages,SDK 会自己拼路径。如果你用的是自定义 HTTP 客户端,确认它没有重复拼接。
MCP server 启动失败:npx拉不到包,或者@taotoken/mcp-server版本不对。先在终端手动跑一次npx -y @taotoken/mcp-server,看能不能启动。如果卡在下载,检查 npm 源。如果启动后立刻退出,看它的 stderr 输出,通常是环境变量没传进去。
循环任务不触发:cron 表达式写错了,或者enabled是 false。cron 是五段式:分、时、日、月、周。*/15 * * * *是每 15 分钟,0 */2 * * *是每 2 小时。别写成六段式。另外确认max_iterations没被设成 0。
Agent 权限被拒:permissions.allow里没放对应的命令。比如 Agent 要执行gh pr create,但 allow 里只有Bash(git:*),就会被挡。看日志里的permission denied提示,把对应命令加进 allow。但别图省事直接 allow 所有,多 Agent 并行时权限收窄是安全底线。
PR 创建了但内容是空的:Agent 改了文件但没 commit,或者 commit 了但没 push。检查working_dir是不是一个干净的 git 仓库,有没有配置 remote。循环任务里建议在 prompt 里明确写「提交并推送后创建 PR」,减少 Agent 的自由发挥空间。
注意:多 Agent 并行时,两个任务同时改同一个文件会冲突。解决办法是给每个任务分配独立的
working_dir,或者用 git worktree 隔离。别让它们共享一个工作区。
6. 把指挥链路固定下来
跑通最小闭环之后,下一步是把它固定成日常流程。我的做法是:本地只用来调试配置,真正的循环任务全部放到服务端后台跑,手机只负责看结果和临时触发。这样即使你关掉电脑,Agent 还在云端执行深度重构任务。
如果你主要做长期编码和 Agent 调度,建议把循环任务和 Coding Plan 结合,让额度覆盖高频的 loop 调用,地址是 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。如果只是验证模型行为、调 prompt,用模型对话页就够了:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,里面有 MCP 和 Claude Code 的完整参数说明。Key 管理和控制台分别是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 和 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 。
最后说一个我踩过的坑:一开始我把max_parallel设成 32,结果八个任务同时抢同一个 git 索引,锁文件冲突不断。后来降到 8,并且给每个任务配了独立的 worktree,才稳定下来。并行数不是越高越好,先跑稳一个任务,再复制成两个,逐步加。指挥上千 Agent 是结果,不是起点。