DAY 09 · CLAUDE CODE ROADMAP · 20 DAYS

让 Claude Code无人值守地运行

前八天你一直坐在终端前与 Claude 对话——今天你将学会放开双手。 用 -p 标志让 Claude 在脚本中静默执行, 在 GitHub Actions 中自动审查 PR、修复 lint 错误、生成变更描述, 用管道串联多步工作流,用 Agent SDK 把 Claude 嵌入你的自动化系统。 Claude Code 从此是 7×24 小时运转的自动化引擎。

DURATION 70–80 min THEORY 30 min HANDS-ON 35 min REVIEW 10 min SECTIONS 5
M ·

思维导图

OVERVIEW
DAY 09 · 非交互模式HEADLESS · CI/CD · PIPELINE · SDK01 · HEADLESS无头模式02 · PERMISSION权限与安全03 · CI/CD持续集成04 · SDK编程化集成·-p / --print 标志·--output-format 格式·stdin 管道输入·--bare 纯净模式·--allowedTools 白名单·--permission-mode·前缀匹配规则·安全最佳实践·GitHub Actions·claude-code-action·自动 PR 审查·自动修复 + 提交·TypeScript SDK·Python SDK·query() 流式 API·会话管理从交互终端到自动化流水线——脚本 × CI × SDKclaude -pGITHUB ACTIONSPIPE + JSONAGENT SDK

FIG M — DAY 09 KNOWLEDGE MAP · NON-INTERACTIVE AUTOMATION

01 ·

Headless 模式

CORE FLAGS

-p 是非交互模式的钥匙——它让 Claude Code 从交互式 REPL 变成 可以嵌入脚本、管道、CI 任务的命令行工具。

核心标志一览

标志作用示例
-p非交互模式——接受 prompt,输出结果到 stdout,然后退出claude -p "解释这段代码"
--output-format控制输出格式:text(默认)、json(结构化)、stream-json(流式)claude -p "..." --output-format json
--bare跳过 Hooks、Skills、MCP、CLAUDE.md 自动发现——CI 推荐claude -p "..." --bare
--max-turns限制对话轮次,防止 Agent 循环失控claude -p "..." --max-turns 5
--model指定模型版本claude -p "..." --model claude-sonnet-4-6
--json-schema约束输出为指定 JSON Schema,结果在 structured_output 字段claude -p "..." --json-schema '{...}'

基础用法

# 最简单的 headless 调用
$ claude -p "用一句话解释什么是 React Server Components"

# 管道输入:把文件内容传给 Claude
$ cat src/auth.ts | claude -p "找出这段代码中的安全漏洞"

# 管道输出:把 Claude 的回答写入文件
$ claude -p "为 src/utils.ts 中所有导出函数生成 JSDoc" > docs.md

# 结构化输出:JSON 格式便于程序消费
$ claude -p "列出项目中所有 TODO 注释" --output-format json \
    | jq '.result'
--bare 在 CI 中至关重要——跳过自动发现让执行更快、更确定、更安全

输出格式对比

TEXT

纯文本

默认格式。适合人类阅读和简单的管道操作。直接输出 Claude 的回复文本,无包装。

JSON

结构化 JSON

包含 session_idresulttotal_cost_usd 等字段。适合程序消费和成本追踪。

STREAM-JSON

流式 JSON

每行一个 JSON 事件(NDJSON)。适合实时显示进度和中间结果。每个事件带时间戳和类型。

02 ·

权限与安全

PERMISSION MODEL

无人值守 ≠ 无限制。Headless 模式有严格的权限控制—— 你必须显式声明 Claude 可以使用哪些工具、可以执行哪些命令。

--allowedTools 工具白名单

-p 模式下,Claude 默认只能读取文件。 通过 --allowedTools 显式授权更多能力:

# 只允许读取和编辑文件
$ claude -p "修复 auth.ts 中的 bug" \
    --allowedTools "Read,Edit"

# 允许执行特定命令(前缀匹配)
$ claude -p "运行测试并修复失败用例" \
    --allowedTools "Read,Edit,Bash(npm test *),Bash(npx tsc *)"

# 允许 git 操作
$ claude -p "提交所有变更" \
    --allowedTools "Bash(git diff *),Bash(git add *),Bash(git commit *)"
前缀匹配语法 Bash(git diff *) 意味着任何以 "git diff " 开头的命令都会被允许

权限模式

模式行为适用场景
默认只允许 --allowedTools 声明的工具和 permissions.allow 中的规则CI/CD 管道 — 推荐
acceptEdits自动允许文件编辑 + 常见文件系统操作(mkdir、mv、cp)自动修复脚本、代码生成
bypassPermissions跳过所有权限检查——极度危险仅限受信沙箱环境

安全清单

NEVER DO

绝对不要

在 CI 中使用 bypassPermissions。不要把 ANTHROPIC_API_KEY 硬编码到代码中。不要给 Claude 不必要的 Bash 权限。

ALWAYS DO

必须做到

用 GitHub Secrets 存储 API Key。用 --allowedTools 最小化权限。用 --max-turns 限制循环。用 --bare 排除不可控因素。

03 ·

CI/CD 集成

GITHUB ACTIONS

Anthropic 官方提供的 claude-code-action 可以在 GitHub Actions 中 直接调用 Claude Code——自动审查 PR、修复问题、生成文档。

GitHub Actions 工作流

TRIGGERPR 创建@claude 提及CLAUDE CODE分析代码变更读取 CLAUDE.md 规则执行工具调用OUTPUT APR 评论 / ReviewOUTPUT B自动修复提交ENVIRONMENTAPI Key → SecretsCLAUDE.md → Repo

FIG 03 — GITHUB ACTIONS WORKFLOW · TRIGGER → CLAUDE → OUTPUT

实战:PR 自动审查

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

on:
  pull_request:
    types: [opened, synchronize]
  issue_comment:
    types: [created]

jobs:
  review:
    runs-on: ubuntu-latest
    # 仅在 PR 评论中 @claude 被提及时触发
    if: |
      github.event_name == 'pull_request' ||
      contains(github.event.comment.body, '@claude')
    steps:
      - uses: anthropics/claude-code-action@v1
        with:
          prompt: |
            审查这个 PR 的代码变更:
            1. 检查是否有安全漏洞
            2. 检查是否有性能问题
            3. 检查代码风格是否符合项目规范
            4. 给出改进建议
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          claude_args: "--max-turns 5 --model claude-sonnet-4-6"

CI 用例速览

USE CASE 1

自动修复 Lint

CI 检测到 lint 错误时自动触发 Claude 修复并提交。适合格式化、import 排序等机械性修复。

USE CASE 2

PR 描述生成

读取 git diff 自动生成结构化的 PR 描述:变更摘要、影响范围、测试计划。

USE CASE 3

代码审计

定时 cron 任务扫描代码库,检查安全漏洞、过期依赖、TODO 积压。生成审计报告。

04 ·

管道与脚本

PIPELINE PATTERNS

Headless 模式的真正威力在于组合——用 Unix 管道把多个 Claude 调用串联成完整的自动化流水线。

会话管理:多步工作流

# Step 1 — 启动分析,捕获 session_id
$ session_id=$(claude -p "分析 src/api/ 目录的架构" \
    --output-format json | jq -r '.session_id')

# Step 2 — 基于上一步的上下文继续
$ claude -p "基于刚才的分析,找出最需要重构的三个文件" \
    --resume "$session_id"

# 或者直接继续最近的会话
$ claude -p "继续,开始重构第一个文件" --continue
--resume 通过 session_id 恢复完整对话上下文——Claude 记住之前分析的所有信息

管道组合模式

STDINgit diff HEAD~1变更内容|CLAUDE -P"生成 commit msg"AI 分析 + 生成|GIT COMMITgit commit -F -读取 stdin 作为消息DONEAI 生成的 commit

FIG 04 — UNIX PIPE PATTERN · GIT DIFF | CLAUDE | GIT COMMIT

# 完整示例:AI 生成 commit message
$ git diff --staged | claude -p \
    "根据这个 diff 生成简洁的 commit message,只输出消息文本" \
    --bare | git commit -F -

# 批量代码审查:扫描所有变更文件
$ git diff --name-only HEAD~5 | while read f; do
    echo "=== $f ==="
    claude -p "审查这个文件中最近的变更,发现潜在问题" \
        --allowedTools "Read,Bash(git diff *)" --bare
  done > review-report.md

# 结构化输出 + jq 提取
$ claude -p "列出所有 API 端点" \
    --output-format json \
    --json-schema '{"type":"object","properties":{"endpoints":{"type":"array","items":{"type":"object","properties":{"method":{"type":"string"},"path":{"type":"string"}}}}}}' \
    | jq '.result.structured_output.endpoints[]'
05 ·

Agent SDK

PROGRAMMATIC

当 Shell 管道不够用时——用 Agent SDK 在 TypeScript 或 Python 中嵌入 Claude Code, 构建完全定制的自动化系统。

TypeScript SDK

import { query } from "@anthropic-ai/claude-code";

// 基础调用:流式获取结果
for await (const message of query({
  prompt: "找出 src/api/ 中所有未处理的异常",
  options: {
    allowedTools: ["Read", "Bash"],
    permissionMode: "dontAsk",
    maxTurns: 10,
  }
})) {
  if ("result" in message) {
    console.log(message.result);  // 最终结果
  }
}

Python SDK

from claude_code import query, ClaudeCodeOptions

# 异步流式调用
async for message in query(
    prompt="分析 tests/ 目录的覆盖率盲区",
    options=ClaudeCodeOptions(
        allowed_tools=["Read", "Bash(npm test *)"],
        permission_mode="dontAsk",
        max_turns=10,
    )
):
    if hasattr(message, "result"):
        print(message.result)
SDK 的核心优势:可以在你的 Node.js / Python 应用中嵌入 Claude 的全部能力——包括文件编辑、命令执行和工具调用

SDK vs CLI 对比

维度CLI(claude -p)Agent SDK
集成方式Shell 脚本 / CI YAMLTypeScript / Python 代码
输出处理文本 / JSON,需 jq 解析原生对象,类型安全
流式控制stream-json + 管道async iterator,可精确控制每条消息
会话管理--resume session_id原生 resume 参数 + AbortController 取消
适用场景CI/CD、简单脚本、一次性任务自定义工具平台、复杂多步 Agent、产品集成
06 ·

Labs

4 EXERCISES
LAB 01 · HEADLESS 基础

管道驱动的代码分析

cat package.json | claude -p "列出所有过期的依赖" --bare 分析项目依赖。 然后用 --output-format json 获取结构化结果并用 jq 提取。

LAB 02 · CI 集成

搭建 PR 自动审查

创建一个 GitHub Actions 工作流,使用 claude-code-action 在每个 PR 创建时自动生成代码审查评论。 配置 ANTHROPIC_API_KEY 到 Repository Secrets。

LAB 03 · 多步管道

AI 驱动的 commit 工作流

写一个 Shell 脚本,自动完成: git diff --staged → Claude 生成 commit message → 确认 → 提交。 用 --resume 让第二步可以追问修改。

LAB 04 · SDK 集成

构建代码审计工具

用 TypeScript SDK 写一个小脚本:遍历 src/ 下所有 .ts 文件, 对每个文件调用 Claude 检查安全问题,最终输出一份汇总报告。

Q ·

常见问题

5 Q&A
Q1 -p 模式和交互模式的 Claude 能力一样吗? +
A

底层模型能力完全一致。区别在于权限模型:交互模式下 Claude 可以请求用户批准新工具,而 -p 模式必须通过 --allowedTools 预先声明。加上 --bare 还会跳过 Hooks、Skills 和 MCP 的自动发现。本质上 -p 是一个权限更严格、环境更纯净的执行模式。

Q2 CI 中使用 Claude Code 的费用怎么控制? +
A

三层控制:① 用 --max-turns 限制每次调用的对话轮次(建议 CI 中设为 3-5);② 用 --model claude-sonnet-4-6 选择更经济的模型;③ 用 --output-format jsontotal_cost_usd 字段监控每次调用的实际费用。还可以在 CI 配置中设置条件触发——不是每个 commit 都需要审查,只在 PR 创建时触发即可。

Q3 --resume 和 --continue 有什么区别? +
A

--continue 自动恢复最近一次会话,不需要指定 ID——适合连续操作。--resume SESSION_ID 恢复指定会话——适合脚本中精确控制。在多步管道中,先用 --output-format json 捕获 session_id,再用 --resume 引用,这样即使中间步骤失败也能准确恢复。

Q4 SDK 需要单独安装吗?和 claude CLI 是什么关系? +
A

SDK 包名为 @anthropic-ai/claude-code(TypeScript)和 claude-code(Python),需要独立安装。SDK 底层会启动 Claude Code CLI 进程并与之通信——所以机器上必须先安装 claude CLI。SDK 的价值是提供原生语言的类型安全 API、流式控制和 AbortController 支持,比解析 CLI 的 JSON 输出更可靠。

Q5 在 CI 中 Claude 能访问私有仓库的代码吗? +
A

是的。GitHub Actions 的 actions/checkout 步骤已经将代码克隆到运行器上,Claude Code 可以像本地一样读取所有文件。但要注意:Claude 的工具调用(Read、Edit、Bash)都在运行器本地执行,代码本身不会发送到 Anthropic 服务器——只有 Claude 的 prompt 和工具调用结果会经过 API。如果安全策略要求完全隔离,可以使用 AWS Bedrock 或 Google Vertex AI 作为后端。

R ·

复习题

5 QUESTIONS
  1. -p 标志的作用是什么?它和交互模式在权限上有什么核心区别?
  2. --bare 标志在 CI 中为什么是推荐的?它跳过了哪些自动发现过程?
  3. --allowedTools 的前缀匹配语法如何工作?给出一个只允许 git 和 npm 命令的示例。
  4. 在 GitHub Actions 中使用 claude-code-action 时,API Key 应该存储在哪里?为什么?
  5. Agent SDK 的 query() 函数返回的是什么类型?如何获取最终结果?
✓ ·

自检清单

7 ITEMS
  • 能用 claude -p 在脚本中执行非交互式查询
  • 理解 text / json / stream-json 三种输出格式的适用场景
  • 能用 --allowedTools 配置最小权限白名单
  • 能编写 GitHub Actions 工作流集成 claude-code-action
  • 能用 --resume 和管道构建多步自动化工作流
  • 了解 Agent SDK 的基本用法(TypeScript 或 Python)
  • 理解 CI 环境中的安全最佳实践(Secrets、--bare、--max-turns)
☞ ·

延伸阅读

3 LINKS
DOCS

Claude Code — CLI Reference

所有命令行标志的完整文档:-p、--output-format、--allowedTools、--model 等。

GUIDE

Claude Code — GitHub Actions

官方 GitHub Actions 集成指南:claude-code-action 配置、触发条件、权限设置。

SDK

Claude Agent SDK

TypeScript / Python SDK 文档:query() API、流式处理、会话管理、AbortController。

☛ ·

Day 10 预告

NEXT
COMING NEXT

多模态能力 — 截图分析 · 图片理解 · 前端可视化调试

前九天你一直在和 Claude 交换文本——明天你将学会让它看见。把截图粘贴进终端让 Claude 分析 UI 布局、用 Read 工具直接读取图片获取视觉信息、对着错误截图调试前端 CSS 问题。Claude Code 不只是代码助手——它是能看懂画面的全栈搭档。

"The best way to predict the future is to invent it."

DAY 09 · CLAUDE CODE 20-DAY ROADMAP · ALAN KAY