Gemini cli
Generates images and text via reverse-engineered Gemini Web API. Suitable for AI Pro and higher tier subscription users. Supports text generation, image generation from prompts, reference images for vision input, and multi-turn conversations. Use when other skills need image generation backend, or when user requests "generate image with Gemini", "Gemini text generation", or needs vision-capable AI generation.From its SKILL.md
npx -y skills add hankunpeng/skills --skill gemini-cliAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- reads credentialsReads from 2 credential sources: `GEMINI_WEB_COOKIE_PATH` and 1 more.
- runs commandsInstructs the agent to run 8 commands, including `${BUN_X} {baseDir}/scripts/main.ts "Your prompt"` and 7 more.
SKILL.md
6.8 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
Gemini CLI Client
Text/image generation via Gemini Web API. Suitable for AI Pro and higher tier subscription users (e.g., AI Ultra or Enterprise). Supports reference images and multi-turn conversations.
[!NOTE] The
antigravityproperty name in the frontmatter metadata can be replaced with your actual Agent runtime framework name (e.g.,openclaw).
User Input Tools
When this skill prompts the user, follow this tool-selection rule (priority order):
- Prefer built-in user-input tools exposed by the current agent runtime — e.g.,
AskUserQuestion,request_user_input,clarify,ask_user, or any equivalent. - Fallback: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.
- Batching: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.
Concrete AskUserQuestion references below are examples — substitute the local equivalent in other runtimes.
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: ifbuninstalled →bun; ifnpxavailable →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/skills/gemini-cli/consent.json - Linux:
~/.local/share/skills/gemini-cli/consent.json - Windows:
%APPDATA%\skills\gemini-cli\consent.json
Flow:
- Check if consent file exists with
accepted: trueanddisclaimerVersion: "1.0" - If valid consent exists → print warning with
acceptedAtdate, 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 in priority order — the first one found wins:
| Priority | Path | Scope |
|---|---|---|
| 1 | .skills/gemini-cli/EXTEND.md | Project |
| 2 | ${XDG_CONFIG_HOME:-$HOME/.config}/skills/gemini-cli/EXTEND.md | XDG |
| 3 | $HOME/.skills/gemini-cli/EXTEND.md | User home |
If none found, use defaults.
EXTEND.md supports: Default model, proxy settings, custom data directory.
Usage
# Text generation
${BUN_X} {baseDir}/scripts/main.ts "Your prompt"
${BUN_X} {baseDir}/scripts/main.ts --prompt "Your prompt" --model gemini-3.5-flash
# Image generation
${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
# Vision input (reference images)
${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
# Multi-turn conversation
${BUN_X} {baseDir}/scripts/main.ts "Remember: 42" --sessionId session-abc
${BUN_X} {baseDir}/scripts/main.ts "What number?" --sessionId session-abc
# JSON output
${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.5-pro (default), gemini-3.5-pro-thinking, gemini-3.5-flash, gemini-3.1-pro-preview, gemini-3.1-flash-lite |
--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.5-pro | Default model, Gemini 3.5 Pro |
gemini-3.5-pro-thinking | Thinking model, Gemini 3.5 Pro Thinking |
gemini-3.5-flash | Fast model, Gemini 3.5 Flash |
gemini-3.1-pro-preview | Thinking model (preview), Gemini 3.1 Pro Preview |
gemini-3.1-flash-lite | Fast model (lite), Gemini 3.1 Flash Lite |
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.
What ships with it: 27 files
89.2 KB alongside SKILL.md, 25 of them executable
scripts/
- bun.lock389 B
- gemini-webapi/client.test.tsruns1.0 KB
- gemini-webapi/client.tsruns23.2 KB
- gemini-webapi/components/gem-mixin.tsruns5.6 KB
- gemini-webapi/components/index.tsruns44 B
- gemini-webapi/constants.tsruns4.0 KB
- gemini-webapi/exceptions.tsruns1.2 KB
- gemini-webapi/index.tsruns273 B
- gemini-webapi/types/candidate.tsruns1.3 KB
- gemini-webapi/types/gem.tsruns1.8 KB
- gemini-webapi/types/grpc.tsruns369 B
- gemini-webapi/types/image.tsruns3.4 KB
- gemini-webapi/types/index.tsruns232 B
- gemini-webapi/types/modeloutput.tsruns816 B
- gemini-webapi/utils/cookie-file.tsruns2.3 KB
- gemini-webapi/utils/decorators.tsruns1.1 KB
- gemini-webapi/utils/get-access-token.tsruns7.4 KB
- gemini-webapi/utils/http.tsruns1.6 KB
- gemini-webapi/utils/index.tsruns1021 B
- gemini-webapi/utils/load-browser-cookies.tsruns9.6 KB
- gemini-webapi/utils/logger.tsruns1.2 KB
- gemini-webapi/utils/parsing.tsruns1.3 KB
- gemini-webapi/utils/paths.tsruns2.3 KB
- gemini-webapi/utils/rotate-1psidts.tsruns1.5 KB
- gemini-webapi/utils/upload-file.tsruns1.1 KB
- main.tsruns15.2 KB
- package.json132 B