第七章:Agent 与自动化

Agent 模式让 Claude Code 从"问答工具"升级为"自主执行者"——它能拆解复杂任务、调用工具、启动子 Agent,甚至接入 CI/CD 流水线,实现真正的编程自动化。

7.1 Agent 工具详解

Claude Code 内置的 Agent 工具允许主 Claude 启动一个独立的子 Agent 来处理子任务,子 Agent 拥有独立的上下文和工具访问权限。

参数说明

参数类型说明
descriptionstring子 Agent 任务的简短描述(3-5 词)
promptstring给子 Agent 的完整任务说明,需自包含
subagent_typestring专用 Agent 类型(如 general-purpose、Explore 等)
isolationstring设为 "worktree" 时在独立 Git 工作树中运行
run_in_backgroundboolean是否后台运行(不阻塞主 Agent)

编写高质量 Prompt 的要点

子 Agent 没有主 Agent 的上下文记忆,prompt 必须自包含

text
# ❌ 不好的 prompt(缺少背景)
修复这个 bug

# ✅ 好的 prompt(自包含)
修复 src/api/auth.ts 第 42 行的 JWT 验证 bug。
背景:当 token 过期时,代码抛出未捕获的异常而不是返回 401 状态码。
要求:
- 捕获 TokenExpiredError 并返回 { status: 401, message: "Token 已过期" }
- 不要修改函数签名
- 修改后运行 npm test 验证

7.2 Sub-agent 拆分策略

何时拆分为子 Agent

  • 任务可以被明确划分为独立的子任务,且子任务之间无依赖
  • 单个任务涉及的代码量超过 2000 行,超出单次上下文处理能力
  • 需要对多个模块并行操作(如同时重构前端和后端)
  • 需要保护主 Agent 的上下文不被大量中间结果污染

任务边界划分原则

原则说明
单一职责每个子 Agent 只负责一个明确的模块或功能
输入输出明确子 Agent 的输入(文件/参数)和输出(结果/产物)要清晰定义
可独立验证子任务完成后可以独立运行测试验证,不依赖其他子任务
避免共享写入并行子 Agent 不应同时写入同一文件,防止冲突

典型拆分示例

text
# 主 Agent 任务:为项目添加国际化支持

# 拆分为 3 个独立子任务:
子 Agent 1:扫描 src/ 目录,提取所有硬编码中文字符串,
           生成 locales/zh-CN.json 翻译文件

子 Agent 2:修改 src/components/ 中的 React 组件,
           将硬编码文本替换为 t('key') 调用

子 Agent 3:安装和配置 react-i18next,
           修改 main.tsx 初始化 i18n 配置

7.3 并行 Agent

在 CLAUDE.md 或自定义 Skill 中,通过在单条消息中发起多个 Agent 调用实现并行执行,可大幅缩短多任务的总用时。

💡
并行的核心原则

将多个 Agent 调用放在同一条消息中发出,Claude 会并发执行它们。如果分成多条消息,则是串行执行。

并行执行模式

text
# 对以下三个模块并行执行代码审查,同时发起所有任务:

[Agent 1] 审查 src/modules/user/ 下的所有文件,
重点检查:SQL 注入、权限校验、敏感数据暴露

[Agent 2] 审查 src/modules/payment/ 下的所有文件,
重点检查:金额计算精度、幂等性、事务完整性

[Agent 3] 审查 src/modules/notification/ 下的所有文件,
重点检查:消息队列可靠性、重试机制、错误处理

所有 Agent 完成后,汇总三个报告,给出整体安全评分。

结果汇总模式

text
# 并行收集多源信息,再统一分析

同时执行:
1. 搜索 GitHub Issues 中关于性能问题的最新讨论
2. 读取 src/db/queries.ts 中所有数据库查询
3. 读取最近一周的 error.log

三项完成后,综合分析性能瓶颈原因并给出优先级排序的优化建议。

7.4 Headless 模式

Headless 模式通过 claude -p 非交互式运行,适合 CI/CD 流水线、定时任务和脚本集成。

基本用法

bash
# 基本调用
claude -p "审查 src/ 目录下的安全漏洞,输出 Markdown 报告"

# 输出为 JSON
claude -p "列出所有 TODO 注释" --output-format json

# 指定工作目录
claude -p "运行测试并总结失败原因" --cwd /path/to/project

# 自动批准所有权限(用于 CI 环境)
claude --dangerously-skip-permissions -p "更新所有依赖包到最新版本"

GitHub Actions 集成示例

yaml
# .github/workflows/ai-review.yml
name: Claude Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
      contents: read

    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install Claude Code
        run: npm install -g @anthropic-ai/claude-code

      - name: Run AI Code Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          git diff origin/${{ github.base_ref }}...HEAD > changes.diff

          REVIEW=$(cat changes.diff | claude --dangerously-skip-permissions -p "
            审查这次 PR 的代码变更。
            重点检查:
            1. 安全漏洞(XSS、注入攻击、权限绕过)
            2. 逻辑错误和边界条件处理
            3. 性能问题

            输出格式:
            - 用 Markdown 格式
            - 每个问题标注严重级别:🔴 Critical / 🟡 Warning / 🟢 Suggestion
            - 最后给出总体评价
          ")

          # 将审查结果发布为 PR 评论
          gh pr comment ${{ github.event.pull_request.number }} --body "$REVIEW"

7.5 自动化工作流案例

案例一:自动化代码审查

结合 Git Hook 实现提交前自动审查:

bash
#!/bin/bash
# .git/hooks/pre-push

echo "🤖 Running Claude Code Review..."

DIFF=$(git diff origin/main...HEAD)

if [ -z "$DIFF" ]; then
  echo "No changes to review."
  exit 0
fi

RESULT=$(echo "$DIFF" | claude --dangerously-skip-permissions -p "
快速审查这次提交的代码变更(30秒内完成)。
只报告 Critical 级别的问题(安全漏洞、数据丢失风险)。
如果没有 Critical 问题,输出:APPROVED
如果有问题,输出:BLOCKED,然后列出问题。
")

if echo "$RESULT" | grep -q "BLOCKED"; then
  echo "❌ Push blocked by AI review:"
  echo "$RESULT"
  exit 1
else
  echo "✅ AI review passed"
  exit 0
fi

案例二:定时技术报告生成

bash
#!/bin/bash
# 每周一早上 9 点通过 cron 运行
# 0 9 * * 1 /path/to/weekly-report.sh

cd /path/to/project

REPORT=$(claude --dangerously-skip-permissions -p "
分析本项目过去一周的活动,生成技术周报:

1. 运行 git log --since='7 days ago' --oneline 查看提交记录
2. 统计各模块的变更量
3. 识别本周主要完成的功能和修复的 Bug
4. 找出代码质量指标(如新增的 TODO、过长的函数)
5. 给出下周建议关注的技术债务

输出 Markdown 格式,附带关键数据统计。
")

# 发送到 Slack
curl -X POST "$SLACK_WEBHOOK_URL" \
  -H 'Content-type: application/json' \
  --data "{\"text\": \"📊 本周技术周报\n\`\`\`\n$REPORT\n\`\`\`\"}"
⚠️
Headless 模式安全注意事项

--dangerously-skip-permissions 会自动批准所有操作,在 CI 环境中务必通过 permissions.allow/deny 精确限制可操作的范围,防止 Claude 执行意外的破坏性操作。