Claude Code终端使用指南(六)—非交互自动化、成本与故障排查
Claude Code 不只可以作为交互式终端应用,也可以像普通 Unix 工具一样读取标准输入、输出文本或 JSON,并在脚本与 CI 中运行。自动化没有人实时审查权限提示和错误方向,因此需要比交互会话更明确的工具范围、预算、输出协议、超时和隔离。
本文是系列最后一篇,介绍非交互 -p、官方推荐的 --bare、结构化输出、会话续接、模型与 Effort、成本控制,以及安装、配置、MCP、Hooks、搜索和性能问题的系统排查流程。
0. 自动化与排障速查
0.1 一次性查询
1 | claude -p "概括这个项目的模块和入口" |
推荐的可复现脚本模式:
1 | claude --bare -p "只读审查当前差异" \ |
0.2 JSON 输出
1 | claude --bare -p "列出所有 HTTP 端点" \ |
0.3 JSON Schema
1 | claude --bare -p "提取 src/routes 中的端点" \ |
0.4 流式输出
1 | claude --bare -p "审查当前差异" \ |
0.5 诊断
1 | claude --version |
会话内:
1 | /doctor |
1. 交互模式与非交互模式
1.1 交互模式
1 | claude |
适合:
- 需求尚未完全明确;
- 需要人工回答问题;
- 需要逐步审批;
- 复杂任务要持续纠偏;
- 需要 Plan、检查点和多轮讨论。
1.2 非交互模式
1 | claude -p "分析任务" |
-p 或 --print 执行后输出并退出,适合:
- CI;
- 构建脚本;
- 批量只读分析;
- 结构化数据提取;
- 预提交审查;
- 由其他程序消费结果。
非交互模式跳过工作区信任对话。只能在已审查并信任的目录中运行,尤其是默认模式仍会加载项目 CLAUDE.md、Hooks、MCP 和插件。
2. --bare:脚本的推荐起点
2.1 为什么使用
1 | claude --bare -p "Summarize this file" --allowedTools "Read" |
官方当前文档推荐在脚本和 SDK 调用中使用 Bare mode,并说明它未来可能成为 -p 默认行为。
Bare mode 跳过:
- Hooks;
- LSP;
- 插件同步;
- Attribution;
- Auto memory;
- 后台预取;
- Keychain 读取;
CLAUDE.md自动发现;- 大部分常规定制自动发现。
优点:
- 启动更快;
- 不受同事
~/.claude私人配置影响; - CI 行为更可复现;
- 减少隐式外部连接和 Hook 副作用。
2.2 显式提供需要的内容
| 需要 | 参数 |
|---|---|
| 追加系统提示 | --append-system-prompt |
| 从文件追加系统提示 | --append-system-prompt-file |
| 设置 | --settings |
| MCP | --mcp-config |
| Agent | --agents |
| 插件 | --plugin-dir 或 --plugin-url |
| 额外目录 | --add-dir |
示例:
1 | claude --bare -p "审查当前分支" \ |
这些输入应固定版本并受代码审查。
2.3 Bare mode 的认证差异
Bare mode 不读取 OAuth 和系统 Keychain。Anthropic 直连认证需使用:
ANTHROPIC_API_KEY;- 或通过
--settings显式提供apiKeyHelper。
它不读取 CLAUDE_CODE_OAUTH_TOKEN。Bedrock、Agent Platform 和 Foundry 仍使用各自提供商凭据。
不要为了让 Bare mode 工作而把 API Key 写入命令行、仓库或日志。使用 CI Secret 注入环境。
2.4 --safe-mode 不是 --bare
1 | --bare |
Safe mode 仍受组织 Managed policy 约束。不要用它规避组织设置。
3. 输入与管道
3.1 标准输入
1 | cat build-error.txt | |
标准输入适合临时数据。官方当前限制管道输入为 10 MB。超出时应把数据保存为文件,让 Claude 按路径和范围读取,而不是把完整内容塞进上下文。
3.2 预处理数据
1 | rg -n "ERROR|FATAL|Caused by" server.log | |
预处理应保持关键上下文。过度筛选可能删除根因,脚本应保存原始日志位置供后续按需读取。
3.3 重定向输出
1 | claude --bare -p "生成当前模块架构摘要" > architecture.txt |
重定向会覆盖目标文件。脚本应写入明确的构建输出目录,并避免覆盖人工维护文件。
4. 输出格式
4.1 Text
1 | claude --bare -p "解释认证模块" |
适合人读,不适合作为稳定解析协议。
4.2 JSON
1 | claude --bare -p "概括项目" --output-format json |
返回单个 JSON 对象,包含结果、session ID、用量和成本等元数据。文本结果在 result:
1 | claude --bare -p "概括项目" --output-format json | |
脚本应检查:
claude退出码;- JSON 是否可解析;
- 结果字段是否存在;
- 是否达到预算或发生模型回退;
- stderr 是否有告警。
4.3 JSON Schema
1 | claude --bare -p "列出 src/routes 中的端点" \ |
结构化结果位于 structured_output。Schema 应:
- 只要求下游真正需要的字段;
- 明确 required;
- 用 enum 限制有限值;
- 为数组项定义结构;
- 在 CI 中加入解析测试;
- 不依赖自然语言字段。
4.4 Stream JSON
1 | claude --bare -p "分析大型差异" \ |
每行一个 JSON 事件,最后是 result。适合实时 UI、日志和长任务。
使用 jq 只显示文本增量:
1 | claude --bare -p "解释递归" \ |
生产消费者应忽略未知事件,以 capability 字段进行特性探测,而不是只比较版本号。
5. 自动化中的工具权限
5.1 --allowedTools
1 | claude --bare -p "运行测试并修复失败" \ |
应使用最小工具:
1 | 只读审查: |
不要为了省事使用:
1 | Bash |
宽泛允许会使无人值守任务难以审计。
5.2 dontAsk
1 | claude --bare -p "只读检查当前差异" \ |
dontAsk 不会显示无法回答的权限提示,未允许操作会直接拒绝,适合 CI。提示中应告诉 Claude 在权限不足时报告缺口,而不是不断尝试替代路径。
5.3 acceptEdits
1 | claude --bare -p "应用 lint 自动修复" \ |
它允许文件编辑和部分常见文件命令,其他 shell 与网络仍需规则。
5.4 auto
1 | claude -p "修复全部 lint 错误" --permission-mode auto |
Auto mode 只有账号、模型和组织策略满足条件时可用。非交互模式中如果分类器反复阻止,任务会中止,因为没有用户接管。
5.5 bypassPermissions
官方只建议在额外隔离的环境中使用。一个最低要求包括:
- 临时容器或 VM;
- 仅挂载本任务目录;
- 无个人主目录;
- 无 SSH、云、包发布和生产凭据;
- 网络默认关闭或严格 allowlist;
- 运行后丢弃;
- 输出和差异仍需审查。
即使满足,也应优先尝试 dontAsk + 精确 Allow。
6. 预算、超时与退出
6.1 限制 API 预算
API 计费场景可使用:
1 | claude --bare -p "审查当前差异" \ |
预算值应根据任务和组织策略确定。达到预算时任务可能未完成,下游不能把“进程有输出”当作成功。
6.2 外层超时
除了 Claude Code 内部超时,CI 应设置 Job 级超时。需要区分:
- API 重试;
- MCP 启动;
- 测试命令;
- 后台子代理;
- 整体任务。
超时后保留 stderr、结构化结果、session ID 和差异,便于恢复。
6.3 后台任务
在 -p 中启动的后台 Bash 进程会在最终结果后获得短暂宽限,然后被终止。不要用一次性 -p 长期托管开发服务器。
后台子代理和 Workflow 会等待结果,但官方当前有默认等待上限。需要长时间常驻任务时使用合适的进程管理器,而不是依赖 Claude Code 子进程。
7. 在脚本中继续会话
第一次运行:
1 | result_json=$(claude -p "分析失败测试" --output-format json) |
继续:
1 | claude -p --resume "$session_id" \ |
注意:
-p会话不一定出现在交互选择器中,但可用 session ID 恢复;- 从原任务目录运行;
- 恢复时重新传入必要
--settings、MCP、插件和额外目录; - 自动化应保存 session ID,但不要解析内部 JSONL 转录格式;
- 并行分支使用
--fork-session,避免消息交错。
8. CI 审查示例
目标:只读检查相对 origin/main 的差异,并输出结构化缺陷。
1 | git fetch origin main |
安全设计:
- 差异通过 stdin 提供,不授予 Bash;
- Bare mode 不加载开发者私人插件与 Hooks;
dontAsk防止无人回答的提示;- 不授予 Edit;
- 不提供 GitHub Token;
- 结构化输出供后续程序处理;
- CI 仍需检查退出码和 JSON;
- AI 审查不是静态分析、测试和人工评审的替代品。
9. 模型选择
9.1 使用别名
1 | claude --model sonnet |
会话内:
1 | /model |
官方当前提供的常见选择包括:
| 别名 | 典型用途 |
|---|---|
default |
账号或组织推荐默认 |
best |
可用时选择最强推荐模型 |
fable |
最长、最难的自主任务 |
sonnet |
日常编码 |
opus |
复杂推理 |
haiku |
简单、快速、低成本任务 |
opusplan |
Plan 使用 Opus,执行切换 Sonnet |
别名解析会随提供商和时间变化。需要可重复性时使用组织批准的完整模型名,但同时建立退役和升级流程。
9.2 设置优先级
常见顺序:
- 会话内
/model; - 启动参数
--model; ANTHROPIC_MODEL;- 设置文件
model。
恢复会话可能继续原模型,但命令行覆盖、模型退役、组织允许列表和第三方部署名会影响结果。
9.3 Effort
1 | claude --model sonnet --effort high |
会话内:
1 | /effort |
官方当前层级包括 low、medium、high、xhigh 和 max,具体取决于模型:
low:短小、明确、对智能不敏感;medium:成本敏感且可接受能力折中;high:多数复杂编码的平衡选择;xhigh:更深推理、更高 token;max:最难任务,可能出现收益递减和过度思考。
不要把所有任务永久设为最高。通过实际正确率、延迟和成本评估。
10. 成本与上下文
10.1 查看用量
会话内:
1 | /usage |
API 计费时,JSON 输出还包含 total_cost_usd 和模型用量信息。订阅和组织环境的显示与计费方式可能不同。
10.2 降低消耗
官方建议的主要方向:
/clear分隔无关任务;/compact压缩长会话;- 为提示限定目录和验证;
- 用子代理承接高输出调查;
- 把偶尔使用的说明从
CLAUDE.md移到 Skill; - 断开不使用的 MCP;
- 安装合适 LSP,减少粗放文件读取;
- 让 Hook 预处理大日志;
- 小任务选择合适模型和 Effort;
- 并行 Agent 只用于可并行且收益足够的任务;
- 为复杂任务提供验证,减少人工来回纠正。
10.3 为什么长会话越来越贵
每轮请求需要携带可见上下文。随着文件、命令输出和对话累积:
- 输入 token 上升;
- 压缩频率上升;
- 无关内容降低判断质量;
- 切换模型可能失去 Prompt Cache 命中;
- MCP 与扩展增加常驻描述。
成本优化首先是上下文设计,不只是换更便宜模型。
11. 系统排障顺序
11.1 第一步:分类
| 症状 | 首选入口 |
|---|---|
| 命令不存在、PATH、TLS、安装权限 | 安装与登录排障 |
| OAuth、403、组织或云凭据 | 认证排障 |
| 设置、Hook、MCP、Skill 不生效 | 配置调试 |
| 429、5xx、模型不存在 | Error reference |
| 高 CPU、内存、卡住、搜索问题 | Troubleshooting |
11.2 第二步:版本与只读诊断
1 | claude --version |
检查:
- 是否多重安装;
- 设置 JSON 是否有效;
- 搜索工具是否工作;
- 更新是否失败;
- PATH 指向哪一个二进制。
11.3 第三步:会话内可观察性
1 | /status |
不要直接删除配置。先确认“是否加载”和“从哪里加载”。
12. 配置问题
12.1 设置优先级
settings.local.json 会覆盖项目和用户标量。使用:
1 | /status |
查看 Setting sources。数组可能跨作用域合并,不能只看一个文件。
12.2 CLAUDE.md 未遵守
先看:
1 | /context |
若未出现:
- 路径不正确;
- 在子目录中,尚未读取匹配文件;
--setting-sources排除了项目;- Safe 或 Bare mode 关闭了自动加载。
若已出现但未遵守:
- 指令过长;
- 表述含糊;
- 多个文件冲突;
- 内容属于偶发流程,应移到 Skill;
- 需要硬性保证,应改用权限或 Hook。
12.3 Skill 不出现
正确路径:
1 | .claude/skills/<name>/SKILL.md |
使用 /skills 检查。disable-model-invocation: true 的 Skill 不会自动触发。
12.4 Hook 不触发
1 | claude --debug hooks |
检查 matcher 是单个字符串、工具名大小写、脚本权限、JSON stdout 和设置文件位置。
12.5 MCP 不加载
1 | /mcp |
1 | claude mcp list |
常见原因:
.mcp.json放进.claude/;- 写进
settings.json; - local Server 在另一个项目注册;
- Project Server 未批准;
- stdio 使用相对脚本路径;
- OAuth 未完成;
-环境变量放错位置; - 启动超过默认超时。
13. 使用 Safe mode 定位定制问题
1 | claude --safe-mode |
它会关闭 CLAUDE.md、Skills、插件、Hooks、MCP、自定义 Agent、输出风格和其他定制,但保留:
- 认证;
- 模型选择;
- 内置工具;
- 权限;
- Managed policy。
如果问题消失,逐项检查:
/context;/hooks;/mcp;/skills;- 插件;
- 项目与本地设置。
13.1 完全独立配置目录
macOS、Linux 或 WSL:
1 | mkdir -p /tmp/claude-clean |
Windows PowerShell:
1 | $cleanDir = Join-Path $env:TEMP "claude-clean" |
该方式会绕开通常的用户配置;Linux 和 Windows 可能需要重新登录。Managed policy 仍可生效。测试结束后不要把临时配置当作长期主配置。
14. 性能、卡住与搜索
14.1 高 CPU 或内存
依次尝试:
/compact;- 在主要任务之间重启;
- 忽略大型生成目录;
claude --safe-mode排除扩展;/doctor。
必要时 /heapdump 会生成堆快照。官方警告堆快照包含进程中的所有字符串,可能包括对话和凭据,不得公开上传;报告问题时优先分享不含内容的 diagnostics JSON。
14.2 命令卡住
1 | Ctrl+C |
关闭后:
1 | claude --resume |
如果反复卡在同一 Hook、MCP 或工具,使用 Debug 和 Safe mode 定位,而不是无限重试。
14.3 搜索不到文件
Claude Code 通常自带 ripgrep。内置版本异常时安装系统版:
1 | # Ubuntu/Debian |
Windows:
1 | winget install BurntSushi.ripgrep.MSVC |
设置:
1 | export USE_BUILTIN_RIPGREP=0 |
再运行:
1 | claude doctor |
确认 Search 指向系统 ripgrep。
WSL 项目位于 /mnt/c 时可能搜索较慢或结果不完整,优先移动到 /home 或使用 Windows 原生 Claude Code。
14.4 自动压缩抖动
错误表明压缩后又立即被超大文件或输出填满。处理:
- 分段读文件;
- 只保留需要的日志;
- 使用子代理;
/compact指定保留内容;- 无需历史时
/clear。
15. 日常维护清单
每周或版本升级后:
1 | claude --version |
会话内:
1 | /doctor |
检查:
- 是否需要更新;
- 是否存在无效设置;
- 是否有未使用插件;
- MCP 是否仍必要;
CLAUDE.md是否过长;- Skills 是否重复;
- Allow 规则是否过宽;
- Auto memory 是否含过期或敏感内容;
- 工作树是否残留重要未提交工作;
- CI 模型、预算和结构化输出是否仍符合当前版本。
16. 系列总结
完整掌握 Claude Code CLI,核心不是记住所有命令,而是建立一套稳定操作模型:
1 | 正确目录与可信配置 |
随着版本更新,应优先查阅官方文档、当前 claude --help、会话内 /help 和 Changelog。第三方教程适合提供经验,但不应替代官方命令语义、权限边界和安全说明。
17. CLI 命令索引
Claude Code 的命令面会随版本、平台、套餐和登录方式变化。下面不是替代 --help 的静态全量清单,而是按用途整理的检索入口。遇到本文未列出的参数时,应依次运行:
1 | claude --help |
进入会话后,输入 / 可以浏览当前环境实际可用的全部命令,输入 /help 查看帮助。官方 Commands 页面同时标注了版本差异与可用性条件。
17.1 Shell 子命令
| 子命令 | 主要用途 |
|---|---|
claude [prompt] |
启动交互会话,可附带第一条任务 |
claude auth |
管理登录与认证 |
claude doctor |
检查安装和当前目录配置;会话内 /doctor 还能引导修复 |
claude install [target] |
安装原生构建,可指定稳定版、最新版或具体版本 |
claude update |
检查并安装可用更新 |
claude mcp |
配置和管理 MCP 服务器 |
claude plugin |
管理插件 |
claude project |
管理 Claude Code 项目状态 |
claude agents |
查看和管理后台代理会话 |
claude setup-token |
为支持的 Claude 订阅配置长期认证令牌 |
claude auto-mode |
查看或重置 Auto mode 分类器配置 |
claude gateway |
运行企业认证或遥测网关;只适用于相应的组织部署 |
claude ultrareview |
发起云端多代理代码审查;是否可用取决于账户、套餐和当前版本 |
例如,查询 MCP 子命令的精确参数:
1 | claude mcp --help |
17.2 启动参数分组
| 目标 | 主要参数 |
|---|---|
| 增加工作目录 | --add-dir |
| 选择代理 | --agent、--agents |
| 控制内置工具 | --tools、--allowedTools、--disallowedTools |
| 选择权限模式 | --permission-mode |
| 非交互调用 | -p、--input-format、--output-format、--json-schema |
| 流式事件 | --include-partial-messages、--include-hook-events、--forward-subagent-text |
| 会话恢复与分支 | --continue、--resume、--fork-session、--session-id、--from-pr、--name |
| 会话持久化 | --no-session-persistence |
| 选择模型与推理强度 | --model、--effort、--fallback-model |
| 成本上限 | --max-budget-usd |
| 临时配置 | --settings、--setting-sources |
| 临时系统指令 | --system-prompt、--append-system-prompt |
| 诊断 | --debug、--debug-file、--verbose、--safe-mode |
| 最小化脚本环境 | --bare |
| MCP 隔离 | --mcp-config、--strict-mcp-config |
| 临时插件 | --plugin-dir、--plugin-url |
| Git 隔离 | --worktree,以及配套的 --tmux |
| 后台运行 | --background |
| 可访问性 | --ax-screen-reader |
| 可选外部集成 | --ide、--chrome、--remote-control |
以下两个参数会解除权限保护,不能仅为减少确认次数而使用:
1 | --allow-dangerously-skip-permissions |
官方帮助只建议在无互联网访问的隔离沙箱中考虑它们。即使在 CI 中,也应优先使用 dontAsk、精确的 Allow/Deny 规则和系统级沙箱。
17.3 会话内命令分组
| 阶段 | 常用命令 |
|---|---|
| 初始化与状态 | /init、/status、/doctor、/help |
| 工作边界 | /permissions、/config、/add-dir、/cd |
| 规划与执行 | /plan、/model、/effort、/tasks |
| 上下文管理 | /context、/compact、/clear、/btw |
| 会话管理 | /resume、/branch、/fork、/rename、/rewind |
| 查看与验证 | /diff、/verify、/review、/security-review |
| 扩展 | /memory、/mcp、/plugin、/hooks |
| 监控与成本 | /usage、/background、/tasks |
| 认证与反馈 | /login、/logout、/bug |
/agents 的当前行为尤其需要注意:从 Claude Code 2.1.198 起,它不再打开子代理创建向导,而是提示用户直接要求 Claude 创建或管理子代理,或编辑 .claude/agents/、~/.claude/agents/。这类版本敏感行为应以当前 Commands 页面为准。







