hermes-agent/tools
kshitij ebf967ff2c polish(mcp): simplify-pass folds on the lazy-startup salvage
Five review findings folded:
- schema cache writes via utils.atomic_json_write (fsync; was bare
  tmp+replace), file moved to cache/mcp_schema_cache.json with 0o600
  (sibling precedent: registry discovery cache)
- phantom-tool reconciliation: after a lazy server's first-use connect,
  cached tools the live server no longer offers are deregistered (were
  permanent registry ghosts burning circuit-breaker strikes on every
  'Unknown tool' round-trip); stale fingerprint logged
- cache-load path now runs _scan_mcp_description like the eager path
  (cache file is user-writable JSON; defense-in-depth)
- write-through skips the disk rewrite when the entry is unchanged
  (a flapping stdio server was rewriting byte-identical JSON per
  revival)
- _lazy_server_fingerprints no longer write-only dead state (consumed
  by the reconciliation logging)

444 mcp tests green (440 pre-fold + 4 new guards); phantom-dereg and
write-skip mutation-checked.
2026-08-03 14:24:37 +05:30
..
computer_use fix(approval): classify CLI/TUI approval timeouts separately from explicit denials 2026-08-02 20:21:59 -07:00
environments fix(tools): allocate snapshot temp paths with mktemp instead of $BASHPID 2026-08-03 13:47:29 +05:30
neutts_samples
…
wakewords
…
__init__.py
…
ansi_strip.py
…
approval.py fix(approval): stop treating newlines inside quoted arguments as command starts 2026-08-02 23:11:56 -07:00
async_delegation.py [verified] fix(desktop): preserve background delegates across session switches 2026-08-02 15:11:37 -07:00
audio_container.py
…
binary_extensions.py
…
blueprints.py
…
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
…
browser_dialog_tool.py
…
browser_supervisor.py
…
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
…
clarify_gateway.py
…
clarify_tool.py
…
close_terminal_tool.py
…
code_execution_tool.py refactor(schema): trim terminal and execute_code schema prose ~40% 2026-08-02 16:02:26 -07:00
computer_use_tool.py
…
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 refactor(cron): log the heartbeat ceiling stop + test it 2026-08-02 14:04:52 +05:30
daemon_pool.py
…
debug_helpers.py
…
delegate_tool.py perf(tools): restore benchmark-sensitive phrasing in compacted description 2026-08-02 22:44:58 -07:00
delegation_live_log.py
…
desktop_ui.py
…
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(search): restore zero-match probes on the rg engine after auto-multiline early-return 2026-08-02 15:34:22 -07:00
file_state.py
…
file_tools.py feat(file): verify write_file content on disk and say so (verified: true) 2026-08-02 15:12:23 -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
…
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
…
image_generation_tool.py
…
image_source.py fix(vision): make desktop image uploads reachable from profile Docker sandboxes (#69575) (#75671) 2026-07-31 17:43:37 -04:00
interrupt.py
…
kanban_tools.py feat(kanban): talk to a running worker without a restart 2026-07-30 07:18:08 -05:00
lazy_deps.py fix(lazy-deps): skip the install ladder on package-manager installs 2026-08-03 14:09:46 +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
…
mcp_oauth.py
…
mcp_oauth_manager.py
…
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
…
mcp_tool.py polish(mcp): simplify-pass folds on the lazy-startup salvage 2026-08-03 14:24:37 +05:30
memory_tool.py
…
microsoft_graph_auth.py
…
microsoft_graph_client.py
…
neutts_synth.py
…
open_preview_tool.py
…
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 feat(patch): detect already-applied edits and return success no-op 2026-08-02 15:09:53 -07:00
path_security.py
…
process_registry.py fix(process): wait timeout result reads as status, not failure 2026-08-02 15:11:02 -07:00
project_tools.py
…
react_to_message_tool.py feat(desktop): reactions are opt-in under Settings → Appearance, off by default 2026-07-30 00:08:28 -05:00
read_extract.py
…
read_terminal_tool.py
…
registry.py fix(tools): isolate model tools by multiplex profile 2026-08-02 00:11:50 -07:00
schema_sanitizer.py
…
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 fix(session-search): strip ANSI from recalled messages 2026-08-03 13:47:03 +05:30
skill_manager_tool.py
…
skill_provenance.py
…
skill_usage.py
…
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 fix: use lazy logging with %s formatting in logger calls 2026-08-02 23:17:40 +05:30
skills_sync.py
…
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 feat(skills): dedup repeat skill_view calls with an unchanged-content stub 2026-08-02 15:12:43 -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(tools): allow Unicode letters in workdir validation 2026-08-03 13:47:29 +05:30
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
…
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
…
transcription_tools.py
…
tts_streaming.py
…
tts_text_normalize.py
…
tts_tool.py perf(tts): pipeline sync per-sentence synthesis with playback 2026-08-03 10:25:15 +05:30
url_safety.py
…
video_generation_tool.py
…
vision_tools.py
…
voice_mode.py
…
wake_word.py
…
web_tools.py
…
website_policy.py
…
working_diff.py
…
write_approval.py
…
x_search_tool.py
…
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
…