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.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit ffee193d135a0e84875a2073ed403c121014e393

113GitHub stars
0stars in 7 days
1skill in this repository
0commits in 30 days

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

Oct 25, 2026Oct 25, 2026113

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 tokens

Always available to the agent

SKILL.md

6,783 tokens

When the skill is activated

Reference documents

61,759 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Quick Start
  2. Key Paths
  3. First-Run Detection
  4. Runtime Mode Layers
  5. Implicit Image Request Flow
  6. Command Routing
  7. Three Optimization Modes
  8. Prompt Optimization Summary
  9. Image Generation Flow
  10. Image Editing Flow
  11. Iteration Guide
  12. Template System Summary
  13. Safety Rules

Scripts executed separately

  • scripts/bananahub.py
  • scripts/config_store.py
  • scripts/providers/__init__.py
  • scripts/providers/chatgpt_compatible.py
  • scripts/providers/common.py
  • scripts/providers/gemini.py
  • scripts/providers/openai_images.py
  • scripts/runtime_config.py
  • scripts/validate_templates.py
  • tests/test_chatgpt_compatible.py
  • tests/test_config_store.py
  • tests/test_generate_retry.py
  • tests/test_onboarding_config.py
  • tests/test_openai_images.py
  • tests/test_provider_common.py
  • tests/test_runtime_config.py

Files

  • .gitignoreasset324 bytes
  • BANANAHUB.mddoc12,252 bytes
  • BANANAHUB.zh-CN.mddoc10,701 bytes
  • CONTRIBUTING.mddoc819 bytes
  • LICENSEasset1,079 bytes
  • README.mddoc15,275 bytes
  • README.zh-CN.mddoc14,462 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • SKILL.mdcore28,748 bytes
  • agents/openai.yamlasset370 bytes
  • docs/assets/github/prompts/readme-hero-gpt-5-4.mddoc1,618 bytes
  • docs/assets/github/prompts/setup-guide-gpt-5-4.mddoc1,448 bytes
  • docs/assets/github/prompts/skill-architecture-gpt-5-4.mddoc1,465 bytes
  • docs/assets/github/prompts/user-flow-infographic-gpt-5-4.mddoc1,406 bytes
  • docs/assets/github/readme-hero-gpt-5-4.pngasset1,356,507 bytes
  • docs/assets/github/setup-guide-gpt-5-4.pngasset1,219,958 bytes
  • docs/assets/github/skill-architecture-gpt-5-4.pngasset1,074,969 bytes
  • docs/assets/github/user-flow-infographic-gpt-5-4.pngasset1,282,527 bytes
  • references/capability-registry.mddoc7,424 bytes
  • references/hub-discovery.mddoc5,261 bytes
  • references/init-guide.mddoc10,262 bytes
  • references/model-registry.jsonasset4,436 bytes
  • references/official-sources.mddoc6,959 bytes
  • references/optimization-pipeline.mddoc16,028 bytes
  • references/profiles/3d.mddoc5,149 bytes
  • references/profiles/concept-art.mddoc5,110 bytes
  • references/profiles/diagram.mddoc7,313 bytes
  • references/profiles/general.mddoc2,314 bytes
  • references/profiles/illustration.mddoc8,977 bytes
  • references/profiles/minimal.mddoc4,808 bytes
  • references/profiles/photo.mddoc6,054 bytes
  • references/profiles/product.mddoc4,738 bytes
  • references/profiles/sticker.mddoc3,723 bytes
  • references/profiles/text-heavy.mddoc6,029 bytes
  • references/prompt-guide.mddoc14,247 bytes
  • references/provider-init-design.zh-CN.mddoc10,488 bytes
  • references/providers/gemini.mddoc1,604 bytes
  • references/providers/openai-gpt-image.mddoc2,740 bytes
  • references/template-format-spec.mddoc12,482 bytes
  • references/template-system.mddoc20,855 bytes
  • references/templates/LICENSEasset497 bytes
  • references/templates/README.mddoc1,224 bytes
  • references/templates/article-one-page-summary/README.mddoc1,362 bytes
  • references/templates/article-one-page-summary/samples/sample-gpt-image-2-01.pngasset1,325,380 bytes
  • references/templates/article-one-page-summary/template.mddoc7,126 bytes
  • references/templates/background-replace-edit/README.mddoc1,519 bytes
  • references/templates/background-replace-edit/samples/sample-gpt-image-2-01.pngasset1,348,714 bytes
  • references/templates/background-replace-edit/template.mddoc5,281 bytes
  • references/templates/info-diagram/README.mddoc1,319 bytes
  • references/templates/info-diagram/samples/sample-3.1-flash-01.pngasset936,831 bytes
  • references/templates/info-diagram/samples/sample-gpt-image-2-01.pngasset950,470 bytes
  • references/templates/info-diagram/template.mddoc5,369 bytes
  • references/templates/product-white-bg/README.mddoc1,572 bytes
  • references/templates/product-white-bg/samples/sample-3.1-flash-01.pngasset640,968 bytes
  • references/templates/product-white-bg/samples/sample-gpt-image-2-01.pngasset1,456,644 bytes
  • references/templates/product-white-bg/template.mddoc5,943 bytes
  • references/templates/repo-explainer-diagram/README.mddoc1,583 bytes
  • references/templates/repo-explainer-diagram/samples/sample-3-pro-01.pngasset935,969 bytes
  • references/templates/repo-explainer-diagram/samples/sample-3-pro-02.pngasset938,731 bytes
  • references/templates/repo-explainer-diagram/samples/sample-gpt-image-2-01.pngasset1,012,602 bytes
  • references/templates/repo-explainer-diagram/template.mddoc6,960 bytes
  • scripts/bananahub.pyruns144,432 bytes
  • scripts/config_store.pyruns20,129 bytes
  • scripts/providers/__init__.pyruns47 bytes
  • scripts/providers/chatgpt_compatible.pyruns6,191 bytes
  • scripts/providers/common.pyruns4,792 bytes
  • scripts/providers/gemini.pyruns2,450 bytes
  • scripts/providers/openai_images.pyruns10,295 bytes
  • scripts/runtime_config.pyruns9,306 bytes
  • scripts/validate_templates.pyruns9,106 bytes
  • tests/test_chatgpt_compatible.pyruns1,658 bytes
  • tests/test_config_store.pyruns11,544 bytes
  • tests/test_generate_retry.pyruns6,366 bytes
  • tests/test_onboarding_config.pyruns11,729 bytes
  • tests/test_openai_images.pyruns19,274 bytes
  • tests/test_provider_common.pyruns1,998 bytes
  • tests/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 GitHub

Skills 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 scripts

Automated 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:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
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

  • Network accessline 12
    License text: https://creativecommons.org/licenses/by/4.0/
  • Network accessline 13
    https://creativecommons.org/licenses/by/4.0/

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: ![cat](https://example.com/cat.png)"}}]}
  • Network accessline 16
    payload = {"choices": [{"message": {"content": "Here is it: ![cat](https://example.com/cat.png)"}}]}
  • 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

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 46
    result = common.http_multipart_request(             "POST",             "https://example.com/upload",
  • Network accessline 47
    [Credential-related source omitted]
  • Network accessline 48
    "https://example.com/upload",

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
Signal confidence: 495 facts

and 445 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.