hermes-agent/hermes_cli
Nils 50302ed70a
fix(tools): make browser SSRF check configurable via browser.allow_private_urls (#4198)
* fix(tools): skip SSRF check in local browser mode

The SSRF protection added in #3041 blocks all private/internal
addresses unconditionally in browser_navigate(). This prevents
legitimate local development use cases (localhost testing, LAN
device access) when using the local Chromium backend.

The SSRF check is only meaningful for cloud browsers (Browserbase,
BrowserUse) where the agent could reach internal resources on a
remote machine. In local mode, the user already has full terminal
and network access, so the check adds no security value.

This change makes the SSRF check conditional on _get_cloud_provider(),
keeping full protection in cloud mode while allowing private addresses
in local mode.

* fix(tools): make SSRF check configurable via browser.allow_private_urls

Replace unconditional SSRF check with a configurable setting.
Default (False) keeps existing security behavior. Setting to True
allows navigating to private/internal IPs for local dev and LAN use cases.

---------

Co-authored-by: Nils (Norya) <nils@begou.dev>
2026-03-31 02:11:55 -07:00
..
__init__.py chore: release v0.6.0 (2026.3.30) (#3985) 2026-03-30 08:29:38 -07:00
auth.py fix(alibaba): use standard DashScope international endpoint (#4133) 2026-03-30 19:06:30 -07:00
banner.py chore: prepare Hermes for Homebrew packaging (#4099) 2026-03-30 17:34:43 -07:00
callbacks.py feat(approvals): make dangerous command approval timeout configurable (#3886) 2026-03-30 00:02:02 -07:00
checklist.py fix: add TTY guard to interactive CLI commands to prevent CPU spin (#3933) 2026-03-30 08:10:23 -07:00
claw.py feat: add post-migration cleanup for OpenClaw directories (#4100) 2026-03-30 17:39:08 -07:00
clipboard.py fix: clean up empty file after failed wl-paste clipboard extraction 2026-03-11 02:56:19 -07:00
codex_models.py fix: add gpt-5.4-mini to Codex fallback catalog (#3855) 2026-03-29 20:10:00 -07:00
colors.py feat: respect NO_COLOR env var and TERM=dumb (#4079) 2026-03-30 17:07:21 -07:00
commands.py feat: add /btw command for ephemeral side questions (#4161) 2026-03-30 21:10:05 -07:00
config.py fix(tools): make browser SSRF check configurable via browser.allow_private_urls (#4198) 2026-03-31 02:11:55 -07:00
copilot_auth.py chore: remove ~100 unused imports across 55 files (#3016) 2026-03-25 15:02:03 -07:00
cron.py fix(cron): stop truncating job IDs in list view (#4132) 2026-03-30 19:05:34 -07:00
curses_ui.py fix: add TTY guard to interactive CLI commands to prevent CPU spin (#3933) 2026-03-30 08:10:23 -07:00
default_soul.py fix: reset default SOUL.md to baseline identity text (#3159) 2026-03-26 01:34:27 -07:00
doctor.py fix(cli): add missing subprocess.run() timeouts in doctor and status (#4009) 2026-03-30 11:17:15 -07:00
env_loader.py chore: remove ~100 unused imports across 55 files (#3016) 2026-03-25 15:02:03 -07:00
gateway.py feat(gateway): add WeCom (Enterprise WeChat) platform support (#3847) 2026-03-29 21:29:13 -07:00
main.py fix: gate Claude Code credentials behind explicit Hermes config in wizard trigger (#4210) 2026-03-31 02:01:15 -07:00
mcp_config.py fix: add TTY guard to interactive CLI commands to prevent CPU spin (#3933) 2026-03-30 08:10:23 -07:00
model_switch.py chore: remove ~100 unused imports across 55 files (#3016) 2026-03-25 15:02:03 -07:00
models.py feat: add MiniMax M2.7 to hermes model picker and opencode-go (#4208) 2026-03-31 01:54:13 -07:00
pairing.py chore: fix 154 f-strings, simplify getattr/URL patterns, remove dead code (#3119) 2026-03-25 19:47:58 -07:00
plugins.py feat(plugins): add inject_message interface for remote message injection (#3778) 2026-03-30 02:48:06 -07:00
plugins_cmd.py chore: prepare Hermes for Homebrew packaging (#4099) 2026-03-30 17:34:43 -07:00
profiles.py Fix profile list model display (#4160) 2026-03-30 20:40:13 -07:00
runtime_provider.py refactor: make config.yaml the single source of truth for endpoint URLs (#4165) 2026-03-30 22:02:53 -07:00
setup.py refactor: unify setup wizard provider selection with hermes model 2026-03-31 01:04:07 -07:00
skills_config.py feat(gateway): add WeCom (Enterprise WeChat) platform support (#3847) 2026-03-29 21:29:13 -07:00
skills_hub.py fix(skills): validate hub bundle paths before install (#3986) 2026-03-30 08:37:19 -07:00
skin_engine.py refactor: consolidate get_hermes_home() and parse_reasoning_effort() (#3062) 2026-03-25 15:54:28 -07:00
status.py fix(cli): add missing subprocess.run() timeouts in doctor and status (#4009) 2026-03-30 11:17:15 -07:00
tools_config.py refactor: make config.yaml the single source of truth for endpoint URLs (#4165) 2026-03-30 22:02:53 -07:00
uninstall.py chore: fix 154 f-strings, simplify getattr/URL patterns, remove dead code (#3119) 2026-03-25 19:47:58 -07:00
webhook.py fix: replace user-facing hardcoded ~/.hermes paths with display_hermes_home() 2026-03-28 23:47:21 -07:00