{"id":"1f143cb4-cee5-4f9d-b1a8-7ba480e19491","entityType":"agent","slug":"clawhub-runapi-ai-runapi-gemini","name":"gemini","canonicalUrl":"https://www.xpersona.co/agent/clawhub-runapi-ai-runapi-gemini","canonicalPath":"/agent/clawhub-runapi-ai-runapi-gemini","generatedAt":"2026-10-10T07:38:35.112Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T02:05:01.783Z","emptyReason":null},"description":"Call Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients. Use for Gemini chat, streaming, multimodal input, grounding, structured output, reasoning, or an existing compatibility client that needs the conditional reference.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.8K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s1771k6pjxksnjws51x2htfjvd876syh:runapi-gemini","sourceUrl":"https://clawhub.ai/runapi-ai/runapi-gemini","homepage":"https://clawhub.ai/runapi-ai/skills/runapi-gemini","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/runapi-ai/runapi-gemini","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/runapi-ai/skills/runapi-gemini","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":65,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"gemini technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T02:05:01.783Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T02:05:01.783Z","emptyReason":null},"stars":null,"forks":null,"downloads":1786,"packageName":null,"latestVersion":"0.2.16","tractionLabel":"1.8K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T02:05:01.782Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T02:05:01.783Z","lastCrawledAt":"2026-10-10T02:05:01.782Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T02:05:01.782Z","lastVerifiedAt":null,"highlights":[{"version":"0.2.16","createdAt":"2026-09-30T12:16:45.442Z","changelog":"## Added - List gemini-3.5-flash-lite for text requests through Chat Completions and native Gemini content generation. - Gemini 3.8 Flash (gemini-3.8-flash) is now listed as an available text-only Gemini model with function calling.","fileCount":4,"zipByteSize":3407},{"version":"0.2.15","createdAt":"2026-08-21T07:00:38.818Z","changelog":"## Added - Document Gemini 3.7 Flash native streaming and OpenAI-compatible streaming with terminal usage verification.","fileCount":4,"zipByteSize":3355},{"version":"0.2.14","createdAt":"2026-08-12T06:31:14.269Z","changelog":"## Changed - Document Gemini authentication, request, result verification, and stop boundaries in the primary recipe, with compatibility protocols loaded only when required.","fileCount":4,"zipByteSize":3376},{"version":"0.2.13","createdAt":"2026-08-10T14:14:01.187Z","changelog":"## Changed - Complete marketplace distribution for the RunAPI Gemini skill.","fileCount":3,"zipByteSize":4078},{"version":"0.2.12","createdAt":"2026-08-04T16:29:31.628Z","changelog":"## Added - Document gemini-3.6-flash for OpenAI-compatible Chat and Gemini native content streaming.","fileCount":3,"zipByteSize":3974},{"version":"0.2.11","createdAt":"2026-07-22T22:57:04.197Z","changelog":"## Removed - Remove `gemini-3-pro-preview` from the supported Gemini model list. Migration: Choose another currently supported model ID; no replacement alias is provided.","fileCount":3,"zipByteSize":3926},{"version":"0.2.10","createdAt":"2026-07-08T04:42:21.894Z","changelog":"## Changed - Publish the Gemini skill v0.2.10 release with refreshed RunAPI routing metadata.","fileCount":3,"zipByteSize":3962},{"version":"0.2.9","createdAt":"2026-07-02T09:23:35.377Z","changelog":"## Changed - Supported models table simplified to model + capabilities; protocol support (OpenAI-compatible + Gemini contents) is described in the request-styles section.","fileCount":3,"zipByteSize":3978}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1771k6pjxksnjws51x2htfjvd876syh:runapi-gemini","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s1771k6pjxksnjws51x2htfjvd876syh:runapi-gemini` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/runapi-ai/runapi-gemini before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T07:38:35.111Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-runapi-ai-runapi-gemini/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T02:05:01.783Z","emptyReason":null},"readme":"Skill: gemini\n\nOwner: runapi-ai\n\nSummary: Call Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients. Use for Gemini chat, streaming, multimodal input, grounding, structured output, reasoning, or an existing compatibility client that needs the conditional reference.\n\nTags: latest:0.2.16\n\nVersion history:\n\nv0.2.16 | 2026-09-30T12:16:45.442Z | user\n\n## Added\n- List gemini-3.5-flash-lite for text requests through Chat Completions and native Gemini content generation.\n- Gemini 3.8 Flash (gemini-3.8-flash) is now listed as an available text-only Gemini model with function calling.\n\nv0.2.15 | 2026-08-21T07:00:38.818Z | user\n\n## Added\n- Document Gemini 3.7 Flash native streaming and OpenAI-compatible streaming with terminal usage verification.\n\nv0.2.14 | 2026-08-12T06:31:14.269Z | user\n\n## Changed\n- Document Gemini authentication, request, result verification, and stop boundaries in the primary recipe, with compatibility protocols loaded only when required.\n\nv0.2.13 | 2026-08-10T14:14:01.187Z | user\n\n## Changed\n- Complete marketplace distribution for the RunAPI Gemini skill.\n\nv0.2.12 | 2026-08-04T16:29:31.628Z | user\n\n## Added\n- Document gemini-3.6-flash for OpenAI-compatible Chat and Gemini native content streaming.\n\nv0.2.11 | 2026-07-22T22:57:04.197Z | user\n\n## Removed\n- Remove `gemini-3-pro-preview` from the supported Gemini model list.\n  Migration: Choose another currently supported model ID; no replacement alias is provided.\n\nv0.2.10 | 2026-07-08T04:42:21.894Z | user\n\n## Changed\n- Publish the Gemini skill v0.2.10 release with refreshed RunAPI routing metadata.\n\nv0.2.9 | 2026-07-02T09:23:35.377Z | user\n\n## Changed\n- Supported models table simplified to model + capabilities; protocol support (OpenAI-compatible + Gemini contents) is described in the request-styles section.\n\nv0.2.8 | 2026-07-02T08:42:31.549Z | user\n\n## Changed\n- Supported models table is now generated from the RunAPI catalog.\n- Corrected `gemini-3.5-flash` Chat Completions support and refreshed model ordering.\n\nv0.2.7 | 2026-06-24T09:36:03.807Z | user\n\n## Changed\n- Clarify Gemini contents support and native versus bridged streaming behavior.\n\nv0.2.4 | 2026-05-23T18:39:05.599Z | user\n\nAgent-facing CLI-first redesign\n\nArchive index:\n\nArchive v0.2.16: 4 files, 3407 bytes\n\nFiles: references/compatibility-protocols.md (724b), skill-card.md (1898b), SKILL.md (3283b), _meta.json (133b)\n\nFile v0.2.16:SKILL.md\n\n---\nname: gemini\ndescription: Call Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients. Use for Gemini chat, streaming, multimodal input, grounding, structured output, reasoning, or an existing compatibility client that needs the conditional reference.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: GEMINI_API_KEY\n    requires:\n      env: [GEMINI_API_KEY, GEMINI_BASE_URL]\n    envVars:\n    - {name: GEMINI_API_KEY, required: true, description: RunAPI API key used by Gemini contents clients.}\n    - {name: GEMINI_BASE_URL, required: true, description: Set to https://runapi.ai for Gemini on RunAPI.}\n---\n\n# Gemini on RunAPI\n\nUse Gemini contents at `https://runapi.ai` with `generateContent` or\n`streamGenerateContent` as the primary protocol.\n\n## Primary protocol recipe\n\n### Authenticate\n\nSet `GEMINI_API_KEY` to a RunAPI API key and the Gemini client base URL to\n`https://runapi.ai`. Raw requests send the key with `x-goog-api-key`.\n\n### Send request\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3.7-flash:streamGenerateContent\" \\\n  -H \"x-goog-api-key: $GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"contents\":[{\"role\":\"user\",\"parts\":[{\"text\":\"Summarize this review.\"}]}]}'\n```\n\nUse `generateContent` only when the selected model supports synchronous output;\n`gemini-3.7-flash` accepts only `streamGenerateContent`. For this model, native\ntools are limited to `functionDeclarations` and the `googleSearch` tool with an\nempty object payload;\nnative thinking is limited to `generationConfig.thinkingConfig.includeThoughts`\nand `thinkingLevel` of `low` or `high`.\n\n### Verify result\n\nRequire candidate content, terminal `finishReason`, and `usageMetadata`. A\nstream is complete only after the terminal candidate and Usage; an HTTP 2xx\nwithout both is incomplete.\n\n### Stop boundaries\n\nCorrect a rejected shape once using the structured error. Retry transport once\nonly before any candidate or Usage and when replay is safe. Record a terminal\nerror and stop without changing model or protocol.\n\n## Compatibility protocols\n\nLoad [compatibility protocols](references/compatibility-protocols.md) only when an existing client requires OpenAI-compatible Chat Completions.\n\n## Supported models\n\n| Model ID | Use when |\n|---|---|\n| `gemini-3.8-flash` | Fast text-only chat and function calling; image, audio, and file input are rejected |\n| `gemini-3.7-flash` | Fast streaming chat; use native tools/search grounding only with Gemini contents |\n| `gemini-3.6-flash` | Fast current-generation multimodal requests |\n| `gemini-3.5-flash` | Fast multimodal and function-calling requests |\n| `gemini-3.5-flash-lite` | Lightweight text generation with native Gemini streaming |\n| `gemini-3.1-pro-preview` | Complex multimodal and reasoning requests |\n| `gemini-3-flash-preview` | Preview flash workloads |\n| `gemini-2.5-pro` | Stable high-quality multimodal requests |\n| `gemini-2.5-flash` | Stable fast multimodal requests |\n\n## References\n\n- <https://runapi.ai/models/gemini.md>\n- <https://runapi.ai/providers/google.md>\n- <https://runapi.ai/models.md>\n\nFile v0.2.16:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.16\",\n  \"publishedAt\": 1790770605442\n}\n\nFile v0.2.16:references/compatibility-protocols.md\n\n# Gemini compatibility protocol\n\nLoad this reference only when an existing application already requires an\nOpenAI-compatible Chat Completions client. New Gemini integrations use Gemini\ncontents from the main skill.\n\nSet `OPENAI_API_KEY` to a RunAPI key and the OpenAI client base URL to\n`https://runapi.ai/v1`. Call `client.chat.completions.create` with a supported\nexact Gemini model ID and messages. For streaming, set `stream=True` and request\nterminal Usage with `stream_options.include_usage`.\n\nVerify final assistant content, `finish_reason`, terminal `usage`, and `[DONE]`\nfor SSE. Apply one evidence-backed shape correction, at most one safe\npre-response transport retry, and no automatic model or protocol hopping.\n\nFile v0.2.16:skill-card.md\n\n## Description:\n\nGuides agents in calling Gemini models through RunAPI using Gemini contents clients, with compatibility guidance for existing Chat Completions clients.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to configure RunAPI credentials, send Gemini requests, and check streaming responses. Existing Chat Completions clients can follow its separate compatibility guidance.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prompts and related request content are sent to RunAPI.\n\nMitigation: Use the skill only when this disclosure is acceptable, and review request content before sending it.\n\nRisk: The RunAPI API key is sensitive.\n\nMitigation: Keep the key in the configured environment variable and avoid exposing it in shared requests or logs.\n\n## Reference(s):\n\n- [Gemini on RunAPI documentation](https://runapi.ai/models/gemini.md)\n- [RunAPI Gemini homepage](https://runapi.ai/models/gemini)\n- [RunAPI Google provider](https://runapi.ai/providers/google.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n- [Compatibility protocols](references/compatibility-protocols.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration instructions]\n\n**Output Format:** [Markdown with shell and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Covers response-completion checks and bounded retry guidance.]\n\n## Skill Version(s):\n\n0.2.16 (source: ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.2.15: 4 files, 3355 bytes\n\nFiles: references/compatibility-protocols.md (724b), skill-card.md (1950b), SKILL.md (3087b), _meta.json (133b)\n\nFile v0.2.15:SKILL.md\n\n---\nname: gemini\ndescription: Call Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients. Use for Gemini chat, streaming, multimodal input, grounding, structured output, reasoning, or an existing compatibility client that needs the conditional reference.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: GEMINI_API_KEY\n    requires:\n      env: [GEMINI_API_KEY, GEMINI_BASE_URL]\n    envVars:\n    - {name: GEMINI_API_KEY, required: true, description: RunAPI API key used by Gemini contents clients.}\n    - {name: GEMINI_BASE_URL, required: true, description: Set to https://runapi.ai for Gemini on RunAPI.}\n---\n\n# Gemini on RunAPI\n\nUse Gemini contents at `https://runapi.ai` with `generateContent` or\n`streamGenerateContent` as the primary protocol.\n\n## Primary protocol recipe\n\n### Authenticate\n\nSet `GEMINI_API_KEY` to a RunAPI API key and the Gemini client base URL to\n`https://runapi.ai`. Raw requests send the key with `x-goog-api-key`.\n\n### Send request\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3.7-flash:streamGenerateContent\" \\\n  -H \"x-goog-api-key: $GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"contents\":[{\"role\":\"user\",\"parts\":[{\"text\":\"Summarize this review.\"}]}]}'\n```\n\nUse `generateContent` only when the selected model supports synchronous output;\n`gemini-3.7-flash` accepts only `streamGenerateContent`. For this model, native\ntools are limited to `functionDeclarations` and the `googleSearch` tool with an\nempty object payload;\nnative thinking is limited to `generationConfig.thinkingConfig.includeThoughts`\nand `thinkingLevel` of `low` or `high`.\n\n### Verify result\n\nRequire candidate content, terminal `finishReason`, and `usageMetadata`. A\nstream is complete only after the terminal candidate and Usage; an HTTP 2xx\nwithout both is incomplete.\n\n### Stop boundaries\n\nCorrect a rejected shape once using the structured error. Retry transport once\nonly before any candidate or Usage and when replay is safe. Record a terminal\nerror and stop without changing model or protocol.\n\n## Compatibility protocols\n\nLoad [compatibility protocols](references/compatibility-protocols.md) only when an existing client requires OpenAI-compatible Chat Completions.\n\n## Supported models\n\n| Model ID | Use when |\n|---|---|\n| `gemini-3.7-flash` | Fast streaming chat; use native tools/search grounding only with Gemini contents |\n| `gemini-3.6-flash` | Fast current-generation multimodal requests |\n| `gemini-3.5-flash` | Fast multimodal and function-calling requests |\n| `gemini-3.1-pro-preview` | Complex multimodal and reasoning requests |\n| `gemini-3-flash-preview` | Preview flash workloads |\n| `gemini-2.5-pro` | Stable high-quality multimodal requests |\n| `gemini-2.5-flash` | Stable fast multimodal requests |\n\n## References\n\n- <https://runapi.ai/models/gemini.md>\n- <https://runapi.ai/providers/google.md>\n- <https://runapi.ai/models.md>\n\nFile v0.2.15:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.15\",\n  \"publishedAt\": 1787295638818\n}\n\nFile v0.2.15:references/compatibility-protocols.md\n\n# Gemini compatibility protocol\n\nLoad this reference only when an existing application already requires an\nOpenAI-compatible Chat Completions client. New Gemini integrations use Gemini\ncontents from the main skill.\n\nSet `OPENAI_API_KEY` to a RunAPI key and the OpenAI client base URL to\n`https://runapi.ai/v1`. Call `client.chat.completions.create` with a supported\nexact Gemini model ID and messages. For streaming, set `stream=True` and request\nterminal Usage with `stream_options.include_usage`.\n\nVerify final assistant content, `finish_reason`, terminal `usage`, and `[DONE]`\nfor SSE. Apply one evidence-backed shape correction, at most one safe\npre-response transport retry, and no automatic model or protocol hopping.\n\nFile v0.2.15:skill-card.md\n\n## Description:\n\nCall Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to call Gemini models through RunAPI for chat, streaming, multimodal input, grounding, structured output, and reasoning workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Gemini requests, attached content, and the configured RunAPI key are sent to RunAPI.\n\nMitigation: Use a dedicated RunAPI key and avoid sending sensitive data unless sharing it with RunAPI is acceptable.\n\nRisk: Streaming responses can be incomplete if terminal content and usage metadata are not verified.\n\nMitigation: Require candidate content, terminal finish status, and usage metadata before treating a streamed response as complete.\n\n## Reference(s):\n\n- [Gemini on RunAPI documentation](https://runapi.ai/models/gemini.md)\n- [RunAPI Google provider documentation](https://runapi.ai/providers/google.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n- [RunAPI Gemini model page](https://runapi.ai/models/gemini)\n- [Gemini compatibility protocol](references/compatibility-protocols.md)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, code]\n\n**Output Format:** [Markdown with inline bash and API request examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a RunAPI key and base URL configuration for Gemini requests.]\n\n## Skill Version(s):\n\n0.2.15 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.2.14: 4 files, 3376 bytes\n\nFiles: references/compatibility-protocols.md (724b), skill-card.md (2264b), SKILL.md (2859b), _meta.json (133b)\n\nFile v0.2.14:SKILL.md\n\n---\nname: gemini\ndescription: Call Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients. Use for Gemini chat, streaming, multimodal input, grounding, structured output, reasoning, or an existing compatibility client that needs the conditional reference.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: GEMINI_API_KEY\n    requires:\n      env: [GEMINI_API_KEY, GEMINI_BASE_URL]\n    envVars:\n    - {name: GEMINI_API_KEY, required: true, description: RunAPI API key used by Gemini contents clients.}\n    - {name: GEMINI_BASE_URL, required: true, description: Set to https://runapi.ai for Gemini on RunAPI.}\n---\n\n# Gemini on RunAPI\n\nUse Gemini contents at `https://runapi.ai` with `generateContent` or\n`streamGenerateContent` as the primary protocol.\n\n## Primary protocol recipe\n\n### Authenticate\n\nSet `GEMINI_API_KEY` to a RunAPI API key and the Gemini client base URL to\n`https://runapi.ai`. Raw requests send the key with `x-goog-api-key`.\n\n### Send request\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3.6-flash:streamGenerateContent\" \\\n  -H \"x-goog-api-key: $GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"contents\":[{\"role\":\"user\",\"parts\":[{\"text\":\"Summarize this review.\"}]}]}'\n```\n\nUse `generateContent` for a synchronous response and `streamGenerateContent`\nfor long output. Add inline media, function declarations, grounding, structured\noutput, or reasoning only when the current RunAPI contract verifies the exact\nmodel and request shape.\n\n### Verify result\n\nRequire candidate content, terminal `finishReason`, and `usageMetadata`. A\nstream is complete only after the terminal candidate and Usage; an HTTP 2xx\nwithout both is incomplete.\n\n### Stop boundaries\n\nCorrect a rejected shape once using the structured error. Retry transport once\nonly before any candidate or Usage and when replay is safe. Record a terminal\nerror and stop without changing model or protocol.\n\n## Compatibility protocols\n\nLoad [compatibility protocols](references/compatibility-protocols.md) only when an existing client requires OpenAI-compatible Chat Completions.\n\n## Supported models\n\n| Model ID | Use when |\n|---|---|\n| `gemini-3.6-flash` | Fast current-generation multimodal requests |\n| `gemini-3.5-flash` | Fast multimodal and function-calling requests |\n| `gemini-3.1-pro-preview` | Complex multimodal and reasoning requests |\n| `gemini-3-flash-preview` | Preview flash workloads |\n| `gemini-2.5-pro` | Stable high-quality multimodal requests |\n| `gemini-2.5-flash` | Stable fast multimodal requests |\n\n## References\n\n- <https://runapi.ai/models/gemini.md>\n- <https://runapi.ai/providers/google.md>\n- <https://runapi.ai/models.md>\n\nFile v0.2.14:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.14\",\n  \"publishedAt\": 1786516274269\n}\n\nFile v0.2.14:references/compatibility-protocols.md\n\n# Gemini compatibility protocol\n\nLoad this reference only when an existing application already requires an\nOpenAI-compatible Chat Completions client. New Gemini integrations use Gemini\ncontents from the main skill.\n\nSet `OPENAI_API_KEY` to a RunAPI key and the OpenAI client base URL to\n`https://runapi.ai/v1`. Call `client.chat.completions.create` with a supported\nexact Gemini model ID and messages. For streaming, set `stream=True` and request\nterminal Usage with `stream_options.include_usage`.\n\nVerify final assistant content, `finish_reason`, terminal `usage`, and `[DONE]`\nfor SSE. Apply one evidence-backed shape correction, at most one safe\npre-response transport retry, and no automatic model or protocol hopping.\n\nFile v0.2.14:skill-card.md\n\n## Description:\n\nCall Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients for chat, streaming, multimodal input, grounding, structured output, reasoning, and compatible clients.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to configure Gemini contents clients against RunAPI, send synchronous or streaming requests, verify terminal responses, and use OpenAI-compatible chat completions only when an existing client requires that protocol.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Gemini requests and submitted content are routed through RunAPI.\n\nMitigation: Install and use the skill only when this routing is acceptable for the intended data and workflow.\n\nRisk: Incorrect environment variable use could expose credentials or route requests to an unintended endpoint.\n\nMitigation: Set only the documented API-key and base-URL environment variables for this purpose.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/runapi-ai/skills/runapi-gemini)\n- [RunAPI Gemini model documentation](https://runapi.ai/models/gemini.md)\n- [RunAPI Google provider documentation](https://runapi.ai/providers/google.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n- [Gemini compatibility protocol](references/compatibility-protocols.md)\n- [RunAPI Gemini homepage](https://runapi.ai/models/gemini)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration, API Calls]\n\n**Output Format:** [Markdown with inline bash commands and configuration guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires GEMINI_API_KEY and GEMINI_BASE_URL for Gemini contents clients; compatibility mode may use OPENAI_API_KEY for existing OpenAI-compatible clients.]\n\n## Skill Version(s):\n\n0.2.14 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.2.13: 3 files, 4078 bytes\n\nFiles: skill-card.md (2488b), SKILL.md (7236b), _meta.json (133b)\n\nFile v0.2.13:SKILL.md\n\n---\nname: gemini\ndescription: Call the Gemini API (the Gemini 2.5 and 3 series) through RunAPI using the official OpenAI SDK or Gemini contents clients. Use when the user asks for Gemini chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, or to point an existing OpenAI or Gemini client at RunAPI as the base URL.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: RUNAPI_TOKEN\n    requires:\n      env:\n      - RUNAPI_TOKEN\n    envVars:\n    - name: RUNAPI_TOKEN\n      required: true\n      description: RunAPI API key used for Gemini requests.\n    - name: GOOGLE_API_KEY\n      required: false\n      description: Optional alias when using Gemini contents streaming examples.\n    - name: GOOGLE_GENAI_BASE_URL\n      required: false\n      description: Optional Gemini client base URL override for RunAPI.\n---\n\n# Gemini on RunAPI\n\nGemini on RunAPI exposes **two request styles**:\n\n| Request style | Endpoint | Use when |\n|---|---|---|\n| OpenAI-compatible | `POST /v1/chat/completions` | You already use the OpenAI SDK or any OpenAI client |\n| Gemini contents | `POST /v1beta/models/<model>:generateContent` or `:streamGenerateContent` | You use a Gemini SDK/client with `contents` requests |\n\nBoth accept the same RunAPI API Key.\n\n## Setup\n\n```dotenv\nRUNAPI_TOKEN=YOUR_RUNAPI_TOKEN\n```\n\nGet a RunAPI API Key at <https://runapi.ai/api_keys>.\n\n### OpenAI-compatible setup\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"YOUR_RUNAPI_TOKEN\",\n    base_url=\"https://runapi.ai/v1\",\n)\n```\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: \"YOUR_RUNAPI_TOKEN\",\n  baseURL: \"https://runapi.ai/v1\",\n});\n```\n\n### Gemini contents setup\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\n```\n\n## Core recipe — OpenAI-compatible\n\n```python\nresponse = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}],\n    reasoning_effort=\"high\",\n)\nprint(response.choices[0].message.content)\nprint(response.usage)\n```\n\n```typescript\nconst response = await client.chat.completions.create({\n  model: \"gemini-2.5-flash\",\n  messages: [{ role: \"user\", content: \"Explain quantum computing simply.\" }],\n});\n```\n\n```bash\ncurl -X POST \"https://runapi.ai/v1/chat/completions\" \\\n  -H \"x-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"gemini-2.5-flash\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}]\n  }'\n```\n\n## Core recipe — Gemini contents\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent\" \\\n  -H \"x-goog-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"contents\": [\n      { \"role\": \"user\", \"parts\": [{ \"text\": \"Hello!\" }] }\n    ]\n  }'\n```\n\nFor `gemini-3.6-flash`, `gemini-3.5-flash`, and `gemini-3-flash-preview`, RunAPI\nuses the native Gemini `streamGenerateContent` route. For other callable Gemini\nmodels, RunAPI accepts Gemini `contents` requests and bridges them to the\nOpenAI-compatible chat request format. Use the official Gemini SDKs when an\nexisting application already sends `contents` requests; for new app code,\nprefer the OpenAI-compatible setup.\n\n## Streaming (OpenAI-compatible)\n\n```python\nstream = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Write a haiku about coding.\"}],\n    stream=True,\n)\nfor chunk in stream:\n    delta = chunk.choices[0].delta.content\n    if delta:\n        print(delta, end=\"\", flush=True)\n```\n\nStreaming runs through a regional edge proxy so the request does not hold a\nRails/Puma thread. Long generations should always stream.\n\n## Vision / multimodal\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        { \"type\": \"text\", \"text\": \"What is in this image?\" },\n        { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://runapi.ai/img.jpg\" } }\n      ]\n    }\n  ]\n}\n```\n\nStandard OpenAI multimodal block for the OpenAI-compatible endpoint. For the\n`contents` streaming endpoint, embed image data as `parts[].inlineData` or\n`parts[].fileData`.\n\n## Google Search grounding\n\n```json\n{\n  \"model\": \"gemini-2.5-pro\",\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"Latest news on Gemini 3.\" }\n  ],\n  \"tools\": [\n    { \"type\": \"function\", \"function\": { \"name\": \"googleSearch\" } }\n  ]\n}\n```\n\nAvailable on `gemini-2.5-flash`, `gemini-2.5-pro`, and `gemini-3.1-pro-preview`.\n\n## Structured output\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"Give me one person object.\" }],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"person\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": { \"name\": { \"type\": \"string\" }, \"age\": { \"type\": \"integer\" } },\n        \"required\": [\"name\", \"age\"]\n      }\n    }\n  }\n}\n```\n\n## Reasoning effort\n\nSupported on `gemini-2.5-pro`, `gemini-3.1-pro-preview`, and\n`gemini-3-flash-preview` — pass `reasoning_effort: \"low\" | \"medium\" | \"high\"`.\n\n## List models\n\n```bash\ncurl https://runapi.ai/v1beta/models -H \"x-api-key: YOUR_RUNAPI_TOKEN\"\n```\n\nOr via the OpenAI-style path:\n\n```bash\ncurl https://runapi.ai/v1/models \\\n  -H \"Authorization: Bearer YOUR_RUNAPI_TOKEN\"\n```\n\n## Supported models\n\n| Model ID | Capabilities |\n|---|---|\n| `gemini-3.6-flash` | Streaming `contents` and OpenAI-compatible chat, multimodal, function calling |\n| `gemini-3.5-flash` | Streaming `contents` requests, multimodal, function calling, thoughts |\n| `gemini-3.1-pro-preview` | Chat, multimodal, structured output, reasoning effort |\n| `gemini-3-flash-preview` | Chat, multimodal, function calling, structured output, reasoning effort |\n| `gemini-2.5-pro` | Chat, multimodal, Google Search, structured output, reasoning effort |\n| `gemini-2.5-flash` | Chat, multimodal, Google Search, structured output, thoughts |\n\n`gemini-flash-latest` resolves to `gemini-3-flash-preview`.\n\n## Connect Gemini CLI itself\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\ngemini\n```\n\n## Agent rules\n\n- Use the OpenAI-compatible endpoint for new app code. Use Gemini `contents`\n  paths when an existing client already sends `contents` requests.\n- Native Gemini streaming is available for `gemini-3.6-flash`,\n  `gemini-3.5-flash`, and `gemini-3-flash-preview`; other callable Gemini models\n  accept `contents` requests through a RunAPI protocol bridge.\n- Use streaming for any response longer than a few hundred tokens. Do not\n  hold the agent on a long blocking request.\n- Google Search grounding uses a `googleSearch` function tool.\n- Pricing, rate limits, quotas — link to <https://runapi.ai/models/gemini.md>,\n  not this skill file.\n\n## Routing\n\n- Model page: <https://runapi.ai/models/gemini.md>\n- Provider page: <https://runapi.ai/providers/google.md>\n- Catalog: <https://runapi.ai/models.md>\n\nFile v0.2.13:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.13\",\n  \"publishedAt\": 1786371241187\n}\n\nFile v0.2.13:skill-card.md\n\n## Description:\n\nCall the Gemini API through RunAPI using OpenAI-compatible clients or Gemini contents clients for chat, streaming completions, multimodal vision input, Google Search grounding, structured output, and reasoning-effort workflows.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to configure Gemini requests through RunAPI, including OpenAI-compatible chat completions and native Gemini contents routes. It is intended for building or adapting applications that need Gemini text, streaming, multimodal, grounding, structured-output, or reasoning examples through a RunAPI key.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prompts, images, request payloads, and API credentials may be sent to RunAPI and Gemini when following this skill.\n\nMitigation: Use the skill only with an approved provider path, keep RUNAPI_TOKEN secret, and avoid secrets, personal data, or regulated content unless organizational policy permits that use.\n\nRisk: The skill provides integration guidance and examples, so generated calls or model choices may need review before use in an application.\n\nMitigation: Review generated code and shell commands before execution, and verify current model availability, pricing, quotas, and rate limits against the linked RunAPI documentation.\n\n## Reference(s):\n\n- [RunAPI Gemini model page](https://runapi.ai/models/gemini)\n- [RunAPI Gemini documentation](https://runapi.ai/models/gemini.md)\n- [RunAPI Google provider page](https://runapi.ai/providers/google.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline code, JSON examples, and shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a RunAPI API key supplied through RUNAPI_TOKEN; optional Gemini-compatible environment aliases are GOOGLE_API_KEY and GOOGLE_GENAI_BASE_URL.]\n\n## Skill Version(s):\n\n0.2.13 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.2.12: 3 files, 3974 bytes\n\nFiles: skill-card.md (2227b), SKILL.md (7236b), _meta.json (133b)\n\nFile v0.2.12:SKILL.md\n\n---\nname: gemini\ndescription: Call the Gemini API (the Gemini 2.5 and 3 series) through RunAPI using the official OpenAI SDK or Gemini contents clients. Use when the user asks for Gemini chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, or to point an existing OpenAI or Gemini client at RunAPI as the base URL.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: RUNAPI_TOKEN\n    requires:\n      env:\n      - RUNAPI_TOKEN\n    envVars:\n    - name: RUNAPI_TOKEN\n      required: true\n      description: RunAPI API key used for Gemini requests.\n    - name: GOOGLE_API_KEY\n      required: false\n      description: Optional alias when using Gemini contents streaming examples.\n    - name: GOOGLE_GENAI_BASE_URL\n      required: false\n      description: Optional Gemini client base URL override for RunAPI.\n---\n\n# Gemini on RunAPI\n\nGemini on RunAPI exposes **two request styles**:\n\n| Request style | Endpoint | Use when |\n|---|---|---|\n| OpenAI-compatible | `POST /v1/chat/completions` | You already use the OpenAI SDK or any OpenAI client |\n| Gemini contents | `POST /v1beta/models/<model>:generateContent` or `:streamGenerateContent` | You use a Gemini SDK/client with `contents` requests |\n\nBoth accept the same RunAPI API Key.\n\n## Setup\n\n```dotenv\nRUNAPI_TOKEN=YOUR_RUNAPI_TOKEN\n```\n\nGet a RunAPI API Key at <https://runapi.ai/api_keys>.\n\n### OpenAI-compatible setup\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"YOUR_RUNAPI_TOKEN\",\n    base_url=\"https://runapi.ai/v1\",\n)\n```\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: \"YOUR_RUNAPI_TOKEN\",\n  baseURL: \"https://runapi.ai/v1\",\n});\n```\n\n### Gemini contents setup\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\n```\n\n## Core recipe — OpenAI-compatible\n\n```python\nresponse = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}],\n    reasoning_effort=\"high\",\n)\nprint(response.choices[0].message.content)\nprint(response.usage)\n```\n\n```typescript\nconst response = await client.chat.completions.create({\n  model: \"gemini-2.5-flash\",\n  messages: [{ role: \"user\", content: \"Explain quantum computing simply.\" }],\n});\n```\n\n```bash\ncurl -X POST \"https://runapi.ai/v1/chat/completions\" \\\n  -H \"x-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"gemini-2.5-flash\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}]\n  }'\n```\n\n## Core recipe — Gemini contents\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent\" \\\n  -H \"x-goog-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"contents\": [\n      { \"role\": \"user\", \"parts\": [{ \"text\": \"Hello!\" }] }\n    ]\n  }'\n```\n\nFor `gemini-3.6-flash`, `gemini-3.5-flash`, and `gemini-3-flash-preview`, RunAPI\nuses the native Gemini `streamGenerateContent` route. For other callable Gemini\nmodels, RunAPI accepts Gemini `contents` requests and bridges them to the\nOpenAI-compatible chat request format. Use the official Gemini SDKs when an\nexisting application already sends `contents` requests; for new app code,\nprefer the OpenAI-compatible setup.\n\n## Streaming (OpenAI-compatible)\n\n```python\nstream = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Write a haiku about coding.\"}],\n    stream=True,\n)\nfor chunk in stream:\n    delta = chunk.choices[0].delta.content\n    if delta:\n        print(delta, end=\"\", flush=True)\n```\n\nStreaming runs through a regional edge proxy so the request does not hold a\nRails/Puma thread. Long generations should always stream.\n\n## Vision / multimodal\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        { \"type\": \"text\", \"text\": \"What is in this image?\" },\n        { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://runapi.ai/img.jpg\" } }\n      ]\n    }\n  ]\n}\n```\n\nStandard OpenAI multimodal block for the OpenAI-compatible endpoint. For the\n`contents` streaming endpoint, embed image data as `parts[].inlineData` or\n`parts[].fileData`.\n\n## Google Search grounding\n\n```json\n{\n  \"model\": \"gemini-2.5-pro\",\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"Latest news on Gemini 3.\" }\n  ],\n  \"tools\": [\n    { \"type\": \"function\", \"function\": { \"name\": \"googleSearch\" } }\n  ]\n}\n```\n\nAvailable on `gemini-2.5-flash`, `gemini-2.5-pro`, and `gemini-3.1-pro-preview`.\n\n## Structured output\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"Give me one person object.\" }],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"person\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": { \"name\": { \"type\": \"string\" }, \"age\": { \"type\": \"integer\" } },\n        \"required\": [\"name\", \"age\"]\n      }\n    }\n  }\n}\n```\n\n## Reasoning effort\n\nSupported on `gemini-2.5-pro`, `gemini-3.1-pro-preview`, and\n`gemini-3-flash-preview` — pass `reasoning_effort: \"low\" | \"medium\" | \"high\"`.\n\n## List models\n\n```bash\ncurl https://runapi.ai/v1beta/models -H \"x-api-key: YOUR_RUNAPI_TOKEN\"\n```\n\nOr via the OpenAI-style path:\n\n```bash\ncurl https://runapi.ai/v1/models \\\n  -H \"Authorization: Bearer YOUR_RUNAPI_TOKEN\"\n```\n\n## Supported models\n\n| Model ID | Capabilities |\n|---|---|\n| `gemini-3.6-flash` | Streaming `contents` and OpenAI-compatible chat, multimodal, function calling |\n| `gemini-3.5-flash` | Streaming `contents` requests, multimodal, function calling, thoughts |\n| `gemini-3.1-pro-preview` | Chat, multimodal, structured output, reasoning effort |\n| `gemini-3-flash-preview` | Chat, multimodal, function calling, structured output, reasoning effort |\n| `gemini-2.5-pro` | Chat, multimodal, Google Search, structured output, reasoning effort |\n| `gemini-2.5-flash` | Chat, multimodal, Google Search, structured output, thoughts |\n\n`gemini-flash-latest` resolves to `gemini-3-flash-preview`.\n\n## Connect Gemini CLI itself\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\ngemini\n```\n\n## Agent rules\n\n- Use the OpenAI-compatible endpoint for new app code. Use Gemini `contents`\n  paths when an existing client already sends `contents` requests.\n- Native Gemini streaming is available for `gemini-3.6-flash`,\n  `gemini-3.5-flash`, and `gemini-3-flash-preview`; other callable Gemini models\n  accept `contents` requests through a RunAPI protocol bridge.\n- Use streaming for any response longer than a few hundred tokens. Do not\n  hold the agent on a long blocking request.\n- Google Search grounding uses a `googleSearch` function tool.\n- Pricing, rate limits, quotas — link to <https://runapi.ai/models/gemini.md>,\n  not this skill file.\n\n## Routing\n\n- Model page: <https://runapi.ai/models/gemini.md>\n- Provider page: <https://runapi.ai/providers/google.md>\n- Catalog: <https://runapi.ai/models.md>\n\nFile v0.2.12:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.12\",\n  \"publishedAt\": 1785860971628\n}\n\nFile v0.2.12:skill-card.md\n\n## Description:\n\nCall the Gemini API (the Gemini 2.5 and 3 series) through RunAPI using the official OpenAI SDK or Gemini contents clients.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to call Gemini models through RunAPI, including chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, and client configuration for OpenAI-compatible or Gemini contents APIs.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prompts, images, and other multimodal inputs are sent to RunAPI and may be routed to Gemini-related services.\n\nMitigation: Avoid sending secrets, private documents, or proprietary data unless that use is approved under the relevant provider agreements and data-handling requirements.\n\nRisk: The skill depends on a valid RunAPI API key for live API requests.\n\nMitigation: Store API keys in environment variables such as RUNAPI_TOKEN and avoid hard-coding credentials in prompts, code, or shared configuration.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/runapi-ai/skills/runapi-gemini)\n- [RunAPI Gemini Model Page](https://runapi.ai/models/gemini)\n- [RunAPI Gemini Documentation](https://runapi.ai/models/gemini.md)\n- [RunAPI Google Provider Page](https://runapi.ai/providers/google.md)\n- [RunAPI Model Catalog](https://runapi.ai/models.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Code, Shell commands, Configuration instructions]\n\n**Output Format:** [Markdown with inline code blocks and API request examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Includes Python, TypeScript, curl, dotenv, and environment variable guidance; requires a RunAPI API key for live requests.]\n\n## Skill Version(s):\n\n0.2.12 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.2.11: 3 files, 3926 bytes\n\nFiles: skill-card.md (2307b), SKILL.md (7091b), _meta.json (133b)\n\nFile v0.2.11:SKILL.md\n\n---\nname: gemini\ndescription: Call the Gemini API (the Gemini 2.5 and 3 series) through RunAPI using the official OpenAI SDK or Gemini contents clients. Use when the user asks for Gemini chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, or to point an existing OpenAI or Gemini client at RunAPI as the base URL.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: RUNAPI_TOKEN\n    requires:\n      env:\n      - RUNAPI_TOKEN\n    envVars:\n    - name: RUNAPI_TOKEN\n      required: true\n      description: RunAPI API key used for Gemini requests.\n    - name: GOOGLE_API_KEY\n      required: false\n      description: Optional alias when using Gemini contents streaming examples.\n    - name: GOOGLE_GENAI_BASE_URL\n      required: false\n      description: Optional Gemini client base URL override for RunAPI.\n---\n\n# Gemini on RunAPI\n\nGemini on RunAPI exposes **two request styles**:\n\n| Request style | Endpoint | Use when |\n|---|---|---|\n| OpenAI-compatible | `POST /v1/chat/completions` | You already use the OpenAI SDK or any OpenAI client |\n| Gemini contents | `POST /v1beta/models/<model>:generateContent` or `:streamGenerateContent` | You use a Gemini SDK/client with `contents` requests |\n\nBoth accept the same RunAPI API Key.\n\n## Setup\n\n```dotenv\nRUNAPI_TOKEN=YOUR_RUNAPI_TOKEN\n```\n\nGet a RunAPI API Key at <https://runapi.ai/api_keys>.\n\n### OpenAI-compatible setup\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"YOUR_RUNAPI_TOKEN\",\n    base_url=\"https://runapi.ai/v1\",\n)\n```\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: \"YOUR_RUNAPI_TOKEN\",\n  baseURL: \"https://runapi.ai/v1\",\n});\n```\n\n### Gemini contents setup\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\n```\n\n## Core recipe — OpenAI-compatible\n\n```python\nresponse = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}],\n    reasoning_effort=\"high\",\n)\nprint(response.choices[0].message.content)\nprint(response.usage)\n```\n\n```typescript\nconst response = await client.chat.completions.create({\n  model: \"gemini-2.5-flash\",\n  messages: [{ role: \"user\", content: \"Explain quantum computing simply.\" }],\n});\n```\n\n```bash\ncurl -X POST \"https://runapi.ai/v1/chat/completions\" \\\n  -H \"x-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"gemini-2.5-flash\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}]\n  }'\n```\n\n## Core recipe — Gemini contents\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent\" \\\n  -H \"x-goog-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"contents\": [\n      { \"role\": \"user\", \"parts\": [{ \"text\": \"Hello!\" }] }\n    ]\n  }'\n```\n\nFor `gemini-3-flash-preview` and `gemini-3.5-flash`, RunAPI uses the native\nGemini `streamGenerateContent` route. For other callable Gemini models, RunAPI\naccepts Gemini `contents` requests and bridges them to the OpenAI-compatible\nchat request format. Use the official Gemini SDKs when an existing application\nalready sends `contents` requests; for new app code, prefer the\nOpenAI-compatible setup.\n\n## Streaming (OpenAI-compatible)\n\n```python\nstream = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Write a haiku about coding.\"}],\n    stream=True,\n)\nfor chunk in stream:\n    delta = chunk.choices[0].delta.content\n    if delta:\n        print(delta, end=\"\", flush=True)\n```\n\nStreaming runs through a regional edge proxy so the request does not hold a\nRails/Puma thread. Long generations should always stream.\n\n## Vision / multimodal\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        { \"type\": \"text\", \"text\": \"What is in this image?\" },\n        { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://runapi.ai/img.jpg\" } }\n      ]\n    }\n  ]\n}\n```\n\nStandard OpenAI multimodal block for the OpenAI-compatible endpoint. For the\n`contents` streaming endpoint, embed image data as `parts[].inlineData` or\n`parts[].fileData`.\n\n## Google Search grounding\n\n```json\n{\n  \"model\": \"gemini-2.5-pro\",\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"Latest news on Gemini 3.\" }\n  ],\n  \"tools\": [\n    { \"type\": \"function\", \"function\": { \"name\": \"googleSearch\" } }\n  ]\n}\n```\n\nAvailable on `gemini-2.5-flash`, `gemini-2.5-pro`, and `gemini-3.1-pro-preview`.\n\n## Structured output\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"Give me one person object.\" }],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"person\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": { \"name\": { \"type\": \"string\" }, \"age\": { \"type\": \"integer\" } },\n        \"required\": [\"name\", \"age\"]\n      }\n    }\n  }\n}\n```\n\n## Reasoning effort\n\nSupported on `gemini-2.5-pro`, `gemini-3.1-pro-preview`, and\n`gemini-3-flash-preview` — pass `reasoning_effort: \"low\" | \"medium\" | \"high\"`.\n\n## List models\n\n```bash\ncurl https://runapi.ai/v1beta/models -H \"x-api-key: YOUR_RUNAPI_TOKEN\"\n```\n\nOr via the OpenAI-style path:\n\n```bash\ncurl https://runapi.ai/v1/models \\\n  -H \"Authorization: Bearer YOUR_RUNAPI_TOKEN\"\n```\n\n## Supported models\n\n| Model ID | Capabilities |\n|---|---|\n| `gemini-3.5-flash` | Streaming `contents` requests, multimodal, function calling, thoughts |\n| `gemini-3.1-pro-preview` | Chat, multimodal, structured output, reasoning effort |\n| `gemini-3-flash-preview` | Chat, multimodal, function calling, structured output, reasoning effort |\n| `gemini-2.5-pro` | Chat, multimodal, Google Search, structured output, reasoning effort |\n| `gemini-2.5-flash` | Chat, multimodal, Google Search, structured output, thoughts |\n\n`gemini-flash-latest` resolves to `gemini-3-flash-preview`.\n\n## Connect Gemini CLI itself\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\ngemini\n```\n\n## Agent rules\n\n- Use the OpenAI-compatible endpoint for new app code. Use Gemini `contents`\n  paths when an existing client already sends `contents` requests.\n- Native Gemini streaming is available for `gemini-3-flash-preview` and\n  `gemini-3.5-flash`; other callable Gemini models accept `contents` requests\n  through a RunAPI protocol bridge.\n- Use streaming for any response longer than a few hundred tokens. Do not\n  hold the agent on a long blocking request.\n- Google Search grounding uses a `googleSearch` function tool.\n- Pricing, rate limits, quotas — link to <https://runapi.ai/models/gemini.md>,\n  not this skill file.\n\n## Routing\n\n- Model page: <https://runapi.ai/models/gemini.md>\n- Provider page: <https://runapi.ai/providers/google.md>\n- Catalog: <https://runapi.ai/models.md>\n\nFile v0.2.11:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.11\",\n  \"publishedAt\": 1784761024197\n}\n\nFile v0.2.11:skill-card.md\n\n## Description: <br>\nEnables agents to call Gemini models through RunAPI using OpenAI-compatible chat completions or Gemini contents clients for chat, streaming, multimodal input, Google Search grounding, structured output, and reasoning-effort workflows. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[runapi-ai](https://clawhub.ai/user/runapi-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to connect existing OpenAI or Gemini client code to Gemini models through RunAPI, including streaming, multimodal, grounding, structured-output, and model-list workflows. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Prompts, images, files, and other request content may be sent to an external RunAPI-backed Gemini service. <br>\nMitigation: Avoid sending secrets, regulated data, or confidential business material unless that data sharing is approved for the use case. <br>\nRisk: Long Gemini generations can keep an agent waiting on a blocking response. <br>\nMitigation: Use streaming for longer responses as directed by the skill guidance. <br>\n\n\n## Reference(s): <br>\n- [RunAPI Gemini model documentation](https://runapi.ai/models/gemini.md) <br>\n- [RunAPI Gemini model page](https://runapi.ai/models/gemini) <br>\n- [RunAPI Google provider documentation](https://runapi.ai/providers/google.md) <br>\n- [RunAPI model catalog](https://runapi.ai/models.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with inline code blocks, API request examples, and configuration snippets] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces integration guidance for RunAPI-backed Gemini requests; the skill itself does not execute hidden commands or perform destructive actions.] <br>\n\n## Skill Version(s): <br>\n0.2.11 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.2.10: 3 files, 3962 bytes\n\nFiles: skill-card.md (2293b), SKILL.md (7222b), _meta.json (133b)\n\nFile v0.2.10:SKILL.md\n\n---\nname: gemini\ndescription: Call the Gemini API (the Gemini 2.5 and 3 series) through RunAPI using the official OpenAI SDK or Gemini contents clients. Use when the user asks for Gemini chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, or to point an existing OpenAI or Gemini client at RunAPI as the base URL.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: RUNAPI_TOKEN\n    requires:\n      env:\n      - RUNAPI_TOKEN\n    envVars:\n    - name: RUNAPI_TOKEN\n      required: true\n      description: RunAPI API key used for Gemini requests.\n    - name: GOOGLE_API_KEY\n      required: false\n      description: Optional alias when using Gemini contents streaming examples.\n    - name: GOOGLE_GENAI_BASE_URL\n      required: false\n      description: Optional Gemini client base URL override for RunAPI.\n---\n\n# Gemini on RunAPI\n\nGemini on RunAPI exposes **two request styles**:\n\n| Request style | Endpoint | Use when |\n|---|---|---|\n| OpenAI-compatible | `POST /v1/chat/completions` | You already use the OpenAI SDK or any OpenAI client |\n| Gemini contents | `POST /v1beta/models/<model>:generateContent` or `:streamGenerateContent` | You use a Gemini SDK/client with `contents` requests |\n\nBoth accept the same RunAPI API Key.\n\n## Setup\n\n```dotenv\nRUNAPI_TOKEN=YOUR_RUNAPI_TOKEN\n```\n\nGet a RunAPI API Key at <https://runapi.ai/api_keys>.\n\n### OpenAI-compatible setup\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"YOUR_RUNAPI_TOKEN\",\n    base_url=\"https://runapi.ai/v1\",\n)\n```\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: \"YOUR_RUNAPI_TOKEN\",\n  baseURL: \"https://runapi.ai/v1\",\n});\n```\n\n### Gemini contents setup\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\n```\n\n## Core recipe — OpenAI-compatible\n\n```python\nresponse = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}],\n    reasoning_effort=\"high\",\n)\nprint(response.choices[0].message.content)\nprint(response.usage)\n```\n\n```typescript\nconst response = await client.chat.completions.create({\n  model: \"gemini-2.5-flash\",\n  messages: [{ role: \"user\", content: \"Explain quantum computing simply.\" }],\n});\n```\n\n```bash\ncurl -X POST \"https://runapi.ai/v1/chat/completions\" \\\n  -H \"x-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"gemini-2.5-flash\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}]\n  }'\n```\n\n## Core recipe — Gemini contents\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent\" \\\n  -H \"x-goog-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"contents\": [\n      { \"role\": \"user\", \"parts\": [{ \"text\": \"Hello!\" }] }\n    ]\n  }'\n```\n\nFor `gemini-3-flash-preview` and `gemini-3.5-flash`, RunAPI uses the native\nGemini `streamGenerateContent` route. For other callable Gemini models, RunAPI\naccepts Gemini `contents` requests and bridges them to the OpenAI-compatible\nchat request format. Use the official Gemini SDKs when an existing application\nalready sends `contents` requests; for new app code, prefer the\nOpenAI-compatible setup.\n\n## Streaming (OpenAI-compatible)\n\n```python\nstream = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Write a haiku about coding.\"}],\n    stream=True,\n)\nfor chunk in stream:\n    delta = chunk.choices[0].delta.content\n    if delta:\n        print(delta, end=\"\", flush=True)\n```\n\nStreaming runs through a regional edge proxy so the request does not hold a\nRails/Puma thread. Long generations should always stream.\n\n## Vision / multimodal\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        { \"type\": \"text\", \"text\": \"What is in this image?\" },\n        { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://runapi.ai/img.jpg\" } }\n      ]\n    }\n  ]\n}\n```\n\nStandard OpenAI multimodal block for the OpenAI-compatible endpoint. For the\n`contents` streaming endpoint, embed image data as `parts[].inlineData` or\n`parts[].fileData`.\n\n## Google Search grounding\n\n```json\n{\n  \"model\": \"gemini-2.5-pro\",\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"Latest news on Gemini 3.\" }\n  ],\n  \"tools\": [\n    { \"type\": \"function\", \"function\": { \"name\": \"googleSearch\" } }\n  ]\n}\n```\n\nAvailable on `gemini-2.5-flash`, `gemini-2.5-pro`, `gemini-3.1-pro-preview`,\nand `gemini-3-pro-preview`.\n\n## Structured output\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"Give me one person object.\" }],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"person\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": { \"name\": { \"type\": \"string\" }, \"age\": { \"type\": \"integer\" } },\n        \"required\": [\"name\", \"age\"]\n      }\n    }\n  }\n}\n```\n\n## Reasoning effort\n\nSupported on `gemini-2.5-pro`, `gemini-3.1-pro-preview`, `gemini-3-pro-preview`,\nand `gemini-3-flash-preview` — pass `reasoning_effort: \"low\" | \"medium\" | \"high\"`.\n\n## List models\n\n```bash\ncurl https://runapi.ai/v1beta/models -H \"x-api-key: YOUR_RUNAPI_TOKEN\"\n```\n\nOr via the OpenAI-style path:\n\n```bash\ncurl https://runapi.ai/v1/models \\\n  -H \"Authorization: Bearer YOUR_RUNAPI_TOKEN\"\n```\n\n## Supported models\n\n| Model ID | Capabilities |\n|---|---|\n| `gemini-3.5-flash` | Streaming `contents` requests, multimodal, function calling, thoughts |\n| `gemini-3.1-pro-preview` | Chat, multimodal, structured output, reasoning effort |\n| `gemini-3-pro-preview` | Chat, multimodal, structured output, reasoning effort |\n| `gemini-3-flash-preview` | Chat, multimodal, function calling, structured output, reasoning effort |\n| `gemini-2.5-pro` | Chat, multimodal, Google Search, structured output, reasoning effort |\n| `gemini-2.5-flash` | Chat, multimodal, Google Search, structured output, thoughts |\n\n`gemini-flash-latest` resolves to `gemini-3-flash-preview`.\n\n## Connect Gemini CLI itself\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\ngemini\n```\n\n## Agent rules\n\n- Use the OpenAI-compatible endpoint for new app code. Use Gemini `contents`\n  paths when an existing client already sends `contents` requests.\n- Native Gemini streaming is available for `gemini-3-flash-preview` and\n  `gemini-3.5-flash`; other callable Gemini models accept `contents` requests\n  through a RunAPI protocol bridge.\n- Use streaming for any response longer than a few hundred tokens. Do not\n  hold the agent on a long blocking request.\n- Google Search grounding uses a `googleSearch` function tool.\n- Pricing, rate limits, quotas — link to <https://runapi.ai/models/gemini.md>,\n  not this skill file.\n\n## Routing\n\n- Model page: <https://runapi.ai/models/gemini.md>\n- Provider page: <https://runapi.ai/providers/google.md>\n- Catalog: <https://runapi.ai/models.md>\n\nFile v0.2.10:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.10\",\n  \"publishedAt\": 1783485741894\n}\n\nFile v0.2.10:skill-card.md\n\n## Description: <br>\nCall the Gemini API (the Gemini 2.5 and 3 series) through RunAPI using the official OpenAI SDK or Gemini contents clients. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[runapi-ai](https://clawhub.ai/user/runapi-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to route Gemini chat, streaming, multimodal, search-grounded, structured-output, and reasoning-effort requests through RunAPI using OpenAI-compatible or Gemini contents clients. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Prompts, images, and structured data sent with the examples leave the local environment for the configured RunAPI/Gemini service. <br>\nMitigation: Use the skill only with data approved for those services and review outbound payloads before sending sensitive content. <br>\nRisk: RUNAPI_TOKEN is required for live requests and can grant access to paid or private API usage. <br>\nMitigation: Store the token in environment variables or a secret manager, avoid committing it to files, and rotate it if exposure is suspected. <br>\n\n\n## Reference(s): <br>\n- [RunAPI Gemini model documentation](https://runapi.ai/models/gemini.md) <br>\n- [RunAPI Google provider page](https://runapi.ai/providers/google.md) <br>\n- [RunAPI model catalog](https://runapi.ai/models.md) <br>\n- [RunAPI Gemini homepage](https://runapi.ai/models/gemini) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with inline code, shell commands, dotenv snippets, JSON examples, and configuration guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires RUNAPI_TOKEN for live Gemini requests through RunAPI; GOOGLE_API_KEY and GOOGLE_GENAI_BASE_URL are optional client aliases.] <br>\n\n## Skill Version(s): <br>\n0.2.10 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.2.9: 3 files, 3978 bytes\n\nFiles: skill-card.md (2351b), SKILL.md (7195b), _meta.json (132b)\n\nFile v0.2.9:SKILL.md\n\n---\nname: gemini\ndescription: Call the Gemini API (gemini-2.5-flash, gemini-2.5-pro, gemini-3-flash-preview, gemini-3-pro-preview, gemini-3.1-pro-preview, gemini-3.5-flash) through RunAPI using the official OpenAI SDK or Gemini contents clients. Use when the user asks for Gemini chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, or to point an existing OpenAI or Gemini client at RunAPI as the base URL.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: RUNAPI_TOKEN\n    requires:\n      env:\n      - RUNAPI_TOKEN\n    envVars:\n    - name: RUNAPI_TOKEN\n      required: true\n      description: RunAPI API key used for Gemini requests.\n    - name: GOOGLE_API_KEY\n      required: false\n      description: Optional alias when using Gemini contents streaming examples.\n    - name: GOOGLE_GENAI_BASE_URL\n      required: false\n      description: Optional Gemini client base URL override for RunAPI.\n---\n\n# Gemini on RunAPI\n\nGemini on RunAPI exposes **two request styles**:\n\n| Request style | Endpoint | Use when |\n|---|---|---|\n| OpenAI-compatible | `POST /v1/chat/completions` | You already use the OpenAI SDK or any OpenAI client |\n| Gemini contents | `POST /v1beta/models/<model>:generateContent` or `:streamGenerateContent` | You use a Gemini SDK/client with `contents` requests |\n\nBoth accept the same RunAPI API Key.\n\n## Setup\n\n```dotenv\nRUNAPI_TOKEN=YOUR_RUNAPI_TOKEN\n```\n\nGet a RunAPI API Key at <https://runapi.ai/api_keys>.\n\n### OpenAI-compatible setup\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"YOUR_RUNAPI_TOKEN\",\n    base_url=\"https://runapi.ai/v1\",\n)\n```\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: \"YOUR_RUNAPI_TOKEN\",\n  baseURL: \"https://runapi.ai/v1\",\n});\n```\n\n### Gemini contents setup\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\n```\n\n## Core recipe — OpenAI-compatible\n\n```python\nresponse = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}],\n    reasoning_effort=\"high\",\n)\nprint(response.choices[0].message.content)\nprint(response.usage)\n```\n\n```typescript\nconst response = await client.chat.completions.create({\n  model: \"gemini-2.5-flash\",\n  messages: [{ role: \"user\", content: \"Explain quantum computing simply.\" }],\n});\n```\n\n```bash\ncurl -X POST \"https://runapi.ai/v1/chat/completions\" \\\n  -H \"x-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"gemini-2.5-flash\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}]\n  }'\n```\n\n## Core recipe — Gemini contents\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent\" \\\n  -H \"x-goog-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"contents\": [\n      { \"role\": \"user\", \"parts\": [{ \"text\": \"Hello!\" }] }\n    ]\n  }'\n```\n\nFor `gemini-3-flash-preview` and `gemini-3.5-flash`, RunAPI uses the native\nGemini `streamGenerateContent` route. For other callable Gemini models, RunAPI\naccepts Gemini `contents` requests and bridges them to the OpenAI-compatible\nchat request format. Use the official Gemini SDKs when an existing application\nalready sends `contents` requests; for new app code, prefer the\nOpenAI-compatible setup.\n\n## Streaming (OpenAI-compatible)\n\n```python\nstream = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Write a haiku about coding.\"}],\n    stream=True,\n)\nfor chunk in stream:\n    delta = chunk.choices[0].delta.content\n    if delta:\n        print(delta, end=\"\", flush=True)\n```\n\nStreaming runs through a regional edge proxy so the request does not hold a\nRails/Puma thread. Long generations should always stream.\n\n## Vision / multimodal\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        { \"type\": \"text\", \"text\": \"What is in this image?\" },\n        { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://runapi.ai/img.jpg\" } }\n      ]\n    }\n  ]\n}\n```\n\nStandard OpenAI multimodal block for the OpenAI-compatible endpoint. For the\n`contents` streaming endpoint, embed image data as `parts[].inlineData` or\n`parts[].fileData`.\n\n## Google Search grounding\n\n```json\n{\n  \"model\": \"gemini-2.5-pro\",\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"Latest news on Gemini 3.\" }\n  ],\n  \"tools\": [\n    { \"type\": \"function\", \"function\": { \"name\": \"googleSearch\" } }\n  ]\n}\n```\n\nAvailable on `gemini-2.5-flash`, `gemini-2.5-pro`, `gemini-3.1-pro-preview`,\nand `gemini-3-pro-preview`.\n\n## Structured output\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"Give me one person object.\" }],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"person\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": { \"name\": { \"type\": \"string\" }, \"age\": { \"type\": \"integer\" } },\n        \"required\": [\"name\", \"age\"]\n      }\n    }\n  }\n}\n```\n\n## Reasoning effort\n\nSupported on `gemini-2.5-pro`, `gemini-3.1-pro-preview`, `gemini-3-pro-preview`,\nand `gemini-3-flash-preview` — pass `reasoning_effort: \"low\" | \"medium\" | \"high\"`.\n\n## List models\n\n```bash\ncurl https://runapi.ai/v1beta/models -H \"x-api-key: YOUR_RUNAPI_TOKEN\"\n```\n\nOr via the OpenAI-style path:\n\n```bash\ncurl https://runapi.ai/v1/models \\\n  -H \"Authorization: Bearer YOUR_RUNAPI_TOKEN\"\n```\n\n## Supported models\n\n| Model ID | Capabilities |\n|---|---|\n| `gemini-3.5-flash` | Streaming `contents` requests, multimodal, function calling, thoughts |\n| `gemini-3.1-pro-preview` | + reasoning effort |\n| `gemini-3-pro-preview` | + reasoning effort |\n| `gemini-3-flash-preview` | Chat, multimodal, function calling, structured output, reasoning effort |\n| `gemini-2.5-pro` | + reasoning effort |\n| `gemini-2.5-flash` | Chat, multimodal, Google Search, structured output, thoughts |\n\n`gemini-flash-latest` resolves to `gemini-3-flash-preview`.\n\n## Connect Gemini CLI itself\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\ngemini\n```\n\n## Agent rules\n\n- Use the OpenAI-compatible endpoint for new app code. Use Gemini `contents`\n  paths when an existing client already sends `contents` requests.\n- Native Gemini streaming is available for `gemini-3-flash-preview` and\n  `gemini-3.5-flash`; other callable Gemini models accept `contents` requests\n  through a RunAPI protocol bridge.\n- Use streaming for any response longer than a few hundred tokens. Do not\n  hold the agent on a long blocking request.\n- Google Search grounding uses a `googleSearch` function tool.\n- Pricing, rate limits, quotas — link to <https://runapi.ai/models/gemini.md>,\n  not this skill file.\n\n## Routing\n\n- Model page: <https://runapi.ai/models/gemini.md>\n- Provider page: <https://runapi.ai/providers/google.md>\n- Catalog: <https://runapi.ai/models.md>\n\nFile v0.2.9:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.9\",\n  \"publishedAt\": 1782984215377\n}\n\nFile v0.2.9:skill-card.md\n\n## Description: <br>\nCall the Gemini API (gemini-2.5-flash, gemini-2.5-pro, gemini-3-flash-preview, gemini-3-pro-preview, gemini-3.1-pro-preview, gemini-3.5-flash) through RunAPI using the official OpenAI SDK or Gemini contents clients. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[runapi-ai](https://clawhub.ai/user/runapi-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent builders use this skill to call Gemini models through RunAPI for chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, and client configuration. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Prompts, image inputs, and other request content may be sent to Gemini or another configured API endpoint. <br>\nMitigation: Avoid sending private images, secrets, or sensitive text unless the user is comfortable with the configured provider receiving that data. <br>\nRisk: The skill requires a RunAPI API key for live requests. <br>\nMitigation: Store the key in environment variables, avoid embedding it in shared files or prompts, and review curl examples before running them. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/runapi-ai/skills/runapi-gemini) <br>\n- [RunAPI Gemini Model Page](https://runapi.ai/models/gemini) <br>\n- [RunAPI Gemini Documentation](https://runapi.ai/models/gemini.md) <br>\n- [RunAPI Google Provider Page](https://runapi.ai/providers/google.md) <br>\n- [RunAPI Model Catalog](https://runapi.ai/models.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, code, shell commands, configuration] <br>\n**Output Format:** [Markdown with Python, TypeScript, shell, dotenv, and JSON examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires RUNAPI_TOKEN for requests; examples cover OpenAI-compatible and Gemini contents request styles.] <br>\n\n## Skill Version(s): <br>\n0.2.9 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.2.8: 3 files, 4156 bytes\n\nFiles: skill-card.md (2749b), SKILL.md (7568b), _meta.json (132b)\n\nFile v0.2.8:SKILL.md\n\n---\nname: gemini\ndescription: Call the Gemini API (gemini-2.5-flash, gemini-2.5-pro, gemini-3-flash-preview, gemini-3-pro-preview, gemini-3.1-pro-preview, gemini-3.5-flash) through RunAPI using the official OpenAI SDK or Gemini contents clients. Use when the user asks for Gemini chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, or to point an existing OpenAI or Gemini client at RunAPI as the base URL.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: RUNAPI_TOKEN\n    requires:\n      env:\n      - RUNAPI_TOKEN\n    envVars:\n    - name: RUNAPI_TOKEN\n      required: true\n      description: RunAPI API key used for Gemini requests.\n    - name: GOOGLE_API_KEY\n      required: false\n      description: Optional alias when using Gemini contents streaming examples.\n    - name: GOOGLE_GENAI_BASE_URL\n      required: false\n      description: Optional Gemini client base URL override for RunAPI.\n---\n\n# Gemini on RunAPI\n\nGemini on RunAPI exposes **two request styles**:\n\n| Request style | Endpoint | Use when |\n|---|---|---|\n| OpenAI-compatible | `POST /v1/chat/completions` | You already use the OpenAI SDK or any OpenAI client |\n| Gemini contents | `POST /v1beta/models/<model>:generateContent` or `:streamGenerateContent` | You use a Gemini SDK/client with `contents` requests |\n\nBoth accept the same RunAPI API Key.\n\n## Setup\n\n```dotenv\nRUNAPI_TOKEN=YOUR_RUNAPI_TOKEN\n```\n\nGet a RunAPI API Key at <https://runapi.ai/api_keys>.\n\n### OpenAI-compatible setup\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"YOUR_RUNAPI_TOKEN\",\n    base_url=\"https://runapi.ai/v1\",\n)\n```\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: \"YOUR_RUNAPI_TOKEN\",\n  baseURL: \"https://runapi.ai/v1\",\n});\n```\n\n### Gemini contents setup\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\n```\n\n## Core recipe — OpenAI-compatible\n\n```python\nresponse = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}],\n    reasoning_effort=\"high\",\n)\nprint(response.choices[0].message.content)\nprint(response.usage)\n```\n\n```typescript\nconst response = await client.chat.completions.create({\n  model: \"gemini-2.5-flash\",\n  messages: [{ role: \"user\", content: \"Explain quantum computing simply.\" }],\n});\n```\n\n```bash\ncurl -X POST \"https://runapi.ai/v1/chat/completions\" \\\n  -H \"x-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"gemini-2.5-flash\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}]\n  }'\n```\n\n## Core recipe — Gemini contents\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent\" \\\n  -H \"x-goog-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"contents\": [\n      { \"role\": \"user\", \"parts\": [{ \"text\": \"Hello!\" }] }\n    ]\n  }'\n```\n\nFor `gemini-3-flash-preview` and `gemini-3.5-flash`, RunAPI uses the native\nGemini `streamGenerateContent` route. For other callable Gemini models, RunAPI\naccepts Gemini `contents` requests and bridges them to the OpenAI-compatible\nchat request format. Use the official Gemini SDKs when an existing application\nalready sends `contents` requests; for new app code, prefer the\nOpenAI-compatible setup.\n\n## Streaming (OpenAI-compatible)\n\n```python\nstream = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Write a haiku about coding.\"}],\n    stream=True,\n)\nfor chunk in stream:\n    delta = chunk.choices[0].delta.content\n    if delta:\n        print(delta, end=\"\", flush=True)\n```\n\nStreaming runs through a regional edge proxy so the request does not hold a\nRails/Puma thread. Long generations should always stream.\n\n## Vision / multimodal\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        { \"type\": \"text\", \"text\": \"What is in this image?\" },\n        { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://runapi.ai/img.jpg\" } }\n      ]\n    }\n  ]\n}\n```\n\nStandard OpenAI multimodal block for the OpenAI-compatible endpoint. For the\n`contents` streaming endpoint, embed image data as `parts[].inlineData` or\n`parts[].fileData`.\n\n## Google Search grounding\n\n```json\n{\n  \"model\": \"gemini-2.5-pro\",\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"Latest news on Gemini 3.\" }\n  ],\n  \"tools\": [\n    { \"type\": \"function\", \"function\": { \"name\": \"googleSearch\" } }\n  ]\n}\n```\n\nAvailable on `gemini-2.5-flash`, `gemini-2.5-pro`, `gemini-3.1-pro-preview`,\nand `gemini-3-pro-preview`.\n\n## Structured output\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"Give me one person object.\" }],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"person\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": { \"name\": { \"type\": \"string\" }, \"age\": { \"type\": \"integer\" } },\n        \"required\": [\"name\", \"age\"]\n      }\n    }\n  }\n}\n```\n\n## Reasoning effort\n\nSupported on `gemini-2.5-pro`, `gemini-3.1-pro-preview`, `gemini-3-pro-preview`,\nand `gemini-3-flash-preview` — pass `reasoning_effort: \"low\" | \"medium\" | \"high\"`.\n\n## List models\n\n```bash\ncurl https://runapi.ai/v1beta/models -H \"x-api-key: YOUR_RUNAPI_TOKEN\"\n```\n\nOr via the OpenAI-style path:\n\n```bash\ncurl https://runapi.ai/v1/models \\\n  -H \"Authorization: Bearer YOUR_RUNAPI_TOKEN\"\n```\n\n## Supported models\n\n| Model ID | OpenAI endpoint | Gemini contents endpoint | Capabilities |\n|---|---|---|---|\n| `gemini-3.5-flash` | yes | native `:streamGenerateContent` | Streaming `contents` requests, multimodal, function calling, thoughts |\n| `gemini-3.1-pro-preview` | yes | bridged `generateContent` / `streamGenerateContent` | + reasoning effort |\n| `gemini-3-pro-preview` | yes | bridged `generateContent` / `streamGenerateContent` | + reasoning effort |\n| `gemini-3-flash-preview` | yes | native `:streamGenerateContent` | Chat, multimodal, function calling, structured output, reasoning effort |\n| `gemini-2.5-pro` | yes | bridged `generateContent` / `streamGenerateContent` | + reasoning effort |\n| `gemini-2.5-flash` | yes | bridged `generateContent` / `streamGenerateContent` | Chat, multimodal, Google Search, structured output, thoughts |\n\n`gemini-flash-latest` resolves to `gemini-3-flash-preview`.\n\n## Connect Gemini CLI itself\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\ngemini\n```\n\n## Agent rules\n\n- Use the OpenAI-compatible endpoint for new app code. Use Gemini `contents`\n  paths when an existing client already sends `contents` requests.\n- Native Gemini streaming is available for `gemini-3-flash-preview` and\n  `gemini-3.5-flash`; other callable Gemini models accept `contents` requests\n  through a RunAPI protocol bridge.\n- Use streaming for any response longer than a few hundred tokens. Do not\n  hold the agent on a long blocking request.\n- Google Search grounding uses a `googleSearch` function tool.\n- Pricing, rate limits, quotas — link to <https://runapi.ai/models/gemini.md>,\n  not this skill file.\n\n## Routing\n\n- Model page: <https://runapi.ai/models/gemini.md>\n- Provider page: <https://runapi.ai/providers/google.md>\n- Catalog: <https://runapi.ai/models.md>\n\nFile v0.2.8:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.8\",\n  \"publishedAt\": 1782981751549\n}\n\nFile v0.2.8:skill-card.md\n\n## Description: <br>\nCall Gemini models through RunAPI using OpenAI-compatible or Gemini contents clients for chat, streaming, vision, Google Search grounding, structured output, and reasoning-effort requests. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[runapi-ai](https://clawhub.ai/user/runapi-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to route Gemini requests through RunAPI while reusing OpenAI-compatible clients or existing Gemini contents clients. It provides setup, request examples, streaming guidance, multimodal input patterns, Google Search grounding, structured output, reasoning effort, and model-listing commands. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Prompts, images, documents, search queries, and other request content are sent to RunAPI and the underlying model provider. <br>\nMitigation: Use the skill only when external API processing is acceptable, and avoid sending private or business-sensitive data unless that processing is approved. <br>\nRisk: RUNAPI_TOKEN is a required secret for API access. <br>\nMitigation: Store RUNAPI_TOKEN in a secret manager or protected environment variable and avoid committing it to source files, logs, prompts, or shared transcripts. <br>\nRisk: Generated code and commands may be copied into applications or shells without sufficient review. <br>\nMitigation: Review code, shell commands, request payloads, and endpoint configuration before execution or deployment. <br>\n\n\n## Reference(s): <br>\n- [RunAPI Gemini documentation](https://runapi.ai/models/gemini.md) <br>\n- [RunAPI Gemini model page](https://runapi.ai/models/gemini) <br>\n- [RunAPI Google provider page](https://runapi.ai/providers/google.md) <br>\n- [RunAPI model catalog](https://runapi.ai/models.md) <br>\n- [ClawHub skill page](https://clawhub.ai/runapi-ai/skills/runapi-gemini) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with code blocks, JSON examples, shell commands, and configuration snippets] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires a RunAPI API key in RUNAPI_TOKEN; optional Gemini client aliases use GOOGLE_API_KEY and GOOGLE_GENAI_BASE_URL.] <br>\n\n## Skill Version(s): <br>\n0.2.8 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.2.7: 3 files, 3996 bytes\n\nFiles: skill-card.md (2302b), SKILL.md (7570b), _meta.json (132b)\n\nFile v0.2.7:SKILL.md\n\n---\nname: gemini\ndescription: Call the Gemini API (gemini-2.5-flash, gemini-2.5-pro, gemini-3-flash-preview, gemini-3-pro-preview, gemini-3.1-pro-preview, gemini-3.5-flash) through RunAPI using the official OpenAI SDK or Gemini contents clients. Use when the user asks for Gemini chat, streaming completions, multimodal vision input, Google Search grounding, structured output, reasoning effort, or to point an existing OpenAI or Gemini client at RunAPI as the base URL.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: RUNAPI_TOKEN\n    requires:\n      env:\n      - RUNAPI_TOKEN\n    envVars:\n    - name: RUNAPI_TOKEN\n      required: true\n      description: RunAPI API key used for Gemini requests.\n    - name: GOOGLE_API_KEY\n      required: false\n      description: Optional alias when using Gemini contents streaming examples.\n    - name: GOOGLE_GENAI_BASE_URL\n      required: false\n      description: Optional Gemini client base URL override for RunAPI.\n---\n\n# Gemini on RunAPI\n\nGemini on RunAPI exposes **two request styles**:\n\n| Request style | Endpoint | Use when |\n|---|---|---|\n| OpenAI-compatible | `POST /v1/chat/completions` | You already use the OpenAI SDK or any OpenAI client |\n| Gemini contents | `POST /v1beta/models/<model>:generateContent` or `:streamGenerateContent` | You use a Gemini SDK/client with `contents` requests |\n\nBoth accept the same RunAPI API Key.\n\n## Setup\n\n```dotenv\nRUNAPI_TOKEN=YOUR_RUNAPI_TOKEN\n```\n\nGet a RunAPI API Key at <https://runapi.ai/api_keys>.\n\n### OpenAI-compatible setup\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"YOUR_RUNAPI_TOKEN\",\n    base_url=\"https://runapi.ai/v1\",\n)\n```\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: \"YOUR_RUNAPI_TOKEN\",\n  baseURL: \"https://runapi.ai/v1\",\n});\n```\n\n### Gemini contents setup\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\n```\n\n## Core recipe — OpenAI-compatible\n\n```python\nresponse = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}],\n    reasoning_effort=\"high\",\n)\nprint(response.choices[0].message.content)\nprint(response.usage)\n```\n\n```typescript\nconst response = await client.chat.completions.create({\n  model: \"gemini-2.5-flash\",\n  messages: [{ role: \"user\", content: \"Explain quantum computing simply.\" }],\n});\n```\n\n```bash\ncurl -X POST \"https://runapi.ai/v1/chat/completions\" \\\n  -H \"x-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"model\": \"gemini-2.5-flash\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Explain quantum computing simply.\"}]\n  }'\n```\n\n## Core recipe — Gemini contents\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3-flash-preview:streamGenerateContent\" \\\n  -H \"x-goog-api-key: YOUR_RUNAPI_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"contents\": [\n      { \"role\": \"user\", \"parts\": [{ \"text\": \"Hello!\" }] }\n    ]\n  }'\n```\n\nFor `gemini-3-flash-preview` and `gemini-3.5-flash`, RunAPI uses the native\nGemini `streamGenerateContent` route. For other callable Gemini models, RunAPI\naccepts Gemini `contents` requests and bridges them to the OpenAI-compatible\nchat request format. Use the official Gemini SDKs when an existing application\nalready sends `contents` requests; for new app code, prefer the\nOpenAI-compatible setup.\n\n## Streaming (OpenAI-compatible)\n\n```python\nstream = client.chat.completions.create(\n    model=\"gemini-2.5-flash\",\n    messages=[{\"role\": \"user\", \"content\": \"Write a haiku about coding.\"}],\n    stream=True,\n)\nfor chunk in stream:\n    delta = chunk.choices[0].delta.content\n    if delta:\n        print(delta, end=\"\", flush=True)\n```\n\nStreaming runs through a regional edge proxy so the request does not hold a\nRails/Puma thread. Long generations should always stream.\n\n## Vision / multimodal\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": [\n        { \"type\": \"text\", \"text\": \"What is in this image?\" },\n        { \"type\": \"image_url\", \"image_url\": { \"url\": \"https://example.com/img.jpg\" } }\n      ]\n    }\n  ]\n}\n```\n\nStandard OpenAI multimodal block for the OpenAI-compatible endpoint. For the\n`contents` streaming endpoint, embed image data as `parts[].inlineData` or\n`parts[].fileData`.\n\n## Google Search grounding\n\n```json\n{\n  \"model\": \"gemini-2.5-pro\",\n  \"messages\": [\n    { \"role\": \"user\", \"content\": \"Latest news on Gemini 3.\" }\n  ],\n  \"tools\": [\n    { \"type\": \"function\", \"function\": { \"name\": \"googleSearch\" } }\n  ]\n}\n```\n\nAvailable on `gemini-2.5-flash`, `gemini-2.5-pro`, `gemini-3.1-pro-preview`,\nand `gemini-3-pro-preview`.\n\n## Structured output\n\n```json\n{\n  \"model\": \"gemini-2.5-flash\",\n  \"messages\": [{ \"role\": \"user\", \"content\": \"Give me one person object.\" }],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"person\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": { \"name\": { \"type\": \"string\" }, \"age\": { \"type\": \"integer\" } },\n        \"required\": [\"name\", \"age\"]\n      }\n    }\n  }\n}\n```\n\n## Reasoning effort\n\nSupported on `gemini-2.5-pro`, `gemini-3.1-pro-preview`, `gemini-3-pro-preview`,\nand `gemini-3-flash-preview` — pass `reasoning_effort: \"low\" | \"medium\" | \"high\"`.\n\n## List models\n\n```bash\ncurl https://runapi.ai/v1beta/models -H \"x-api-key: YOUR_RUNAPI_TOKEN\"\n```\n\nOr via the OpenAI-style path:\n\n```bash\ncurl https://runapi.ai/v1/models \\\n  -H \"Authorization: Bearer YOUR_RUNAPI_TOKEN\"\n```\n\n## Supported models\n\n| Model ID | OpenAI endpoint | Gemini contents endpoint | Capabilities |\n|---|---|---|---|\n| `gemini-2.5-flash` | yes | bridged `generateContent` / `streamGenerateContent` | Chat, multimodal, Google Search, structured output, thoughts |\n| `gemini-2.5-pro` | yes | bridged `generateContent` / `streamGenerateContent` | + reasoning effort |\n| `gemini-3.1-pro-preview` | yes | bridged `generateContent` / `streamGenerateContent` | + reasoning effort |\n| `gemini-3-pro-preview` | yes | bridged `generateContent` / `streamGenerateContent` | + reasoning effort |\n| `gemini-3-flash-preview` | yes | native `:streamGenerateContent` | Chat, multimodal, function calling, structured output, reasoning effort |\n| `gemini-3.5-flash` | — | native `:streamGenerateContent` | Streaming `contents` requests, multimodal, function calling, thoughts |\n\n`gemini-flash-latest` resolves to `gemini-3-flash-preview`.\n\n## Connect Gemini CLI itself\n\n```bash\nexport GOOGLE_API_KEY=YOUR_RUNAPI_TOKEN\nexport GOOGLE_GENAI_BASE_URL=https://runapi.ai\ngemini\n```\n\n## Agent rules\n\n- Use the OpenAI-compatible endpoint for new app code. Use Gemini `contents`\n  paths when an existing client already sends `contents` requests.\n- Native Gemini streaming is available for `gemini-3-flash-preview` and\n  `gemini-3.5-flash`; other callable Gemini models accept `contents` requests\n  through a RunAPI protocol bridge.\n- Use streaming for any response longer than a few hundred tokens. Do not\n  hold the agent on a long blocking request.\n- Google Search grounding uses a `googleSearch` function tool.\n- Pricing, rate limits, quotas — link to <https://runapi.ai/models/gemini.md>,\n  not this skill file.\n\n## Routing\n\n- Model page: <https://runapi.ai/models/gemini.md>\n- Provider page: <https://runapi.ai/providers/google.md>\n- Catalog: <https://runapi.ai/models.md>\n\nFile v0.2.7:_meta.json\n\n{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.7\",\n  \"publishedAt\": 1782293763807\n}\n\nFile v0.2.7:skill-card.md\n\n## Description: <br>\nCall Gemini models through RunAPI using OpenAI-compatible or Gemini contents clients for chat, streaming, multimodal vision, Google Search grounding, structured output, and reasoning effort. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[runapi-ai](https://clawhub.ai/user/runapi-ai) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agent builders use this skill to call Gemini models through RunAPI from OpenAI-compatible clients, Gemini contents clients, curl, or Gemini CLI workflows. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Prompts, media, and generated requests are routed through an external API service. <br>\nMitigation: Review RunAPI and upstream provider data-handling terms before sending secrets, regulated data, confidential documents, or private images. <br>\nRisk: Long non-streaming Gemini responses can hold an agent workflow open longer than needed. <br>\nMitigation: Use streaming for responses longer than a few hundred tokens, as recommended by the artifact. <br>\n\n\n## Reference(s): <br>\n- [RunAPI Gemini model documentation](https://runapi.ai/models/gemini.md) <br>\n- [RunAPI Gemini model page](https://runapi.ai/models/gemini) <br>\n- [RunAPI Google provider page](https://runapi.ai/providers/google.md) <br>\n- [RunAPI model catalog](https://runapi.ai/models.md) <br>\n- [ClawHub skill page](https://clawhub.ai/runapi-ai/skills/runapi-gemini) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown guidance with code snippets, shell commands, API request examples, and configuration values] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires RUNAPI_TOKEN; may optionally use GOOGLE_API_KEY and GOOGLE_GENAI_BASE_URL for Gemini contents clients.] <br>\n\n## Skill Version(s): <br>\n0.2.7 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: gemini Owner: runapi-ai Summary: Call Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients. Use for Gemini chat, streaming, multimodal input, grounding, structured output, reasoning, or an existing compatibility client that needs the conditional reference. Tags: latest:0.2.16 Version history: v0.2.16 | 2026-09-30T12:16:45.442Z | user Added - List gemini-3.5-flash-lite for text requests t","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"curl -X POST \\"},{"language":"bash","snippet":"curl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3.7-flash:streamGenerateContent\" \\\n  -H \"x-goog-api-key: $GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"contents\":[{\"role\":\"user\",\"parts\":[{\"text\":\"Summarize this review.\"}]}]}'"},{"language":"bash","snippet":"curl -X POST \\"},{"language":"bash","snippet":"curl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3.7-flash:streamGenerateContent\" \\\n  -H \"x-goog-api-key: $GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"contents\":[{\"role\":\"user\",\"parts\":[{\"text\":\"Summarize this review.\"}]}]}'"},{"language":"bash","snippet":"curl -X POST \\"},{"language":"bash","snippet":"curl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3.6-flash:streamGenerateContent\" \\\n  -H \"x-goog-api-key: $GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"contents\":[{\"role\":\"user\",\"parts\":[{\"text\":\"Summarize this review.\"}]}]}'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: gemini\ndescription: Call Gemini 2.5 and 3 series models through RunAPI using Gemini contents clients. Use for Gemini chat, streaming, multimodal input, grounding, structured output, reasoning, or an existing compatibility client that needs the conditional reference.\ndocumentation: https://runapi.ai/models/gemini.md\nprovider_page: https://runapi.ai/providers/google.md\ncatalog: https://runapi.ai/models.md\nmetadata:\n  openclaw:\n    homepage: https://runapi.ai/models/gemini\n    primaryEnv: GEMINI_API_KEY\n    requires:\n      env: [GEMINI_API_KEY, GEMINI_BASE_URL]\n    envVars:\n    - {name: GEMINI_API_KEY, required: true, description: RunAPI API key used by Gemini contents clients.}\n    - {name: GEMINI_BASE_URL, required: true, description: Set to https://runapi.ai for Gemini on RunAPI.}\n---\n\n# Gemini on RunAPI\n\nUse Gemini contents at `https://runapi.ai` with `generateContent` or\n`streamGenerateContent` as the primary protocol.\n\n## Primary protocol recipe\n\n### Authenticate\n\nSet `GEMINI_API_KEY` to a RunAPI API key and the Gemini client base URL to\n`https://runapi.ai`. Raw requests send the key with `x-goog-api-key`.\n\n### Send request\n\n```bash\ncurl -X POST \\\n  \"https://runapi.ai/v1beta/models/gemini-3.7-flash:streamGenerateContent\" \\\n  -H \"x-goog-api-key: $GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"contents\":[{\"role\":\"user\",\"parts\":[{\"text\":\"Summarize this review.\"}]}]}'\n```\n\nUse `generateContent` only when the selected model supports synchronous output;\n`gemini-3.7-flash` accepts only `streamGenerateContent`. For this model, native\ntools are limited to `functionDeclarations` and the `googleSearch` tool with an\nempty object payload;\nnative thinking is limited to `generationConfig.thinkingConfig.includeThoughts`\nand `thinkingLevel` of `low` or `high`.\n\n### Verify result\n\nRequire candidate content, terminal `finishReason`, and `usageMetadata`. A\nstream is complete only after the terminal candidate and Usage; an HTTP 2xx\nwithout both is incomplete.\n\n### Stop boundaries\n\nCorrect a rejected shape once using the structured error. Retry transport once\nonly before any candidate or Usage and when replay is safe. Record a terminal\nerror and stop without changing model or protocol.\n\n## Compatibility protocols\n\nLoad [compatibility protocols](references/compatibility-protocols.md) only when an existing client requires OpenAI-compatible Chat Completions.\n\n## Supported models\n\n| Model ID | Use when |\n|---|---|\n| `gemini-3.8-flash` | Fast text-only chat and function calling; image, audio, and file input are rejected |\n| `gemini-3.7-flash` | Fast streaming chat; use native tools/search grounding only with Gemini contents |\n| `gemini-3.6-flash` | Fast current-generation multimodal requests |\n| `gemini-3.5-flash` | Fast multimodal and function-calling requests |\n| `gemini-3.5-flash-lite` | Lightweight text generation with native Gemini streaming |\n| `gemini-3.1-pro-preview` | Complex multimodal and reasoning requests |\n| `gemini-3-flash-pre"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70me4rk7jqjt92evshjeb5z18768g7\",\n  \"slug\": \"runapi-gemini\",\n  \"version\": \"0.2.16\",\n  \"publishedAt\": 1790770605442\n}"},{"path":"references/compatibility-protocols.md","content":"# Gemini compatibility protocol\n\nLoad this reference only when an existing application already requires an\nOpenAI-compatible Chat Completions client. New Gemini integrations use Gemini\ncontents from the main skill.\n\nSet `OPENAI_API_KEY` to a RunAPI key and the OpenAI client base URL to\n`https://runapi.ai/v1`. Call `client.chat.completions.create` with a supported\nexact Gemini model ID and messages. For streaming, set `stream=True` and request\nterminal Usage with `stream_options.include_usage`.\n\nVerify final assistant content, `finish_reason`, terminal `usage`, and `[DONE]`\nfor SSE. Apply one evidence-backed shape correction, at most one safe\npre-response transport retry, and no automatic model or protocol hopping."},{"path":"skill-card.md","content":"## Description:\n\nGuides agents in calling Gemini models through RunAPI using Gemini contents clients, with compatibility guidance for existing Chat Completions clients.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[runapi-ai](https://clawhub.ai/user/runapi-ai)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to configure RunAPI credentials, send Gemini requests, and check streaming responses. Existing Chat Completions clients can follow its separate compatibility guidance.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Prompts and related request content are sent to RunAPI.\n\nMitigation: Use the skill only when this disclosure is acceptable, and review request content before sending it.\n\nRisk: The RunAPI API key is sensitive.\n\nMitigation: Keep the key in the configured environment variable and avoid exposing it in shared requests or logs.\n\n## Reference(s):\n\n- [Gemini on RunAPI documentation](https://runapi.ai/models/gemini.md)\n- [RunAPI Gemini homepage](https://runapi.ai/models/gemini)\n- [RunAPI Google provider](https://runapi.ai/providers/google.md)\n- [RunAPI model catalog](https://runapi.ai/models.md)\n- [Compatibility protocols](references/compatibility-protocols.md)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration instructions]\n\n**Output Format:** [Markdown with shell and JSON examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Covers response-completion checks and bounded retry guidance.]\n\n## Skill Version(s):\n\n0.2.16 (source: ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1233,"uniquenessScore":44,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T02:05:01.783Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T02:05:01.783Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:38:35.112Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}