首页 › tutorials › Claude Code无人化编排:从-p到多Agent工作树

概述

本教程面向需要将Claude Code从"手动对话工具"升级为"无人化编程引擎"的开发者。你将掌握三大自动化支柱:-p无头模式的脚本化调用、Hooks钩子的事件驱动自动化、以及多Agent并行工作树编排。学完后,你能够构建从单行命令到CI/CD流水线到并行多仓库处理的完整自动化体系。

适用人群:已熟悉Claude Code基本操作,希望实现批量任务、无人值守开发、CI/CD集成的中高级用户。

前置条件


第一部分:-p无头模式 — 脚本化调用的基石

1.1 基本语法与三种调用方式

-p(或--print)标志将Claude Code从交互式TUI转变为纯命令行工具。所有输出直接写入stdout,无需人工干预。

# 方式一:直接传参
claude -p "解释这个项目的目录结构"

# 方式二:管道输入
cat src/main.ts | claude -p "为这个TypeScript文件添加单元测试"

# 方式三:文件重定向
claude -p "总结以下变更" < git-diff.txt

预期输出:纯文本响应直接打印到终端,不显示TUI界面。适合管道串联和脚本嵌套。

1.2 输出格式控制

# JSON格式输出,便于程序解析
claude -p "列出package.json中的所有依赖" --output-format json

# 流式JSON输出(逐事件推送)
claude -p "重构auth模块" --output-format stream-json

# 纯文本输出(默认)
claude -p "解释API路由结构" --output-format text

JSON输出结构示例:

{
  "type": "result",
  "subtype": "success",
  "cost_usd": 0.034,
  "duration_ms": 12450,
  "duration_api_ms": 8200,
  "is_error": false,
  "num_turns": 3,
  "result": "项目使用Express框架,API路由结构如下..."
}

流式JSON每条事件包含:

{"type": "assistant", "subtype": "text", "text": "正在分析..."}
{"type": "tool_use", "name": "Read", "input": {"file_path": "/src/app.ts"}}
{"type": "result", "subtype": "success", "result": "..."}

1.3 会话连续性:--continue与--resume

无人化场景中,"断点续传"是刚需。

# 延续上一次对话(保持上下文)
claude -p --continue "基于刚才的分析,开始重构"

# 恢复指定会话ID
claude -p --resume abc123 "继续这个任务"

# 命名会话,便于后续恢复
claude --session-name "refactor-auth" -p "开始重构认证模块"
claude -p --resume "refactor-auth" "继续重构,处理JWT部分"

# 列出历史会话
claude sessions list

常见问题:--continue只能恢复最近一次会话,如果需要恢复更早的会话,使用--resume加会话ID或名称。

1.4 权限模式选择

无头模式下权限控制尤为关键,提供三级方案:

# 方案一:自动接受所有编辑(适合受控环境)
claude -p "修复所有TypeScript错误" \
  --allowedTools "Edit,Write,Bash(npm test),Bash(npm run build)" \
  --acceptEdits

# 方案二:跳过所有权限确认(高风险,仅CI/CD)
claude -p "运行测试并修复失败用例" \
  --dangerously-skip-permissions

# 方案三:通过配置文件预设允许列表(推荐生产方案)
# .claude/settings.json
{
  "permissions": {
    "allow": [
      "Read",
      "Edit",
      "Bash(npm *)",
      "Bash(git *)",
      "Bash(npx *)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(curl * | *)"
    ]
  }
}

安全提醒:--dangerously-skip-permissions绕过所有安全检查,仅在隔离容器或CI环境中使用。配置文件方式更安全,粒度更细。

1.5 实战:构建代码审查脚本

#!/bin/bash
# review-pr.sh — 自动审查PR变更
set -euo pipefail

PR_NUMBER="${1:?用法: ./review-pr.sh <PR号>}"
REPO_DIR="${2:-.}"

# 获取PR diff
cd "$REPO_DIR"
gh pr diff "$PR_NUMBER" > /tmp/pr-diff.txt

# 运行审查
claude -p "
你是一位资深代码审查员。审查以下PR变更,关注:
1. 安全漏洞(注入、XSS等)
2. 性能问题
3. 代码可维护性
4. 测试覆盖率

$(cat /tmp/pr-diff.txt)
" --output-format json > "/tmp/review-pr-${PR_NUMBER}.json"

# 提取审查结果并发布评论
REVIEW=$(jq -r '.result' "/tmp/review-pr-${PR_NUMBER}.json")
gh pr comment "$PR_NUMBER" --body "## 🤖 AI Code Review

$REVIEW"

echo "✅ PR #$PR_NUMBER 审查完成"

运行方式:

chmod +x review-pr.sh
./review-pr.sh 42

第二部分:Hooks — 事件驱动的自动化层

2.1 Hooks生命周期全景

Hooks是Claude Code的"中间件"系统,在特定生命周期事件触发时执行Shell命令。

flowchart TD
    A[用户发送消息] --> B[PreToolUse Hook]
    B --> C{工具执行}
    C --> D[PostToolUse Hook]
    D --> E[AI生成回复]
    E --> F[Notification Hook]

    G[会话启动] --> H[SessionStart Hook]
    I[会话结束] --> J[Stop Hook]

    K[上下文压缩] --> L[PostCompact Hook]

四种核心Hook事件:

事件 触发时机 典型用途
PreToolUse 工具执行前 拦截危险操作、注入上下文
PostToolUse 工具执行后 自动格式化、日志记录
Notification AI回复完成时 发送通知、触发后续任务
SessionStart 会话开始时 加载环境信息、注入上下文

2.2 配置位置与优先级

Hooks配置支持三个层级,按优先级从低到高:

~/.claude/settings.json          # 全局(所有项目)
项目/.claude/settings.json       # 项目级(团队成员共享)
项目/.claude/settings.local.json # 本地覆盖(不提交到Git)

2.3 PreToolUse:守护安全防线

PreToolUse是最强大的防护层,能根据工具类型和参数进行精准拦截。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/pre-bash.sh"
          }
        ]
      },
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/pre-edit.sh"
          }
        ]
      }
    ]
  }
}

Hook脚本接收JSON格式的stdin输入:

#!/bin/bash
# .claude/hooks/pre-bash.sh — Bash命令安全检查
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')

# 拦截危险命令
DANGEROUS_PATTERNS=(
  "rm -rf /"
  "drop table"
  "DROP TABLE"
  ":(){ :|:& };:"
  "> /dev/sda"
  "curl.*|.*sh"
  "wget.*|.*bash"
)

for pattern in "${DANGEROUS_PATTERNS[@]}"; do
  if echo "$COMMAND" | grep -qiE "$pattern"; then
    echo "{\"decision\":\"block\",\"reason\":\"危险命令被拦截: $COMMAND\"}"
    exit 0
  fi
done

# 允许执行
echo "{\"decision\":\"approve\"}"

关键机制:脚本通过stdout返回JSON决策。三个可选决策: - approve:允许执行 - block:阻止执行,reason会展示给AI - 不输出或输出无效JSON:使用默认权限逻辑

2.4 PostToolUse:自动格式化与增强

#!/bin/bash
# .claude/hooks/post-edit.sh — 编辑后自动格式化
INPUT=$(cat)
TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name')

if [ "$TOOL_NAME" = "Edit" ] || [ "$TOOL_NAME" = "Write" ]; then
  FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path')

  # 根据文件类型选择格式化工具
  case "$FILE_PATH" in
    *.ts|*.tsx|*.js|*.jsx)
      npx prettier --write "$FILE_PATH" 2>/dev/null
      npx eslint --fix "$FILE_PATH" 2>/dev/null
      ;;
    *.py)
      python -m black "$FILE_PATH" 2>/dev/null
      python -m isort "$FILE_PATH" 2>/dev/null
      ;;
    *.go)
      gofmt -w "$FILE_PATH" 2>/dev/null
      ;;
    *.rs)
      rustfmt "$FILE_PATH" 2>/dev/null
      ;;
  esac
fi

echo "{\"decision\":\"approve\"}"

2.5 SessionStart:智能上下文注入

#!/bin/bash
# .claude/hooks/session-start.sh — 注入项目状态信息
cat << 'CTX'
## 当前项目状态

CTX

# 注入Git状态
echo "### Git分支: $(git branch --show-current)"
echo "### 未提交变更:"
git status --short 2>/dev/null | head -20
echo ""

# 注入最近的TODO
if [ -f "TODO.md" ]; then
  echo "### 待办事项:"
  head -20 TODO.md
  echo ""
fi

# 注入测试状态
if [ -f "package.json" ]; then
  echo "### 最近测试结果:"
  npm test 2>&1 | tail -5
  echo ""
fi

echo "以上信息仅供参考,帮助理解当前项目状态。"
{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/session-start.sh"
          }
        ]
      }
    ]
  }
}

2.6 Notification:任务完成通知

#!/bin/bash
# .claude/hooks/notification.sh — 任务完成时发送通知
INPUT=$(cat)
MESSAGE=$(echo "$INPUT" | jq -r '.message // .notification_text // empty')

# macOS通知
if [[ "$OSTYPE" == "darwin"* ]]; then
  osascript -e "display notification \"Claude Code任务完成\" with title \"Claude Code\" sound name \"Glass\""
fi

# Linux桌面通知
if command -v notify-send &>/dev/null; then
  notify-send "Claude Code" "任务已完成" --icon=dialog-information
fi

# Slack通知(可选)
if [ -n "$SLACK_WEBHOOK_URL" ]; then
  curl -s -X POST "$SLACK_WEBHOOK_URL" \
    -H 'Content-Type: application/json' \
    -d "{\"text\": \"✅ Claude Code任务完成: ${MESSAGE:0:200}\"}"
fi

第三部分:多Agent并行工作树

3.1 并行架构概览

单Agent串行处理是Claude Code的默认模式。当面对多个独立任务时,并行化可将效率提升数倍。

flowchart TB
    subgraph Main["主Agent(编排器)"]
        direction TB
        M1[接收用户任务]
        M2[任务分解]
        M3[结果合并]
        M1 --> M2 --> M3
    end

    subgraph Agents["并行Subagent"]
        direction LR
        A1["Agent A<br/>研究任务<br/>📂 worktree-a"]
        A2["Agent B<br/>代码重构<br/>📂 worktree-b"]
        A3["Agent C<br/>测试编写<br/>📂 worktree-c"]
    end

    M2 --> A1
    M2 --> A2
    M2 --> A3
    A1 --> M3
    A2 --> M3
    A3 --> M3

3.2 Task工具:Subagent的核心

在Claude Code交互中,Task工具是创建子代理的唯一入口。它支持五种Subagent类型:

subagent_type:
  - general-purpose   # 通用:搜索、研究、多步骤任务
  - Explore           # 快速探索:文件查找、内容搜索
  - Plan              # 规划:设计方案、架构分析

关键参数:

参数 作用 建议
prompt 任务描述 越具体越好,包含所有必要上下文
subagent_type Agent类型 按需选择,Explore用于只读搜索
isolation 隔离模式 "worktree" 创建独立Git工作树
run_in_background 后台运行 true 实现真正的并行执行

3.3 Worktree隔离模式

Worktree是并行Agent避免文件冲突的核心机制。每个Agent获得独立的Git工作目录。

# 手动创建worktree
claude --worktree feature-auth    # 在.claude/worktrees/下创建独立工作目录
claude --worktree feature-tests   # 另一个独立工作目录

在Task工具中使用worktree隔离:

{
  "subagent_type": "general-purpose",
  "prompt": "为认证模块编写单元测试,覆盖登录、注册、Token刷新三个场景",
  "isolation": "worktree"
}

Worktree生命周期: 1. 创建时:基于HEAD创建新分支和独立工作目录 2. 运行中:所有文件修改在隔离目录中进行 3. 完成后:如果无修改自动清理;有修改则保留分支

3.4 并行模式实战:前后台配合

模式一:前景等待模式(适合有依赖关系的任务)

在Claude Code中直接对话:

请并行完成以下任务:
1. 研究React 19的新特性,总结关键变更点
2. 分析当前项目的依赖树,找出过时的包
3. 审查最近的10个commit,识别代码质量趋势

Claude会自动启动多个Task并行执行,等待全部完成后汇总结果。

模式二:后台并行模式(适合独立的长任务)

请将以下三个任务分配给后台Agent并行执行:
1. 将所有API端点从REST迁移到tRPC
2. 迁移完成后在worktree中进行
3. 每个任务使用独立的worktree隔离

模式三:脚本编排模式(适合CI/CD)

#!/bin/bash
# parallel-tasks.sh — 多仓库并行处理
set -euo pipefail

TASKS=(
  "审查frontend仓库的安全性并生成报告"
  "为backend仓库添加OpenAPI文档"
  "优化shared-lib的性能瓶颈"
)

REPOS=(
  "./frontend"
  "./backend"
  "./shared-lib"
)

PIDS=()

for i in "${!TASKS[@]}"; do
  (
    cd "${REPOS[$i]}"
    claude -p "${TASKS[$i]}" \
      --output-format json \
      --dangerously-skip-permissions \
      > "/tmp/task-${i}-result.json"
  ) &
  PIDS+=($!)
done

# 等待所有任务完成
for pid in "${PIDS[@]}"; do
  wait "$pid"
done

# 汇总结果
echo "=== 任务执行汇总 ==="
for i in "${!TASKS[@]}"; do
  STATUS=$(jq -r '.is_error // false' "/tmp/task-${i}-result.json")
  COST=$(jq -r '.cost_usd // 0' "/tmp/task-${i}-result.json")
  if [ "$STATUS" = "false" ]; then
    echo "✅ 任务$((i+1))完成 - 费用: \$${COST}"
  else
    echo "❌ 任务$((i+1))失败"
  fi
done

3.5 Agent SDK:编程式编排

对于复杂的编排需求,Agent SDK提供TypeScript和Python两种语言的编程接口。

// orchestrator.ts — TypeScript Agent SDK编排器
import { ClaudeCode, type Session } from "@anthropic-ai/claude-agent-sdk";

async function parallelOrchestration() {
  const sdk = new ClaudeCode();

  // 任务1:代码审查(后台)
  const reviewSession = await sdk.createSession({
    prompt: "审查src/目录下所有文件的代码质量,给出改进建议",
    outputFormat: "json",
    acceptEdits: true,
  });

  // 任务2:测试生成(后台)
  const testSession = await sdk.createSession({
    prompt: "为src/目录下所有模块生成单元测试",
    outputFormat: "json",
    acceptEdits: true,
  });

  // 任务3:文档生成(后台)
  const docSession = await sdk.createSession({
    prompt: "根据代码生成API文档",
    outputFormat: "json",
  });

  // 等待所有任务完成
  const [reviewResult, testResult, docResult] = await Promise.all([
    reviewSession.result,
    testSession.result,
    docSession.result,
  ]);

  console.log("审查费用:", reviewResult.cost_usd);
  console.log("测试费用:", testResult.cost_usd);
  console.log("文档费用:", docResult.cost_usd);

  return { reviewResult, testResult, docResult };
}

parallelOrchestration().catch(console.error);

安装SDK:

# TypeScript SDK
npm install @anthropic-ai/claude-agent-sdk

# Python SDK
pip install claude-agent-sdk

第四部分:Routines — 定时任务自动化

4.1 三层定时机制

Claude Code提供三种定时任务方案,覆盖不同场景:

层级 机制 适用场景
/loop 会话内轮询 短期重复(本次会话内)
Desktop定时任务 系统调度器 每日本地任务
Cloud Routines 云端调度 团队共享、跨设备

4.2 /loop:会话内自动化

/loop 每5分钟检查一次测试是否通过,如果失败则自动修复

/loop命令让Claude在当前会话内按间隔重复执行任务。

4.3 Cron驱动的定时任务

# 每天早上8点运行代码审查
# 添加到crontab
0 8 * * * cd /path/to/project && claude -p "审查昨天所有新提交,检查安全漏洞和代码质量" --output-format json >> /var/log/claude-review.log 2>&1

# 每周一生成周报
0 9 * * 1 cd /path/to/project && claude -p "基于上周的Git历史生成本周开发周报" --output-format json | jq -r '.result' | mail -s "周报" [email protected]

4.4 Cloud Routines

Cloud Routines是Claude Code的云端调度方案,支持三种触发方式:

# 创建Routine
/routine create --name "每日安全扫描" \
  --schedule "0 6 * * *" \
  --prompt "扫描所有依赖的安全漏洞,检查是否有已知CVE"

第五部分:实战案例 — 全自动Issue处理流水线

5.1 架构设计

sequenceDiagram
    participant GH as GitHub
    participant Hook as Webhook
    participant Orch as 编排脚本
    participant C1 as Agent: 分类
    participant C2 as Agent: 修复
    participant C3 as Agent: 测试
    participant C4 as Agent: PR

    GH->>Hook: 新Issue创建
    Hook->>Orch: 触发处理
    Orch->>C1: 分类Issue
    C1-->>Orch: bug/feature/question

    alt Bug类型
        Orch->>C2: 在worktree中修复
        C2-->>Orch: 修复完成
        Orch->>C3: 运行测试
        C3-->>Orch: 测试通过
        Orch->>C4: 创建PR
        C4-->>GH: PR创建
    else 非Bug
        Orch->>GH: 添加标签+评论
    end

5.2 完整实现

#!/bin/bash
# auto-issue-handler.sh — 全自动Issue处理器
set -euo pipefail

ISSUE_NUMBER="${1:?用法: ./auto-issue-handler.sh <Issue号>}"
REPO_DIR="${2:-.}"
WORK_DIR="/tmp/claude-issue-${ISSUE_NUMBER}"

cd "$REPO_DIR"

echo "🔍 处理Issue #$ISSUE_NUMBER..."

# === 第一步:获取并分类Issue ===
ISSUE_BODY=$(gh issue view "$ISSUE_NUMBER" --json title,body,labels --jq '.')
ISSUE_TITLE=$(echo "$ISSUE_BODY" | jq -r '.title')
ISSUE_CONTENT=$(echo "$ISSUE_BODY" | jq -r '.body')

CLASSIFICATION=$(claude -p "
分析以下GitHub Issue,只返回一个分类标签(bug/feature/question/docs):

标题: $ISSUE_TITLE
内容: $ISSUE_CONTENT

格式:只输出一个单词。
" --output-format json | jq -r '.result' | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]')

echo "📋 分类结果: $CLASSIFICATION"

# === 第二步:根据分类采取不同策略 ===
case "$CLASSIFICATION" in
  bug)
    echo "🐛 Bug报告,开始自动修复流程..."

    # 创建worktree隔离
    git worktree add "$WORK_DIR" -b "fix/issue-${ISSUE_NUMBER}" HEAD 2>/dev/null || true

    # 分析并修复(在worktree中)
    claude -p "
这是一个Bug报告,请修复它:

标题: $ISSUE_TITLE
内容: $ISSUE_CONTENT

要求:
1. 先找到相关代码
2. 理解Bug的根因
3. 实现最小修复
4. 确保不引入新问题
" --acceptEdits --output-format json \
      > "${WORK_DIR}/fix-result.json"

    # 在worktree中运行测试
    FIX_SUCCESS=$(jq -r '.is_error' "${WORK_DIR}/fix-result.json")

    if [ "$FIX_SUCCESS" = "false" ]; then
      # 提交并创建PR
      cd "$WORK_DIR"
      git add -A
      git commit -m "fix: resolve #${ISSUE_NUMBER} - ${ISSUE_TITLE}"
      git push origin "fix/issue-${ISSUE_NUMBER}" 2>/dev/null || git push -u origin "fix/issue-${ISSUE_NUMBER}"

      PR_URL=$(gh pr create \
        --title "fix: ${ISSUE_TITLE}" \
        --body "## 自动修复

修复 Issue #${ISSUE_NUMBER}

### 修复内容
$(jq -r '.result' "${WORK_DIR}/fix-result.json" | head -50)

🤖 由Claude Code自动生成" \
        --base main)

      echo "✅ PR已创建: $PR_URL"

      # 清理worktree
      cd "$REPO_DIR"
      git worktree remove "$WORK_DIR" --force 2>/dev/null || true
    else
      echo "⚠️ 自动修复失败,添加需要人工处理的标签"
      gh issue edit "$ISSUE_NUMBER" --add-label "needs-human-review"
    fi
    ;;

  feature)
    echo "💡 Feature请求,添加待规划标签"
    gh issue edit "$ISSUE_NUMBER" --add-label "enhancement"
    gh issue comment "$ISSUE_NUMBER" --body "已标记为功能请求,将在下次迭代中评估优先级。"
    ;;

  question)
    echo "❓ 提问,自动回答"
    ANSWER=$(claude -p "回答以下关于项目的问题,基于项目代码给出准确答案:

$ISSUE_CONTENT
" --output-format json | jq -r '.result')

    gh issue comment "$ISSUE_NUMBER" --body "## 自动回复

$ANSWER

---
如果这个回答解决了你的问题,请关闭Issue。"
    gh issue edit "$ISSUE_NUMBER" --add-label "answered"
    ;;

  *)
    echo "📄 其他类型,添加待分类标签"
    gh issue edit "$ISSUE_NUMBER" --add-label "triage"
    ;;
esac

echo "🏁 Issue #$ISSUE_NUMBER 处理完成"

5.3 配套Hooks配置

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/guard-rbac.sh"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/auto-format.sh"
          }
        ]
      }
    ],
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "bash .claude/hooks/inject-context.sh"
          }
        ]
      }
    ]
  },
  "permissions": {
    "allow": [
      "Read",
      "Edit",
      "Write",
      "Bash(git *)",
      "Bash(gh *)",
      "Bash(npm test *)",
      "Bash(npx prettier *)",
      "Bash(npx eslint *)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(curl * | *)",
      "Bash(sudo *)"
    ]
  }
}

5.4 设置GitHub Webhook触发

# 使用GitHub Actions自动触发
# .github/workflows/auto-issue.yml
cat > .github/workflows/auto-issue.yml << 'YAML'
name: Auto Issue Handler

on:
  issues:
    types: [opened, labeled]

jobs:
  handle:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            处理Issue #${{ github.event.issue.number }}
            1. 分析Issue类型
            2. 如果是Bug,尝试修复并创建PR
            3. 如果是Feature,添加标签
            4. 如果是Question,基于代码回答
          allowed_tools: "Read,Edit,Write,Bash(git *),Bash(gh *)"
YAML

第六部分:性能与成本优化

6.1 上下文窗口管理

并行Agent数量受上下文窗口限制。以下是优化策略:

# 限制Agent的max_turns,防止无限循环
# 在Task调用中设置 max_turns: 10

# 使用Explore agent做只读操作(消耗更少token)
# subagent_type: "Explore" 代替 "general-purpose"

# 对大型代码库,先用Explore缩小范围
claude -p "先使用Explore agent找到所有与认证相关的文件路径,然后再用general-purpose agent修复"

6.2 成本控制

# 设置每个任务的成本上限
claude -p "修复bug" --max-cost 1.00  # 限制$1

# 选择合适的模型
claude -p "简单格式化任务" --model haiku    # 低成本
claude -p "复杂架构设计" --model opus      # 高质量

# Agent SDK中同样支持
const session = await sdk.createSession({
  prompt: "...",
  model: "haiku",  // 简单任务用Haiku
  maxTurns: 5,
});

6.3 错误处理与重试

#!/bin/bash
# resilient-task.sh — 带重试机制的自动化任务
MAX_RETRIES=3
RETRY_COUNT=0

while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
  RESULT=$(claude -p "$1" --output-format json 2>&1)
  EXIT_CODE=$?

  if [ $EXIT_CODE -eq 0 ]; then
    IS_ERROR=$(echo "$RESULT" | jq -r '.is_error // false')
    if [ "$IS_ERROR" = "false" ]; then
      echo "$RESULT"
      exit 0
    fi
  fi

  RETRY_COUNT=$((RETRY_COUNT + 1))
  echo "⚠️ 第${RETRY_COUNT}次尝试失败,重试中..." >&2
  sleep 5
done

echo "❌ ${MAX_RETRIES}次尝试均失败" >&2
exit 1

第七部分:编排模式速查表

mindmap
  root((Claude Code<br/>自动化编排))
    无头模式
      -p单次执行
      管道输入
      JSON输出
      会话恢复
    Hooks
      PreToolUse安全
      PostToolUse增强
      SessionStart注入
      Notification通知
    多Agent
      Task工具
      Worktree隔离
      前景等待
      后台并行
    定时任务
      /loop轮询
      Cron调度
      Cloud Routines
    SDK编排
      TypeScript
      Python
      Promise.all

模式选择决策树

场景 推荐模式 命令/工具
单次脚本执行 -p无头模式 claude -p "任务"
CI/CD集成 -p + JSON输出 claude -p "..." --output-format json
代码质量守护 PreToolUse Hook Hook + matcher
自动格式化 PostToolUse Hook Hook + formatter
环境信息注入 SessionStart Hook Hook + context script
2-3个并行研究 Task工具前景 subagent_type: "Explore"
多任务并行修改 Task + Worktree isolation: "worktree"
定时每日任务 Cron + -p crontab
复杂工作流 Agent SDK TypeScript Promise.all

延伸阅读

训练营适用性评估

维度 评估
适合训练营类型 AI工程实战营、DevOps自动化训练营
预计教学时长 4-6小时(含动手实验)
难度等级 中高级
实验环境要求 每人一台Linux/macOS终端,Git仓库,Anthropic API Key
建议分组 2-3人一组,共同构建自动化流水线

参考来源

  1. Run Claude Code programmatically - Claude Code Docs — 官方无头模式文档,涵盖-p标志、管道输入、JSON输出
  2. Hooks reference - Claude Code Docs — 官方Hook事件参考,JSON输入输出格式与退出码规范
  3. Run parallel sessions with worktrees - Claude Code Docs — 官方Worktree隔离文档
  4. Agent SDK reference - TypeScript - Claude Code Docs — TypeScript SDK完整API参考
  5. Claude Code Subagents: Parallel Multi-Agent Workflows - Turion — 多Agent并行编排实战指南

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入