{"repo":"NousResearch/hermes-agent","public_id":"1620","display_label":"Update check logic, caching, and version reporting bugs","summary":"These issues and PRs concern problems with how the update checker determines the latest version (main vs. release tags), stale or incorrectly keyed update-check cache behavior, and false 'commits behind' warnings shown to users. A few adjacent items touch Windows update behavior and stable release cadence proposals.","subsystem":"apps/desktop","counts":{"members":41,"open_issues":6,"open_issues_distinct":6,"open_prs":8,"closed_issues":13,"merged_prs":2,"attempt_prs":20},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":1637},"resolution":{"state":"partially_resolved","by":"pr-1637,pr-34846"},"freshness":{"state":"verified","last_verified_at":"2026-05-29T20:30:29+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.045609756097560954},"fix_edges":[{"issue_number":1620,"pr_number":1637,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":34491,"pr_number":34846,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true}],"members":[{"kind":"issue","number":1620,"title":"[Bug]: `hermes --version` shows \"26 commits behind\" when already on latest","url":null,"state":"closed"},{"kind":"issue","number":8063,"title":"[Feature]: Add fixed-cycle stable version release mechanism (monthly/optional weekly)","url":null,"state":"open"},{"kind":"issue","number":11007,"title":"Stale update cache: banner shows 'N commits behind' after updating","url":null,"state":"closed"},{"kind":"issue","number":11327,"title":"Banner shows stale 'commits behind' after successful update — .update_check cache not invalidated","url":null,"state":"closed"},{"kind":"issue","number":16640,"title":"[Feature]: Docker stable releases","url":null,"state":"open"},{"kind":"issue","number":20728,"title":"Bug: TUI banner shows stale \"N commits behind\" after successful `hermes update`","url":null,"state":"open"},{"kind":"issue","number":21526,"title":"hermes update: stale 'commits behind' banner persists for custom HERMES_HOME profiles","url":null,"state":"closed"},{"kind":"issue","number":23681,"title":"[Bug]: Update check cache hides commit list until ~/.hermes/.update_check is manually deleted","url":null,"state":"open"},{"kind":"issue","number":23721,"title":"[Feature]: \"hermes update\" command need support  tag  parameter.","url":null,"state":"open"},{"kind":"issue","number":27841,"title":"Update check cache can report stale commits-behind after git pull","url":null,"state":"closed"},{"kind":"issue","number":34491,"title":"check_for_updates() cache not invalidated after pip upgrade, showing stale \"1 commit behind\"","url":null,"state":"closed"},{"kind":"issue","number":34514,"title":"[Feature]: hermes update should track the latest release, not the latest main commit","url":null,"state":"closed"},{"kind":"issue","number":38093,"title":"[Bug]: main branch reports 0.15.1 after v2026.5.29.2 release","url":null,"state":"closed"},{"kind":"issue","number":38618,"title":"Update reports 7 commits behind / remains on 0.15.1 when main differs from latest release tag 0.15.2","url":null,"state":"closed"},{"kind":"issue","number":39771,"title":"hermes version shows '860 commits behind' after checking out latest tag v2026.5.29.2","url":null,"state":"open"},{"kind":"issue","number":40944,"title":"Banner shows stale \"commits behind\" count after manual git pull in source installs","url":null,"state":"closed"},{"kind":"issue","number":49611,"title":"[Feature]: Do Not Automatically Update Windows Desktop on Startup","url":null,"state":"closed"},{"kind":"issue","number":52814,"title":"[Feature]: Update to latest tagged release","url":null,"state":"closed"},{"kind":"issue","number":58746,"title":"feat(hermes): hermes update should target the latest stable release, not main","url":null,"state":"closed"},{"kind":"pr","number":1637,"title":"fix(cli): invalidate update-check cache after hermes update","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/main.py"],"fix_hunks":[{"file":"hermes_cli/main.py","hunks":["@@ -2124,7 +2124,17 @@ def _restore_stashed_changes(\n     print(\"  Review `git diff` / `git status` if Hermes behaves unexpectedly.\")\n     return True\n \n-\n+def _invalidate_update_cache():\n+    \"\"\"Delete the update-check cache so ``hermes --version`` doesn't\n+    report a stale \"commits behind\" count after a successful update.\"\"\"\n+    try:\n+        cache_file = Path(os.getenv(\n+            \"HERMES_HOME\", Path.home() / \".hermes\"\n+        )) / \".update_check\"\n+        if cache_file.exists():\n+            cache_file.unlink()\n+    except Exception:\n+        pass\n \n def cmd_update(args):\n     \"\"\"Update Hermes Agent to the latest version.\"\"\"","@@ -2197,6 +2207,7 @@ def cmd_update(args):\n         commit_count = int(result.stdout.strip())\n         \n         if commit_count == 0:\n+            _invalidate_update_cache()\n             print(\"✓ Already up to date!\")\n             return\n         ","@@ -2217,6 +2228,8 @@ def cmd_update(args):\n                     prompt_user=prompt_for_restore,\n                 )\n         \n+        _invalidate_update_cache()\n+        \n         # Reinstall Python dependencies (prefer uv for speed, fall back to pip)\n         print(\"→ Updating Python dependencies...\")\n         uv_bin = shutil.which(\"uv\")\n"]}]},{"kind":"pr","number":11329,"title":"fix: invalidate update cache in _update_via_zip path (#11327)","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":11451,"title":"Fix stale update cache after successful updates","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":20792,"title":"fix(banner): bind update-check cache to local HEAD so banner refreshes after hermes update (#20728)","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#20653","number":20653}],"category":"superseded_by_pr","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":21447,"title":"fix: invalidate stale update-check cache","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#18236","number":18236},{"kind":"pr","value":"#9670","number":9670},{"kind":"pr","value":"#5359","number":5359},{"kind":"pr","value":"#11327","number":11327},{"kind":"pr","value":"#21675","number":21675}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":22256,"title":"Fix stale update cache invalidation for custom HERMES_HOME","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"4a65c9cd08cc3ea27ea4e221a5aca71161428c90","number":0},{"kind":"pr","value":"#21526","number":21526}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":23259,"title":"fix(update): clear update cache under custom HERMES_HOME","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"4a65c9cd08cc3ea27ea4e221a5aca71161428c90","number":0},{"kind":"pr","value":"#22256","number":22256},{"kind":"pr","value":"#21526","number":21526}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":23699,"title":"fix: don't cache failed update checks; sync cache on explicit --check","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":23700,"title":"fix(update): show pending commit list in --check output and banner","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":27844,"title":"fix(update): key update-check cache by git HEAD","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"9f4cd99743653a2fb9ec7d21a3f10b4ef89af975","number":0}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":34501,"title":"fix(cli): invalidate update-check cache when installed version changes","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"689ef5e23","number":0},{"kind":"pr","value":"#34846","number":34846},{"kind":"pr","value":"#34491","number":34491},{"kind":"pr","value":"#34491","number":34491}],"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":34846,"title":"feat(cli): warn on unsupported pip installs + fix stale update-check cache (#34491)","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/banner.py","tests/hermes_cli/test_pip_install_detection.py","tests/hermes_cli/test_update_check.py","website/docs/user-guide/features/code-execution.md"]},{"kind":"pr","number":38103,"title":"fix(version): bump main branch to 0.15.2 to match latest release tag v2026.5.29.2","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":38619,"title":"fix: bump version from 0.15.1 to 0.15.2 to match release tag v2026.5.29.2","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#38103","number":38103}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":39776,"title":"fix(version): suppress false 'commits behind' warning on detached HEAD (tag checkout)","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"226e8de82","number":0}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":40985,"title":"fix(banner): invalidate update-check cache when local git HEAD moves","url":null,"state":"closed","close_reason":{"category":"silent_close","implication":"active"},"merged":false},{"kind":"pr","number":40999,"title":"fix: invalidate update cache using local HEAD (fixes #40944)","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":41012,"title":"fix(cli): invalidate update cache when source HEAD changes","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":41043,"title":"fix(cli): bust update-check cache when local HEAD moves","url":null,"state":"open","close_reason":{"category":"wontfix_bydesign","implication":"wontfix"},"merged":false},{"kind":"pr","number":43824,"title":"fix: clarify update status for branch and tag checkouts","url":null,"state":"open","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":107496,"title":"feat(update): support configurable stable branch tracking","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"b0c7613b47b6c1678f50e6ab35dc92103d15075f","number":0},{"kind":"commit","value":"38c9611791d3c8eccee5bb3fdad8075ec1d58565","number":0},{"kind":"pr","value":"#58746","number":58746},{"kind":"pr","value":"#58746","number":58746},{"kind":"pr","value":"#58746","number":58746},{"kind":"pr","value":"#58746","number":58746}],"category":"partial_fix","implication":"needs_llm"},"merged":false},{"kind":"pr","number":113278,"title":"feat(update): stable-release default channel with install-scoped record and Desktop selector","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}