hermes-agent/hermes_cli
fazerluga-creator 4fda7efcbd fix(mcp): allow background discovery retry after a run that connected nothing
start_background_mcp_discovery() sets _mcp_discovery_started once and never
resets it. If the first background run exits without connecting any MCP
server (startup cancellation, OOM restart, transient network failure), every
later call returns immediately and the process is permanently stuck with
zero MCP tools until a full restart.

Fix: when discovery is marked started but the thread is dead and no server
is connected, reset the flag and spawn a fresh discovery thread. Also log a
WARNING when a discovery run completes with zero connected servers, so the
condition is visible instead of silent.

Caught in production on a long-running gateway fleet where a gateway
restarted under memory pressure and came back with all MCP tools missing.
2026-07-21 12:43:27 -07:00
..
dashboard_auth fix(mcp): complete OAuth through hosted dashboards 2026-07-17 04:50:47 -07:00
proxy
…
subcommands Merge origin/main into feat/desktop-remote-ssh-current 2026-07-20 22:46:39 +02:00
__init__.py chore: release v0.19.0 (2026.7.20) (#68175) 2026-07-20 11:35:21 -07:00
_parser.py feat(cli): restore cwd on resume (--no-restore-cwd) 2026-07-12 05:08:13 -04:00
_subprocess_compat.py
…
active_sessions.py
…
auth.py fix(billing): rename user-facing "terminal billing" copy to Remote Spending (#68355) 2026-07-21 12:20:25 +05:30
auth_commands.py fix(auth): make xAI OAuth pools multi-account resilient 2026-07-17 11:37:25 +05:30
azure_detect.py fix(security): secure Azure catalog probes 2026-07-11 12:28:55 +05:30
backup.py fix(discord): harden reconnect message recovery 2026-07-18 14:01:33 -07:00
banner.py feat(install): warn pip/Homebrew installs are unsupported (CLI, TUI, desktop) (#57225) 2026-07-07 21:13:19 -07:00
blueprint_cmd.py
…
browser_connect.py fix: /browser connect times out when another app squats the CDP port 2026-07-18 02:49:28 -07:00
build_info.py
…
bundles.py
…
callbacks.py fix(approval): raise gateway approval timeout to 300s, honest stale-tap UX, offer Always on mixed prompts (#68597) 2026-07-21 05:41:41 -07:00
checkpoints.py
…
claw.py
…
cli_agent_setup_mixin.py fix(cli): sanitize terminal escapes when replaying stored history (/resume recap, /status recap) 2026-07-17 04:53:38 -07:00
cli_billing_mixin.py fix(billing): rename user-facing "terminal billing" copy to Remote Spending (#68355) 2026-07-21 12:20:25 +05:30
cli_commands_mixin.py fix: session-scoped /fast + full /new reset to config defaults (#67979) 2026-07-20 03:27:22 -07:00
cli_output.py
…
clipboard.py
…
codex_models.py fix(codex): send ChatGPT-Account-Id on /models probes 2026-07-21 05:27:13 -07:00
codex_runtime_plugin_migration.py
…
codex_runtime_switch.py
…
colors.py
…
commands.py fix: session-scoped /fast + full /new reset to config defaults (#67979) 2026-07-20 03:27:22 -07:00
completion.py
…
config.py feat(desktop): configure repository discovery (supersedes #67630) (#68642) 2026-07-21 10:09:31 -04:00
console_engine.py refactor(console): remove hosted-context command blocking from Hermes Console (#66144) 2026-07-17 04:33:34 -07:00
container_boot.py fix(container): keep named multiplex gateway slots down (#65368) 2026-07-16 14:30:05 +10:00
context_switch_guard.py
…
copilot_auth.py
…
credential_lifecycle.py fix(credentials): unified provider key delete/update across .env, auth.json, config.yaml (#67213) 2026-07-19 03:02:21 -07:00
cron.py fix(cron): harden execution attempt ledger 2026-07-17 04:58:35 -07:00
curator.py feat(curator): add `hermes curator usage` — all-skills usage view 2026-07-06 12:26:21 -07:00
curses_ui.py
…
dashboard_register.py
…
debug.py
…
default_soul.py
…
dep_ensure.py
…
diagnostics_upload.py
…
dingtalk_auth.py refactor(setup): route dependency installs through the canonical uv→pip→ensurepip ladder 2026-07-07 04:09:35 -07:00
doctor.py feat(providers): add ``enabled: false`` flag to hide a provider 2026-07-20 03:06:02 -07:00
dump.py fix(cron): accept UTF-8 BOM when reading jobs.json 2026-07-18 02:31:20 -07:00
env_loader.py feat(secrets): one-command token rotation + actionable startup errors for all secret sources (#68605) 2026-07-21 06:41:04 -07:00
fallback_cmd.py
…
fallback_config.py fix(auth): honor per-entry key_env when resolving fallback providers 2026-07-16 07:19:36 -07:00
gateway.py fix(gateway): detect stale gateway_state.json in `gateway status` (TTL + PID liveness) 2026-07-21 12:39:59 -07:00
gateway_enroll.py feat(gateway): generic OIDC client-credentials relay provisioning (NAS-free) (#60730) 2026-07-08 16:55:32 +10:00
gateway_windows.py
…
goals.py fix(goals): auto-pause goal loop on consecutive transport failures 2026-07-20 05:38:25 -07:00
gui_uninstall.py
…
hooks.py
…
input_sanitize.py fix(input): strip bracketed-paste leaks before prompt persistence (#62557) 2026-07-15 07:39:42 -07:00
inventory.py feat(model-switch): excluded_providers config to hide providers from /model picker 2026-07-20 03:06:02 -07:00
journey.py
…
kanban.py feat(kanban): add `hermes kanban repair` CLI verb 2026-07-21 12:41:14 -07:00
kanban_db.py feat(kanban): add `hermes kanban repair` CLI verb 2026-07-21 12:41:14 -07:00
kanban_decompose.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
kanban_diagnostics.py fix(kanban): clear failure/crash diagnostics while a retry is in flight 2026-07-09 16:13:59 -05:00
kanban_specify.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
kanban_swarm.py
…
logs.py
…
main.py style(cli): open the build lock file with explicit encoding (ruff PLW1514) 2026-07-21 12:42:07 -07:00
managed_scope.py
…
managed_uv.py
…
mcp_catalog.py feat(mcp): enforce exact version pins across the whole MCP catalog 2026-07-15 04:56:25 -07:00
mcp_config.py fix(mcp): close hosted OAuth lifecycle gaps 2026-07-17 04:50:47 -07:00
mcp_picker.py
…
mcp_security.py
…
mcp_startup.py fix(mcp): allow background discovery retry after a run that connected nothing 2026-07-21 12:43:27 -07:00
memory_oauth.py
…
memory_setup.py refactor(setup): route dependency installs through the canonical uv→pip→ensurepip ladder 2026-07-07 04:09:35 -07:00
middleware.py
…
migrate.py
…
moa_cmd.py feat(moa): support per-slot reasoning effort 2026-07-14 21:08:22 -07:00
moa_config.py fix(moa): surface stale presets without retries 2026-07-17 13:49:12 -07:00
model_catalog.py feat(models): catalog-labeled silent default — GLM-5.2 marked "default": true in the model catalog 2026-07-15 00:10:31 -07:00
model_cost_guard.py
…
model_normalize.py
…
model_setup_flows.py feat(pricing): refresh Fireworks snapshot to 2026-07, cover full serverless catalog + cached picker pricing 2026-07-16 04:24:14 -07:00
model_switch.py fix: show both kimi-coding and kimi-coding-cn in /model picker 2026-07-20 10:17:57 -07:00
models.py fix(models): complete kimi-k3 rollout across Kimi-direct catalog surfaces 2026-07-20 08:47:55 -07:00
nous_account.py
…
nous_auth_keepalive.py
…
nous_billing.py fix(billing): rename user-facing "terminal billing" copy to Remote Spending (#68355) 2026-07-21 12:20:25 +05:30
nous_subscription.py
…
onepassword_secrets_cli.py feat(secrets): one-command token rotation + actionable startup errors for all secret sources (#68605) 2026-07-21 06:41:04 -07:00
oneshot.py refactor(cli): apply /simplify-code findings to oneshot teardown 2026-07-20 12:59:28 +05:30
pairing.py
…
partial_compress.py
…
pets.py
…
platforms.py
…
plugins.py fix(approval): emit observer hooks for smart verdicts 2026-07-13 02:00:09 -07:00
plugins_cmd.py fix(dashboard): unblock basic auth plugin when setting password interactively (#54489) (#63786) 2026-07-16 19:49:39 -04:00
portal_cli.py
…
profile_describer.py fix(auxiliary): route direct-create aux callers through call_llm (#65029) 2026-07-15 07:39:17 -07:00
profile_distribution.py
…
profiles.py
…
projects_cmd.py
…
projects_db.py feat(desktop): configure repository discovery (supersedes #67630) (#68642) 2026-07-21 10:09:31 -04:00
prompt_size.py
…
provider_catalog.py
…
providers.py fix(picker): scope exact-ID resolution to lossy alias collapses only 2026-07-20 10:17:57 -07:00
psutil_android.py
…
pt_input_extras.py
…
pty_bridge.py
…
pty_session.py feat(pty): periodic reaper wired into dashboard lifespan 2026-07-07 15:15:37 -07:00
relaunch.py
…
runtime_provider.py feat(providers): extend ``enabled: false`` gate to built-in resolution 2026-07-20 03:06:02 -07:00
secret_prompt.py
…
secrets_cli.py feat(secrets): one-command token rotation + actionable startup errors for all secret sources (#68605) 2026-07-21 06:41:04 -07:00
security_advisories.py
…
security_audit.py
…
security_audit_startup.py
…
send_cmd.py
…
service_manager.py
…
session_export.py feat: add prompt-only session export 2026-07-07 13:29:58 -07:00
session_export_html.py fix(session-export): escape html tool call names 2026-07-09 19:54:02 -07:00
session_export_md.py feat(sessions): full prune-filter set + --redact on sessions export 2026-07-07 12:36:41 -07:00
session_filters.py
…
session_listing.py
…
session_recap.py fix(cli): sanitize terminal escapes when replaying stored history (/resume recap, /status recap) 2026-07-17 04:53:38 -07:00
setup.py fix(models): complete kimi-k3 rollout across Kimi-direct catalog surfaces 2026-07-20 08:47:55 -07:00
setup_whatsapp_cloud.py
…
skills_config.py fix(cli): normalize malformed skills config in get_disabled_skills (#61797) 2026-07-09 19:57:54 -07:00
skills_hub.py fix: widen UTF-8 BOM tolerance to all sibling frontmatter parsers 2026-07-17 04:52:02 -07:00
skin_engine.py
…
slack_cli.py fix(slack): complete agent view workspace routing 2026-07-14 13:58:36 -07:00
sqlite_util.py
…
status.py fix(cron): accept UTF-8 BOM when reading jobs.json 2026-07-18 02:31:20 -07:00
stdio.py
…
suggestions_cmd.py
…
telegram_managed_bot.py
…
timeouts.py
…
tips.py feat(browser): store full snapshots on truncation; make eval denylist opt-in (#65923) 2026-07-16 23:41:26 -07:00
tools_config.py feat(desktop): five Capabilities-tab UX fixes from live testing — hints, vision link, web split, key deep-links (#67482) 2026-07-19 05:45:01 -07:00
toolset_validation.py
…
uninstall.py feat: add uninstall dry-run mode 2026-07-07 05:12:24 -07:00
urllib_security.py fix(security): order sanitizer after installed hooks 2026-07-11 12:28:55 +05:30
voice.py
…
web_git.py feat(desktop): auto-fetch remote base branch before worktree add 2026-07-13 14:53:34 -04:00
web_server.py fix(web): guard _serve_index against a missing or unreadable index.html 2026-07-21 12:41:41 -07:00
webhook.py fix(webhook): make dual-stack bind exclusive 2026-07-16 12:36:51 +05:30
win_pty_bridge.py
…
windows_ssh_runtime.py feat(serve): add Windows remote backend runtime for Desktop SSH 2026-07-17 18:23:22 +02:00
write_approval_commands.py
…
xai_retirement.py
…