☰
【AI】Claude Code 连续任务执行操作手册(24小时码农):用 TaoToken 统一 Key 打通 CLI 自动化链路
2026/10/1 19:55:42 网站建设 项目流程

1. 从「跑一次就断」到 24 小时连续任务:Claude Code CLI 自动化到底卡在哪

如果你用过 Claude Code 的 CLI,大概率经历过这个场景:晚上挂上一个批量代码分析任务,第二天早上打开终端,发现它早就停在某个交互确认上,或者因为一次网络抖动直接退出,进度全丢。这不是你脚本写得差,而是 Claude Code 默认是「一次会话一次交互」的设计,它没打算帮你做无人值守的连续任务。

Claude Code 是 Anthropic 推出的命令行编码代理,能读文件、改代码、跑命令、做重构。它适合谁?适合需要把重复性编码工作(批量分析、批量补测试、批量迁移 API)交给机器、自己只做验收的开发者。但它的 CLI 默认行为是:每次调用是一个独立会话,遇到权限确认会停下来问你,上下文超了会报错退出,网络断了就没了。

所以「24 小时码农」的核心不是让 Claude 更聪明,而是解决三件事:第一,让每次调用都能自动跳过权限确认;第二,让任务本身可断点续跑,AI 通过文件记录进度;第三,让 API 通道稳定,不会因为单点问题整条链路挂掉。前两件靠脚本和提示词设计,第三件靠一个统一的 Key 和 API 通道。

我试过直接用官方 Key 挂长任务,最头疼的是额度、限流和通道稳定性三件事叠在一起,半夜断了你根本不知道是脚本问题还是通道问题。后来把 API 通道统一到 TaoToken 上,用同一个 Key 跑 Claude Code、Codex、Cline 这些工具,排障时至少能确定「Key 和通道是好的」,问题范围一下缩小一半。

这篇手册就按「能照着做」的标准来:先给你可复制的 settings.json 和 config.toml 骨架,再给 TaoToken 统一 Key 的接入步骤,然后是连续任务的触发脚本和中断恢复验证,最后把常见报错一个个对着排。目标很明确——你复制完配置,挂上脚本,第二天回来能看到进度文件在往前走。

2. TaoToken 统一 Key 前置:Claude Code CLI 接入配置与 settings.json 骨架

在写连续任务脚本之前,得先把 Claude Code 的 API 通道配好。这一步没配好,后面脚本跑得再漂亮也是白搭。Claude Code 读取配置的优先级是:环境变量 > 项目级.claude/settings.json> 用户级~/.claude/settings.json。连续任务场景我建议用用户级配置,因为脚本可能在任意目录启动。

先说 TaoToken 这边要拿什么。打开 https://taotoken.net/api 对应的控制台,进 API Keys 页面创建一个 Key,记下三样东西:Base URL、API Key、以及你要用的 Model ID。这三件套是后面所有配置的核心,缺一个都跑不起来。TaoToken 的好处是同一个 Key 能同时给 Claude Code、Codex、Cline MCP 用,你不需要为每个工具单独申请通道。

用户级配置文件放在~/.claude/settings.json,骨架如下,路径和字段名保持原样别改:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_API_KEY": "", "API_TIMEOUT_MS": "3000000", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1", "ANTHROPIC_DEFAULT_HAIKU_MODEL": "你的Haiku模型ID", "ANTHROPIC_DEFAULT_SONNET_MODEL": "你的Sonnet模型ID", "ANTHROPIC_DEFAULT_OPUS_MODEL": "你的Opus模型ID" } }

这里有几个坑要提前说。ANTHROPIC_API_KEY必须留空字符串,不能删掉这个字段,因为 Claude Code 某些版本会检查它是否存在,留空表示走ANTHROPIC_AUTH_TOKEN。API_TIMEOUT_MS设成 3000000(50 分钟)是给长任务留余量,默认值太短,跑大文件分析时容易超时中断。CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC设 1 是关掉非必要的遥测请求,连续任务场景下能减少无谓的网络往返。

如果你更习惯用 TOML 管理配置(比如配合 Codex 或某些 wrapper),可以写一份config.toml作为对照,字段语义一致:

[env] ANTHROPIC_BASE_URL = "https://taotoken.net/api" ANTHROPIC_AUTH_TOKEN = "sk-你的TaoToken密钥" ANTHROPIC_API_KEY = "" API_TIMEOUT_MS = "3000000" CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = "1" ANTHROPIC_DEFAULT_HAIKU_MODEL = "你的Haiku模型ID" ANTHROPIC_DEFAULT_SONNET_MODEL = "你的Sonnet模型ID" ANTHROPIC_DEFAULT_OPUS_MODEL = "你的Opus模型ID"

配完之后验证一下环境变量有没有被正确加载。在终端里跑:

claude --version echo $ANTHROPIC_BASE_URL

如果ANTHROPIC_BASE_URL输出为空,说明 settings.json 没被读取,检查文件路径是不是~/.claude/settings.json,以及 JSON 有没有语法错误(用python -m json.tool ~/.claude/settings.json校验)。这一步过了,再进下一步写连续任务脚本。别跳过验证,我见过太多人配置写错一个逗号,脚本挂一晚上一个任务没跑。

3. 可复制配置:continuous_task.sh 连续任务脚本与中断恢复设计

连续任务的核心思路是:外层用while循环反复调用claude -p,每次只做一个「计件式」的小任务,AI 通过读写进度文件来记住干到哪了。这样即使某次调用失败,下一次启动还能从进度文件接着干,不会从头再来。

先建系统提示文件~/engineering-assistant.md,它的作用是告诉 AI「这是一个连续工作,你要自己记录进度」:

# 工程助手系统提示 你是一个代码分析助手,正在执行一个连续性的批量任务。 ## 工作原则 1. 每次只完成一个最小工作单元,不要试图一次做完所有事。 2. 开始前先读取 analysis_output/progress.json,了解已完成到哪。 3. 完成后更新 progress.json,记录当前进度和下一个待处理项。 4. 如果 progress.json 不存在,说明是首次运行,从第一个任务开始。 ## 输出要求 - 结果写入 analysis_output/ 目录,文件名带序号。 - 每次结束前必须更新进度文件,这是下次能接着干的前提。

然后是主脚本continuous_task.sh,这是可以直接复制运行的版本:

#!/bin/bash set -x export PROMPT=$(cat << 'EOF' # 任务描述 分析 analysis_output/ 目录下待处理的代码文件,每次处理一个。 ## 工作步骤 ### 第一步:读取进度 读取 analysis_output/progress.json,找到 next_index 字段。 ### 第二步:处理当前文件 根据 next_index 找到对应文件,做代码分析,结果写入 analysis_output/result_<index>.md。 ### 第三步:更新进度 把 progress.json 的 next_index 加 1,记录 last_run 时间戳。 # 关键补充(连续工作的前提) 以上是团队正在执行的工作,已经在 analysis_output/ 目录下产生了一定的成果。 每次只做一个文件,做完必须更新进度文件,否则下次无法续跑。 EOF ) while [ 1 -eq 1 ]; do date time echo "${PROMPT}" | claude \ --allow-dangerously-skip-permissions \ --dangerously-skip-permissions \ --system-prompt-file ~/engineering-assistant.md \ --debug --debug-file /tmp/claude.debug.log \ -p sleep 3 done

几个参数必须解释清楚。--allow-dangerously-skip-permissions和--dangerously-skip-permissions两个都写,是因为不同版本 Claude Code 认的参数名不一样,重复写确保生效,这是无人值守的前提,否则它会停下来等你按确认。--system-prompt-file指向刚才建的系统提示。-p表示从 STDIN 读输入,配合echo "${PROMPT}" |把任务描述喂进去。sleep 3是给通道一点缓冲,避免请求过于密集。

进度文件analysis_output/progress.json的初始结构长这样,第一次运行前手动建一个:

{ "next_index": 0, "total": 100, "last_run": null, "completed": [] }

中断恢复的验证动作很关键。你可以在脚本跑到一半时按 Ctrl+C 停掉,然后手动改一下progress.json的next_index,再重新启动脚本,观察它是不是从你改的那个位置接着跑。如果它从头开始了,说明系统提示里「先读进度文件」这条没生效,回去检查提示词措辞,把「开始前先读取」改成更明确的「你的第一个动作必须是读取 progress.json,读不到就报错退出」。

后台运行用nohup ./continuous_task.sh > output.log 2>&1 &,然后tail -f output.log看实时输出。想限制次数就把while [ 1 -eq 1 ]换成计数器循环,加个MAX_ITERATIONS变量,跑满就退出,避免无限循环忘了关。

4. 验证请求与成功结果:从单次调用到 24 小时稳定跑通

配置和脚本都就位后,别急着挂 24 小时,先做单次调用验证。这一步能帮你把 90% 的问题挡在长跑之前。

先手动跑一次,看 API 通道通不通:

echo "读取 analysis_output/progress.json 并告诉我 next_index 是多少" | claude \ --allow-dangerously-skip-permissions \ --dangerously-skip-permissions \ --system-prompt-file ~/engineering-assistant.md \ -p

如果返回了next_index的值,说明 Base URL、Key、Model ID 三件套都对了。如果报 401,往下看第 5 节的排错。如果返回内容为空但没报错,检查-p是不是漏了,或者 STDIN 有没有正确传入。

单次通了之后,跑一个短循环验证连续逻辑。把脚本里的while [ 1 -eq 1 ]临时改成for i in 1 2 3,跑三次,然后看analysis_output/目录:

ls -la analysis_output/ cat analysis_output/progress.json

成功的标志是:progress.json的next_index从 0 变成了 3,目录里多了result_0.md、result_1.md、result_2.md三个文件,last_run有时间戳。这说明 AI 确实在按「读进度→干活→写进度」的循环走。

再验证中断恢复。手动把next_index改成 10,重启脚本,观察它是不是从 10 开始处理,而不是从 0。这一步过了,说明断点续跑成立,你可以放心挂长任务了。

24 小时稳定跑通的判断标准有三个:第一,output.log里每次调用的时间戳间隔均匀,没有大段空白(空白说明卡住了);第二,progress.json的next_index在持续增长;第三,/tmp/claude.debug.log里没有反复出现的错误堆栈。我一般会写个简单的监控脚本,每 10 分钟 grep 一次 progress.json,如果 20 分钟没变化就发个提醒。

while true; do current=$(python -c "import json;print(json.load(open('analysis_output/progress.json'))['next_index'])") echo "$(date) next_index=$current" sleep 600 done

这个监控脚本本身不复杂,但能让你第二天早上第一时间知道任务有没有卡住,而不是打开终端才发现白挂一晚上。

5. 本篇常见错排查:401、local proxy failed、reading choices 与 OAuth 报错对照

连续任务跑不起来,报错基本集中在四类。我把真实遇到过的报错和对应解法列出来,你对着查。

401 Invalid API Key。这是最常见的。先确认ANTHROPIC_AUTH_TOKEN是不是填的 TaoToken 的 Key,而不是官方 Key。再确认ANTHROPIC_API_KEY是空字符串而不是没这个字段。最后检查 Key 有没有多余空格,复制的时候很容易带上换行。验证命令:

echo $ANTHROPIC_AUTH_TOKEN | head -c 10

如果输出是sk-开头且长度正常,说明 Key 格式对。还报 401 就去控制台确认 Key 有没有被禁用或额度耗尽。

local proxy failed / connection refused。这个报错通常出现在你本地配了某些网络工具,Claude Code 尝试走本地端口但那个端口没服务。检查ANTHROPIC_BASE_URL是不是被其他配置覆盖成了http://localhost:xxxx。用env | grep ANTHROPIC看实际生效的值。连续任务场景下,Base URL 必须是https://taotoken.net/api,不能是本地地址。

reading choices / unexpected response format。这个报错说明通道返回的响应结构不是 Claude Code 预期的格式,常见原因是 Model ID 填错了,或者 Base URL 少了/api后缀。检查ANTHROPIC_DEFAULT_SONNET_MODEL等三个模型字段,确保填的是 TaoToken 控制台里显示的完整 Model ID,不是简写。Base URL 结尾不要带斜杠。

OAuth / authentication flow required。Claude Code 某些版本会尝试走 OAuth 登录流程,如果你已经用 Key 认证,需要显式关掉。在 settings.json 的 env 里加一行"CLAUDE_CODE_DISABLE_OAUTH": "1",或者在脚本里export CLAUDE_CODE_DISABLE_OAUTH=1。这个报错在无人值守场景下特别烦,因为它会弹交互,脚本直接卡死。

context limit exceeded。连续任务跑久了上下文会累积。解法是每次调用都是独立会话(-p模式本身就是),但如果你在系统提示里塞了太多历史,也会超。把系统提示控制在 500 字以内,进度信息全部走文件,不要塞进提示词。另外定期清理/tmp/claude.debug.log,它涨得很快。

Permission denied。脚本里两个--dangerously-skip-permissions参数都写了还报这个,说明 Claude Code 版本太老不认这个参数。升级到最新版:npm install -g @anthropic-ai/claude-code@latest。升级后重新验证参数是否生效。

排错时记住一个原则:先确认 Key 和通道是好的(用单次调用验证),再确认脚本逻辑是对的(用短循环验证),最后才怀疑长跑稳定性。把问题范围一层层缩小,比盲目改配置高效得多。

6. 语义一致 CTA:把统一 Key 和连续任务链路固定下来

走到这里,你应该已经有一套能跑通的配置了:~/.claude/settings.json里的三件套(Base URL + Key + Model ID)、~/engineering-assistant.md系统提示、continuous_task.sh主脚本、以及progress.json进度文件。这套组合的价值在于,它把「API 通道」和「任务逻辑」解耦了——通道出问题查配置,逻辑出问题查脚本,互不干扰。

如果你还没拿 Key,去 https://taotoken.net/api 对应的 API Keys 页面创建一个,把 Base URL、Key、Model ID 三样记下来填进 settings.json。接入文档在 https://taotoken.net/api 的文档区,里面有各工具的配置示例,Claude Code、Codex、Cline MCP 都有。想先验证模型通不通,可以用模型对话页面发一条测试消息,确认通道正常再挂长任务。

对于长期跑编码 Agent 的场景,Coding Plan 比按量计费更适合,因为连续任务会持续消耗额度,包月方案能避免半夜额度耗尽导致任务中断。你可以在控制台里对比一下自己的日均调用量再决定。

最后给一个实用建议:把continuous_task.sh、engineering-assistant.md、progress.json模板一起放进一个 git 仓库,每次调整配置都提交一次。连续任务跑出问题时,你能快速回滚到上一个能跑的版本,而不是在一堆改动里猜哪个改坏了。这套链路一旦固定下来,你就能真正把「24 小时码农」跑起来,第二天回来只看进度文件和结果目录,不用再守着终端。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询