
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 入口你只需要维护一份 KeyClaude Code、MCP server、以及后续的循环任务都指向同一个地址。先拿到 Key。打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台里创建 API Key。控制台地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content Key 管理页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。创建时建议按用途命名比如claude-code-loop、mcp-agent-01后面排查问题时能一眼看出是哪个任务在用。API 的基础地址是https://taotoken.net/api注意这个地址不带 UTM 参数配置里直接写这个就行。Key 的形态通常是一串以sk-开头的字符串复制后先存到环境变量里不要硬编码进配置文件尤其是你打算把配置同步到手机端或云端的时候。export TAOTOKEN_API_KEYsk-你的Key export TAOTOKEN_BASE_URLhttps://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 UnauthorizedKey 错了或没传进去。检查settings.json里的ANTHROPIC_API_KEY和环境变量是否一致。手机端和云端任务不会继承你本地的export要在任务平台的 secrets 里单独配。另外注意 Key 有没有过期控制台里可以重新生成。404 Not Foundbase_url 写错了。正确写法是https://taotoken.net/api不要在后面加/v1或/v1/messagesSDK 会自己拼路径。如果你用的是自定义 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_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。如果只是验证模型行为、调 prompt用模型对话页就够了https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有 MCP 和 Claude Code 的完整参数说明。Key 管理和控制台分别是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 和 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后说一个我踩过的坑一开始我把max_parallel设成 32结果八个任务同时抢同一个 git 索引锁文件冲突不断。后来降到 8并且给每个任务配了独立的 worktree才稳定下来。并行数不是越高越好先跑稳一个任务再复制成两个逐步加。指挥上千 Agent 是结果不是起点。