{"id":"cc9cfd9c-5cdd-4301-a19b-fa71a63de956","shortId":"nHYULd","kind":"skill","title":"baoyu-danger-gemini-web","tagline":"Generates images and text via reverse-engineered Gemini Web API. 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 wi","description":"# Gemini Web Client\n\nText/image generation via Gemini Web API. Supports reference images and multi-turn conversations.\n\n## User Input Tools\n\nWhen this skill prompts the user, follow this tool-selection rule (priority order):\n\n1. **Prefer built-in user-input tools** exposed by the current agent runtime — e.g., `AskUserQuestion`, `request_user_input`, `clarify`, `ask_user`, or any equivalent.\n2. **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.\n3. **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.\n\nConcrete `AskUserQuestion` references below are examples — substitute the local equivalent in other runtimes.\n\n## Script Directory\n\n**Important**: All scripts are located in the `scripts/` subdirectory of this skill.\n\n**Agent Execution Instructions**:\n1. Determine this SKILL.md file's directory path as `{baseDir}`\n2. Script path = `{baseDir}/scripts/<script-name>.ts`\n3. Resolve `${BUN_X}` runtime: if `bun` installed → `bun`; if `npx` available → `npx -y bun`; else suggest installing bun\n4. Replace all `{baseDir}` and `${BUN_X}` in this document with actual values\n\n**Script Reference**:\n| Script | Purpose |\n|--------|---------|\n| `scripts/main.ts` | CLI entry point for text/image generation |\n| `scripts/gemini-webapi/*` | TypeScript port of `gemini_webapi` (GeminiClient, types, utils) |\n\n## Consent Check (REQUIRED)\n\nBefore first use, verify user consent for reverse-engineered API usage.\n\n**Consent file locations**:\n- macOS: `~/Library/Application Support/baoyu-skills/gemini-web/consent.json`\n- Linux: `~/.local/share/baoyu-skills/gemini-web/consent.json`\n- Windows: `%APPDATA%\\baoyu-skills\\gemini-web\\consent.json`\n\n**Flow**:\n1. Check if consent file exists with `accepted: true` and `disclaimerVersion: \"1.0\"`\n2. If valid consent exists → print warning with `acceptedAt` date, proceed\n3. If no consent → show disclaimer, ask user via `AskUserQuestion`:\n   - \"Yes, I accept\" → create consent file with ISO timestamp, proceed\n   - \"No, I decline\" → output decline message, stop\n4. Consent file format: `{\"version\":1,\"accepted\":true,\"acceptedAt\":\"<ISO>\",\"disclaimerVersion\":\"1.0\"}`\n\n---\n\n## Preferences (EXTEND.md)\n\nCheck EXTEND.md in priority order — the first one found wins:\n\n| Priority | Path | Scope |\n|----------|------|-------|\n| 1 | `.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md` | Project |\n| 2 | `${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-danger-gemini-web/EXTEND.md` | XDG |\n| 3 | `$HOME/.baoyu-skills/baoyu-danger-gemini-web/EXTEND.md` | User home |\n\nIf none found, use defaults.\n\n**EXTEND.md supports**: Default model, proxy settings, custom data directory.\n\n## Usage\n\n```bash\n# Text generation\n${BUN_X} {baseDir}/scripts/main.ts \"Your prompt\"\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"Your prompt\" --model gemini-3-flash\n\n# Image generation\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"A cute cat\" --image cat.png\n${BUN_X} {baseDir}/scripts/main.ts --promptfiles system.md content.md --image out.png\n\n# Vision input (reference images)\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"Describe this\" --reference image.png\n${BUN_X} {baseDir}/scripts/main.ts --prompt \"Create variation\" --reference a.png --image out.png\n\n# Multi-turn conversation\n${BUN_X} {baseDir}/scripts/main.ts \"Remember: 42\" --sessionId session-abc\n${BUN_X} {baseDir}/scripts/main.ts \"What number?\" --sessionId session-abc\n\n# JSON output\n${BUN_X} {baseDir}/scripts/main.ts \"Hello\" --json\n```\n\n## Options\n\n| Option | Description |\n|--------|-------------|\n| `--prompt`, `-p` | Prompt text |\n| `--promptfiles` | Read prompt from files (concatenated) |\n| `--model`, `-m` | Model: gemini-3-pro (default), gemini-3-flash, gemini-3-flash-thinking, gemini-3.1-pro-preview |\n| `--image [path]` | Generate image (default: generated.png) |\n| `--reference`, `--ref` | Reference images for vision input |\n| `--sessionId` | Session ID for multi-turn conversation |\n| `--list-sessions` | List saved sessions |\n| `--json` | Output as JSON |\n| `--login` | Refresh cookies, then exit |\n| `--cookie-path` | Custom cookie file path |\n| `--profile-dir` | Chrome profile directory |\n\n## Models\n\n| Model | Description |\n|-------|-------------|\n| `gemini-3-pro` | Default, latest 3.0 Pro |\n| `gemini-3-flash` | Fast, lightweight 3.0 Flash |\n| `gemini-3-flash-thinking` | 3.0 Flash with thinking |\n| `gemini-3.1-pro-preview` | 3.1 Pro preview (empty header, auto-routed) |\n\n## Authentication\n\nFirst run opens browser for Google auth. Cookies cached automatically.\n\nWhen 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.\nSet `--profile-dir` or `GEMINI_WEB_CHROME_PROFILE_DIR` to force a dedicated profile and skip existing-session reuse.\nThis is a best-effort CDP session reuse path, not the Chrome DevTools MCP prompt-based `--autoConnect` flow described in Chrome's official docs.\n\nSupported browsers (auto-detected): Chrome, Chrome Canary/Beta, Chromium, Edge.\n\nForce refresh: `--login` flag. Override browser: `GEMINI_WEB_CHROME_PATH` env var.\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `GEMINI_WEB_DATA_DIR` | Data directory |\n| `GEMINI_WEB_COOKIE_PATH` | Cookie file path |\n| `GEMINI_WEB_CHROME_PROFILE_DIR` | Chrome profile directory |\n| `GEMINI_WEB_CHROME_PATH` | Chrome executable path |\n| `HTTP_PROXY`, `HTTPS_PROXY` | Proxy for Google access (set inline with command) |\n\n## Sessions\n\nSession files stored in data directory under `sessions/<id>.json`.\n\nContains: `id`, `metadata` (Gemini chat state), `messages` array, timestamps.\n\n## Extension Support\n\nCustom configurations via EXTEND.md. See **Preferences** section for paths and supported options.","tags":["baoyu","danger","gemini","web","skills","jimliu","agent-skills","claude-skills","codex-skills","openclaw-skills"],"capabilities":["skill","source-jimliu","skill-baoyu-danger-gemini-web","topic-agent-skills","topic-claude-skills","topic-codex-skills","topic-openclaw-skills"],"categories":["baoyu-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/JimLiu/baoyu-skills/baoyu-danger-gemini-web","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add JimLiu/baoyu-skills","source_repo":"https://github.com/JimLiu/baoyu-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 16958 github stars · SKILL.md body (5,918 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-03T00:52:27.027Z","embedding":null,"createdAt":"2026-04-18T21:53:27.236Z","updatedAt":"2026-05-03T00:52:27.027Z","lastSeenAt":"2026-05-03T00:52:27.027Z","tsv":"'-3':425,521,525,528,590,597,604 '-3.1':533,613 '/.local/share/baoyu-skills/gemini-web/consent.json':288 '/baoyu-danger-gemini-web/extend.md':379 '/baoyu-skills/baoyu-danger-gemini-web/extend.md':386 '/library/application':285 '/scripts':212 '/scripts/main.ts':413,419,432,442,455,464,479,489,501 '1':83,198,299,354,375 '1.0':310,359 '2':109,208,311,381 '3':136,214,322,388 '3.0':594,601,608 '3.1':617 '4':233,349 '42':481 'a.png':469 'abc':485,495 'accept':306,334,355 'acceptedat':319,357 'access':771 'actual':244 'agent':96,195 'alreadi':649 'already-run':648 'api':16,57,279 'appdata':290 'applic':148 'array':793 'ask':104,124,159,328 'askuserquest':99,169,331 'auth':632 'authent':625 'auto':623,713 'auto-detect':712 'auto-rout':622 'autoconnect':702 'automat':635 'avail':225 'backend':41 'baoyu':2,292,377 'baoyu-danger-gemini-web':1 'baoyu-skil':291,376 'base':701 'basedir':207,211,236,412,418,431,441,454,463,478,488,500 'bash':407 'batch':137 'best':688 'best-effort':687 'browser':629,711,725 'built':86 'built-in':85 'bun':216,220,222,228,232,238,410,416,429,439,452,461,476,486,498 'cach':634 'call':145,153 'canary/beta':717 'cat':436 'cat.png':438 'cdp':690 'chat':790 'check':267,300,362 'chosen':131 'chrome':583,670,696,706,715,716,728,751,754,759,761 'chrome/chromium':652 'chromium':718 'clarifi':103 'cli':251 'client':51 'combin':146 'command':775 'concaten':516 'concret':168 'config':383 'configur':798 'consent':266,274,281,302,314,325,336,350 'consent.json':297 'contain':786 'content.md':445 'convers':33,65,475,557 'cooki':570,574,577,633,643,744,746 'cookie-path':573 'creat':335,466 'current':95 'custom':403,576,797 'cute':435 'danger':3 'data':404,661,738,740,781 'date':320 'debug':653 'declin':344,346 'dedic':676 'default':396,399,523,541,592 'describ':457,704 'descript':506,588,735 'detect':714 'determin':199 'devtool':697 'dir':582,640,662,666,672,739,753 'directori':182,204,405,585,741,756,782 'disclaim':327 'disclaimervers':309,358 'doc':709 'document':242 'e.g':98 'edg':719 'effort':689 'els':229 'emit':116 'empti':620 'engin':13,278 'entri':252 'env':730 'environ':732 'equival':108,177 'exampl':173 'execut':196,762 'exist':115,304,315,681 'existing-sess':680 'exit':572 'explicit':638 'expos':92 'extend.md':361,363,397,800 'extens':795 'fallback':110 'fast':599 'file':202,282,303,337,351,515,578,747,778 'first':270,368,626 'flag':723 'flash':426,526,530,598,602,606,609 'flash-think':529,605 'flow':298,703 'follow':75 'forc':674,720 'format':352 'found':370,394 'gemini':4,14,49,55,261,295,424,520,524,527,532,589,596,603,612,668,726,736,742,749,757,789 'gemini-web':294 'geminicli':263 'generat':6,19,21,40,46,53,256,409,428,539 'generated.png':542 'googl':631,770 'header':621 'hello':502 'home':384,391 'home/.baoyu-skills/baoyu-danger-gemini-web/extend.md':389 'home/.config':385 'http':764 'https':766 'id':552,787 'imag':7,20,25,39,47,60,427,437,446,451,470,537,540,546 'image.png':460 'import':183 'inlin':773 'input':28,67,90,102,449,549 'instal':221,231 'instruct':197 'iso':339 'json':496,503,564,567,785 'latest':593 'lightweight':600 'linux':287 'list':559,561 'list-sess':558 'local':176,651 'locat':187,283 'login':568,722 'm':518 'maco':284 'may':645 'mcp':698 'messag':122,347,792 'metadata':788 'model':400,423,517,519,586,587 'multi':31,63,473,555 'multi-turn':30,62,472,554 'multipl':142 'need':38 'none':393 'npx':224,226 'number':118,491 'number/answer':132 'offici':708 'one':161,369 'open':628 'option':504,505,808 'order':82,167,366 'out.png':447,471 'output':345,497,565 'overrid':724 'p':508 'path':205,210,373,538,575,579,693,729,745,748,760,763,805 'per':144 'plain':120 'plain-text':119 'point':253 'port':259 'prefer':84,360,802 'preview':536,616,619 'print':316 'prioriti':81,166,365,372 'pro':522,535,591,595,615,618 'pro-preview':534,614 'proceed':321,341 'profil':581,584,639,665,671,677,752,755 'profile-dir':580,664 'project':380 'prompt':23,72,415,420,422,433,456,465,507,509,513,700 'prompt-bas':699 'promptfil':443,511 'proxi':401,765,767,768 'purpos':249 'question':135,143,149,158 'read':512 'ref':544 'refer':24,59,170,247,450,459,468,543,545 'refresh':569,644,721 'rememb':480 'replac':234 'repli':128 'request':45,100 'requir':268 'resolv':215 'reus':646,683,692 'revers':12,277 'reverse-engin':11,276 'rout':624 'rule':80 'run':627,650 'runtim':97,180,218 'save':562 'scope':374 'script':181,185,190,209,246,248 'scripts/gemini-webapi':257 'scripts/main.ts':250 'section':803 'see':801 'select':79 'session':484,494,551,560,563,654,682,691,776,777,784 'session-abc':483,493 'sessionid':482,492,550 'set':402,642,663,772 'show':326 'singl':152,157 'single-quest':156 'skill':37,71,194,293,378 'skill-baoyu-danger-gemini-web' 'skill.md':201 'skip':679 'source-jimliu' 'standard':658 'state':791 'stop':348 'store':779 'subdirectori':191 'substitut':174 'suggest':230 'support':17,58,141,398,710,796,807 'support/baoyu-skills/gemini-web/consent.json':286 'system.md':444 'text':9,18,121,408,510 'text/image':52,255 'think':531,607,611 'tie':655 'time':164 'timestamp':340,794 'tool':68,78,91,114,140 'tool-select':77 'topic-agent-skills' 'topic-claude-skills' 'topic-codex-skills' 'topic-openclaw-skills' 'true':307,356 'ts':213 'turn':32,64,474,556 'type':264 'typescript':258 'usag':280,406 'use':34,271,395 'user':44,66,74,89,101,105,126,273,329,390,660 'user-data':659 'user-input':88 'util':265 'valid':313 'valu':245 'var':731 'variabl':733,734 'variat':467 'verifi':272 'version':353 'via':10,54,330,799 'vision':27,448,548 'warn':317 'web':5,15,50,56,296,669,727,737,743,750,758 'webapi':262 'wi':48 'win':371 'window':289 'x':217,239,411,417,430,440,453,462,477,487,499 'xdg':382,387 'y':227 'yes':332","prices":[{"id":"be695967-bf33-4755-95ef-9c7c01178176","listingId":"cc9cfd9c-5cdd-4301-a19b-fa71a63de956","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"JimLiu","category":"baoyu-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:53:27.236Z"}],"sources":[{"listingId":"cc9cfd9c-5cdd-4301-a19b-fa71a63de956","source":"github","sourceId":"JimLiu/baoyu-skills/baoyu-danger-gemini-web","sourceUrl":"https://github.com/JimLiu/baoyu-skills/tree/main/skills/baoyu-danger-gemini-web","isPrimary":false,"firstSeenAt":"2026-04-18T21:53:27.236Z","lastSeenAt":"2026-05-03T00:52:27.027Z"}],"details":{"listingId":"cc9cfd9c-5cdd-4301-a19b-fa71a63de956","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"JimLiu","slug":"baoyu-danger-gemini-web","github":{"repo":"JimLiu/baoyu-skills","stars":16958,"topics":["agent-skills","claude-skills","codex-skills","openclaw-skills"],"license":null,"html_url":"https://github.com/JimLiu/baoyu-skills","pushed_at":"2026-04-25T20:03:31Z","description":null,"skill_md_sha":"a3950a95903ebd348d821255ffc069f3fbe5147f","skill_md_path":"skills/baoyu-danger-gemini-web/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/JimLiu/baoyu-skills/tree/main/skills/baoyu-danger-gemini-web"},"layout":"multi","source":"github","category":"baoyu-skills","frontmatter":{"name":"baoyu-danger-gemini-web","description":"Generates images and text via reverse-engineered Gemini Web API. 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."},"skills_sh_url":"https://skills.sh/JimLiu/baoyu-skills/baoyu-danger-gemini-web"},"updatedAt":"2026-05-03T00:52:27.027Z"}}