开源项目实现持续自动执行 Claude Code,适合编程自动化和 AI 辅助开发工作流。
这一切的起因是:根据合同要求,我必须为一个拥有数十万行代码的代码库编写单元测试,并在接下来的几周内将测试覆盖率从 0% 提升到 80% 以上——这看起来正适合交给 Claude 来做。于是,我构建了 Continuous Claude:一个让 Claude Code 循环运行,并能在多次迭代之间保持持久上下文的 CLI 工具。
当前的 AI 编程工具往往会在完成一次任务、认为工作已经结束后停止运行,也没有真正的机会进行自我批评或进一步改进。这种一次性模式让处理大型项目变得困难。因此,与直接“原样”运行 Claude Code(只能零散地提供帮助)不同,我们真正需要的是让 Claude Code 长时间运行,同时又不耗尽上下文窗口。
事实证明,实现方式非常简单:只需要让 Claude Code 持续循环运行即可。不过,如果借鉴 CI/CD 实践和持久化智能体的思路,还可以更进一步:按计划定时运行、通过触发器运行,并将它接入 GitHub 拉取请求工作流。通过把相关上下文和结果从一次迭代持久化到下一次迭代,这一流程可以确保早期步骤中获得的知识不会丢失。当前,无状态的 AI 查询无法做到这一点,你必须额外设置 Markdown 文件来保存进度,并据此进行上下文工程。
这个想法的第一个版本只是一个简单的 while 循环:
while true; do
claude --dangerously-skip-permissions "Increase test coverage [...] write notes for the next developer in TASKS.md, [etc.]"
sleep 1
done
我的朋友、Giga AI 的 Namanyay 对此评价道:“天才,而且太搞笑了。”我花了整个星期六把其余工具都构建出来。现在,这个 Bash 脚本充当指挥者,使用合适的提示词反复调用 Claude Code,并处理周边工具。在每次迭代中,脚本会:
创建一个新分支,并运行 Claude Code 生成一次提交
推送变更,并使用 GitHub CLI 创建拉取请求
通过 gh pr checks 监控 CI 检查和评审
成功时合并,失败时丢弃
拉取更新后的 main 分支、执行清理,然后重复这一流程
当某次迭代失败时,它会关闭 PR 并丢弃相关工作。这种做法很浪费,但知道测试失败的原因后,下一次尝试就可以采用不同的方法。由于它依托 GitHub 现有的工作流,因此无需额外工作即可获得代码评审和预览环境——如果你的仓库要求代码所有者批准或通过特定的 CI 检查,它也会遵守这些约束。
一个共享的 Markdown 文件充当外部记忆,Claude 会在其中记录已经完成的工作以及接下来应该做什么。如果没有明确的提示指令,它会创建冗长的日志,弊大于利——这里的目标是让笔记成为不同运行轮次之间简洁清晰的交接材料。因此,给模型的关键指令是:“这是持续开发循环的一部分……你不需要在一次迭代中完成整个目标,只需针对一件事情取得实质性进展,然后为下一次迭代留下清晰的笔记……把它想象成一场接力赛,你正在传递接力棒。”
下面是一个真实的生产环境示例:上一次迭代结束时留下了这样一条记录:“注意:尝试为 X 添加测试,但在边界情况上失败了,需要处理函数 Y 的 null 输入。”紧接着,下一次 Claude 调用看到了这条记录,并优先处理了这个问题。一个小文件就能减少上下文漂移,避免它忘记之前的推理并原地打转。
有趣的是,这个 Markdown 文件实现了自我改进。用户一句简单的“提高覆盖率”,会随着系统在迭代中自我学习并追踪自身进度,转化为“运行覆盖率检查,找出覆盖率较低的文件,然后逐个处理”。
我在 GitHub Next 的朋友们一直在他们的 Continuous AI 项目中探索这一理念,我也与他们分享了 Continuous Claude。
团队提出的一个很有吸引力的想法是同时运行多个专业化智能体——一个负责开发,另一个负责测试,第三个负责重构。虽然这种方式可以通过分工协作更高效地处理复杂任务,但也可能带来协调方面的挑战。我正在尝试一种类似的方法,同时为单体仓库中的不同部分添加测试。
agentics 项目将明确的研究阶段与构建前步骤相结合,确保在智能体工作开始之前,软件已经恢复到正常状态。GitHub Next 首席研究员 Don Syme 表示:“循环中智能体的容错能力非常重要。如果出了问题,它只会触及资源限制,然后重新尝试。或者,如果生成的 PR 没有帮助,用户直接把它丢弃即可。这比让一个沮丧的用户试图引导已经走错路的智能体好得多。”
这让我想起经济学/数学中的一个概念,叫作“概率辐射”(我知道,这听起来扯得有点远,但请耐心听我说)。在这里,每次智能体运行都像一个随机粒子——我们不会单独分析它,但总体方向会从分布中显现出来。甚至可以把每次运行视为幂等的:如果 GitHub Actions 在六小时后终止进程,你只会丢失一些未提交的文件,而下一个智能体无论如何都会接手它们。你唯一关心的是总体上是否朝着正确的方向前进,例如测试覆盖率是否在提高,而不是某个智能体具体做了什么。随着 token 成本趋近于零,这种浪费但有效的方法会变得可行,类似于 Cursor 的多智能体模式。
Dependabot 等工具可以处理依赖更新,而 Continuous Claude 还可以利用发布说明修复更新后产生的破坏性变更。你可以设置一个每天早晨运行的 GitHub Actions 工作流,让它检查更新并持续修复问题,直到所有测试都通过。
大型重构任务也会变得易于管理:把单体应用拆分为模块、将回调现代化为 async/await,或者迁移到新的代码风格规范。它可以在一个周末内连续完成 20 个拉取请求,每个请求负责一部分重构,并接受完整的 CI 验证。有一整类任务对人类来说过于琐碎,但又必须认真处理,以免破坏构建。
该模型复刻了人类的软件开发实践。Claude Code 负责繁重的基础工作,而人类仍然通过 PR 评审等熟悉的机制参与其中。你可以从 GitHub 下载 CLI 并开始使用!
该脚本使用 Claude Code 或 Codex CLI 驱动迭代式开发,将从代码变更到提交合并的整个 PR 生命周期完全自动化:
选定的 AI 编程智能体会根据你的提示词循环运行
所有变更都会提交到一个新分支
创建一个新的拉取请求
等待所有必需的 PR 检查和代码评审完成
检查通过且评审获得批准后,合并 PR
重复这一流程,直到任务完成
SHARED_TASK_NOTES.md 文件通过在不同迭代之间传递上下文来保持连续性,让 AI 与人类开发者之间能够无缝交接
如果多个智能体都判定项目已经完成,循环将提前停止。
使用一条命令安装:
curl -fsSL https://raw.githubusercontent.com/AnandChowdhary/continuous-claude/main/install.sh | bash
将 continuous-claude 安装到 ~/.local/bin
检查必需的依赖项
如果需要,引导你将其添加到 PATH
在使用 PowerShell 7 的 Windows 上:
irm https://raw.githubusercontent.com/AnandChowdhary/continuous-claude/main/install.ps1 | iex
这会将原生 PowerShell 运行器安装为 continuous-claude.ps1,因此 Windows 用户无需 WSL 或 Git Bash 即可运行 Continuous Claude:
pwsh ~/.local/bin/continuous-claude.ps1 --prompt "add unit tests until all code is covered" --max-runs 5
PowerShell 运行器支持核心循环、Claude/Codex 提供方、评审器轮次、共享笔记、时长/成本限制、本地提交,以及 GitHub PR 的创建与合并。工作树管理、自我更新,以及自动重试 CI/评论工作流,目前仍然仅受 Bash 运行器支持。
如果你希望手动安装:
# Download the script
curl -fsSL https://raw.githubusercontent.com/AnandChowdhary/continuous-claude/main/continuous_claude.sh -o continuous-claude
# Make it executable
chmod +x continuous-claude
# Move to a directory in your PATH
sudo mv continuous-claude /usr/local/bin/
Invoke-WebRequest https://raw.githubusercontent.com/AnandChowdhary/continuous-claude/main/continuous_claude.ps1 -OutFile continuous-claude.ps1
pwsh ./continuous-claude.ps1 --help
卸载 continuous-claude:
rm ~/.local/bin/continuous-claude
# or if you installed to /usr/local/bin:
sudo rm /usr/local/bin/continuous-claude
rm ~/.local/bin/continuous-claude.ps1
使用 continuous-claude 之前,你需要:
一个 AI 编程智能体 CLI:Claude Code CLI——使用 claude auth 进行身份验证;Codex CLI——使用 codex login 进行身份验证
Claude Code CLI——使用 claude auth 进行身份验证
Codex CLI——使用 codex login 进行身份验证
GitHub CLI——使用 gh auth login 进行身份验证
jq——在 macOS 上使用 brew install jq 安装,在 Linux 上使用 apt-get install jq 安装。PowerShell 运行器使用原生 JSON 解析,因此不需要 jq。
Continuous Claude 目前可自动执行 GitHub 拉取请求工作流。它能够检测 GitHub 远程仓库,使用 gh pr create 创建 PR,等待 GitHub 检查和评审,并通过 GitHub API 完成合并。
目前尚不支持 Gitea 等自托管 Git 托管平台,因为它们使用不同的拉取请求、检查和评审 API。你仍然可以使用 --disable-commits 以仅本地模式运行 Continuous Claude,或使用 --disable-branches 在当前分支上运行,但目前完整的 PR 自动化需要使用 GitHub 仓库。
# 使用提示词、最大运行次数和 GitHub 仓库运行(所有者和仓库会从 git remote 自动检测)
continuous-claude --prompt "add unit tests until all code is covered" --max-runs 5
# 使用 Codex CLI 而非 Claude Code 运行同一循环
continuous-claude --provider codex --prompt "add unit tests until all code is covered" --max-runs 5
# 原生 Windows PowerShell 运行器
pwsh ~/.local/bin/continuous-claude.ps1 --prompt "add unit tests until all code is covered" --max-runs 5
# 或显式指定所有者和仓库
continuous-claude --prompt "add unit tests until all code is covered" --max-runs 5 --owner AnandChowdhary --repo continuous-claude
# 或改为使用成本预算运行
continuous-claude --prompt "add unit tests until all code is covered" --max-cost 10.00
# 或运行指定时长(有时间限制的集中运行)
continuous-claude --prompt "add unit tests until all code is covered" --max-duration 2h
-p, --prompt:传递给所选 AI 编程智能体的任务提示词(必填)
--provider:AI 编程提供商,可选 claude 或 codex(默认值:claude)
--review-provider:用于评审轮次的 AI 编程提供商,可选 claude 或 codex(默认与 --provider 相同)
-m, --max-runs:最大迭代次数,使用 0 表示无限次(除非提供了 --max-cost 或 --max-duration,否则必填)
--max-cost:最大支出金额(美元)(除非提供了 --max-runs 或 --max-duration,否则必填)
--max-duration:最大运行时长(例如 2h、30m、1h30m)(除非提供了 --max-runs 或 --max-cost,否则必填)
--codex-input-cost-per-million:用于估算 Codex 成本预算的输入 token 费率
--codex-output-cost-per-million:用于估算 Codex 成本预算的输出 token 费率
--codex-cached-input-cost-per-million:用于估算 Codex 成本预算的缓存输入 token 费率(默认与输入费率相同)
--owner:GitHub 仓库所有者(如未提供,则从 git remote 自动检测)
--repo:GitHub 仓库名称(如未提供,则从 git remote 自动检测)
--merge-strategy:合并策略:squash、merge 或 rebase(默认值:squash)
--git-branch-prefix:Git 分支名称前缀(默认值:continuous-claude/)
--notes-file:共享任务笔记文件的路径(默认值:SHARED_TASK_NOTES.md)
--knowledge-file <file>:需要在多次迭代之间持续维护的项目长期知识文件路径,例如 CLAUDE.md
--disable-commits:禁用自动 Git 提交、PR 创建和合并(适用于测试)
--disable-branches:直接在当前分支上提交,不创建分支或 PR
--worktree <name>:在 Git worktree 中运行以支持并行执行(如有需要则创建)
--worktree-base-dir <path>:worktree 的基础目录(默认值:../continuous-claude-worktrees)
--cleanup-worktree:完成后移除 worktree
--list-worktrees:列出所有活跃的 Git worktree,然后退出
--dry-run:模拟执行,不进行任何更改
--completion-signal <phrase>:智能体在整个项目完成时输出的短语(默认值:CONTINUOUS_CLAUDE_PROJECT_COMPLETE)
--completion-threshold <num>:触发提前停止所需的连续完成信号次数(默认值:3)
--stall-threshold <number>:连续失败达到此次数后暂停,并将诊断信息追加到笔记文件中,以便人工介入
--max-calls-per-hour <number>:将提供商调用频率限制在每小时的这一上限;达到上限后休眠,直到重新获得可用额度
--error-threshold <number>:退出前允许连续发生的非限流错误次数(默认值:3)
-r, --review-prompt [text]:每次迭代后运行一轮评审以验证更改。如果省略文本,Continuous Claude 将使用一条全面的默认评审提示词,对差异进行评审、运行可用的检查、简化已更改的代码,并在适用时验证应用。
--command-retry-max <number>:在开始新一轮迭代之前,对临时性提交、推送或 PR 创建命令的最大尝试次数(默认值:3)
--command-retry-base-delay <seconds>:临时性命令的初始重试延迟秒数,每次尝试失败后翻倍(默认值:5)
你提供的任何未被 continuous-claude 识别的附加标志,都会自动转发给所选提供商的命令。你也可以使用 -- 显式停止解析 continuous-claude 的选项,并将剩余参数转发给提供商 CLI。
Codex CLI 目前会报告 token 使用量,但不会报告美元成本。将 --provider codex 与 --max-cost 配合使用时,请通过 --codex-input-cost-per-million 和 --codex-output-cost-per-million 提供明确的 token 费率,以便 continuous-claude 根据 Codex 使用量事件强制执行预算限制。
# 运行 5 次迭代(所有者和仓库会从 git remote 自动检测)
continuous-claude -p "improve code quality" -m 5
# 使用 Codex CLI 运行 5 次迭代
continuous-claude --provider codex -p "improve code quality" -m 5
# 使用 Claude 进行实现,并使用 Codex 执行评审轮次
continuous-claude --provider claude --review-provider codex -p "add feature" -m 5 -r
# 无限运行,直到被停止
continuous-claude -p "add unit tests until all code is covered" -m 0
# 运行至 10 美元预算耗尽
continuous-claude -p "add documentation" --max-cost 10.00
# 运行 Codex,直到估算的 10 美元预算耗尽
continuous-claude --provider codex -p "add documentation" --max-cost 10.00 \
--codex-input-cost-per-million 1.25 --codex-output-cost-per-million 10.00
# 运行 2 小时(有时间限制的集中运行)
continuous-claude -p "add unit tests" --max-duration 2h
# 运行 30 分钟
continuous-claude -p "refactor module" --max-duration 30m
# 运行 1 小时 30 分钟
continuous-claude -p "add features" --max-duration 1h30m
# 最多运行 10 次迭代或花费 5 美元,以先达到者为准
continuous-claude -p "refactor code" -m 10 --max-cost 5.00
# 同时使用时长和成本限制(以先达到者为准)
continuous-claude -p "improve tests" --max-duration 1h --max-cost 5.00
# 使用合并提交而非 squash
continuous-claude -p "add features" -m 5 --merge-strategy merge
# 使用 rebase 策略
continuous-claude -p "update dependencies" -m 3 --merge-strategy rebase
# 使用自定义分支前缀
continuous-claude -p "refactor code" -m 3 --git-branch-prefix "feature/"
# 使用自定义笔记文件
continuous-claude -p "add features" -m 5 --notes-file "PROJECT_CONTEXT.md"
# 记录长期项目知识,供未来的 AI 或人类开发者使用
continuous-claude -p "modernize the API" -m 5 --knowledge-file "CLAUDE.md"
# 在不创建提交或 PR 的情况下进行测试
continuous-claude -p "test changes" -m 2 --disable-commits
# 直接在当前分支上提交,不创建分支或 PR
continuous-claude -p "quick fixes" -m 3 --disable-branches
# 传递额外的 Claude Code CLI 标志(例如限制工具)
continuous-claude -p "add features" -m 3 --allowedTools "Write,Read"
# 在 -- 后传递额外的 Codex CLI 标志
continuous-claude --provider codex -p "add features" -m 3 -- --model gpt-5.5
# 使用其他模型
continuous-claude -p "refactor code" -m 5 --model claude-haiku-4-5
# 当智能体发出项目完成信号时启用提前停止
continuous-claude -p "add unit tests to all files" -m 50 --completion-threshold 3
# 使用自定义完成信号
continuous-claude -p "fix all bugs" -m 20 --completion-signal "ALL_BUGS_FIXED" --completion-threshold 2
# 连续失败后暂停,并将诊断信息写入 SHARED_TASK_NOTES.md
continuous-claude -p "stabilize CI" -m 20 --stall-threshold 3
# 限制提供商调用吞吐量,并在限流重置时间窗口结束后继续重试
continuous-claude -p "fix flaky tests" -m 20 --max-calls-per-hour 80 --error-threshold 5
# 使用评审者在每次迭代后验证并修复更改
continuous-claude -p "add new feature" -m 5 -r "Run npm test and npm run lint, fix any failures"
# 使用默认评审提示词
continuous-claude -p "add new feature" -m 5 -r
# 放弃当前迭代之前,重试临时性的提交、推送或 PR 创建失败
continuous-claude -p "add new feature" -m 5 --command-retry-max 4 --command-retry-base-delay 10
# 显式指定所有者和仓库(适用于尚未设置 git remote 或并非 GitHub 仓库的情况)
continuous-claude -p "add features" -m 5 --owner myuser --repo myproject
# 检查并安装更新
continuous-claude update
continuous-claude -p "We are building... You should pick one thing to work on from SPEC.md, just one, and read SHARED_TASK_NOTES.md for the current status. If it's bigger than a single focused task, break it into small subtasks and only do the first one. Before you start, jot the breakdown into SHARED_TASK_NOTES.md so the next deve
使用 Git worktree 同时运行多个实例,避免发生冲突:
# 终端 1(自动检测所有者和仓库)
continuous-claude -p "Add unit tests" -m 5 --worktree tests
# 终端 2(同时运行)
continuous-claude -p "Add docs" -m 5 --worktree docs
每个实例都会在 ../continuous-claude-worktrees/<name>/ 创建自己的 worktree,拉取最新更改,并独立运行。worktree 会保留下来,以便重复使用。
# 列出 worktree
continuous-claude --list-worktrees
# 完成后清理
continuous-claude -p "task" -m 1 --worktree temp --cleanup-worktree
一次成功的运行如下所示:
🔄 (1/1) Starting iteration...
🌿 (1/1) Creating branch: continuous-claude/iteration-1/2025-11-15-be939873
🤖 (1/1) Running Claude Code...
📝 (1/1) Output: Perfect! I've successfully completed this iteration of the testing project. Here's what I accomplished: [...]
💰 (1/1) Cost: $0.042
✅ (1/1) Work completed
🌿 (1/1) Creating branch: continuous-claude/iteration-1/2025-11-15-be939873
💬 (1/1) Committing changes...
📦 (1/1) Changes committed on branch: continuous-claude/iteration-1/2025-11-15-be939873
📤 (1/1) Pushing branch...
🔨 (1/1) Creating pull request...
🔍 (1/1) PR #893 created, waiting 5 seconds for GitHub to set up...
🔍 (1/1) Checking PR status (iteration 1/180)...
📊 Found 6 check(s)
🟢 2 🟡 4 🔴 0
👁️ Review status: None
⏳ Waiting for: checks to complete
✅ (1/1) All PR checks and reviews passed
🔀 (1/1) Merging PR #893...
📥 (1/1) Pulling latest from main...
🗑️ (1/1) Deleting local branch: continuous-claude/iteration-1/2025-11-15-be939873
✅ (1/1) PR #893 merged: Add unit tests for authentication module
🎉 Done with total cost: $0.042
MIT ©️ Anand Chowdhary