Skip to content

Gemini CLI 无头模式(headless mode)通过 -p 标志或非 TTY 环境触发,返回结构化 JSON 或流式 JSONL 输出。JSON 模式包含 response 和 stats 字段,流式模式按事件类型(init/message/tool_use/tool_result/result)输出。退出码 0 成功、1 失败、42 输入错误、53 超过轮次限制。

无头模式技术参考

无头模式(Headless Mode)为 Gemini CLI 提供程序化接口,返回结构化文本或 JSON 输出,无需交互式终端界面。适合脚本调用、CI/CD 集成和自动化管道。

触发条件

无头模式在以下情况自动启用:

  • 使用 -p(或 --prompt)标志提供查询
  • 在非 TTY 环境中运行(如管道、CI/CD)

输出格式

--output-format 标志指定输出格式。

JSON 输出

返回单个 JSON 对象,包含完整响应和统计数据:

bash
gemini -p "请总结一下 TypeScript 的优势" --output-format json

Schema:

字段类型说明
responsestring模型的最终回答
statsobjectToken 用量和 API 延迟指标
errorobject(可选)请求失败时的错误详情

流式 JSON 输出(JSONL)

返回按换行符分隔的 JSON 事件流(Newline-Delimited JSON),适合实时处理:

bash
gemini -p "分析这段代码" --output-format stream-json

事件类型:

事件说明
init会话元数据(会话 ID、模型名称)
message用户和助手的消息分块
tool_use工具调用请求及参数
tool_result工具执行结果
error非致命警告和系统错误
result最终结果(汇总统计、各模型 Token 用量分解)

退出码

退出码含义
0成功
1通用错误或 API 失败
42输入错误(无效 Prompt 或参数)
53超过轮次限制

在 Shell 脚本中使用退出码做条件判断:

bash
gemini -p "检查代码质量" --output-format json
if [ $? -eq 0 ]; then
  echo "成功"
elif [ $? -eq 1 ]; then
  echo "API 错误"
elif [ $? -eq 42 ]; then
  echo "输入错误"
fi

实用脚本示例

从文件读取 Prompt

bash
gemini -p "$(cat prompt.txt)" --output-format json | jq '.response'

CI/CD 代码审查

bash
git diff HEAD~1 | gemini -p "审查这个 diff,列出潜在问题" --output-format json

批量处理

bash
for file in src/*.ts; do
  gemini -p "@$file 为这个文件生成单元测试" --output-format json > "tests/$(basename $file).json"
done

进一步阅读

常见问题

Q: 无头模式下 AI 还能执行文件修改等工具操作吗?

A: 可以。工具操作(读文件、写文件、Shell 命令等)在无头模式下同样有效。需要注意的是,工具调用需要用户审批的步骤在无头模式下会被跳过或自动批准,具体取决于配置。建议在自动化场景中配合沙箱使用。

Q: 流式 JSON 和普通 JSON 如何选择?

A: 如果任务执行时间较长(如复杂代码分析),用流式 JSONL 可以实时获取进度;如果只需最终结果,用普通 JSON 更简单。

Q: 退出码 53(轮次限制)如何处理?

A: 这意味着 AI 在达到最大轮次限制前未能完成任务。可以用 --turn-limit 标志增加允许的最大轮次,或将任务拆分为更小的子任务。