用途
ask-opencli 用于通过 opencli 工具向 Grok 或 Gemini 提问,借助用户已登录的 Chrome 浏览器会话完成查询,零 API 费用,完全由现有浏览器会话驱动。
opencli 项目地址:https://github.com/jackwener/opencli
主要能力
- 通过 opencli 调用 Grok 或 Gemini 的网页版进行问答。
- 支持 Grok 的 ask 命令,以及 Gemini 的 ask、new、deep-research、deep-research-result、image 等子命令。
- 支持结构化输出(-f json)或纯文本输出(--format plain)。
- 支持并行调度,可在同一轮对话中通过 Bash 工具以 run_in_background=true 同时调用 grok 和 gemini。
- 每次成功调用后保存 markdown 产物到 .omx/artifacts/ask-opencli-<grok|gemini>-<slug>-<YYYYMMDD-HHMMSS>.md。
使用方式
安装与准备
- 安装:npm install -g @jackwener/opencli(需要 Node ≥20)。
- 首次运行:opencli doctor 会自动引导安装 Chrome Browser Bridge 扩展。
- 登录:用装了扩展的 Chrome profile 打开 grok.com 和 gemini.google.com 登录一次。
- 必须环境变量:export OPENCLI_BROWSER_COMMAND_TIMEOUT=300(写进 shell rc)。
触发条件
当用户明确要求查询 Grok 或 Gemini(如「问一下 grok」「用 gemini 查」「让 grok 看看」),或希望从 Grok 或 Gemini 获得第二意见/外部顾问,或直接说「ask grok」「ask gemini」时触发。
不触发的情况:用户想用原生 Gemini CLI(gemini -p)应改用 ask-gemini 技能;用户想要 Claude 自己的意见则直接回答;用户想用其他 AI(豆包、元宝、ChatGPT 等)则使用其他工具。
模型选择
如果用户未指定模型,默认对实时/社交/新闻/技术趋势类问题使用 Grok,对长文推理、研究、编程和文档分析使用 Gemini。若仍不明确,发送前询问用户使用哪一个。
命令示例
Grok(必须设置环境变量):
OPENCLI_BROWSER_COMMAND_TIMEOUT=300 opencli grok ask "{{PROMPT}}" --timeout 300 -f json
若环境变量已在 shell 中导出:
opencli grok ask "{{PROMPT}}" --timeout 300 -f json
Grok 标志:--new true 开启新对话;--web true 使用加固的 grok.com 消费者网页流程;--timeout 300 必须匹配或低于 OPENCLI_BROWSER_COMMAND_TIMEOUT;-f json 结构化输出。
Gemini:
opencli gemini ask "{{PROMPT}}" --format plain
Gemini 标志:--new true 开启新对话;--timeout 90 为长回答延长超时(默认 60s)。
常见错误命令
- opencli gemini chat "..." 错误,正确为 opencli gemini ask "..."(没有 chat 子命令)。
- opencli grok chat "..." 错误,正确为 opencli grok ask "..."(只有 ask 子命令)。
- opencli grok new 错误,正确为 opencli grok ask "..." --new true(grok 的「新对话」是 ask 的参数)。
- opencli gemini query "..." 错误,正确为 opencli gemini ask "..."(没有 query 子命令)。
两层超时
opencli 有两个独立的超时层,grok 需要同时设置才能等待足够久:
- 内层:--timeout 300,grok.com 网页响应等待时间。
- 外层:OPENCLI_BROWSER_COMMAND_TIMEOUT=300 环境变量,整个浏览器命令执行超时(默认 60s,硬编码在 runtime.js:25)。
外层优先于内层。只设置 --timeout 300 仍会在 60s 被终止,必须同时设置两者。
源码:.omx/reference/opencli/dist/src/runtime.js:25:
export const DEFAULT_BROWSER_COMMAND_TIMEOUT = parseEnvTimeout('OPENCLI_BROWSER_COMMAND_TIMEOUT', 60);
建议在 ~/.zshrc 中添加 export OPENCLI_BROWSER_COMMAND_TIMEOUT=300。
执行协议
- 决定使用哪个模型(Grok 还是 Gemini),不明确则询问。
- 构建提示词,要明确——这些浏览器 UI 没有系统提示,完整问题必须自包含。
- 运行 opencli 命令,使用 --format plain。
- 捕获响应。若命令因会话/认证/挑战消息失败,停止并向用户展示错误,不要盲目重试。
- 保存产物。
- 向用户报告:使用的模型、响应摘要、产物路径。
错误处理
opencli 会发出具体错误,如「Not logged in to grok.com」需用户登录;「Composer not found」表示 DOM 变化,需用户手动打开网站重试;「Session gated / challenge」需用户在 Chrome 中手动解决挑战;超时则可提供更长 --timeout 重试。不要吞掉这些错误,需原样报告并给出修复动作。
产物要求
每次成功调用后,保存 markdown 产物到 .omx/artifacts/ask-opencli-<grok|gemini>-<slug>-<YYYYMMDD-HHMMSS>.md,至少包含:原始用户任务、模型及所用标志、最终发送的提示词、原始响应、摘要(2-3 条要点)、行动项/下一步。即使响应质量低也保留产物,以记录查询已发生。
适用场景
- 用户明确要求查询 Grok 或 Gemini。
- 需要 Grok 或 Gemini 作为第二意见或外部顾问。
- 需要实时/社交/新闻/技术趋势信息(Grok)或长文推理、研究、编程、文档分析(Gemini)。
- 多 AI 并行调研工作流(可改用 multi-ai-research 技能)。
限制
- 依赖 opencli 工具、Chrome Browser Bridge 扩展及已登录的浏览器会话。
- 需要 Node ≥20。
- 必须正确设置两层超时,否则 grok 调用可能被提前终止。
- 浏览器 UI 没有系统提示,提示词必须自包含。
- 遇到会话/认证/挑战错误时不能静默降级到其他工具,需报告缺失的前置条件并请用户修复。
- 不适用于原生 Gemini CLI、Claude 自身意见或其他 AI 工具的场景。