Gemini Web Client
Text/image generation via Gemini Web API. Supports reference images and multi-turn conversations.
Script Directory
Important: All scripts are located in the scripts/ subdirectory of this skill.
Agent Execution Instructions:
- Determine this SKILL.md file's directory path as
{baseDir}
- Script path =
{baseDir}/scripts/<script-name>.ts
- Resolve
${BUN_X} runtime: if bun installed β bun; if npx available β npx -y bun; else suggest installing bun
- Replace all
{baseDir} and ${BUN_X} in this document with actual values
Script Reference:
| Script |
Purpose |
scripts/main.ts |
CLI entry point for text/image generation |
scripts/gemini-webapi/* |
TypeScript port of gemini_webapi (GeminiClient, types, utils) |
Consent Check (REQUIRED)
Before first use, verify user consent for reverse-engineered API usage.
Consent file locations:
- macOS:
~/Library/Application Support/baoyu-skills/gemini-web/consent.json
- Linux:
~/.local/share/baoyu-skills/gemini-web/consent.json
- Windows:
%APPDATA%\baoyu-skills\gemini-web\consent.json
Flow:
- Check if consent file exists with
accepted: true and disclaimerVersion: "1.0"
- If valid consent exists β print warning with
acceptedAt date, proceed
- If no consent β show disclaimer, ask user via
AskUserQuestion:
- "Yes, I accept" β create consent file with ISO timestamp, proceed
- "No, I decline" β output decline message, stop
- Consent file format:
{"version":1,"accepted":true,"acceptedAt":"<ISO>","disclaimerVersion":"1.0"}
Preferences (EXTEND.md)
Check EXTEND.md existence (priority order):
test -f .baoyu-skills/baoyu-danger-gemini-web/EXTEND.md && echo "project"
test -f "${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-danger-gemini-web/EXTEND.md" && echo "xdg"
test -f "$HOME/.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md" && echo "user"
if (Test-Path .baoyu-skills/baoyu-danger-gemini-web/EXTEND.md) { "project" }
$xdg = if ($env:XDG_CONFIG_HOME) { $env:XDG_CONFIG_HOME } else { "$HOME/.config" }
if (Test-Path "$xdg/baoyu-skills/baoyu-danger-gemini-web/EXTEND.md") { "xdg" }
if (Test-Path "$HOME/.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md") { "user" }
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββ
β Path β Location β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββ€
β .baoyu-skills/baoyu-danger-gemini-web/EXTEND.md β Project directory β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββ€
β $HOME/.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md β User home β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββ
βββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Result β Action β
βββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Found β Read, parse, apply settings β
βββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Not found β Use defaults β
βββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
EXTEND.md Supports: Default model | Proxy settings | Custom data directory
Usage
${BUN_X} {baseDir}/scripts/main.ts "Your prompt"
${BUN_X} {baseDir}/scripts/main.ts --prompt "Your prompt" --model gemini-3-flash
${BUN_X} {baseDir}/scripts/main.ts --prompt "A cute cat" --image cat.png
${BUN_X} {baseDir}/scripts/main.ts --promptfiles system.md content.md --image out.png
${BUN_X} {baseDir}/scripts/main.ts --prompt "Describe this" --reference image.png
${BUN_X} {baseDir}/scripts/main.ts --prompt "Create variation" --reference a.png --image out.png
${BUN_X} {baseDir}/scripts/main.ts "Remember: 42" --sessionId session-abc
${BUN_X} {baseDir}/scripts/main.ts "What number?" --sessionId session-abc
${BUN_X} {baseDir}/scripts/main.ts "Hello" --json
Options
| Option |
Description |
--prompt, -p |
Prompt text |
--promptfiles |
Read prompt from files (concatenated) |
--model, -m |
Model: gemini-3-pro (default), gemini-3-flash, gemini-3-flash-thinking, gemini-3.1-pro-preview |
--image [path] |
Generate image (default: generated.png) |
--reference, --ref |
Reference images for vision input |
--sessionId |
Session ID for multi-turn conversation |
--list-sessions |
List saved sessions |
--json |
Output as JSON |
--login |
Refresh cookies, then exit |
--cookie-path |
Custom cookie file path |
--profile-dir |
Chrome profile directory |
Models
| Model |
Description |
gemini-3-pro |
Default, latest 3.0 Pro |
gemini-3-flash |
Fast, lightweight 3.0 Flash |
gemini-3-flash-thinking |
3.0 Flash with thinking |
gemini-3.1-pro-preview |
3.1 Pro preview (empty header, auto-routed) |
Authentication
First run opens browser for Google auth. Cookies cached automatically.
When no explicit profile dir is set, cookie refresh may reuse an already-running local Chrome/Chromium debugging session tied to a standard user-data dir.
Set --profile-dir or GEMINI_WEB_CHROME_PROFILE_DIR to force a dedicated profile and skip existing-session reuse.
This is a best-effort CDP session reuse path, not the Chrome DevTools MCP prompt-based --autoConnect flow described in Chrome's official docs.
Supported browsers (auto-detected): Chrome, Chrome Canary/Beta, Chromium, Edge.
Force refresh: --login flag. Override browser: GEMINI_WEB_CHROME_PATH env var.
Environment Variables
| Variable |
Description |
GEMINI_WEB_DATA_DIR |
Data directory |
GEMINI_WEB_COOKIE_PATH |
Cookie file path |
GEMINI_WEB_CHROME_PROFILE_DIR |
Chrome profile directory |
GEMINI_WEB_CHROME_PATH |
Chrome executable path |
HTTP_PROXY, HTTPS_PROXY |
Proxy for Google access (set inline with command) |
Sessions
Session files stored in data directory under sessions/<id>.json.
Contains: id, metadata (Gemini chat state), messages array, timestamps.
Extension Support
Custom configurations via EXTEND.md. See Preferences section for paths and supported options.