Gemini Web CLI 是一个通过 CDP 驱动 Gemini 网页的命令行工具,面向脚本、自动化流程和 CI 场景,提供稳定的 JSON 机器输出、明确的退出码,以及围绕对话、生图和浏览器诊断的一组 CLI 命令。
当前选定路线是 hybrid-native-cli-node-core。CLI 负责命令树、机器模式 JSON 契约、退出码和发布编排,浏览器与 daemon 仍然由私有 Node core/runtime 提供。
- 主入口:
gemini-web-cli(全局安装后)或node scripts/run-cli.mjs(源码) - npm script 入口:
npm run cli -- - 机器模式:
--json时 stdout 只输出一个 JSON 文档,诊断信息只走 stderr - 选定路线:
hybrid-native-cli-node-core - daemon 策略:
keep - 发布形态:
dry-run-local - 运行时现实: 仍依赖 private Node core/runtime,不应被描述为完全独立的原生二进制
通过 npm 全局安装(推荐)
npm install -g @lumiaqian/gemini-web-cli安装后可以直接使用 gemini-web-cli 命令。
从源码安装
git clone https://github.com/Lumiaqian/gemini-web-cli.git
cd gemini-web-cli
npm installgemini-web-cli --help
# 或源码: node scripts/run-cli.mjs --helpgemini-web-cli describe-scaffold --json
# 或源码: node scripts/run-cli.mjs describe-scaffold --jsongemini-web-cli diagnostic browser-info --json
gemini-web-cli conversation send-message --message "你好" --json
gemini-web-cli image generate-image --prompt "一只戴耳机的橘猫" --timeout-ms 180000 --json
# 源码模式:
# node scripts/run-cli.mjs diagnostic browser-info --json
# node scripts/run-cli.mjs conversation send-message --message "你好" --json
# node scripts/run-cli.mjs image generate-image --prompt "一只戴耳机的橘猫" --timeout-ms 180000 --json- Node.js 18+
- Chrome、Edge 或 Chromium 之一
- 需要能访问
gemini.google.com - 首次使用前,需要先在浏览器中登录 Google 账号
如果你需要固定浏览器位置或输出目录,可以通过环境变量或 .env 配置。
# 浏览器路径,不设则自动检测 Chrome、Edge、Chromium
# BROWSER_PATH=/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
# CDP 调试端口
# BROWSER_DEBUG_PORT=40821
# 是否启用无头模式
# BROWSER_HEADLESS=false
# 图片输出目录
# OUTPUT_DIR=./gemini-image
# daemon HTTP 端口
# DAEMON_PORT=40225
# daemon 闲置超时,毫秒
# DAEMON_TTL_MS=1800000配置优先级如下。
flag > env > .env.development > .env > default
项目同时提供原始脚本入口和 package.json 里的常用 alias,方便在本地开发、脚本编排和 CI 中统一调用。
npm run cli -- --help
npm run cli -- --version
npm run cli -- describe-scaffold --json对应的底层命令如下。
node scripts/run-cli.mjs --help
node scripts/run-cli.mjs --version
node scripts/run-cli.mjs describe-scaffold --jsonnpm run build对应的底层命令如下。
node scripts/build-cli.mjs --selected-route hybrid-native-cli-node-core构建后会生成本地 dev artifact。
node dist/native-cli/hybrid-native-cli-node-core/run-dev.mjs describe-scaffold --jsonnpm test
npm run test:contract
npm run test:integration
npm run test:smokenpm run release:dry-run对应的底层命令如下。
node scripts/release-dry-run.mjs --selected-route hybrid-native-cli-node-core --require-artifact-metadata这个流程会验证 dist/native-cli/hybrid-native-cli-node-core/release-metadata.json,并要求 release metadata 继续显式声明 private Node core/runtime 依赖和 dry-run-local 发布模式。
npm run daemondaemon 是内部子系统的调试与维护入口,不影响 CLI 作为主产品入口的定位。
CLI 公开的是分组路径,同时保留了便于直接调用的平铺 alias。下面是当前命令树中的对应关系。
| CLI 路径 | 平铺 alias |
|---|---|
session new-chat |
new-chat |
session temp-chat |
temp-chat |
session navigate-to |
navigate-to |
model switch-model |
switch-model |
conversation send-message |
send-message |
image generate-image |
generate-image |
image upload-images |
upload-images |
image get-images |
get-images |
image extract-image |
extract-image |
image download-full-size-image |
download-full-size-image |
text get-all-text-responses |
get-all-text-responses |
text get-latest-text-response |
get-latest-text-response |
diagnostic check-login |
check-login |
diagnostic probe |
probe |
diagnostic reload-page |
reload-page |
diagnostic browser-info |
browser-info |
脚本和 CI 应该优先使用 --json。
node scripts/run-cli.mjs diagnostic browser-info --json机器模式遵循这些规则。
- stdout 只输出一个 JSON envelope
- stderr 只输出诊断、进度和恢复提示
exitCode字段必须和真实进程退出码一致- 退出码遵循项目当前实现约定
当前稳定退出码类别如下。
| 类别 | 退出码 |
|---|---|
success |
0 |
invalid-args |
2 |
auth-failure |
3 |
browser-startup-failure |
4 |
selector-failure |
5 |
timeout |
6 |
interrupted |
7 |
internal-error |
8 |
当前产品叙述必须反映真实实现,而不是未来想象图。
scripts/run-cli.mjs
-> native-cli/hybrid-native-cli-node-core/
-> private Node session bridge to src/index.js
-> private Node daemon bridge to src/browser.js
-> detached daemon owns browser lifecycle and TTL reuse
这里最重要的现实约束如下。
- CLI 是第一入口,但底层仍是 hybrid wrapper
- detached daemon 仍然保留,并作为私有子系统存在
browser-info仍然遵循 daemon/health和/browser/acquire的生命周期现实- 构建与发布验证是本地 dry run,不是远程发布流程
- 首次运行真实 Gemini 命令时,需要浏览器已登录 Google 账号。
- 同一 CDP 端口不要同时拉起多个浏览器实例。
image generate-image和conversation send-message都是阻塞式命令,请根据场景设置--timeout-ms。- 当前 CLI 优先面向脚本和 CI,
--json才是稳定契约。
本项目基于 WJZ-P/gemini-skill 改造而来,感谢原作者的出色工作。原项目提供了 Gemini 网页自动化的核心能力(CDP 驱动、会话管理、图片生成与提取、水印移除等),本项目在此基础上剥离了 MCP 相关代码,重构为纯 CLI 工具。
本项目使用 MIT License,详见 LICENSE。