第 10 章

Claude Code CLI

命令行接口——工程化的统一入口

交互式开发、批处理、CI/CD — 一切从终端开始

怎么脚本化

你有没有发现,Claude Code 交互式很好用,但没法融入自动化流程?

想自动化审查

每次 PR 提交后自动让 Claude 审查代码,生成 JSON 报告。但交互模式下你每次都得手动输入提示词。没法接入 CI。

想批量处理

50 个源文件都要生成文档。你不想一个个手动输入,但不知道怎么批量跑。

想统一模型配置

团队想统一用 Opus 做规划、Sonnet 做执行。但每个人都要自己配一遍,配置没法标准化。

CLI 就是为这个设计的:它把 Claude Code 的所有能力暴露为命令行参数。你可以脚本化调用、管道化输入输出、JSON 格式化结果、集成进 CI/CD。从"交互式助手"变成"可工程化接口"。

两种模式

交互模式(默认)和打印模式(-p)

图:CLI 两种运行模式对比——交互式 vs 打印式

交互模式

多轮对话、Tab 补全、历史记录、Slash commands。

$ claude
$ claude "解释这个认证流程"

打印模式(-p)

单次查询后退出。可脚本化、可管道化、JSON 输出。

$ claude -p "这个函数做什么?"
$ cat error.log | claude -p "解释错误"
选择依据:需要多轮对话、探索性问题 → 交互模式。需要自动化、批处理、CI 集成 → 打印模式。

架构概览

CLI 如何连接终端、API 和输出

图:CLI 架构流程——从用户输入到最终输出
用户终端 → Claude Code CLI → REPL / 打印 / 恢复 → Claude API → 输出 → 终端|管道

核心标志

控制 CLI 行为的关键参数

参数说明示例
--remote在 claude.ai 上创建 web sessionclaude --remote "implement API"
--remote-control, --rc使用 Remote Control 交互claude --rc
--teleport将 web session 恢复到本地claude --teleport
--teammate-modeagent team 显示模式claude --teammate-mode tmux
--channels订阅 MCP channel 插件claude --channels discord,telegram
--chrome / --no-chrome启用/禁用 Chrome 集成claude --chrome
-n, --name设置会话显示名称claude -n "auth-refactor"
-v, --version输出版本号claude -v

扩展标志

初始化、维护与模式控制

参数说明示例
--init / --init-only运行初始化 hooksclaude --init
--maintenance运行维护 hooks 后退出claude --maintenance
--disable-slash-commands禁用所有 skills 和 slash commandsclaude --disable-slash-commands
--verbose启用详细日志claude --verbose
--input-format指定输入格式(text、stream-json)claude -p --input-format stream-json
--dry-run仅模拟执行claude --dry-run "review code"
--interactive强制交互模式claude --interactive
--unsafe允许更多自动化操作claude --unsafe
提示:--init 适合首次启动项目时自动配置环境;--dry-run 适合预览执行效果而不实际修改;--unsafe 仅在受信环境中使用。

命令速查

最常用的 CLI 命令

命令说明
claude启动交互式 REPL
claude "query"带初始提示启动 REPL
claude -p "query"打印模式,查询后退出
cat file | claude -p "query"处理管道传入的内容
claude -c继续最近一次会话
claude -c -p "query"打印模式下继续会话
claude -r "session"恢复指定会话
claude -w在隔离 worktree 中启动
claude --bare "query"极简模式,跳过所有扩展
claude update更新到最新版本
claude auth login登录账号
claude auth status检查登录状态
claude mcp配置 MCP servers
claude mcp serve作为 MCP server 运行
claude agents列出所有已配置的 subagents
claude auto-mode defaults打印 auto mode 默认规则
claude remote-control启动远程控制服务
claude plugin install <name>管理插件(安装/启用/禁用)
claude auth logout注销当前账号

模型与配置

通过参数控制模型、推理强度、权限和执行方式

参数说明示例
--model设置模型claude --model opus
--effort推理强度claude --effort high
--fallback-model后备模型--fallback-model sonnet
--permission-mode权限模式claude --permission-mode plan
# 短名称
$ claude --model sonnet     # Sonnet(日常首选)
$ claude --model opus       # Opus(复杂任务)
$ claude --model haiku      # Haiku(快速任务)

# opusplan 别名:Opus 规划 + Sonnet 执行
$ claude --model opusplan "design and implement caching"

会话与恢复

# 给会话命名
$ claude --session feature-auth

# 从 GitHub PR 恢复
$ claude --from-pr 42

# 恢复最近一次会话
$ claude --resume-last

# 强制开启新会话
$ claude --new-session

# 分叉会话做实验
$ claude --fork-session "尝试另一种方案"

自动化专用

# 解锁 auto mode
$ claude --enable-auto-mode

# 通过 CLI 定义 subagent
$ claude --agent reviewer "审查代码"

# 禁用会话保存(敏感任务)
$ claude -p --no-session-persistence "query"

Effort 级别

三种方式控制推理强度

方式命令说明
CLI 参数claude --effort high单次会话生效
Slash command/effort max交互模式中切换
环境变量CLAUDE_EFFORT=medium全局默认值
# 级别选项:low / medium / high / max
$ claude --model opus --effort high "设计架构"

# 快速任务用 low
$ claude --model haiku --effort low -p "格式化 JSON"
经验法则:探索和规划用 high/max,日常编码用 medium,简单格式化和查询用 low。

MCP 配置

通过 CLI 管理外部工具接入

参数说明示例
--mcp-config从文件加载 MCP 配置claude --mcp-config ./mcp.json
--mcp启用指定 MCP 服务claude --mcp github
--mcp-list列出可用 MCP 配置claude --mcp-list
# 加载 GitHub MCP server
$ claude --mcp-config ./configs/github-mcp.json

# 严格模式:只允许指定的 server
$ claude --mcp-config ./configs/strict-mcp.json --mcp github

# 通过环境变量设置默认 MCP 配置
$ CLAUDE_MCP_CONFIG=~/.claude/mcp.json claude
配合环境变量:设置 CLAUDE_MCP_CONFIG 可以让所有会话自动加载 MCP 配置,无需每次手动指定。

高级参数

Checkpoint、模拟执行和安全控制

参数说明示例
--disable-auto-checkpoints禁用自动 checkpointclaude --disable-auto-checkpoints
--enable-auto-checkpoints启用自动 checkpointclaude --enable-auto-checkpoints
--interactive强制交互模式claude --interactive
--dry-run仅模拟执行不修改claude --dry-run "review code"
--unsafe允许更多自动化操作claude --unsafe
# 长任务建议启用 checkpoint
$ claude --enable-auto-checkpoints "重构整个模块"

# 预览执行效果
$ claude --dry-run "删除所有未使用的 import"

# 调试 API 调用
$ claude --verbose -p "diagnose this issue"

Subagents

通过 JSON 定义自定义角色分工

# agents.json 格式
{
  "code-reviewer": {
    "description": "Expert code reviewer",
    "prompt": "Focus on quality, security, best practices.",
    "tools": ["Read", "Grep", "Glob", "Bash"],
    "model": "sonnet"
  },
  "debugger": {
    "description": "Debugging specialist",
    "prompt": "Analyze errors, identify root causes.",
    "tools": ["Read", "Edit", "Bash", "Grep"],
    "model": "opus"
  }
}

字段说明

必填:description(何时使用)、prompt(角色行为)。

可选:tools(工具白名单)、model(指定模型)。

优先级规则

CLI 定义(--agents)> 用户级(~/.claude/agents/)> 项目级(.claude/agents/)。

命令行定义会覆盖本次会话的用户级和项目级 agents。

# 使用方式
$ claude --agents ./configs/agents.json --agent reviewer
$ claude --agents '{"auditor":{"description":"security audit","prompt":"Find vulnerabilities.","tools":["Read","Grep"],"model":"opus"}}'

提示词定制

三种方式自定义 Claude 的行为

参数行为交互打印
--system-prompt替换整个默认提示词✅✅
--append-system-prompt追加到默认提示词后✅✅
--system-prompt-file从文件加载❌✅
# 完整自定义人格
$ claude --system-prompt "你是一名资深安全工程师"

# 追加特定指令
$ claude --append-system-prompt "始终包含单元测试"

# 从文件加载(仅打印模式)
$ claude -p --system-prompt-file ./prompt.txt "review main.py"

输出控制

让 Claude 的输出可以被程序消费

# 纯文本(默认)
$ claude -p "解释这段代码"

# JSON 输出(供程序使用)
$ claude -p --output-format json "列出所有函数"

# 流式 JSON(实时处理)
$ claude -p --output-format stream-json "生成报告"

# Schema 验证的结构化输出
$ claude -p --json-schema '{"type":"object"}' "分析代码"

# 配合 jq 处理
$ claude -p --output-format json "find bugs" | \
  jq '.[] | select(.severity=="high")'

# 流式输入格式
$ claude -p --input-format stream-json

jq 实用示例

# 提取多个字段
$ claude -p --output-format json "analyze" | \
  jq '{summary, risk, recommendations}'

# 转成 CSV
$ claude -p --output-format json "list files" | \
  jq -r '.files[] | [.name,.size] | @csv'

# 条件处理
$ claude -p --output-format json "check" | \
  jq 'if .ok then "pass" else "fail" end'

jq 进阶用法

# 提取嵌套值
$ claude -p --output-format json "inspect" | \
  jq '.details.metrics.coverage'

# 统计数组长度
$ claude -p --output-format json "find todos" | \
  jq '.todos | length'

# 转换输出结构
$ claude -p --output-format json "review" | \
  jq '{issues: [.issues[]|{file,line,msg}]}'
三种格式:text(默认,人类阅读)、json(程序消费)、stream-json(实时流式处理)。配合 jq 可以进一步过滤和转换。

工具与权限

通过参数精确控制 Claude 能用哪些工具

# 只读安全审计
$ claude --tools "Read,Grep,Glob" -p "审查代码库"

# 允许特定 git 命令无需提示
$ claude --allowedTools "Bash(git status:*)" "Bash(git log:*)"

# 阻止危险操作
$ claude --disallowedTools "Bash(rm -rf:*)" "Bash(git push --force:*)"

# 限制自主操作 + 高级模型
$ claude --permission-mode plan --model opus "设计认证系统"

实战场景

七种最值得掌握的 CLI 用法

CI/CD 集成

$ claude -p --output-format json \
  "run tests and summarize failures"

管道式处理

$ cat error.log | claude -p "解释错误"
$ git log --oneline -20 | claude -p "总结方向"

安全审计

$ claude --permission-mode plan \
  -p "audit this repository"

批量处理

$ find src -name "*.ts" | \
  xargs -I{} claude -p "review {}"

多会话工作流

$ claude --session feature-auth
$ claude --resume feature-auth
$ claude --fork-session "尝试另一种方案"

自定义 Agent

$ claude --agents ./agents.json \
  --agent reviewer "审查代码"

JSON API 集成

$ result=$(claude -p \
  --output-format json "summarize")
$ echo "$result" | jq '.summary'

与项目结构

CLI 的工作目录决定了 Claude 加载哪些配置

图:CLI 工作目录与配置文件加载关系
project/                   ← 工作目录(--working-directory)
├── CLAUDE.md              [自动加载]
├── .claude/
│   ├── settings.json      [自动加载]
│   ├── skills/            [自动发现]
│   ├── agents/            [自动发现]
│   └── commands/          [自动发现]
└── src/
    └── CLAUDE.md          [按目录加载]
# 多目录协作
$ claude --working-directory ~/projects/app --add-dir ~/projects/shared

# 极简模式(跳过所有扩展)
$ claude --bare "简单提问"
关键:CLI 的工作目录 = Claude 的"家"。在正确的目录下运行,它才能找到 CLAUDE.md、.claude/skills/ 等配置。

环境变量

通过环境变量设置默认值,适合团队统一配置

变量说明
ANTHROPIC_API_KEYAPI 密钥
CLAUDE_MODEL默认模型
CLAUDE_EFFORT默认推理强度
CLAUDE_OUTPUT_FORMAT默认输出格式
CLAUDE_MCP_CONFIG默认 MCP 配置
# 示例:环境变量配置
$ CLAUDE_MODEL=opus CLAUDE_EFFORT=high claude "设计架构"
团队统一:把环境变量写到 .env 或 CI 配置中,全团队自动使用相同的模型和参数。

快速参考

最常用命令和参数组合模式

常用命令

# 交互式会话
$ claude

# 快速提问
$ claude -p "explain this repo"

# 继续上次对话
$ claude -c

# 为脚本输出 JSON
$ claude -p --output-format json "list classes"

参数组合模式

# 只读审查
$ claude --permission-mode plan -p "review"

# 高级模型 + JSON
$ claude --model opus -p --output-format json \
  "analyze architecture"

# 自定义目录 + MCP
$ claude --working-directory ./backend \
  --mcp-config ./mcp.json

排错指南

找不到 claude 命令

症状:终端提示 command not found: claude。

修复:确认 Claude Code 已安装且在 PATH 中。重新打开终端或运行 claude update。

API Key 问题

症状:报认证错误或连接失败。

修复:检查 ANTHROPIC_API_KEY 环境变量是否设置正确,key 是否过期,网络是否能访问 API。

工作目录错误

症状:在错误目录下运行,Claude 找不到 .claude/ 和 CLAUDE.md。

修复:用 --working-directory 明确指定,或在正确目录下运行。

CI 权限卡住

症状:CI 环境缺少交互式权限确认,命令卡住不动。

修复:使用 --permission-mode plan 或 bypassPermissions(仅限受信环境)。

输出过大

症状:JSON 输出太多,消费端处理不过来。

修复:用 --max-budget-usd 限制花费,或在提示词中限制输出条目数。

找不到会话

症状:-r 恢复时报错,说会话不存在。

修复:确认会话名称或 ID 正确。用 claude auth status 检查当前账号是否一致。

输出格式问题

症状:JSON 输出无法被程序解析。

修复:确保使用 --output-format json。如果是流式输出,加入 --include-partial-messages。

权限被拒绝

症状:工具调用被阻止或报权限错误。

修复:检查 --permission-mode 和 --allowedTools/--disallowedTools 配置,明确允许所需工具。

动手练习

用 CLI 生成一份结构化的代码审查报告

任务:用 CLI 命令生成一份 JSON 格式的代码审查报告。
  1. 使用打印模式
  2. 输出 JSON 格式
  3. 结果保存到文件
  4. 限制最大花费 2 美元

参考答案

# 基本命令
$ claude -p --output-format json \
  --max-budget-usd 2.00 \
  "审查 src/ 目录下的所有 Java 文件,找出:
   - 潜在的安全漏洞
   - 代码质量问题
   - 性能风险
   每个问题包含:severity, file, line, description, suggestion" \
  > code-review-report.json

# 配合 jq 提取高危问题
$ cat code-review-report.json | \
  jq '.[] | select(.severity == "high")'

# CI/CD 中使用
$ claude -p --output-format json \
  --permission-mode plan \
  --max-budget-usd 1.00 \
  "审查本次 PR 的改动,返回审查结论" \
  >> pr-review-results.json
关键参数:-p(非交互)、--output-format json(结构化)、--max-budget-usd(限制花费)、>(输出到文件)。

课程回顾

十章走完,从入门到工程化

下一章预告:第 11 章 Dynamic Workflows — 当任务大到单次对话装不下时,Workflow 用 JavaScript 脚本编排数十到数百个子代理并行执行,还能让代理之间对抗性验证彼此的发现。

到这里,你已经能

  • 掌握最常用的 CLI 用法
  • 控制输出格式和权限
  • 理解与 .claude/ 和 hooks/plugins 的配合
  • 把 CLI 集成进 CI/CD 和自动化脚本

完整课程路线

  • 01 Slash Commands — 自制命令
  • 02 Memory — 长期上下文
  • 03 Skills — 可复用能力包
  • 04 Subagents — 角色分工
  • 05 MCP — 外部工具接入
  • 06 Hooks — 事件驱动自动化
  • 07 Plugins — 方案打包分发
  • 08 Checkpoints — 快照回退
  • 09 Advanced — 高级特性
  • 10 CLI — 工程化入口
核心结论:CLI 是 Claude Code 的工程化接口。掌握 CLI = 把 AI 能力融入你开发工作流的每个环节。从交互式助手到可编程接口——这是 Claude Code 从"好用"变成"不可或缺"的关键一步。

延伸阅读

官方文档

本章源文件 (点击查看完整内容)

加载中…