hermes-agent/tools
Brooklyn Nicholson f99d291247 fix(mcp): let a server that 401s at startup come back after re-login
An auth failure on the very first connect returned out of the run loop
instead of parking. That ended the run task, and the task is the only
listener on _reconnect_event — so the server stayed dead for the life of
the process. `hermes mcp login`, a /mcp refresh, and the 300s self-probe
all had nothing left to wake, and the only cure was a full restart.

_classify_mcp_failure already calls 401/403 "permanent" and documents
that run() parks those immediately; the early return above it meant auth
was the one permanent failure that never got there. Park it with the
others and keep the tailored log line, now pointing at `hermes mcp
login <server>`.
2026-08-08 02:21:36 -05:00
..
computer_use fix(approval): classify CLI/TUI approval timeouts separately from explicit denials 2026-08-02 20:21:59 -07:00
environments feat(terminal): graceful degradation for remote backend connection failures 2026-08-07 09:07:55 -07:00
neutts_samples
…
wakewords feat(voice): bundle the trained "hey hermes" model as the out-of-the-box default 2026-07-28 07:58:16 -07:00
__init__.py
…
ansi_strip.py fix(cli): sanitize terminal escapes when replaying stored history (/resume recap, /status recap) 2026-07-17 04:53:38 -07:00
approval.py refactor: fold /simplify-code findings 2026-08-06 17:03:10 +05:30
async_delegation.py [verified] fix(desktop): preserve background delegates across session switches 2026-08-02 15:11:37 -07:00
audio_container.py refactor: extract shared audio container sniffer to tools/audio_container.py 2026-07-28 11:52:44 -07:00
binary_extensions.py
…
blueprints.py fix(cron): surface initial scheduler registration failures 2026-08-07 17:45:06 +05:30
browser_camofox.py fix(browser): scope Camofox session identity 2026-08-02 00:11:50 -07:00
browser_camofox_state.py
…
browser_cdp_tool.py fix(browser): stop stale cdp_url from stalling every startup by 10+ seconds 2026-07-27 14:32:05 -07:00
browser_dialog_tool.py
…
browser_supervisor.py perf(imports): lazy-load heavy SDKs off the cold-start waterfall 2026-07-29 10:54:04 -07:00
browser_tool.py fix(browser): guard against concurrent expired-session replacement race 2026-08-02 11:18:41 +05:30
budget_config.py
…
checkpoint_manager.py refactor: single build_subprocess_env() factory for all child-process spawns (profile + secret-scrub single owner) 2026-07-29 10:14:11 -07:00
clarify_gateway.py feat(clarify): extend multi-select to gateway text fallback and TUI bridge 2026-07-26 17:46:55 -07:00
clarify_tool.py refactor: migrate hand-rolled error envelopes to shared tool_error() 2026-07-29 10:14:00 -07:00
close_terminal_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
code_execution_tool.py fix: preserve session history when a turn crashes 2026-08-06 23:08:23 -05:00
computer_use_tool.py feat(computer_use): align cua-driver 0.10 permission modes 2026-07-29 12:19:37 -07:00
credential_files.py fix(vision): make desktop image uploads reachable from profile Docker sandboxes (#69575) (#75671) 2026-07-31 17:43:37 -04:00
cronjob_tools.py feat(cron): monitor-mode jobs — hash-suppressed change detection 2026-08-07 08:57:44 -07:00
daemon_pool.py
…
debug_helpers.py
…
delegate_tool.py feat(delegation): optional structured-output schema on delegate_task 2026-08-07 09:07:42 -07:00
delegation_live_log.py fix(delegation): redact credentials in live subagent transcripts 2026-07-20 06:50:31 -07:00
delegation_output_schema.py feat(delegation): optional structured-output schema on delegate_task 2026-08-07 09:07:42 -07:00
desktop_ui.py feat(desktop): agent can focus panes + shared desktop-UI event bridge 2026-07-22 12:13:01 -05:00
discord_tool.py fix(tools): isolate model tools by multiplex profile 2026-08-02 00:11:50 -07:00
env_passthrough.py fix(security): scope passthrough env to routed profile 2026-08-02 00:36:03 -07:00
env_probe.py fix(runtime): resolve Hermes-managed Node and uv before bare PATH 2026-08-01 21:17:51 -04:00
fal_common.py
…
feishu_doc_tool.py
…
feishu_drive_tool.py
…
file_operations.py fix(file): align grep fallback regex behavior 2026-08-06 05:31:17 +05:30
file_state.py
…
file_tools.py feat(security): protected agent-instruction files always require write approval 2026-08-07 08:58:38 -07:00
flux3_video_tool.py Portal free user vision fix + flux3 polling improvements (#75448) 2026-07-31 10:17:55 -04:00
focus_pane_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
fuzzy_match.py feat(patch): list match locations in ambiguous old_string errors 2026-08-02 15:51:43 -07:00
homeassistant_tool.py fix(tools): isolate model tools by multiplex profile 2026-08-02 00:11:50 -07:00
hook_output_spill.py fix: route stray HERMES_HOME hardcodes through get_hermes_home() (profile + native-Windows safety) 2026-07-29 09:33:48 -07:00
image_generation_tool.py
…
image_source.py fix(tools): lazily bring up sandbox for vision_analyze reads 2026-08-07 09:11:48 -07:00
interrupt.py
…
kanban_tools.py fix(cron): don't let a cron job inherit a kanban worker's dispatcher identity 2026-08-06 03:16:26 +05:30
lazy_deps.py refactor: derive teams install hint via feature_install_command(venv_pip=True) 2026-08-07 13:28:43 +05:30
managed_tool_gateway.py fix(secrets): scope-aware credential reads in core tool/gateway/web-server paths 2026-08-02 10:02:33 -07:00
mcp_dashboard_oauth.py fix(mcp): preserve live OAuth state during reauth 2026-07-17 04:50:47 -07:00
mcp_oauth.py perf: lazy mcp SDK import + tool-discovery mtime cache + browser_tool import diet 2026-07-29 10:02:03 -07:00
mcp_oauth_manager.py fix(mcp): make Figma remote OAuth work via DCR allowlist defaults 2026-07-28 00:53:16 -05:00
mcp_schema_cache.py polish(mcp): simplify-pass folds on the lazy-startup salvage 2026-08-03 14:24:37 +05:30
mcp_stdio_watchdog.py fix(mcp): use direct parent identity in stdio watchdog 2026-07-18 04:15:13 -07:00
mcp_tool.py fix(mcp): let a server that 401s at startup come back after re-login 2026-08-08 02:21:36 -05:00
memory_tool.py refactor: extract atomic_write_text to utils.py; fix write-failure error handling 2026-07-29 16:49:07 +05:30
microsoft_graph_auth.py
…
microsoft_graph_client.py refactor: single shared Retry-After parser 2026-07-29 10:13:50 -07:00
neutts_synth.py fix(voice): reconcile NeuTTS backbone/codec GPU device strings 2026-07-28 14:07:21 -07:00
open_preview_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
openrouter_client.py fix(secrets): scope-aware credential reads in core tool/gateway/web-server paths 2026-08-02 10:02:33 -07:00
osv_check.py fix(security): cache OSV malware preflight verdicts and stop double component discovery (#75485) 2026-08-01 10:47:20 -07:00
patch_parser.py refactor(file-ops): fold simplify-pass findings 2026-08-04 14:34:24 +05:30
path_security.py refactor: migrate hand-rolled error envelopes to shared tool_error() 2026-07-29 10:14:00 -07:00
process_registry.py fix(gateway): close ambiguous recovery cleanup gaps 2026-08-08 01:12:16 +05:30
project_tools.py
…
react_to_message_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
read_extract.py fix(read_extract): cap anydoc input size before conversion 2026-08-05 22:02:42 -07:00
read_preview_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
read_terminal_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
registry.py fix(dashboard): cache plugins hub payload and avoid auth probes 2026-08-03 18:44:38 +05:30
schema_sanitizer.py feat(mcp): collapse const-only anyOf/oneOf unions to property enums 2026-08-07 08:58:25 -07:00
send_message_tool.py fix(qqbot): scope the authz, startup-validation, and direct-send QQ reads 2026-08-02 10:01:16 -07:00
session_search_tool.py perf(session-search): project fields before enrichment 2026-08-03 17:50:58 +05:30
skill_manager_tool.py Merge updated tool metrics into skill metrics 2026-07-31 07:30:30 -07:00
skill_provenance.py
…
skill_usage.py Merge updated tool metrics into skill metrics 2026-07-31 07:30:30 -07:00
skills_ast_audit.py
…
skills_guard.py perf(agent): precompile response and skill-scan regexes (#33208) 2026-08-03 09:56:36 +05:30
skills_hub.py Merge updated tool metrics into skill metrics 2026-08-02 20:12:37 -07:00
skills_sync.py fix(skills): avoid redundant bind-mount scans (#72622) 2026-07-28 04:24:50 -05:00
skills_sync_client.py fix(sync): read org state from the org endpoints, not the personal ones (#75237) 2026-07-30 22:31:42 -07:00
skills_tool.py fix(review): harden portable plugin boundaries 2026-08-07 09:44:21 -07:00
slash_confirm.py
…
terminal_hints.py feat(terminal): output-pattern failure hints for common error classes 2026-08-02 15:08:35 -07:00
terminal_tool.py fix(terminal): preserve SSH remote home cwd 2026-08-07 18:41:57 -06:00
thread_context.py
…
threat_patterns.py
…
tirith_security.py fix(secrets): scope tier-3 credential reads (teams_pipeline, deepinfra models, FAL/XAI/VERCEL/DAYTONA/GITHUB presence, HERMES_API_KEY display) 2026-08-02 10:04:48 -07:00
todo_tool.py fix(compression): preserve synthetic user provenance 2026-07-22 06:56:53 -07:00
tool_backend_helpers.py fix(secrets): scope tier-3 credential reads (teams_pipeline, deepinfra models, FAL/XAI/VERCEL/DAYTONA/GITHUB presence, HERMES_API_KEY display) 2026-08-02 10:04:48 -07:00
tool_output_limits.py
…
tool_result_storage.py
…
tool_search.py refactor(tool-search): drop dead fallback ladder in _available_source_summary 2026-08-03 19:11:30 +05:30
transcription_tools.py fix(stt): close idle-unload races — strong model ref, single long-lived watcher 2026-08-07 19:26:12 +05:30
tts_streaming.py fix(tts): route streaming-provider secrets through resolve_provider_secret; bound per-sentence stream bodies at 16 MiB 2026-07-28 22:31:40 -07:00
tts_text_normalize.py fix(tts): unify TTS text preprocessing behind one shared cleaner 2026-07-28 11:55:01 -07:00
tts_tool.py perf(tts): pipeline sync per-sentence synthesis with playback 2026-08-03 10:25:15 +05:30
url_safety.py fix: scope private URL policy per profile 2026-07-28 14:17:45 -07:00
video_generation_tool.py
…
vision_tools.py feat(vision): optional region zoom crop on vision_analyze 2026-08-07 08:58:49 -07:00
voice_mode.py fix(voice): early-exit sliding window on match, clear barge phase in finally, fix test helper 2026-08-07 14:38:02 +05:30
wake_word.py fix(wake): auto capture keeps the backend mic when one exists 2026-08-05 10:06:49 -06:00
web_tools.py chore: remove unused imports and dead locals (ruff F401/F841 sweep) 2026-07-29 11:53:39 -07:00
website_policy.py
…
working_diff.py feat(diff): cross-surface /diff with staged/all/session modes 2026-07-26 18:28:20 -07:00
write_approval.py
…
x_search_tool.py docs(xai): clarify x_search vs xurl routing without schema cross-refs 2026-07-23 21:06:47 -07:00
xai_http.py fix(secrets): scope tier-3 credential reads (teams_pipeline, deepinfra models, FAL/XAI/VERCEL/DAYTONA/GITHUB presence, HERMES_API_KEY display) 2026-08-02 10:04:48 -07:00
xai_video_tools.py
…
yuanbao_tools.py
…