Not in the top 1,000 by GitHub stars
bananahub-ai/bananahub-skill
Agent-native Gemini image skill for Claude Code. Distills official best practices into conservative prompt optimization and reusable BananaHub templates.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → ffee193d135a
No earlier version was observed for comparison.
Heat
0.3- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
How it works
bananahub
When your agent uses it
Agent-native image workflow and optional prompt optimizer for `/bananahub` and generic agent image generation requests. Normalizes non-English prompts into English by default, generates or edits images across Gemini/Nano Banana, OpenAI GPT Image, chat-compatible routes, and Codex/host-native image tools when available, discovers or uses BananaHub templates, and captures successful multi-turn image iterations as reusable workflow templates. Explicit `/bananahub` requests execute the BananaHub workflow. Requests like "把刚才的调图流程沉淀成模板", "save this image workflow", or "capture workflow" should use the capture-workflow flow. Generic requests like "生成图片", "画一个", "create an image", or "edit this image" should load BananaHub as an optimization advisor: ask whether to optimize/template-route the prompt before generation, then continue with the user's chosen image channel.
What it loads into context
Frontmatter
282 tokensAlways available to the agent
SKILL.md
6,783 tokensWhen the skill is activated
Reference documents
61,759 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Quick Start
- Key Paths
- First-Run Detection
- Runtime Mode Layers
- Implicit Image Request Flow
- Command Routing
- Three Optimization Modes
- Prompt Optimization Summary
- Image Generation Flow
- Image Editing Flow
- Iteration Guide
- Template System Summary
- Safety Rules
Scripts executed separately
scripts/bananahub.pyscripts/config_store.pyscripts/providers/__init__.pyscripts/providers/chatgpt_compatible.pyscripts/providers/common.pyscripts/providers/gemini.pyscripts/providers/openai_images.pyscripts/runtime_config.pyscripts/validate_templates.pytests/test_chatgpt_compatible.pytests/test_config_store.pytests/test_generate_retry.pytests/test_onboarding_config.pytests/test_openai_images.pytests/test_provider_common.pytests/test_runtime_config.py
Files
.gitignoreasset324 bytesBANANAHUB.mddoc12,252 bytesBANANAHUB.zh-CN.mddoc10,701 bytesCONTRIBUTING.mddoc819 bytesLICENSEasset1,079 bytesREADME.mddoc15,275 bytesREADME.zh-CN.mddoc14,462 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesSKILL.mdcore28,748 bytesagents/openai.yamlasset370 bytesdocs/assets/github/prompts/readme-hero-gpt-5-4.mddoc1,618 bytesdocs/assets/github/prompts/setup-guide-gpt-5-4.mddoc1,448 bytesdocs/assets/github/prompts/skill-architecture-gpt-5-4.mddoc1,465 bytesdocs/assets/github/prompts/user-flow-infographic-gpt-5-4.mddoc1,406 bytesdocs/assets/github/readme-hero-gpt-5-4.pngasset1,356,507 bytesdocs/assets/github/setup-guide-gpt-5-4.pngasset1,219,958 bytesdocs/assets/github/skill-architecture-gpt-5-4.pngasset1,074,969 bytesdocs/assets/github/user-flow-infographic-gpt-5-4.pngasset1,282,527 bytesreferences/capability-registry.mddoc7,424 bytesreferences/hub-discovery.mddoc5,261 bytesreferences/init-guide.mddoc10,262 bytesreferences/model-registry.jsonasset4,436 bytesreferences/official-sources.mddoc6,959 bytesreferences/optimization-pipeline.mddoc16,028 bytesreferences/profiles/3d.mddoc5,149 bytesreferences/profiles/concept-art.mddoc5,110 bytesreferences/profiles/diagram.mddoc7,313 bytesreferences/profiles/general.mddoc2,314 bytesreferences/profiles/illustration.mddoc8,977 bytesreferences/profiles/minimal.mddoc4,808 bytesreferences/profiles/photo.mddoc6,054 bytesreferences/profiles/product.mddoc4,738 bytesreferences/profiles/sticker.mddoc3,723 bytesreferences/profiles/text-heavy.mddoc6,029 bytesreferences/prompt-guide.mddoc14,247 bytesreferences/provider-init-design.zh-CN.mddoc10,488 bytesreferences/providers/gemini.mddoc1,604 bytesreferences/providers/openai-gpt-image.mddoc2,740 bytesreferences/template-format-spec.mddoc12,482 bytesreferences/template-system.mddoc20,855 bytesreferences/templates/LICENSEasset497 bytesreferences/templates/README.mddoc1,224 bytesreferences/templates/article-one-page-summary/README.mddoc1,362 bytesreferences/templates/article-one-page-summary/samples/sample-gpt-image-2-01.pngasset1,325,380 bytesreferences/templates/article-one-page-summary/template.mddoc7,126 bytesreferences/templates/background-replace-edit/README.mddoc1,519 bytesreferences/templates/background-replace-edit/samples/sample-gpt-image-2-01.pngasset1,348,714 bytesreferences/templates/background-replace-edit/template.mddoc5,281 bytesreferences/templates/info-diagram/README.mddoc1,319 bytesreferences/templates/info-diagram/samples/sample-3.1-flash-01.pngasset936,831 bytesreferences/templates/info-diagram/samples/sample-gpt-image-2-01.pngasset950,470 bytesreferences/templates/info-diagram/template.mddoc5,369 bytesreferences/templates/product-white-bg/README.mddoc1,572 bytesreferences/templates/product-white-bg/samples/sample-3.1-flash-01.pngasset640,968 bytesreferences/templates/product-white-bg/samples/sample-gpt-image-2-01.pngasset1,456,644 bytesreferences/templates/product-white-bg/template.mddoc5,943 bytesreferences/templates/repo-explainer-diagram/README.mddoc1,583 bytesreferences/templates/repo-explainer-diagram/samples/sample-3-pro-01.pngasset935,969 bytesreferences/templates/repo-explainer-diagram/samples/sample-3-pro-02.pngasset938,731 bytesreferences/templates/repo-explainer-diagram/samples/sample-gpt-image-2-01.pngasset1,012,602 bytesreferences/templates/repo-explainer-diagram/template.mddoc6,960 bytesscripts/bananahub.pyruns144,432 bytesscripts/config_store.pyruns20,129 bytesscripts/providers/__init__.pyruns47 bytesscripts/providers/chatgpt_compatible.pyruns6,191 bytesscripts/providers/common.pyruns4,792 bytesscripts/providers/gemini.pyruns2,450 bytesscripts/providers/openai_images.pyruns10,295 bytesscripts/runtime_config.pyruns9,306 bytesscripts/validate_templates.pyruns9,106 bytestests/test_chatgpt_compatible.pyruns1,658 bytestests/test_config_store.pyruns11,544 bytestests/test_generate_retry.pyruns6,366 bytestests/test_onboarding_config.pyruns11,729 bytestests/test_openai_images.pyruns19,274 bytestests/test_provider_common.pyruns1,998 bytestests/test_runtime_config.pyruns1,365 bytes
Read SKILL.md
# BananaHub
Generate or edit images from non-English or mixed-language requests inside one `/bananahub` workflow. GPT Image 2 through an OpenAI-compatible image endpoint is the default provider path; user-configured Gemini/Nano Banana, OpenAI official, Vertex, chat-compatible paths, and Codex/host-native image tools are preserved. BananaHub keeps prompt optimization, conservative enhancement, model fallback, image editing, template use, and BananaHub discovery in a single skill instead of splitting them across separate installs.
When BananaHub is loaded implicitly for a generic agent image request, act as a lightweight optimization layer first. Do not silently take over generation: ask whether the user wants BananaHub to optimize the prompt before the image tool runs, then respect the answer.
## Quick Start
- Install via Open Agent Skills: `npx skills add https://github.com/bananahub-ai/bananahub-skill --skill bananahub`
- Install in Claude Code directly: `claude skill install https://github.com/bananahub-ai/bananahub-skill`
- Run setup once: `/bananahub init`
- Test a host-native image tool such as Codex built-in image generation: `/bananahub test-host-imagegen`
- Generate from a natural-language request: `/bananahub 一只橘猫趴在键盘上打盹`
- Edit an image: `/bananahub edit 把背景换成海滩 --input photo.png`View the complete source on GitHubSkills included
- bananahub
Repository facts
- License
- MIT
- Created
- Mar 6, 2026
- Last pushed
- May 17, 2026
- Forks
- 0
- Open issues
- 0
- Project activity
- Slowing
Before you install
Local scriptsAutomated signals, not a guarantee
Checked Nov 5, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 28 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 212 network referencesin 21 files: tests/test_config_store.py:36 references/official-sources.md:11 tests/test_openai_images.py:117 and 18 more
- 2 obfuscation signalsin 2 files: scripts/providers/chatgpt_compatible.py:106 scripts/providers/openai_images.py:126
- 2 instruction override signalsin 1 file: references/prompt-guide.md:108
- 16 executable scriptsin 16 files: scripts/bananahub.py:1 scripts/config_store.py:1 scripts/providers/__init__.py:1 and 13 more
- 289 references to secretsin 16 files: scripts/bananahub.py:45 scripts/config_store.py:78 tests/test_config_store.py:24 and 13 more
- No requests to vote in Hot
Show all 521 signals by file
.gitignore
- Access to secretsline 7
[Credential-related source omitted]
BANANAHUB.md
- Network accessline 108
POST https://worker.bananahub.ai/api/installs - Network accessline 126
POST https://worker.bananahub.ai/api/usage - Network accessline 203
"models": [{ "name": "gemini-3-pro-image-preview", "quality": "best" }], "samples": [{ "url": "https://raw.githubusercontent.com/user-a/bananahub-infographics/main/samples/sample-01.jpg", - Network accessline 204
"samples": [{ "url": "https://raw.githubusercontent.com/user-a/bananahub-infographics/main/samples/sample-01.jpg", "model": "gemini-3-pro-image-preview", - Network accessline 205
"url": "https://raw.githubusercontent.com/user-a/bananahub-infographics/main/samples/sample-01.jpg", - Network accessline 299
|------|---------|--------| | `bananahub` (npm) | CLI tool | ✅ Built at `/home/coder/project/nano-banana-hub/bananahub/` | | `bananahub-ai.github.io` | Hub static site | ✅ Live at `https://bananahub.ai` | - Network accessline 300
| `bananahub` (npm) | CLI tool | ✅ Built at `/home/coder/project/nano-banana-hub/bananahub/` | | `bananahub-ai.github.io` | Hub static site | ✅ Live at `https://bananahub.ai` | | `bananahub-api` | Cloudflare Worker for install tracking | ✅ - Network accessline 301
| `bananahub-ai.github.io` | Hub static site | ✅ Live at `https://bananahub.ai` |
BANANAHUB.zh-CN.md
- Network accessline 108
POST https://worker.bananahub.ai/api/installs - Network accessline 127
POST https://worker.bananahub.ai/api/usage - Network accessline 204
"models": [{ "name": "gemini-3-pro-image-preview", "quality": "best" }], "samples": [{ "url": "https://raw.githubusercontent.com/user-a/bananahub-infographics/main/samples/sample-01.jpg", - Network accessline 205
"samples": [{ "url": "https://raw.githubusercontent.com/user-a/bananahub-infographics/main/samples/sample-01.jpg", "model": "gemini-3-pro-image-preview", - Network accessline 206
"url": "https://raw.githubusercontent.com/user-a/bananahub-infographics/main/samples/sample-01.jpg", - Network accessline 305
|---|---|---| | `bananahub`(npm) | CLI | ✅ 已构建,路径:`/home/coder/project/nano-banana-hub/bananahub/` | | `bananahub-ai.github.io` | Hub 静态站点 | ✅ 已上线:`https://bananahub.ai` | - Network accessline 306
| `bananahub`(npm) | CLI | ✅ 已构建,路径:`/home/coder/project/nano-banana-hub/bananahub/` | | `bananahub-ai.github.io` | Hub 静态站点 | ✅ 已上线:`https://bananahub.ai` | | `bananahub-api` | 装机量 Cloudflare Worker | ✅ 已上线 | - Network accessline 307
| `bananahub-ai.github.io` | Hub 静态站点 | ✅ 已上线:`https://bananahub.ai` |
README.md
- Network accessline 24
# Open Agent Skills / skills.sh npx skills add https://github.com/bananahub-ai/bananahub-skill --skill bananahub - Network accessline 25
npx skills add https://github.com/bananahub-ai/bananahub-skill --skill bananahub - Network accessline 27
# Or install directly in Claude Code claude skill install https://github.com/bananahub-ai/bananahub-skill - Network accessline 28
claude skill install https://github.com/bananahub-ai/bananahub-skill - Network accessline 160
# Recommended GPT Image gateway profile python3 scripts/bananahub.py config quickset --provider openai-compatible --profile gpt --default-profile \ --base-url https://your-openai-compatible-endpoint --api-key <your_key> --model gpt-image- - Network accessline 161
python3 scripts/bananahub.py config quickset --provider openai-compatible --profile gpt --default-profile --base-url https://your-openai-compatible-endpoint --api-key <your_key> --model gpt-image-2 - Network accessline 162
--base-url https://your-openai-compatible-endpoint --api-key <your_key> --model gpt-image-2 - Access to secretsline 169
[Credential-related source omitted] - Access to secretsline 170
[Credential-related source omitted] - Network accessline 172
# Gemini-compatible relay profile python3 scripts/bananahub.py config quickset --provider gemini-compatible --profile nano --default-profile \ --base-url https://your-gemini-endpoint --api-key <your_key> --model gemini-3-pro-image-preview - Network accessline 173
python3 scripts/bananahub.py config quickset --provider gemini-compatible --profile nano --default-profile --base-url https://your-gemini-endpoint --api-key <your_key> --model gemini-3-pro-image-preview - Network accessline 174
--base-url https://your-gemini-endpoint --api-key <your_key> --model gemini-3-pro-image-preview - Network accessline 176
# Chat/completions-compatible image endpoint python3 scripts/bananahub.py config quickset --provider chatgpt-compatible --profile chat --default-profile \ --base-url https://your-chat-endpoint --api-key <your_key> --model gpt-5.4 - Network accessline 177
python3 scripts/bananahub.py config quickset --provider chatgpt-compatible --profile chat --default-profile --base-url https://your-chat-endpoint --api-key <your_key> --model gpt-5.4 - Network accessline 178
--base-url https://your-chat-endpoint --api-key <your_key> --model gpt-5.4
README.zh-CN.md
- Network accessline 24
# Open Agent Skills / skills.sh npx skills add https://github.com/bananahub-ai/bananahub-skill --skill bananahub - Network accessline 25
npx skills add https://github.com/bananahub-ai/bananahub-skill --skill bananahub - Network accessline 27
# 或直接安装到 Claude Code claude skill install https://github.com/bananahub-ai/bananahub-skill - Network accessline 28
claude skill install https://github.com/bananahub-ai/bananahub-skill - Network accessline 160
# 推荐的 GPT Image 网关 profile python3 scripts/bananahub.py config quickset --provider openai-compatible --profile gpt --default-profile \ --base-url https://your-openai-compatible-endpoint --api-key <your_key> --model gpt-image-2 - Network accessline 161
python3 scripts/bananahub.py config quickset --provider openai-compatible --profile gpt --default-profile --base-url https://your-openai-compatible-endpoint --api-key <your_key> --model gpt-image-2 - Network accessline 162
--base-url https://your-openai-compatible-endpoint --api-key <your_key> --model gpt-image-2 - Access to secretsline 169
[Credential-related source omitted] - Access to secretsline 170
[Credential-related source omitted] - Network accessline 172
# Gemini-compatible 中转 profile python3 scripts/bananahub.py config quickset --provider gemini-compatible --profile nano --default-profile \ --base-url https://your-gemini-endpoint --api-key <your_key> --model gemini-3-pro-image-preview - Network accessline 173
python3 scripts/bananahub.py config quickset --provider gemini-compatible --profile nano --default-profile --base-url https://your-gemini-endpoint --api-key <your_key> --model gemini-3-pro-image-preview - Network accessline 174
--base-url https://your-gemini-endpoint --api-key <your_key> --model gemini-3-pro-image-preview - Network accessline 176
# Chat/completions-compatible 图像接口 python3 scripts/bananahub.py config quickset --provider chatgpt-compatible --profile chat --default-profile \ --base-url https://your-chat-endpoint --api-key <your_key> --model gpt-5.4 - Network accessline 177
python3 scripts/bananahub.py config quickset --provider chatgpt-compatible --profile chat --default-profile --base-url https://your-chat-endpoint --api-key <your_key> --model gpt-5.4 - Network accessline 178
--base-url https://your-chat-endpoint --api-key <your_key> --model gpt-5.4
SKILL.md
- Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted] - Network accessline 37
- Install via Open Agent Skills: `npx skills add https://github.com/bananahub-ai/bananahub-skill --skill bananahub` - Network accessline 38
- Install in Claude Code directly: `claude skill install https://github.com/bananahub-ai/bananahub-skill` - Access to secretsline 73
[Credential-related source omitted] - Network accessline 76
[Credential-related source omitted] - Network accessline 77
[Credential-related source omitted] - Access to secretsline 77
[Credential-related source omitted] - Network accessline 78
[Credential-related source omitted] - Access to secretsline 78
[Credential-related source omitted] - Network accessline 79
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Network accessline 80
[Credential-related source omitted] - Access to secretsline 80
[Credential-related source omitted] - Network accessline 81
[Credential-related source omitted] - Access to secretsline 81
[Credential-related source omitted] - Network accessline 82
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Network accessline 85
- `python3 {baseDir}/scripts/bananahub.py config show` - `python3 {baseDir}/scripts/bananahub.py config doctor --json` - `python3 {baseDir}/scripts/bananahub.py config quickset --provider openai-compatible --profile gpt --default- - Network accessline 86
- `python3 {baseDir}/scripts/bananahub.py config doctor --json` - `python3 {baseDir}/scripts/bananahub.py config quickset --provider openai-compatible --profile gpt --default-profile --base-url https://your-openai-compatible-endpoint - - Network accessline 87
- `python3 {baseDir}/scripts/bananahub.py config quickset --provider openai-compatible --profile gpt --default-profile --base-url https://your-openai-compatible-endpoint --api-key <key> --model gpt-image-2` - Network accessline 88
- `python3 {baseDir}/scripts/bananahub.py config quickset --provider openai-compatible --profile gpt --default-profile --base-url https://your-openai-compatible-endpoint --api-key-stdin --model gpt-image-2`
references/hub-discovery.md
- Network accessline 20
1. Read `https://bananahub.ai/llms.txt` if you have not used BananaHub yet in the current conversation or if you need the latest entry-point guidance - Network accessline 21
2. Default to `https://bananahub.ai/catalog-curated.json` for safer recommendations; this includes bundled starter templates and installable official templates from `bananahub-ai/templates` - Network accessline 22
3. Use `https://bananahub.ai/catalog.json` when: - Network accessline 24
- curated results are weak - the user explicitly says BananaHub / hub / community / discovered 4. Use `https://bananahub.ai/agent-catalog.md` only as a readable summary when structured fields are not enough - Network accessline 26
4. Use `https://bananahub.ai/agent-catalog.md` only as a readable summary when structured fields are not enough
references/init-guide.md
- Network accessline 131
"gpt": { "provider": "openai-compatible", "openai_base_url": "https://example.com/v1", - Network accessline 132
[Credential-related source omitted] - Network accessline 133
"openai_base_url": "https://example.com/v1", - Access to secretsline 134
[Credential-related source omitted] - Access to secretsline 139
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted]
references/model-registry.json
- Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 64
[Credential-related source omitted]
references/official-sources.md
- Network accessline 11
### 1. Gemini API 图像生成文档 - **URL**: https://ai.google.dev/gemini-api/docs/image-generation - Network accessline 12
- **URL**: https://ai.google.dev/gemini-api/docs/image-generation - Network accessline 20
### 2. Gemini API Imagen Prompt Guide - **URL**: https://ai.google.dev/gemini-api/docs/imagen-prompt-guide - Network accessline 21
- **URL**: https://ai.google.dev/gemini-api/docs/imagen-prompt-guide - Network accessline 27
### 3. Vertex AI Imagen 编辑 API 语言说明 - **URL**: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api-edit - Network accessline 28
- **URL**: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/model-reference/imagen-api-edit - Network accessline 34
### 4. Google DeepMind Prompt Guide - **URL**: https://deepmind.google/models/gemini-image/prompt-guide/ - Network accessline 35
- **URL**: https://deepmind.google/models/gemini-image/prompt-guide/ - Network accessline 43
### 5. Google Developers Blog — 提示词最佳实践 - **URL**: https://developers.googleblog.com/en/how-to-prompt-gemini-2-5-flash-image-generation-for-the-best-results/ - Network accessline 44
- **URL**: https://developers.googleblog.com/en/how-to-prompt-gemini-2-5-flash-image-generation-for-the-best-results/ - Network accessline 54
### 6. Nano Banana Pro 提示词技巧 - **URL**: https://blog.google/products-and-platforms/products/gemini/prompting-tips-nano-banana-pro/ - Network accessline 55
- **URL**: https://blog.google/products-and-platforms/products/gemini/prompting-tips-nano-banana-pro/ - Network accessline 59
### 7. Gemini App 图像生成技巧 - **URL**: https://blog.google/products-and-platforms/products/gemini/image-generation-prompting-tips/ - Network accessline 60
- **URL**: https://blog.google/products-and-platforms/products/gemini/image-generation-prompting-tips/ - Network accessline 64
### 8. Nano Banana 2 (Gemini 3.1 Flash Image) - **URL**: https://deepmind.google/models/gemini-image/flash/ - Network accessline 65
- **URL**: https://deepmind.google/models/gemini-image/flash/ - Network accessline 72
### 9. Vertex AI 图像生成 Prompt 指南 - **URL**: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/image/img-gen-prompt-guide - Network accessline 73
- **URL**: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/image/img-gen-prompt-guide - Network accessline 80
### 10. Efficient Coder — Gemini Flash Image Prompting Guide - **URL**: https://www.xugj520.cn/en/archives/gemini-2-5-flash-image-prompting-guide.html - Network accessline 81
- **URL**: https://www.xugj520.cn/en/archives/gemini-2-5-flash-image-prompting-guide.html - Network accessline 85
### 11. DataCamp — Gemini 2.5 Flash Image Complete Guide - **URL**: https://www.datacamp.com/tutorial/gemini-2-5-flash-image-guide - Network accessline 86
- **URL**: https://www.datacamp.com/tutorial/gemini-2-5-flash-image-guide - Network accessline 89
### 12. eWeek — Best Nano Banana 2 Prompts 2026 - **URL**: https://www.eweek.com/news/best-nano-banana-2-prompts-gemini-3-1-flash-image/ - Network accessline 90
- **URL**: https://www.eweek.com/news/best-nano-banana-2-prompts-gemini-3-1-flash-image/
references/prompt-guide.md
- Instruction override signalline 108
- If a detail changes the **look** more than it clarifies the **task**, leave it out - In default mode, when a high-impact addition would materially change style or presentation, surface it as an option and wait for confirmation - In direct - Instruction override signalline 110
- In direct mode, still stay conservative; "direct" means skip confirmation, not invent more
references/provider-init-design.zh-CN.md
- Access to secretsline 11
[Credential-related source omitted] - Access to secretsline 27
[Credential-related source omitted] - Access to secretsline 28
[Credential-related source omitted] - Access to secretsline 30
[Credential-related source omitted] - Access to secretsline 53
[Credential-related source omitted] - Access to secretsline 75
[Credential-related source omitted] - Access to secretsline 76
[Credential-related source omitted] - Access to secretsline 95
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 121
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Access to secretsline 146
[Credential-related source omitted] - Access to secretsline 163
[Credential-related source omitted] - Access to secretsline 214
[Credential-related source omitted] - Access to secretsline 223
[Credential-related source omitted] - Access to secretsline 229
[Credential-related source omitted] - Access to secretsline 248
[Credential-related source omitted] - Access to secretsline 249
[Credential-related source omitted] - Access to secretsline 280
[Credential-related source omitted] - Access to secretsline 287
[Credential-related source omitted] - Access to secretsline 300
[Credential-related source omitted] - Access to secretsline 316
[Credential-related source omitted] - Access to secretsline 363
[Credential-related source omitted] - Network accessline 374
- Google Gemini API image generation: https://ai.google.dev/gemini-api/docs/image-generation - Network accessline 375
- Google Gen AI SDK for Python: https://googleapis.github.io/python-genai/ - Network accessline 376
- Gemini API OpenAI compatibility: https://ai.google.dev/gemini-api/docs/openai - Network accessline 377
- Gemini partner / gateway integrations: https://ai.google.dev/gemini-api/docs/partner-integration - Network accessline 378
- Vertex AI image generation: https://cloud.google.com/vertex-ai/generative-ai/docs/multimodal/image-generation - Network accessline 379
- Vertex AI API keys: https://cloud.google.com/vertex-ai/generative-ai/docs/start/api-keys - Network accessline 380
- Google Cloud ADC: https://cloud.google.com/docs/authentication/application-default-credentials
references/templates/LICENSE
scripts/bananahub.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 45
[Credential-related source omitted] - Network accessline 60
SKILL_CONFIG_PATH = runtime_cfg.SKILL_CONFIG_PATH TELEMETRY_STATE_PATH = runtime_cfg.TELEMETRY_STATE_PATH HUB_API_BASE = os.environ.get("BANANAHUB_HUB_API", "https://worker.bananahub.ai/api") - Network accessline 61
TELEMETRY_STATE_PATH = runtime_cfg.TELEMETRY_STATE_PATH HUB_API_BASE = os.environ.get("BANANAHUB_HUB_API", "https://worker.bananahub.ai/api") DEFAULT_TEMPLATE_REPO = "bananahub-ai/bananahub-skill" - Network accessline 62
[Credential-related source omitted] - Access to secretsline 62
[Credential-related source omitted] - Access to secretsline 167
[Credential-related source omitted] - Access to secretsline 230
[Credential-related source omitted] - Access to secretsline 235
[Credential-related source omitted] - Access to secretsline 237
[Credential-related source omitted] - Access to secretsline 238
[Credential-related source omitted] - Access to secretsline 239
[Credential-related source omitted] - Access to secretsline 241
[Credential-related source omitted] - Access to secretsline 242
[Credential-related source omitted] - Access to secretsline 243
[Credential-related source omitted] - Access to secretsline 244
[Credential-related source omitted] - Access to secretsline 251
[Credential-related source omitted] - Access to secretsline 309
[Credential-related source omitted] - Access to secretsline 311
[Credential-related source omitted] - Access to secretsline 314
[Credential-related source omitted] - Access to secretsline 333
[Credential-related source omitted] - Access to secretsline 495
[Credential-related source omitted] - Access to secretsline 546
[Credential-related source omitted] - Access to secretsline 547
[Credential-related source omitted] - Access to secretsline 578
[Credential-related source omitted] - Access to secretsline 581
[Credential-related source omitted] - Access to secretsline 587
[Credential-related source omitted] - Access to secretsline 588
[Credential-related source omitted] - Access to secretsline 601
[Credential-related source omitted] - Network accessline 676
return ( "Check the openai-compatible base_url. Many gateways expect a `/v1` suffix. " "For Google's official endpoint, use `https://generativelanguage.googleapis.com/v1beta/openai`." - Network accessline 677
"Check the openai-compatible base_url. Many gateways expect a `/v1` suffix. " "For Google's official endpoint, use `https://generativelanguage.googleapis.com/v1beta/openai`." ) - Network accessline 678
"For Google's official endpoint, use `https://generativelanguage.googleapis.com/v1beta/openai`." - Access to secretsline 970
[Credential-related source omitted] - Access to secretsline 971
[Credential-related source omitted] - Access to secretsline 972
[Credential-related source omitted] - Access to secretsline 973
[Credential-related source omitted] - Access to secretsline 975
[Credential-related source omitted] - Access to secretsline 977
[Credential-related source omitted] - Access to secretsline 984
[Credential-related source omitted] - Access to secretsline 1119
[Credential-related source omitted] - Access to secretsline 1121
[Credential-related source omitted] - Access to secretsline 1126
[Credential-related source omitted] - Access to secretsline 1135
[Credential-related source omitted] - Access to secretsline 1141
[Credential-related source omitted] - Access to secretsline 1147
[Credential-related source omitted] - Access to secretsline 1148
[Credential-related source omitted] - Access to secretsline 1157
[Credential-related source omitted] - Access to secretsline 1217
[Credential-related source omitted] - Access to secretsline 1328
[Credential-related source omitted] - Access to secretsline 1335
[Credential-related source omitted] - Access to secretsline 1336
[Credential-related source omitted] - Access to secretsline 1337
[Credential-related source omitted] - Access to secretsline 1338
[Credential-related source omitted] - Access to secretsline 1351
[Credential-related source omitted] - Access to secretsline 1353
[Credential-related source omitted] - Access to secretsline 1354
[Credential-related source omitted] - Access to secretsline 1380
[Credential-related source omitted] - Access to secretsline 1411
[Credential-related source omitted] - Access to secretsline 1413
[Credential-related source omitted] - Access to secretsline 1528
[Credential-related source omitted] - Access to secretsline 1534
[Credential-related source omitted] - Access to secretsline 1559
[Credential-related source omitted] - Access to secretsline 1583
[Credential-related source omitted] - Access to secretsline 1584
[Credential-related source omitted] - Access to secretsline 1593
[Credential-related source omitted] - Access to secretsline 1616
[Credential-related source omitted] - Access to secretsline 1648
[Credential-related source omitted] - Access to secretsline 1655
[Credential-related source omitted] - Access to secretsline 1656
[Credential-related source omitted] - Access to secretsline 1670
[Credential-related source omitted] - Access to secretsline 1671
[Credential-related source omitted] - Access to secretsline 1678
[Credential-related source omitted] - Access to secretsline 1682
[Credential-related source omitted] - Access to secretsline 1686
[Credential-related source omitted] - Access to secretsline 1694
[Credential-related source omitted] - Access to secretsline 1698
[Credential-related source omitted] - Access to secretsline 1721
[Credential-related source omitted] - Access to secretsline 1722
[Credential-related source omitted] - Access to secretsline 1861
[Credential-related source omitted] - Access to secretsline 1862
[Credential-related source omitted] - Access to secretsline 1892
[Credential-related source omitted] - Access to secretsline 1900
[Credential-related source omitted] - Access to secretsline 1976
[Credential-related source omitted] - Access to secretsline 2277
[Credential-related source omitted] - Access to secretsline 3211
[Credential-related source omitted] - Access to secretsline 3225
[Credential-related source omitted]
scripts/config_store.py
- Executable scriptline 1
Executable file - Access to secretsline 78
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted] - Access to secretsline 158
[Credential-related source omitted] - Access to secretsline 159
[Credential-related source omitted] - Access to secretsline 162
[Credential-related source omitted] - Access to secretsline 164
[Credential-related source omitted] - Access to secretsline 178
[Credential-related source omitted] - Access to secretsline 181
[Credential-related source omitted] - Access to secretsline 193
[Credential-related source omitted] - Access to secretsline 200
[Credential-related source omitted] - Access to secretsline 201
[Credential-related source omitted] - Access to secretsline 205
[Credential-related source omitted] - Access to secretsline 206
[Credential-related source omitted] - Access to secretsline 210
[Credential-related source omitted] - Access to secretsline 211
[Credential-related source omitted] - Access to secretsline 234
[Credential-related source omitted] - Access to secretsline 235
[Credential-related source omitted] - Access to secretsline 236
[Credential-related source omitted] - Access to secretsline 237
[Credential-related source omitted] - Access to secretsline 238
[Credential-related source omitted] - Access to secretsline 239
[Credential-related source omitted] - Access to secretsline 240
[Credential-related source omitted] - Access to secretsline 241
[Credential-related source omitted] - Access to secretsline 242
[Credential-related source omitted] - Access to secretsline 324
[Credential-related source omitted] - Access to secretsline 338
[Credential-related source omitted] - Access to secretsline 342
[Credential-related source omitted] - Access to secretsline 344
[Credential-related source omitted] - Access to secretsline 346
[Credential-related source omitted] - Access to secretsline 347
[Credential-related source omitted] - Access to secretsline 348
[Credential-related source omitted] - Access to secretsline 349
[Credential-related source omitted] - Access to secretsline 350
[Credential-related source omitted] - Access to secretsline 351
[Credential-related source omitted] - Access to secretsline 386
[Credential-related source omitted] - Access to secretsline 387
[Credential-related source omitted] - Access to secretsline 388
[Credential-related source omitted] - Access to secretsline 412
[Credential-related source omitted] - Access to secretsline 426
[Credential-related source omitted] - Access to secretsline 430
[Credential-related source omitted] - Network accessline 433
endpoint_resolution = {"configured_base_url": base_url, "resolved_base_url": chatgpt_base_url_fn(config)} elif provider == cfg.PROVIDER_OPENAI: base_url = config.get("OPENAI_BASE_URL") or "https://api.openai.com/v1" - Network accessline 434
[Credential-related source omitted] - Network accessline 435
base_url = config.get("OPENAI_BASE_URL") or "https://api.openai.com/v1" - Access to secretsline 436
[Credential-related source omitted] - Access to secretsline 441
[Credential-related source omitted] - Access to secretsline 447
[Credential-related source omitted] - Access to secretsline 455
[Credential-related source omitted]
scripts/providers/__init__.py
- Executable scriptline 1
Executable file
scripts/providers/chatgpt_compatible.py
- Executable scriptline 1
Executable file - Access to secretsline 26
[Credential-related source omitted] - Network accessline 27
"Content-Type": "application/json", "Accept": "application/json", "User-Agent": config.get("BANANAHUB_CHATGPT_USER_AGENT") or "BananaHub/0.1 (+https://bananahub.ai)", - Network accessline 28
"Accept": "application/json", "User-Agent": config.get("BANANAHUB_CHATGPT_USER_AGENT") or "BananaHub/0.1 (+https://bananahub.ai)", } - Network accessline 29
"User-Agent": config.get("BANANAHUB_CHATGPT_USER_AGENT") or "BananaHub/0.1 (+https://bananahub.ai)", - Access to secretsline 88
[Credential-related source omitted] - Possible obfuscationline 106
image_bytes = base64.b64decode(re.sub(r"\s+", "", b64_data))
scripts/providers/common.py
- Executable scriptline 1
Executable file
scripts/providers/gemini.py
- Executable scriptline 1
Executable file
scripts/providers/openai_images.py
- Executable scriptline 1
Executable file - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 33
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Network accessline 41
def provider_base_url(config): return config.get("OPENAI_BASE_URL") or config.get("GOOGLE_GEMINI_BASE_URL") or "https://api.openai.com/v1" - Network accessline 42
return config.get("OPENAI_BASE_URL") or config.get("GOOGLE_GEMINI_BASE_URL") or "https://api.openai.com/v1" - Possible obfuscationline 126
images.append(base64.b64decode(b64_json))
scripts/runtime_config.py
- Executable scriptline 1
Executable file - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 36
[Credential-related source omitted] - Access to secretsline 66
[Credential-related source omitted] - Access to secretsline 67
[Credential-related source omitted] - Access to secretsline 68
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 85
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 88
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted]
scripts/validate_templates.py
- Executable scriptline 1
#!/usr/bin/env python3
tests/test_chatgpt_compatible.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 15
def test_markdown_image_extraction(): payload = {"choices": [{"message": {"content": "Here is it: "}}]} - Network accessline 16
payload = {"choices": [{"message": {"content": "Here is it: "}}]} - Network accessline 17
assert bananahub._extract_chatgpt_image_reference(payload) == "https://example.com/cat.png" - Network accessline 34
"content": [ {"type": "text", "text": "done"}, {"type": "image_url", "image_url": {"url": "https://example.com/result.webp"}}, - Network accessline 35
{"type": "text", "text": "done"}, {"type": "image_url", "image_url": {"url": "https://example.com/result.webp"}}, ] - Network accessline 36
{"type": "image_url", "image_url": {"url": "https://example.com/result.webp"}}, - Network accessline 40
] } assert bananahub._extract_chatgpt_image_reference(payload) == "https://example.com/result.webp" - Network accessline 42
assert bananahub._extract_chatgpt_image_reference(payload) == "https://example.com/result.webp"
tests/test_config_store.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 24
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted] - Access to secretsline 32
[Credential-related source omitted] - Network accessline 36
[Credential-related source omitted] - Network accessline 37
[Credential-related source omitted] - Access to secretsline 37
[Credential-related source omitted] - Network accessline 51
[Credential-related source omitted] - Access to secretsline 51
[Credential-related source omitted] - Network accessline 52
[Credential-related source omitted] - Access to secretsline 52
[Credential-related source omitted] - Network accessline 53
"OPENAI_BASE_URL": "https://example.com/v1", - Network accessline 72
[Credential-related source omitted] - Network accessline 73
[Credential-related source omitted] - Access to secretsline 73
[Credential-related source omitted] - Access to secretsline 74
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Access to secretsline 87
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted] - Network accessline 94
[Credential-related source omitted] - Access to secretsline 94
[Credential-related source omitted] - Network accessline 95
[Credential-related source omitted] - Access to secretsline 95
[Credential-related source omitted] - Network accessline 96
"OPENAI_BASE_URL": "https://gateway.example/v1", - Access to secretsline 106
[Credential-related source omitted] - Network accessline 107
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Network accessline 108
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Network accessline 109
"BANANAHUB_CHATGPT_BASE_URL": "https://chat.example/v1", - Access to secretsline 115
[Credential-related source omitted] - Access to secretsline 116
[Credential-related source omitted] - Access to secretsline 123
[Credential-related source omitted] - Network accessline 155
[Credential-related source omitted] - Network accessline 156
[Credential-related source omitted] - Access to secretsline 156
[Credential-related source omitted] - Network accessline 157
"chatgpt_base_url": "https://example.com/chatgpt-api", - Network accessline 172
assert config["BANANAHUB_PROVIDER"] == "chatgpt-compatible" assert config["BANANAHUB_CHATGPT_API_KEY"] == "test-key" assert config["BANANAHUB_CHATGPT_BASE_URL"] == "https://example.com/chatgpt-api" - Network accessline 173
[Credential-related source omitted] - Access to secretsline 173
[Credential-related source omitted] - Network accessline 174
assert config["BANANAHUB_CHATGPT_BASE_URL"] == "https://example.com/chatgpt-api" - Access to secretsline 192
[Credential-related source omitted] - Access to secretsline 194
[Credential-related source omitted] - Network accessline 204
[Credential-related source omitted] - Network accessline 205
[Credential-related source omitted] - Access to secretsline 205
[Credential-related source omitted] - Network accessline 206
"chatgpt_base_url": "https://token.bigfish.space", - Network accessline 213
config_store.write_persisted_config(data, config_path=config_path) os.environ["BANANAHUB_CHATGPT_API_KEY"] = "env-key" os.environ["BANANAHUB_CHATGPT_BASE_URL"] = "https://old.example/chat" - Network accessline 214
[Credential-related source omitted] - Access to secretsline 214
[Credential-related source omitted] - Network accessline 215
[Credential-related source omitted] - Access to secretsline 215
[Credential-related source omitted] - Access to secretsline 216
[Credential-related source omitted] - Access to secretsline 217
[Credential-related source omitted] - Network accessline 226
[Credential-related source omitted] - Access to secretsline 226
[Credential-related source omitted] - Network accessline 227
assert config["BANANAHUB_CHATGPT_BASE_URL"] == "https://token.bigfish.space" - Access to secretsline 242
[Credential-related source omitted] - Access to secretsline 244
[Credential-related source omitted] - Access to secretsline 260
[Credential-related source omitted] - Access to secretsline 262
[Credential-related source omitted] - Network accessline 272
[Credential-related source omitted] - Network accessline 273
[Credential-related source omitted] - Access to secretsline 273
[Credential-related source omitted] - Network accessline 274
"chatgpt_base_url": "https://token.bigfish.space", - Network accessline 281
config_store.write_persisted_config(data, config_path=config_path) os.environ["BANANAHUB_CHATGPT_API_KEY"] = "env-key" os.environ["BANANAHUB_CHATGPT_BASE_URL"] = "https://old.example/chat" - Network accessline 282
[Credential-related source omitted] - Access to secretsline 282
[Credential-related source omitted] - Network accessline 283
[Credential-related source omitted] - Access to secretsline 283
[Credential-related source omitted] - Access to secretsline 284
[Credential-related source omitted] - Access to secretsline 285
[Credential-related source omitted] - Network accessline 294
[Credential-related source omitted] - Access to secretsline 294
[Credential-related source omitted] - Network accessline 295
assert config["BANANAHUB_CHATGPT_BASE_URL"] == "https://old.example/chat" - Access to secretsline 302
[Credential-related source omitted] - Access to secretsline 304
[Credential-related source omitted] - Access to secretsline 316
[Credential-related source omitted]
tests/test_generate_retry.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 2
import argparse import contextlib import http.client - Network accessline 3
import contextlib import http.client import importlib.util - Network accessline 4
import http.client - Network accessline 61
[Credential-related source omitted] - Network accessline 62
[Credential-related source omitted] - Access to secretsline 62
[Credential-related source omitted] - Network accessline 63
"OPENAI_BASE_URL": "https://token.bigfish.space/v1", - Access to secretsline 137
[Credential-related source omitted] - Access to secretsline 142
[Credential-related source omitted] - Access to secretsline 145
[Credential-related source omitted] - Network accessline 149
def test_server_error_detection_includes_transient_network_markers(): retryable_errors = [ http.client.RemoteDisconnected("Remote end closed connection without response"), - Network accessline 150
retryable_errors = [ http.client.RemoteDisconnected("Remote end closed connection without response"), RuntimeError("RemoteDisconnected: Remote end closed connection without response"), - Network accessline 151
http.client.RemoteDisconnected("Remote end closed connection without response"), - Access to secretsline 160
[Credential-related source omitted]
tests/test_onboarding_config.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 22
[Credential-related source omitted] - Access to secretsline 23
[Credential-related source omitted] - Access to secretsline 38
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Access to secretsline 50
[Credential-related source omitted] - Access to secretsline 54
[Credential-related source omitted] - Access to secretsline 56
[Credential-related source omitted] - Access to secretsline 57
[Credential-related source omitted] - Network accessline 68
[Credential-related source omitted] - Network accessline 69
[Credential-related source omitted] - Access to secretsline 69
[Credential-related source omitted] - Network accessline 70
args.base_url = "https://token.bigfish.space/v1" - Network accessline 85
[Credential-related source omitted] - Network accessline 86
[Credential-related source omitted] - Access to secretsline 86
[Credential-related source omitted] - Network accessline 87
base_url="https://token.bigfish.space/v1", - Access to secretsline 89
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Network accessline 102
[Credential-related source omitted] - Access to secretsline 102
[Credential-related source omitted] - Network accessline 103
"model": "gpt-image-2", "openai_base_url": "https://token.bigfish.space/v1", } - Network accessline 104
"openai_base_url": "https://token.bigfish.space/v1", - Network accessline 118
def test_doctor_reports_missing_secret_and_agent_contract(): config = {"BANANAHUB_PROVIDER": "openai-compatible", "OPENAI_BASE_URL": "https://token.bigfish.space/v1"} - Network accessline 119
config = {"BANANAHUB_PROVIDER": "openai-compatible", "OPENAI_BASE_URL": "https://token.bigfish.space/v1"} - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 128
[Credential-related source omitted] - Access to secretsline 143
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Access to secretsline 159
[Credential-related source omitted] - Network accessline 160
[Credential-related source omitted] - Access to secretsline 160
[Credential-related source omitted] - Network accessline 161
[Credential-related source omitted] - Access to secretsline 161
[Credential-related source omitted] - Network accessline 162
"BANANAHUB_CHATGPT_BASE_URL": "https://chat.example/v1", - Access to secretsline 168
[Credential-related source omitted] - Access to secretsline 169
[Credential-related source omitted] - Access to secretsline 175
[Credential-related source omitted] - Network accessline 184
[Credential-related source omitted] - Access to secretsline 184
[Credential-related source omitted] - Network accessline 185
[Credential-related source omitted] - Access to secretsline 185
[Credential-related source omitted] - Network accessline 186
"BANANAHUB_CHATGPT_BASE_URL": "https://token.bigfish.space", - Access to secretsline 194
[Credential-related source omitted] - Network accessline 209
assert diagnosis["status"] == "ok" assert diagnosis["precedence"]["env_mode"] == "fill-missing" assert diagnosis["effective_config"]["base_url"] == "https://token.bigfish.space" - Network accessline 210
assert diagnosis["precedence"]["env_mode"] == "fill-missing" assert diagnosis["effective_config"]["base_url"] == "https://token.bigfish.space" assert diagnosis["env_shadowed_config_sources"] == skipped_env - Network accessline 211
assert diagnosis["effective_config"]["base_url"] == "https://token.bigfish.space"
tests/test_openai_images.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 105
[Credential-related source omitted] - Network accessline 117
assert error is None assert calls[0]["method"] == "POST" assert calls[0]["url"] == "https://api.openai.com/v1/images/generations" - Network accessline 118
assert calls[0]["method"] == "POST" assert calls[0]["url"] == "https://api.openai.com/v1/images/generations" assert calls[0]["headers"]["Authorization"] == "Bearer test-key" - Network accessline 119
assert calls[0]["url"] == "https://api.openai.com/v1/images/generations" - Access to secretsline 136
[Credential-related source omitted] - Access to secretsline 138
[Credential-related source omitted] - Access to secretsline 141
[Credential-related source omitted] - Access to secretsline 150
[Credential-related source omitted] - Access to secretsline 152
[Credential-related source omitted] - Access to secretsline 170
[Credential-related source omitted] - Access to secretsline 172
[Credential-related source omitted] - Access to secretsline 175
[Credential-related source omitted] - Access to secretsline 185
[Credential-related source omitted] - Access to secretsline 187
[Credential-related source omitted] - Network accessline 217
[Credential-related source omitted] - Network accessline 218
[Credential-related source omitted] - Access to secretsline 218
[Credential-related source omitted] - Network accessline 219
"OPENAI_BASE_URL": "https://token.bigfish.space/v1", - Network accessline 230
assert warnings == [] assert error is None assert calls[0]["url"] == "https://token.bigfish.space/v1/images/generations" - Network accessline 231
assert error is None assert calls[0]["url"] == "https://token.bigfish.space/v1/images/generations" assert calls[0]["headers"]["Authorization"] == "Bearer test-key" - Network accessline 232
assert calls[0]["url"] == "https://token.bigfish.space/v1/images/generations" - Network accessline 258
[Credential-related source omitted] - Access to secretsline 258
[Credential-related source omitted] - Network accessline 259
[Credential-related source omitted] - Access to secretsline 259
[Credential-related source omitted] - Network accessline 260
"OPENAI_BASE_URL": "https://token.bigfish.space/v1", - Network accessline 290
[Credential-related source omitted] - Network accessline 291
[Credential-related source omitted] - Access to secretsline 291
[Credential-related source omitted] - Network accessline 292
"OPENAI_BASE_URL": "https://token.bigfish.space/v1", - Network accessline 326
[Credential-related source omitted] - Network accessline 327
[Credential-related source omitted] - Access to secretsline 327
[Credential-related source omitted] - Network accessline 328
"OPENAI_BASE_URL": "https://token.bigfish.space/v1", - Access to secretsline 362
[Credential-related source omitted] - Access to secretsline 391
[Credential-related source omitted] - Access to secretsline 429
[Credential-related source omitted] - Network accessline 448
assert warnings == [] assert error is None assert calls[0]["url"] == "https://api.openai.com/v1/images/edits" - Network accessline 449
assert error is None assert calls[0]["url"] == "https://api.openai.com/v1/images/edits" assert calls[0]["fields"] == { - Network accessline 450
assert calls[0]["url"] == "https://api.openai.com/v1/images/edits" - Access to secretsline 483
[Credential-related source omitted] - Access to secretsline 512
[Credential-related source omitted]
tests/test_provider_common.py
tests/test_runtime_config.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 23
def test_openai_endpoint_normalization(): result = runtime_config.resolve_openai_endpoint("https://api.example.com") - Network accessline 24
result = runtime_config.resolve_openai_endpoint("https://api.example.com") - Network accessline 25
assert result["resolved_base_url"] == "https://api.example.com/v1" - Network accessline 28
def test_gemini_endpoint_version_split(): result = runtime_config.resolve_genai_endpoint("https://generativelanguage.googleapis.com/v1beta") - Network accessline 29
result = runtime_config.resolve_genai_endpoint("https://generativelanguage.googleapis.com/v1beta") - Network accessline 30
assert result["resolved_base_url"] == "https://generativelanguage.googleapis.com"
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 5 facts
- Contacts worker.bananahub.ai, which SKILL.md, the README and the plugin manifest do not mentionscripts/bananahub.py:62High confidence
- Contacts generativelanguage.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/bananahub.py:678High confidence
- Contacts api.openai.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/config_store.py:435High confidence
- Contacts bananahub.ai, which SKILL.md, the README and the plugin manifest do not mentionscripts/providers/chatgpt_compatible.py:29High confidence
- Contacts api.openai.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/providers/openai_images.py:42High confidence
Signal confidence: 495 facts
- Network access in code of documentationBANANAHUB.md:108Low confidence
- Network access in code of documentationBANANAHUB.md:126Low confidence
- Network access in code of documentationBANANAHUB.md:203Low confidence
- Network access in code of documentationBANANAHUB.md:204Low confidence
- Network access in code of documentationBANANAHUB.md:205Low confidence
- Network access in prose of documentationBANANAHUB.md:299Low confidence
- Network access in prose of documentationBANANAHUB.md:300Low confidence
- Network access in prose of documentationBANANAHUB.md:301Low confidence
- Network access in code of documentationBANANAHUB.zh-CN.md:108Low confidence
- Network access in code of documentationBANANAHUB.zh-CN.md:127Low confidence
- Network access in code of documentationBANANAHUB.zh-CN.md:204Low confidence
- Network access in code of documentationBANANAHUB.zh-CN.md:205Low confidence
- Network access in code of documentationBANANAHUB.zh-CN.md:206Low confidence
- Network access in prose of documentationBANANAHUB.zh-CN.md:305Low confidence
- Network access in prose of documentationBANANAHUB.zh-CN.md:306Low confidence
- Network access in prose of documentationBANANAHUB.zh-CN.md:307Low confidence
- Network access in code of documentationREADME.md:24Low confidence
- Network access in code of documentationREADME.md:25Low confidence
- Network access in code of documentationREADME.md:27Low confidence
- Network access in code of documentationREADME.md:28Low confidence
- Network access in code of documentationREADME.md:160Low confidence
- Network access in code of documentationREADME.md:161Low confidence
- Network access in code of documentationREADME.md:162Low confidence
- Access to secrets in code of documentationREADME.md:169Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueREADME.md:170Low confidence
- Network access in code of documentationREADME.md:172Low confidence
- Network access in code of documentationREADME.md:173Low confidence
- Network access in code of documentationREADME.md:174Low confidence
- Network access in code of documentationREADME.md:176Low confidence
- Network access in code of documentationREADME.md:177Low confidence
- Network access in code of documentationREADME.md:178Low confidence
- Network access in code of documentationREADME.zh-CN.md:24Low confidence
- Network access in code of documentationREADME.zh-CN.md:25Low confidence
- Network access in code of documentationREADME.zh-CN.md:27Low confidence
- Network access in code of documentationREADME.zh-CN.md:28Low confidence
- Network access in code of documentationREADME.zh-CN.md:160Low confidence
- Network access in code of documentationREADME.zh-CN.md:161Low confidence
- Network access in code of documentationREADME.zh-CN.md:162Low confidence
- Access to secrets in code of documentationREADME.zh-CN.md:169Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueREADME.zh-CN.md:170Low confidence
- Network access in code of documentationREADME.zh-CN.md:172Low confidence
- Network access in code of documentationREADME.zh-CN.md:173Low confidence
- Network access in code of documentationREADME.zh-CN.md:174Low confidence
- Network access in code of documentationREADME.zh-CN.md:176Low confidence
- Network access in code of documentationREADME.zh-CN.md:177Low confidence
- Network access in code of documentationREADME.zh-CN.md:178Low confidence
- Access to secrets in the frontmatter of the SKILL.mdSKILL.md:22Low confidence
- Access to secrets in the frontmatter of the SKILL.mdSKILL.md:23Low confidence
- Access to secrets in the frontmatter of the SKILL.mdSKILL.md:24Low confidence
- Access to secrets in the frontmatter of the SKILL.mdSKILL.md:25Low confidence
and 445 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.