Skip to content

feat(tools): add TinyFish cloud browser provider#6329

Open
simantak-dabhade wants to merge 1 commit intoNousResearch:mainfrom
simantak-dabhade:feat/tinyfish-browser-provider
Open

feat(tools): add TinyFish cloud browser provider#6329
simantak-dabhade wants to merge 1 commit intoNousResearch:mainfrom
simantak-dabhade:feat/tinyfish-browser-provider

Conversation

@simantak-dabhade
Copy link
Copy Markdown

Summary

Adds TinyFish as a cloud browser provider alongside Browserbase, Browser Use, and Firecrawl. All browser tools route through TinyFish's cloud browser via CDP when selected.

TinyFish provides low-latency cloud browsers with built-in stealth and proxies. Sessions are created via a simple POST request that returns a CDP websocket URL — Hermes connects to it and drives the browser as normal.

Changes

  • tools/browser_providers/tinyfish.pyTinyFishBrowserProvider implementing CloudBrowserProvider ABC
  • tools/browser_tool.py — register under "tinyfish" key in _PROVIDER_REGISTRY
  • hermes_cli/tools_config.py — add TinyFish to the onboarding provider picker
  • hermes_cli/config.py — add TINYFISH_API_KEY, TINYFISH_API_URL, TINYFISH_BROWSER_TIMEOUT; bump config version 12 → 13
  • hermes_cli/nous_subscription.py — add tinyfish to browser label mapping and feature state resolver
  • website/docs/reference/environment-variables.md — document the three new env vars
  • website/docs/user-guide/features/browser.md — add TinyFish setup section
  • tests/tools/test_browser_camofox_state.py — bump expected config version to 13

Setup

# Add to ~/.hermes/.env
TINYFISH_API_KEY=your_key_here

Get your API key at agent.tinyfish.ai/api-keys. Then select TinyFish as your browser provider:

hermes setup tools
# → Browser Automation → TinyFish

Optional settings:

# Inactivity timeout in seconds (default: 300, silently capped to your plan maximum)
TINYFISH_BROWSER_TIMEOUT=600

# Override API URL for staging/dev
TINYFISH_API_URL=https://staging.api.browser.tinyfish.ai

Implementation notes

  • No close endpoint — TinyFish sessions auto-expire on inactivity timeout. close_session() and emergency_cleanup() are intentional no-ops (not laziness — there's genuinely no delete endpoint).
  • Auth header — uses X-API-Key rather than Authorization: Bearer, unlike the other providers.
  • Managed gateway readyresolve_managed_tool_gateway("tinyfish") is wired up in _get_config_or_none() so the Nous Portal path works in a future pass without a code change.
  • Explicit opt-in only — TinyFish is not added to the auto-detection fallback chain (Browser Use → Browserbase). Users select it explicitly via config or hermes setup tools.

Test plan

  • hermes setup tools → TinyFish appears in provider picker with tagline "Low latency browser with stealth & proxies"
  • Selecting TinyFish sets browser.cloud_provider: tinyfish in ~/.hermes/config.yaml
  • TINYFISH_API_KEY set → is_configured() returns True; unset → False
  • hermes → ask agent to navigate to a URL → TinyFish session created, CDP URL returned, browser connects
  • Existing Browserbase / Browser Use / Firecrawl / Local / Camofox paths unaffected
  • pytest tests/tools/test_browser_camofox_state.py passes with config version 13

@simantak-dabhade simantak-dabhade force-pushed the feat/tinyfish-browser-provider branch from 49e15a3 to fd8715b Compare April 16, 2026 18:00
@simantak-dabhade
Copy link
Copy Markdown
Author

Hey @alt-glitch @rob-maron — gentle nudge on this one when you have a minute 🙏

This PR adds TinyFish as a cloud browser provider, closely following the pattern from #5628 (Firecrawl) and #5750 (Browser Use) — same file surface, same registry wiring, same env-var + docs structure.

Just rebased onto latest main and resolved the _config_version conflict (bumped to 19). CI is green, no outstanding issues.

Happy to address any feedback. Thanks!

@simantak-dabhade
Copy link
Copy Markdown
Author

Looping in @teknium1 as well in case @alt-glitch and @rob-maron are heads-down on other things — no worries if not, just want to make sure this doesn't fall off the radar.

PR is still rebased clean and mergeable. Happy to address anything. 🙏

Adds TinyFish (https://tinyfish.ai) as a cloud browser provider alongside
Browserbase, Browser Use, and Firecrawl. All browser tools route through
TinyFish's cloud browser via CDP when selected.

- `tools/browser_providers/tinyfish.py` — `TinyFishBrowserProvider` implementing `CloudBrowserProvider`
- `tools/browser_tool.py` — register under `"tinyfish"` in `_PROVIDER_REGISTRY`
- `hermes_cli/tools_config.py` — add to onboarding provider picker
- `hermes_cli/config.py` — add `TINYFISH_API_KEY`, `TINYFISH_API_URL`, `TINYFISH_BROWSER_TIMEOUT`; bump config version 12 → 13
- `hermes_cli/nous_subscription.py` — add `tinyfish` to label mapping and feature state resolver
- `website/docs/` — updated browser docs and env var reference
- `tests/tools/test_browser_camofox_state.py` — bump expected config version to 13

Note: `close_session()` and `emergency_cleanup()` are intentional no-ops —
TinyFish has no explicit delete endpoint; sessions auto-expire on inactivity.
The managed gateway path (`resolve_managed_tool_gateway("tinyfish")`) is wired
up for future Nous Portal support without requiring a follow-up code change.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
@simantak-dabhade simantak-dabhade force-pushed the feat/tinyfish-browser-provider branch from fd8715b to 9435d50 Compare April 22, 2026 19:28
@alt-glitch alt-glitch added type/feature New feature or request P3 Low — cosmetic, nice to have comp/tools Tool registry, model_tools, toolsets comp/cli CLI entry point, hermes_cli/, setup wizard tool/browser Browser automation (CDP, Playwright) labels Apr 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/tools Tool registry, model_tools, toolsets P3 Low — cosmetic, nice to have tool/browser Browser automation (CDP, Playwright) type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants