在CI/CD流程中部署Claude Code作为自主Agent,自动执行代码审查、生成测试和修复失败。将被动报错转变为主动修复,减少开发者上下文切换。
本文在人工监督和审核下,由 AI 协助完成。
大多数 CI 失败都会在人工干预上浪费数小时,因为传统机器人只会标记问题,却从不修复问题。开发者创建拉取请求后,代码检查失败、测试中断,于是必须有人暂时放下手头工作,切换上下文来诊断并修补问题。这种上下文切换在团队中不断累积,最终导致维护 CI 健康状态的成本超过它所带来的价值。
以自动模式运行在 CI 流水线中的 Claude Code,可以作为自主 AI 智能体解决这个问题。当拉取请求触发工作流时,Claude Code 会审查差异、生成缺失的测试、尝试修复失败,并以审查评论的形式发布结构化反馈——整个过程无须人工干预。开发者收到的不再是错误日志,而是可直接采取行动的修复方案。
这种区别至关重要。传统 CI 机器人负责检测和报告,而 AI 智能体 CI 则负责检测、修复和记录。其投资回报体现在两个方面:缩短常规问题从提交到合并所需的时间,以及保留认知能力,以便用于真正需要人工判断的架构决策。
自动模式下的 Claude Code 可以在 CI 流水线中无人值守地运行,并由安全分类器在执行前拦截危险命令。
AI 智能体 CI 可以在单个工作流中完成代码审查、测试生成和自动修复,从而消除人工切换上下文的循环。
生产环境部署需要设置成本控制措施(每个 PR 的 token 预算)、限定文件权限范围,以及配置退出条件,以防止失控执行。
GitHub Actions、GitLab CI 和 Azure DevOps 均支持通过环境变量和密钥管理集成 Claude Code。
目前行之有效的模式是采用范围明确、职责单一的 AI 智能体——分别使用一个智能体进行审查、一个生成测试、一个执行自动修复——而不是让单个智能体尝试完成所有任务。
自动模式允许 Claude Code 无须交互式确认即可执行命令。AI 智能体接收任务、规划一系列操作,并将其执行至完成;与此同时,分类器模型会审查每条命令,判断其是否扩大了权限范围,或者访问了定义边界之外的文件系统。这一安全层在 CI 中十分重要,因为 AI 智能体拥有仓库写入权限,并且可以接触环境密钥。

这里的故障模式并不明显,但代价高昂。如果没有自动模式,Claude Code 会在执行每条命令时暂停,等待交互式批准。而 CI 中不存在可供交互的终端,因此工作流会一直挂起,直至超时。启用自动模式后,AI 智能体会继续执行,直至完成任务或触发安全拦截;无论哪种结果,都能为拉取请求提供可用的输出。
配置自动模式需要设置 CLAUDE_AUTO_MODE 环境变量,并在工作流清单中定义权限范围。该范围会限制 AI 智能体能够读取或修改哪些文件。代码审查智能体应当能够查看完整差异,但只能写入临时评论文件。测试生成智能体则需要拥有源文件的读取权限和测试目录的写入权限。
AI 智能体 CI 的入口是一个由拉取请求事件触发的 GitHub Actions 工作流。该工作流会检出仓库、安装 Claude Code,并使用与特定 PR 差异相关的任务描述来调用它。
// .github/workflows/claude-review.yml
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Full history for accurate diffs
- name: Install Claude Code
run: npm install -g @anthropic/claude-code
- name: Run Code Review
env:
CLAUDE_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
CLAUDE_AUTO_MODE: true
CLAUDE_SCOPE: "read:**/*.{ts,tsx,js,jsx},write:.claude/review.md"
PR_NUMBER: ${{ github.event.pull_request.number }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
claude --task "Review the diff between $BASE_SHA and $HEAD_SHA.
Focus on type safety, error handling, and performance implications.
Write findings to .claude/review.md with specific line references and suggested fixes."
- name: Post Review
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('.claude/review.md', 'utf8');
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: review
});
这一配置清晰地实现了关注点分离。CLAUDE_SCOPE 变量可以防止 AI 智能体在审查期间修改源文件。任务描述将智能体的注意力限定在特定的质量维度上。GitHub Script action 会将结果发布为评论,并将其保留在 PR 时间线中,以供日后参考。
审查步骤会与现有 CI 检查并行运行。即使构建失败,Claude Code 仍会根据差异执行审查。如果测试失败,则由另一个工作流处理自动修复。与顺序执行各阶段相比,这种并行执行方式可以缩短流水线的总运行时间。
测试生成和自动修复需要拥有仓库写入权限。如果 AI 智能体生成了格式错误或结构异常的代码,这项权限就会带来风险。缓解策略是采用两阶段工作流:AI 智能体先将内容写入功能分支,再由人工审查智能体提交的 commit,确认后再合并到目标分支。
// .github/workflows/claude-auto-fix.yml
name: Claude Auto-Fix
on:
pull_request:
types: [opened, synchronize]
workflow_run:
workflows: ["CI"]
types: [completed]
branches-ignore:
- claude-auto-fix-*
jobs:
fix:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Create Fix Branch
run: |
FIX_BRANCH="claude-auto-fix-${{ github.event.pull_request.number }}-$(date +%s)"
git checkout -b "$FIX_BRANCH"
echo "FIX_BRANCH=$FIX_BRANCH" >> $GITHUB_ENV
- name: Install Dependencies
run: npm ci
- name: Run Tests to Capture Failures
id: test
continue-on-error: true
run: npm test 2>&1 | tee test-output.log
- name: Claude Auto-Fix
if: steps.test.outcome == 'failure'
env:
CLAUDE_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
CLAUDE_AUTO_MODE: true
CLAUDE_SCOPE: "read:**/*,write:src/**/*.{ts,tsx,test.ts,test.tsx}"
CLAUDE_TOKEN_BUDGET: 50000
run: |
claude --task "Analyze test-output.log and fix the failing tests.
Generate missing tests for any new functions in the diff that lack coverage.
Ensure all fixes maintain type safety and existing test patterns.
Commit changes with a descriptive message."
- name: Push Fix Branch
run: |
git config user.name "claude-code[bot]"
git config user.email "claude-code[bot]@users.noreply.github.com"
git push origin "$FIX_BRANCH"
- name: Create PR for Fixes
uses: actions/github-script@v7
with:
script: |
await github.rest.pulls.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `🤖 Auto-fix for PR #${{ github.event.pull_request.number }}`,
head: process.env.FIX_BRANCH,
base: '${{ github.event.pull_request.head.ref }}',
body: `Automated fixes generated by Claude Code for failing tests in PR #${{ github.event.pull_request.number }}.
Review the changes carefully before merging.`
});
CLAUDE_TOKEN_BUDGET 环境变量限制了 AI 智能体执行此任务时可使用的 token 总量。如果不设置这一限制,失控循环可能会迅速消耗配额——例如,AI 智能体生成的代码引入了新的失败,随后又尝试修复这些失败。对于大多数测试套件而言,50,000 个 token 的预算通常足以覆盖诊断、代码生成和验证。
这里的模式是防御性的。智能体写入一个单独的分支,从不直接写入 PR 分支。这创建了一个手动审批门:开发者审核自动修复 PR,确认改动正确,然后将其合并到原始 PR。如果自动修复引入了回归,开发者关闭自动修复 PR 并手动解决问题。
对于测试生成来说,任务描述应该参考现有测试套件的模式。如果项目使用 Vitest 和特定的断言风格,提示词必须包含一个例子。没有这种锚定,Claude Code 会默认采用通用 Jest 模式,可能与项目约定不匹配。
传统 CI 机器人检测违规但从不修复。手动审查发现问题但随着团队增长而扩展性差。Claude Code 处于中间地带:它对机械性问题进行自动化修复,同时将复杂问题标记供人工审查。

这里的含义是,智能体 CI 不会取代人工审查的架构决策、安全边界或产品需求。它取代的是修复 lint 错误、添加缺失的空检查和生成样板代码这些日常工作。当团队每天合并数十个 PR 时,时间节省会累积。
传统机器人擅长保持一致性。它们强制执行风格规则而不会疲劳。智能体 CI 擅长修复。它应用的修复遵循人类会使用的相同模式,但没有上下文切换成本。手动审查擅长判断。人类能够捕捉到静态分析工具无法标记的看似无害的改动所带来的安全含义。
有效的模式结合了这三种。传统机器人首先作为快速关卡运行。如果它们失败,Claude Code 尝试自动修复。如果自动修复成功,PR 继续进行手动审查以处理非机械性问题。如果自动修复失败,开发者会收到机器人的报告和 Claude 对修复为何未收敛的分析。
在生产中部署智能体 CI 需要三项控制:令牌预算以防止成本失控、权限范围以限制影响范围,以及安全分类器以阻止危险操作。

令牌预算位于仓库级别或按 PR 级别,具体取决于计费限制。按仓库每月预算防止单个恶意或配置错误的 PR 耗尽组织配额。按 PR 预算确保多个 PR 同时到达时的公平资源分配。权衡是复杂性:按 PR 预算需要在工作流运行间进行状态跟踪,通常存储在仓库机密或数据库中。
权限范围使用 glob 模式定义读写边界。审查智能体需要 read:/* 但 write:.claude/review.md。测试生成智能体需要 read:src//,read:tests/**/ 和 write:tests/**/*.test.ts。重构智能体需要更广泛的写入权限,因此其预算应该更低,其输出应始终落在审查分支上。
安全分类器在命令执行前运行。分类器模型评估命令是否尝试提升权限、访问网络资源或修改声明范围外的文件。如果分类器标记命令,智能体会收到错误并必须选择替代方法。这很重要,因为提示词可能包含微妙的注入攻击,诱骗智能体运行 curl 或 rm -rf。
开发者最常遇到的失败模式是范围配置错误。如果范围太窄,智能体无法完成任务,工作流会无声地失败。如果范围太广,智能体可能在尝试修复本地化问题时修改不相关的文件。解决方案是干运行模式,其中 Claude Code 记录其预期操作而不执行它们,允许开发者在启用自动模式前验证范围正确性。
对于管理多个仓库的团队,共享工作流配置模板可减少偏差。模板定义标准范围、预算和任务描述。单个仓库通过仓库变量覆盖特定值。这种集中化防止了一个团队发现关键安全改进但其他团队继续运行易受攻击配置的场景。
GitHub Actions 提供最直接的集成,因为它原生支持机密、矩阵构建和可重用工作流。前面展示的工作流清单在 GitHub 托管运行器上运行,但具有合规需求的团队可以使用带有预安装 Claude Code 二进制文件的自托管运行器。

GitLab CI 需要一个包含 Claude Code 二进制文件的 Docker 镜像,因为 GitLab 运行器不在作业间保持全局 npm 安装。推荐方法是基于 node:20-alpine 的自定义 Docker 镜像,预安装了 Claude Code。此镜像然后出现在 .gitlab-ci.yml 配置中:
# .gitlab-ci.yml
claude-review:
image: registry.gitlab.com/yourorg/claude-code:latest
stage: review
only:
- merge_requests
script:
- export CLAUDE_API_KEY=$CLAUDE_API_KEY_SECRET
- export CLAUDE_AUTO_MODE=true
- export CLAUDE_SCOPE="read:**/*.{ts,tsx,js,jsx},write:.claude/review.md"
- claude --task "Review the merge request diff for type safety and error handling. Write findings to .claude/review.md."
- |
curl --request POST \
--header "PRIVATE-TOKEN: $CI_JOB_TOKEN" \
--form "body=<.claude/review.md" \
"$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/notes"
Azure DevOps 使用管道变量处理机密,同时支持 YAML 和经典编辑器管道。YAML 方法为管道定义提供版本控制:
# azure-pipelines.yml
trigger:
- none
pr:
branches:
include:
- main
- develop
pool:
vmImage: 'ubuntu-latest'
steps:
- checkout: self
fetchDepth: 0
- task: NodeTool@0
inputs:
versionSpec: '20.x'
- script: npm install -g @anthropic/claude-code
displayName: 'Install Claude Code'
- script: |
export CLAUDE_API_KEY=$(CLAUDE_API_KEY)
export CLAUDE_AUTO_MODE=true
export CLAUDE_SCOPE="read:**/*.{ts,tsx,js,jsx},write:.claude/review.md"
claude --task "Review PR diff focusing on async error handling and null safety. Output to .claude/review.md."
displayName: 'Run Claude Code Review'
- task: GitHubComment@0
inputs:
gitHubConnection: 'github-connection'
repositoryName: '$(Build.Repository.Name)'
id: $(System.PullRequest.PullRequestNumber)
comment: |
$(cat .claude/review.md)
各平台间的差异对于在多语言环境中运营的团队很重要。GitHub Actions 为发布评论、创建问题和管理标签提供了最丰富的预构建 action 生态。GitLab CI 提供了与 GitLab 内置代码审查功能的更紧密集成。Azure DevOps 与企业合规工具集成并支持复杂的审批工作流。
凭证管理在平台间不同但遵循通用模式:将 Claude API 密钥存储在平台的机密管理器中,在运行时将其注入为环境变量,并且永远不要记录它或将其写入磁盘。对于具有密钥轮换策略的组织,集成应支持从外部保险库(如 HashiCorp Vault 或 AWS Secrets Manager)读取,而不是静态平台机密。
现在有效的模式是有范围的、单一职责的智能体。一个智能体执行代码审查并发布评论。另一个智能体生成测试。第三个智能体尝试为特定失败类修复。这些智能体独立运行,每个都有自己的令牌预算和权限范围。
要避免的:试图完成所有任务的单个庞大智能体。失败模式是级联复杂性。如果智能体的审查任务失败,其测试生成任务永远不会运行。如果测试生成耗尽整个令牌预算,自动修复永不执行。结果是不可预测的结果,使 CI 失败调试比 Claude Code 存在前更难。
2026 年正在兴起的模式是声明式智能体编排。开发者不再编写命令式的任务描述,而是在清单中声明期望结果:“所有新增函数都必须有测试。所有失败的测试都必须自动修复。所有 PR 都必须有审查评论。”编排层决定调用哪些智能体、以什么顺序调用,以及为其分配多少预算。这种声明式方法减少了配置漂移,并使智能体的行为可审计。
另一个很有前景的方向是成本感知调度。当 PR 到达时,编排层会根据差异大小和历史使用模式,估算每个智能体的 token 成本。如果预估成本超过每个 PR 的预算,编排层就会选择只运行部分智能体,或者请求人工批准提高预算。这可以避免一次包含 5,000 行代码的重构在单次工作流运行中耗尽整整一周的配额。
在没有人工监督的情况下,开发者应避免使用智能体 CI 进行架构审查或安全审计。Claude Code 擅长检测类型错误、缺失的空值检查以及不一致的代码模式。但它无法评估数据库模式迁移是否会造成停机,也无法判断 API 变更是否会破坏与移动客户端的向后兼容性。这些问题需要基于全系统上下文作出人工判断,而目前没有任何智能体具备这样的上下文。
采用智能体 CI 的团队应该先从非关键代码仓库中的代码审查和测试生成入手。衡量 Claude 建议的准确性、无需修改即可合并的自动修复所占比例,以及合并耗时的缩短程度。在扩展到生产代码仓库之前,利用这些指标校准 token 预算和权限范围。只需经过几十个 PR,投资回报就会变得十分明显:花在机械性修复上的时间更少,可用于设计讨论的时间更多。
成本取决于差异大小、任务复杂度和模型层级。对于一个典型的、包含 200 行变更的 PR,代码审查任务大约会消耗 5,000~10,000 个 token(输入和输出合计),使用 Claude 3.5 Sonnet 时的成本为 0.15~0.30 美元。测试生成和自动修复任务的成本更高,对于复杂变更,通常会达到 20,000~50,000 个 token(0.60~1.50 美元)。团队应该为每个 PR 设置预算,并监控实际用量以优化成本。
如果向 Claude Code 提供静态分析报告,并授予其访问受影响文件的权限,它可以针对已知的漏洞模式应用补丁。但是,不应将其作为修复安全问题的唯一机制。推荐的模式是:由静态分析检测问题,Claude Code 生成建议补丁,再由人工安全工程师在合并前审查该补丁。这样可以防止智能体在修复原始漏洞时引入其他漏洞。
两阶段工作流(智能体写入功能分支,由人工在合并前进行审查)可以防止错误代码进入目标分支。如果自动修复引入了回归,开发者可以关闭自动修复 PR,并手动处理该问题。此外,CI 流水线会在创建 PR 之前针对自动修复分支运行测试,因此大多数回归问题都能被自动发现。
使用作业并发组在工作流层面实现速率限制。GitHub Actions 支持并发键,当同时运行的作业过多时,可让作业进入队列。为所有 Claude Code 工作流设置全局并发限制,以限制并行执行数量。例如,concurrency: claude-code-${{ github.repository }} 可确保每个代码仓库同一时间只运行一个 Claude 工作流。
支持,但范围配置会变得更加复杂。为每种语言分别定义范围:对于 TypeScript,使用 read:packages/typescript/**/*,write:packages/typescript/tests/**/*.test.ts;对于 Python,使用 read:packages/python/**/*,write:packages/python/tests/**/*_test.py。使用独立工作流或条件步骤来调用特定语言的智能体。Claude API 本身与语言无关;智能体会适应它在代码库中观察到的模式。
以上涵盖了在 CI 中运行 Claude Code 的核心模式。将这些模式应用到生产环境中,效果会立刻显现:上下文切换更少、PR 合并更快,并能保留认知精力,用于真正需要人类洞察力的架构决策。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。