让 Claude Code无人值守地运行
前八天你一直坐在终端前与 Claude 对话——今天你将学会放开双手。
用 -p 标志让 Claude 在脚本中静默执行,
在 GitHub Actions 中自动审查 PR、修复 lint 错误、生成变更描述,
用管道串联多步工作流,用 Agent SDK 把 Claude 嵌入你的自动化系统。
Claude Code 从此是 7×24 小时运转的自动化引擎。
思维导图
FIG M — DAY 09 KNOWLEDGE MAP · NON-INTERACTIVE AUTOMATION
Headless 模式
-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'
输出格式对比
纯文本
默认格式。适合人类阅读和简单的管道操作。直接输出 Claude 的回复文本,无包装。
结构化 JSON
包含 session_id、result、total_cost_usd 等字段。适合程序消费和成本追踪。
流式 JSON
每行一个 JSON 事件(NDJSON)。适合实时显示进度和中间结果。每个事件带时间戳和类型。
权限与安全
无人值守 ≠ 无限制。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 *)"
权限模式
| 模式 | 行为 | 适用场景 |
|---|---|---|
| 默认 | 只允许 --allowedTools 声明的工具和 permissions.allow 中的规则 | CI/CD 管道 — 推荐 |
acceptEdits | 自动允许文件编辑 + 常见文件系统操作(mkdir、mv、cp) | 自动修复脚本、代码生成 |
bypassPermissions | 跳过所有权限检查——极度危险 | 仅限受信沙箱环境 |
安全清单
绝对不要
在 CI 中使用 bypassPermissions。不要把 ANTHROPIC_API_KEY 硬编码到代码中。不要给 Claude 不必要的 Bash 权限。
必须做到
用 GitHub Secrets 存储 API Key。用 --allowedTools 最小化权限。用 --max-turns 限制循环。用 --bare 排除不可控因素。
CI/CD 集成
Anthropic 官方提供的 claude-code-action 可以在 GitHub Actions 中
直接调用 Claude Code——自动审查 PR、修复问题、生成文档。
GitHub Actions 工作流
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 用例速览
自动修复 Lint
CI 检测到 lint 错误时自动触发 Claude 修复并提交。适合格式化、import 排序等机械性修复。
PR 描述生成
读取 git diff 自动生成结构化的 PR 描述:变更摘要、影响范围、测试计划。
代码审计
定时 cron 任务扫描代码库,检查安全漏洞、过期依赖、TODO 积压。生成审计报告。
管道与脚本
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
管道组合模式
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[]'
Agent SDK
当 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 vs CLI 对比
| 维度 | CLI(claude -p) | Agent SDK |
|---|---|---|
| 集成方式 | Shell 脚本 / CI YAML | TypeScript / Python 代码 |
| 输出处理 | 文本 / JSON,需 jq 解析 | 原生对象,类型安全 |
| 流式控制 | stream-json + 管道 | async iterator,可精确控制每条消息 |
| 会话管理 | --resume session_id | 原生 resume 参数 + AbortController 取消 |
| 适用场景 | CI/CD、简单脚本、一次性任务 | 自定义工具平台、复杂多步 Agent、产品集成 |
Labs
管道驱动的代码分析
用 cat package.json | claude -p "列出所有过期的依赖" --bare 分析项目依赖。
然后用 --output-format json 获取结构化结果并用 jq 提取。
搭建 PR 自动审查
创建一个 GitHub Actions 工作流,使用 claude-code-action
在每个 PR 创建时自动生成代码审查评论。
配置 ANTHROPIC_API_KEY 到 Repository Secrets。
AI 驱动的 commit 工作流
写一个 Shell 脚本,自动完成:
git diff --staged → Claude 生成 commit message → 确认 → 提交。
用 --resume 让第二步可以追问修改。
构建代码审计工具
用 TypeScript SDK 写一个小脚本:遍历 src/ 下所有 .ts 文件,
对每个文件调用 Claude 检查安全问题,最终输出一份汇总报告。
常见问题
Q1 -p 模式和交互模式的 Claude 能力一样吗? +
底层模型能力完全一致。区别在于权限模型:交互模式下 Claude 可以请求用户批准新工具,而 -p 模式必须通过 --allowedTools 预先声明。加上 --bare 还会跳过 Hooks、Skills 和 MCP 的自动发现。本质上 -p 是一个权限更严格、环境更纯净的执行模式。
Q2 CI 中使用 Claude Code 的费用怎么控制? +
三层控制:① 用 --max-turns 限制每次调用的对话轮次(建议 CI 中设为 3-5);② 用 --model claude-sonnet-4-6 选择更经济的模型;③ 用 --output-format json 的 total_cost_usd 字段监控每次调用的实际费用。还可以在 CI 配置中设置条件触发——不是每个 commit 都需要审查,只在 PR 创建时触发即可。
Q3 --resume 和 --continue 有什么区别? +
--continue 自动恢复最近一次会话,不需要指定 ID——适合连续操作。--resume SESSION_ID 恢复指定会话——适合脚本中精确控制。在多步管道中,先用 --output-format json 捕获 session_id,再用 --resume 引用,这样即使中间步骤失败也能准确恢复。
Q4 SDK 需要单独安装吗?和 claude CLI 是什么关系? +
SDK 包名为 @anthropic-ai/claude-code(TypeScript)和 claude-code(Python),需要独立安装。SDK 底层会启动 Claude Code CLI 进程并与之通信——所以机器上必须先安装 claude CLI。SDK 的价值是提供原生语言的类型安全 API、流式控制和 AbortController 支持,比解析 CLI 的 JSON 输出更可靠。
Q5 在 CI 中 Claude 能访问私有仓库的代码吗? +
是的。GitHub Actions 的 actions/checkout 步骤已经将代码克隆到运行器上,Claude Code 可以像本地一样读取所有文件。但要注意:Claude 的工具调用(Read、Edit、Bash)都在运行器本地执行,代码本身不会发送到 Anthropic 服务器——只有 Claude 的 prompt 和工具调用结果会经过 API。如果安全策略要求完全隔离,可以使用 AWS Bedrock 或 Google Vertex AI 作为后端。
复习题
-p标志的作用是什么?它和交互模式在权限上有什么核心区别?--bare标志在 CI 中为什么是推荐的?它跳过了哪些自动发现过程?--allowedTools的前缀匹配语法如何工作?给出一个只允许 git 和 npm 命令的示例。- 在 GitHub Actions 中使用
claude-code-action时,API Key 应该存储在哪里?为什么? - Agent SDK 的
query()函数返回的是什么类型?如何获取最终结果?
自检清单
- 能用
claude -p在脚本中执行非交互式查询 - 理解 text / json / stream-json 三种输出格式的适用场景
- 能用
--allowedTools配置最小权限白名单 - 能编写 GitHub Actions 工作流集成
claude-code-action - 能用
--resume和管道构建多步自动化工作流 - 了解 Agent SDK 的基本用法(TypeScript 或 Python)
- 理解 CI 环境中的安全最佳实践(Secrets、--bare、--max-turns)
延伸阅读
Claude Code — CLI Reference
所有命令行标志的完整文档:-p、--output-format、--allowedTools、--model 等。
Claude Code — GitHub Actions
官方 GitHub Actions 集成指南:claude-code-action 配置、触发条件、权限设置。
Claude Agent SDK
TypeScript / Python SDK 文档:query() API、流式处理、会话管理、AbortController。
Day 10 预告
多模态能力 — 截图分析 · 图片理解 · 前端可视化调试
前九天你一直在和 Claude 交换文本——明天你将学会让它看见。把截图粘贴进终端让 Claude 分析 UI 布局、用 Read 工具直接读取图片获取视觉信息、对着错误截图调试前端 CSS 问题。Claude Code 不只是代码助手——它是能看懂画面的全栈搭档。