{"id":"baoyu-danger-gemini-web","name":"baoyu-danger-gemini-web","summary":"リバースエンジニアリングされたGemini Web APIを通じて画像とテキストを生成します。テキスト生成、プロンプトからの画像生成、視覚入力用の参照画像、複数ターンの会話をサポートします。","body":"# 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.","author":"@JimLiu","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/JimLiu/baoyu-skills/tree/main/skills/baoyu-danger-gemini-web","license":"MIT","category":"document","lang":"en","tokens":1559,"stars":0,"calls30d":1,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"scripts/bun.lock","size":389,"sha256":"a6caeebcc9a084661f67919a63818624717ec3936c889957b6b0fa23cb32576f"},{"path":"scripts/gemini-webapi/client.test.ts","size":1046,"sha256":"fe2f4b219eada014785ec7c9d1bc7464b064ad98ccab84cd6063d000a7ed280a"},{"path":"scripts/gemini-webapi/client.ts","size":23762,"sha256":"6e60082c129fa83f3d1ad48140df78e516a965ad90eb06fdc4145c31e6605fab"},{"path":"scripts/gemini-webapi/components/gem-mixin.ts","size":5704,"sha256":"05ac26ebefa5bc11c50a8130b60a582b9ec0a590c2b4c9292ddc954f6ce67e46"},{"path":"scripts/gemini-webapi/components/index.ts","size":44,"sha256":"c27a56c1bf3e56f37565d234335e58b4e0f3994d1449565d7613637e56974ea5"},{"path":"scripts/gemini-webapi/constants.ts","size":3936,"sha256":"80e477084239eb5f6d03dfe69834e6fa3f8e375be1d4583480eeb602bef15789"},{"path":"scripts/gemini-webapi/exceptions.ts","size":1207,"sha256":"60d953e1fb679cb4e9b1476e5ea779a0d0a1a429592af6da444c3ac555112e7b"},{"path":"scripts/gemini-webapi/index.ts","size":273,"sha256":"d4d98cc84d2f5f30ec7f0f7f164f556efc494da70d6b9ac03353963770aff258"},{"path":"scripts/gemini-webapi/types/candidate.ts","size":1293,"sha256":"00709a27654666a1459d6f930c163df545450c702949dc82b2a29b6a96436031"},{"path":"scripts/gemini-webapi/types/gem.ts","size":1847,"sha256":"0abacc4a7eb041a56d5648da2c68ab18b08a5dea576bfb6085dfda6a447af4c1"},{"path":"scripts/gemini-webapi/types/grpc.ts","size":369,"sha256":"e9163eb10b237b4809415db58350535024d5609e42e5a8b66b0ec19f4982acab"},{"path":"scripts/gemini-webapi/types/image.ts","size":3466,"sha256":"9db2ceb9b6c267ab9af70cde4783a676ec87630fdc82cc58279bb23b123cd232"},{"path":"scripts/gemini-webapi/types/index.ts","size":232,"sha256":"6ca258f8b81c845181e073fb3b3ede176eaaab3f565150370b38b24db16506f0"},{"path":"scripts/gemini-webapi/types/modeloutput.ts","size":816,"sha256":"a8d0253e25bee7560d54dfd818b8261a0498f8ae3b24118f94e21c3c89ad6c35"},{"path":"scripts/gemini-webapi/utils/cookie-file.ts","size":2402,"sha256":"27c04c01c43ec504a3b85411af127d6e3136b46fcd9da11d4fe1407646e13955"},{"path":"scripts/gemini-webapi/utils/decorators.ts","size":1100,"sha256":"c5a20949bc8de9a5b0547fb2c4b0873e0fedd493baa3ea56c80147c83d4ab69b"},{"path":"scripts/gemini-webapi/utils/get-access-token.ts","size":7540,"sha256":"696b8d8d20cbd222ca0df88762521292d992865fba73c55dff317dc7f9deae78"},{"path":"scripts/gemini-webapi/utils/http.ts","size":1621,"sha256":"f3d553bf69db90bc34a436a1ffe2cba10edb4b1b1f97a382a008e649ae7e6dfa"},{"path":"scripts/gemini-webapi/utils/index.ts","size":1021,"sha256":"80b1565881c518fee780fc5d5c5d7cb2ccba10cceddfb548fd4bcc58d7280844"},{"path":"scripts/gemini-webapi/utils/load-browser-cookies.ts","size":9860,"sha256":"e1f440f7def551b558198fb7dc9f11b6a1f163548885dfbc93c3ec470e192f3f"},{"path":"scripts/gemini-webapi/utils/logger.ts","size":1193,"sha256":"973a753fe08214b8ff469da9eb7cd12cb2c48941ab7fc2acb09adf8f5be3e037"},{"path":"scripts/gemini-webapi/utils/parsing.ts","size":1353,"sha256":"a57b50b92c56435c392f8151784154337039865272ad20f74d54eda996066d7b"},{"path":"scripts/gemini-webapi/utils/paths.ts","size":2384,"sha256":"d5ee69cdd8456ab97270429a2656f806993d235613a2ddd40466e893023464f2"},{"path":"scripts/gemini-webapi/utils/rotate-1psidts.ts","size":1528,"sha256":"11bdc8b5e53ffd714bb9920b22bee813d6ff11a7de1dc5f0a227a5be1ce510f1"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[{"code":"net.endpoints","kind":"exfiltration","excerpt":"accounts.google.com, content-push.googleapis.com, gemini.google.com, lh3.googleusercontent.com, www.google.com","message":"bundled scripts reach 5 external host(s)","severity":"warn"}],"scannedAt":"2026-08-22","hasScripts":true,"networkEndpoints":["accounts.google.com","content-push.googleapis.com","gemini.google.com","lh3.googleusercontent.com","www.google.com"]}}