hermes-agent/tools
Teknium 0ba451d004
fix(vision): use HERMES_HOME-based cache dir instead of cwd (#17719)
vision_analyze used Path('./temp_vision_images') — a relative path that
resolved against cwd. Under Docker the image's WORKDIR is /opt/hermes,
which is root-owned and only chmoded a+rX (read + traversal). Since
#5811 landed (run as non-root hermes UID 10000, Apr 12), remote-URL
vision calls fail with PermissionError on mkdir.

Switch to get_hermes_dir('cache/vision', 'temp_vision_images'): resolves
to $HERMES_HOME/cache/vision/ (= /opt/data/cache/vision/ in Docker —
the user-owned volume mount). Existing installs with the old dir keep
using it via the get_hermes_dir back-compat path; no migration needed.

Only site in the codebase that stored runtime files via Path('./...').

Reported via Discord: https://juick.com/i/p/3089079.jpg → Telegram →
gateway → [Errno 13] Permission denied: 'temp_vision_images'.
2026-04-29 20:14:02 -07:00
..
browser_providers
…
environments fix: address self-review findings for Vercel Sandbox salvage 2026-04-29 07:22:33 -07:00
neutts_samples
…
__init__.py
…
ansi_strip.py
…
approval.py feat: add Vercel Sandbox backend 2026-04-29 07:22:33 -07:00
binary_extensions.py
…
browser_camofox.py refactor(config): add cfg_get() helper; migrate 20 nested-get call sites (#17304) 2026-04-28 23:17:39 -07:00
browser_camofox_state.py
…
browser_cdp_tool.py
…
browser_dialog_tool.py
…
browser_supervisor.py
…
browser_tool.py refactor(config): add cfg_get() helper; migrate 20 nested-get call sites (#17304) 2026-04-28 23:17:39 -07:00
budget_config.py
…
checkpoint_manager.py
…
clarify_tool.py
…
code_execution_tool.py feat: add Vercel Sandbox backend 2026-04-29 07:22:33 -07:00
credential_files.py refactor(config): add cfg_get() helper; migrate 20 nested-get call sites (#17304) 2026-04-28 23:17:39 -07:00
cronjob_tools.py fix(cron): accept list-form deliver values so deliver=['telegram'] works (#17456) 2026-04-29 06:35:34 -07:00
debug_helpers.py
…
delegate_tool.py
…
discord_tool.py
…
env_passthrough.py refactor(config): add cfg_get() helper; migrate 20 nested-get call sites (#17304) 2026-04-28 23:17:39 -07:00
feishu_doc_tool.py
…
feishu_drive_tool.py
…
file_operations.py
…
file_state.py
…
file_tools.py feat: add Vercel Sandbox backend 2026-04-29 07:22:33 -07:00
fuzzy_match.py
…
homeassistant_tool.py
…
image_generation_tool.py
…
interrupt.py
…
managed_tool_gateway.py
…
mcp_oauth.py
…
mcp_oauth_manager.py
…
mcp_tool.py
…
memory_tool.py
…
mixture_of_agents_tool.py
…
neutts_synth.py
…
openrouter_client.py
…
osv_check.py
…
patch_parser.py
…
path_security.py
…
process_registry.py fix(process): reconcile session.exited against real child exit in poll/wait (#17430) 2026-04-29 04:59:21 -07:00
registry.py
…
rl_training_tool.py
…
schema_sanitizer.py
…
send_message_tool.py feat(yuanbao): wire native text + media delivery into send_message 2026-04-29 04:56:18 -07:00
session_search_tool.py
…
skill_manager_tool.py feat(skills): refuse skill_manage writes on pinned skills (#17562) 2026-04-29 10:28:25 -07:00
skill_usage.py
…
skills_guard.py
…
skills_hub.py
…
skills_sync.py
…
skills_tool.py feat: add Vercel Sandbox backend 2026-04-29 07:22:33 -07:00
terminal_tool.py feat: add Vercel Sandbox backend 2026-04-29 07:22:33 -07:00
tirith_security.py
…
todo_tool.py
…
tool_backend_helpers.py
…
tool_output_limits.py
…
tool_result_storage.py
…
transcription_tools.py fix(stt): resolve API keys from ~/.hermes/.env via get_env_value (#17140) 2026-04-29 06:25:20 -07:00
tts_tool.py fix(tts): tolerate missing hermes_cli.config in tts_tool import 2026-04-29 06:25:20 -07:00
url_safety.py
…
vision_tools.py fix(vision): use HERMES_HOME-based cache dir instead of cwd (#17719) 2026-04-29 20:14:02 -07:00
voice_mode.py
…
web_tools.py
…
website_policy.py
…
xai_http.py
…
yuanbao_tools.py
…